tag:blogger.com,1999:blog-17031557458887708822024-03-17T22:20:57.944+00:00Tony is a GeekI'm a geek, doing geeky things and often write some short articles to remind me what I've done and to potentially help other geeks out if they have similar interests....Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.comBlogger361125tag:blogger.com,1999:blog-1703155745888770882.post-83144891577091210712024-03-10T08:52:00.058+00:002024-03-17T22:20:24.785+00:00What Siri should be = Inflection Pi<p>I predicted a while back, maybe a year ago that the whole chatGPT LLM (<i>Large Language Model</i>) "thing" will hit it's peak around Aug '23/Sept '23 and then decline towards Dec '23/Jan '24 where people will start looking at non-pay / non-monetised usage of LLMs.</p><p>I've also been a keen advocate of moving the usage / runtimes OFF of "other people's servers", ie. what you call "<a href="https://azure.microsoft.com/en-us/resources/cloud-computing-dictionary/what-is-the-cloud/" target="_blank">Cloud</a>", because they are incentivised to <a href="https://cast.ai/blog/vendor-lock-in-and-how-to-break-free/" target="_blank">implement vendor lock-in</a> in subtle ways such as getting you to use a service that only they offer, or store your core data in a datastore that you cannot export / lift&shift elsewhere without it costing more than it is worth, therefore stealth lock-in.</p><p>I cannot really complain, businesses are in the business of business, therefore, they are driven by financial transactions and you, as the customer (<i>still makes me chuckle that the "IT people" call customers "end users", just like drug dealers refer to their dependent locked-in customers/users</i>), therefore they are not doing anything "wrong", but as a decent human being with morals, ethics & integrity you have to step back and look at the behaviour of some of these companies and decide if they really are "there to help you".</p><p>As I've said before, I've been investigating, since about Feb '23 running LLMs "offline", ie. on hardware such as your laptop or phone. It was challenging at the start, I did "blow up" a massive spec laptop (an <a href="https://support.hp.com/gb-en/document/c06931915" target="_blank">HP ZBook G7</a> - £8500!) and had to rebuild it a few times and as the tools / technology has moved on, so have I. I now have <a href="https://tonyisageek.blogspot.com/2024/02/local-offline-llms-on-cpu-is-youre-rich.html" target="_blank">ollama running on RPi5 devices</a> just using CPUs and it's amazing.</p><p>Last year, I moved into the early usage of <a href="https://gpt4all.io/index.html" target="_blank">GPT4All</a>, <a href="https://github.com/imartinez/privateGPT" target="_blank">privateGPT</a>, then <a href="https://www.langchain.com/" target="_blank">langchain</a> (<i>I loved the release of this framework - this opened up the world to real usage LLM applications</i>) and most recently into the usage of <a href="https://ollama.com/" target="_blank">ollama</a> (<i>offline LLLM Engine</i>) and the usage of <a href="https://openwebui.com/" target="_blank">Open-WebUI</a> as a chatGPT4 style UI that allows you to point to many different LLM backends, either offline or online.</p><p>You will notice, all of the above are open-source. ie. not monetised (<i>yet</i>), if you are in the area of "investigating" this technology, rather than trying to "sell" or force customers to adopt this technology in a production environment before it is ready beyond R&D then go away, stop reading, sod off - I'm not anti-LLM, I'm just pragmatic and logical / sensible and have removed emotion from my assessments.</p><p>Also, notice I do NOT refer to this technology as "AI", because it is not. We do not have "AI" yet & I doubt we will have true "AI" in our life-time. The "A" that most people refer to is "Artificial" - I would contest that the "A" stands for "Augmented" - ie. it is a tool that assists / augments you with a task... a bit like a buddy-by-your-side, someone to quiz & talk to at 3am when you cannot rely on a Google search or speaking to another human being for fear of ridicule or judgement.</p><p>BTW - you only need mega-compute on Cloud if your are "training" LLM models, which 90% of people will NOT be doing, therefore you do not need to use the Cloud, you can actually just use your laptop, or phone... do not believe the hype, think for yourself.</p><p><br /></p><p>Right, let's get back to the point. <a href="https://inflection.ai/inflection-2-5" target="_blank">INFLECTION</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgNLr8fNypm9osQsXZ0xjWf4kSBtsHD3bGxnXGl26wHsE-wqRYbPWqKAxAmq8txf_AN05XWA2g1YY7l_TzRBzZcbQ84yxDVdTq1b-PmWbrvSgUcKLLX2b-hYj-bb-V5qt18G2zE-2IiYzRByZ2x-gunYIz04HrrMDMCqNrXeInZRvcO8G40nyJAPv0qHhw_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="865" data-original-width="788" height="559" src="https://blogger.googleusercontent.com/img/a/AVvXsEgNLr8fNypm9osQsXZ0xjWf4kSBtsHD3bGxnXGl26wHsE-wqRYbPWqKAxAmq8txf_AN05XWA2g1YY7l_TzRBzZcbQ84yxDVdTq1b-PmWbrvSgUcKLLX2b-hYj-bb-V5qt18G2zE-2IiYzRByZ2x-gunYIz04HrrMDMCqNrXeInZRvcO8G40nyJAPv0qHhw_=w510-h559" width="510" /></a></div><br />I won't attempt to <a href="https://inflection.ai/inflection-2-5" target="_blank">repeat what they say</a>, in fact, I won't even write a prompt to summarise - read it as they wrote it:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiewfNrmj6HONKwVTcZkwGML0PJq4AEcckAv1IO32im_l8bhYEinIIPjVw5I14AUh3vu0F547rzMbcu_F6WYf-DdQiTFFrtiol733bT0-RElBZFgaMr2jPBfDmrVZhTVtNISvyXGgpp1PbcIoPQvkLRAXwxFSInQWjrzbYDS0N8_g-i0g6eblL_3bPDTv5F" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="919" data-original-width="668" height="752" src="https://blogger.googleusercontent.com/img/a/AVvXsEiewfNrmj6HONKwVTcZkwGML0PJq4AEcckAv1IO32im_l8bhYEinIIPjVw5I14AUh3vu0F547rzMbcu_F6WYf-DdQiTFFrtiol733bT0-RElBZFgaMr2jPBfDmrVZhTVtNISvyXGgpp1PbcIoPQvkLRAXwxFSInQWjrzbYDS0N8_g-i0g6eblL_3bPDTv5F=w545-h752" width="545" /></a></div><br />What does that mean? Because I know you are a lazy f**ker and that text was small and it was an image and you are a busy person, so you don't have time to focus for 3 minutes to read the above - c'mon, be honest, I'm right.....be honest.... you skimmed it, didn't you.<p></p><p>Right, as the EPs (Early Professionals ) say to me, TLDR. Well, you need to stop doing that, cut out the distractions & notifications and fake need to time-slice your attention - I cannot change the way you are, therefore I'll show you an image to grab your attention:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgQ94FtFu1CWetqQ6zitGOGgUn7sHJd3NvxetYcY7FiD5jJNAdypsqfzXUJxL2Y1ccNjSnp9MYvj7nBEmnjlen0CcT9x5b9ETkGG0xFDtwNxvnLXnGLlCdiNKYWlCU5PXPaQP1XEbGeygusHC076VOwRhM-5XE7B5eqFzUY_oQU5WwjXOJHZ4WMYsMGIBZh" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="437" data-original-width="918" height="303" src="https://blogger.googleusercontent.com/img/a/AVvXsEgQ94FtFu1CWetqQ6zitGOGgUn7sHJd3NvxetYcY7FiD5jJNAdypsqfzXUJxL2Y1ccNjSnp9MYvj7nBEmnjlen0CcT9x5b9ETkGG0xFDtwNxvnLXnGLlCdiNKYWlCU5PXPaQP1XEbGeygusHC076VOwRhM-5XE7B5eqFzUY_oQU5WwjXOJHZ4WMYsMGIBZh=w640-h303" width="640" /></a></div><br />Oooooooo.... in grey (<i>or gray, if you are so inclined</i>) is GPT-4... in dark-green is Inflection-2.5.<p></p><p>HANG ON! that's pretty darned close accuracy, for an open-source / free LLM. wow.</p><p>Do you want to try it out? of course you can:</p><p>From your web-browser, navigate to: <a href="https://pi.ai/talk" target="_blank">https://pi.ai/talk</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjlL2sJ7t6GVDECd7BR6tLSiqDYOrfWG5XbDIGxCZVAwoOMya2XFF5M7FGaR5lDH3vFeRFuFJTOegFHMwB0xWzEx3nJEF-KVavUZGHgv5j4Pf-n13mB7KnUKY0ZdeCiG_b0LAyB3qyweMlWJB3NWZjK4puMrKTMO-eFSu7WDlJFEc5vnljrnWkGs_duac1L" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="933" data-original-width="980" height="488" src="https://blogger.googleusercontent.com/img/a/AVvXsEjlL2sJ7t6GVDECd7BR6tLSiqDYOrfWG5XbDIGxCZVAwoOMya2XFF5M7FGaR5lDH3vFeRFuFJTOegFHMwB0xWzEx3nJEF-KVavUZGHgv5j4Pf-n13mB7KnUKY0ZdeCiG_b0LAyB3qyweMlWJB3NWZjK4puMrKTMO-eFSu7WDlJFEc5vnljrnWkGs_duac1L=w513-h488" width="513" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>I decided to have a light-hearted little chat, it is actually a really good model to interact with - if you don't like interacting with human beings on a regular basis. I can see how young minds are going to get confused internally as they grow, not being able to distinguish between whether they are talking to a human being, who is attempting to manipulate & control them, or whether they are being influenced by a tool / application that they have mistakenly adopted to trust. going to be <a href="https://www.youtube.com/watch?v=QVVe2rCHtN0" target="_blank">interesting times</a>....<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3PWKKbnluwyfN5cOPUSlNLYl76_lD1AiG_HqvKEJDU7R-dpQzMYjghmVmQCMKqWNC1uO7VUmmF3ET4bHoJeA9ygIE9Dmb18P5r_pqE3o3Ji69MhU6sNCeGhz_bukL9EcxdFN8i78oy9Iby819rbcc81D9PaDf2YdG-NgnIXe_Hb_9DpfVa-nQtF3aT-hq" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="935" data-original-width="842" height="383" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3PWKKbnluwyfN5cOPUSlNLYl76_lD1AiG_HqvKEJDU7R-dpQzMYjghmVmQCMKqWNC1uO7VUmmF3ET4bHoJeA9ygIE9Dmb18P5r_pqE3o3Ji69MhU6sNCeGhz_bukL9EcxdFN8i78oy9Iby819rbcc81D9PaDf2YdG-NgnIXe_Hb_9DpfVa-nQtF3aT-hq=w345-h383" width="345" /></a></div><br /><br /><p></p><p>Lovely Tony, but I want to use it on my phone... sure thing, they have a version available for <a href="https://apps.apple.com/us/app/pi-personal-ai-assistant/id6445815935" target="_blank">Apple iOS</a> and for Android. As I have Android phones, I will use / setup that app, it is <a href="https://play.google.com/store/apps/details?id=ai.inflection.pi" target="_blank">available from here</a>:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEigkA8--H6HLTbGnKLMBxUAfK_ofMVLRtEtJHsdq7vGIcdoXhba9cJj_54EIdoV8ZkemR4pkY7Zo-C0CebGgod1bARsGG3LDvkgnriFmiZNenfqPq5ZGkZ6cB8bG4mD1a0M8wW1vWJ8L9VTEvsU9ZEccpAQS0PKtGD7lIulEYzqtahtjFI_mfUOxON4M5I3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="805" data-original-width="1258" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEigkA8--H6HLTbGnKLMBxUAfK_ofMVLRtEtJHsdq7vGIcdoXhba9cJj_54EIdoV8ZkemR4pkY7Zo-C0CebGgod1bARsGG3LDvkgnriFmiZNenfqPq5ZGkZ6cB8bG4mD1a0M8wW1vWJ8L9VTEvsU9ZEccpAQS0PKtGD7lIulEYzqtahtjFI_mfUOxON4M5I3=w626-h400" width="626" /></a></div><br />As I say, personal opinions aside about the detrimental effect such tools will have on a growing human brain and the internal sociological and psychological problems that will arise from it, if you're going to embrace these type of tools, I would highly encourage check INFLECTION Pi out.<p></p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhdt3z0CtMt8uxODe4RxncSGtBgb6ErpLXFh7dxHSAHf9dv7XJBkgy-ecd86BQ9rO5zztUpAyi7hw8Cgcc-eWwmi9XvUvOXJUloxTyt4ioF3DW-lxJmap6XrnLwJ7WU5OSRgFwMVyOb1zJzE87jpNCQl72ar-IDb-D2moGVWD9b_HPrPc8ooEGythdmEBXk" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="581" data-original-width="1027" height="317" src="https://blogger.googleusercontent.com/img/a/AVvXsEhdt3z0CtMt8uxODe4RxncSGtBgb6ErpLXFh7dxHSAHf9dv7XJBkgy-ecd86BQ9rO5zztUpAyi7hw8Cgcc-eWwmi9XvUvOXJUloxTyt4ioF3DW-lxJmap6XrnLwJ7WU5OSRgFwMVyOb1zJzE87jpNCQl72ar-IDb-D2moGVWD9b_HPrPc8ooEGythdmEBXk=w561-h317" width="561" /></a></div>If you DID read up about Pi, you would have noticed that Inflection Pi is NOT open-source, in its own words: "<i>I am a proprietary AI built from the ground up by Inflection AI. It does not rely on existing Large Language Models, which allows it to have a unique set of capabilities. Ollama (developed by Google AI) focuses on running models locally, however Pi runs on a cloud-based service that provides real-time interactions and personalised experiences.</i>"<div>As you can see, Inflection Pi WILL be monetised at some point - it has to be, as that's the world of business. However, I would suggest going to check it out anyway.<br /><br />I did ask the tool if its roadmap included offline usage, it stated that it has not been built for this - however, I pushed this point further and it eventually informed me that it would inform the development team that this should be included in the future development roadmap. We'll see if that pans out.</div><div><br /></div><div>BEWARE: this is the same as using chatGPT etc... do NOT put in any personal information or other people's personal information, the data WILL be logged and used by the internal development teams to train the models and may expose the data to other users. Therefore, do not use it for anything that you would not stand in the middle of the street & shout out loud to everyone about - same goes for your personal information; would you really use it as a diary? no. will you use it to record all the tasks you do in your day job no. just THINK before you use it too much.<br /><br /><br />[final business orientated rant]: okay....so what is my problem with LLMs? well.. they were released to the General Public, ie. the consumer market - the "normal everyday people", they could access them, try them out & use them. They, as well as businesses can now pay something like $20 per month to access chatGPT (<i>other LLMs are available</i>). Those consumer market people are a LOT of people 300-800million+ users. That's a HUGE quantity of people to test your product and to gain usage stats and training data. You would not get that range from "Enterprise software", you'd get 1000s or 10s of 1000s. However, by giving the consumer market access to these tools, they can use them in the workplace. If you now attempt to "sell" or "convince" the Enterprise company to use "your LLM tools" and want to charge them millions of $$$$, there is no surprise that they reply that they can buy 5 x $20 licences for their team and they can "access AI" to help their business..... and there's the problem... Enterprise software did not arrive first, therefore it did not have time to dominate and filter down into the company. The whole LLM release cycle has been disruptive and up-ended the normal introduction of new software. As a business owner, why would I feel the need to pay lots of money for a Services company to help my employees to use the LLM that I've just been sold access to, when my employees are either using it themselves already or as mentioned, $20 per month access per employee, it suddenly doesn't become a good business model / market to be associated with.</div><div>I'll come back to this in a years time and see how many<a href="https://oxdynamics.com/" target="_blank"> bubble businesses</a> are still knocking around and see whether they have progressed into niche support LLM market areas or whether they've all gone bust - that includes the BIG players too. Anyone remember the Yahoo! days? when a little company called Google came along and stole all their business... BIG companies do fall and I believe that LLMs are going to be the main cause of the old dead wood yesteryear companies loosing the hold and dominance in the Tech industry and maybe, just maybe we'll get some TRUE innovation back. we'll see.<br /><br /><br /><p></p><p>You may be wondering, why I would care / take interest in such tooling?</p><p><br /></p><p>Well... little bit of a history lesson:</p><p>I built version 0.1 of RITA back in Apr-Jul 2018, using IBMs Watson Assistant - it was rough, it was ready, it was technology to meet a need, it changed me, it actually changed how I look at "IT projects" and how I embrace the <a href="https://www.ibm.com/design/thinking/" target="_blank">human aspects of designing a tool that helps people</a>.</p><p>The work I did, even made a BBC News article:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhIvItDBtk4mETsNoeAmRH4a1ZfKzaStfV_r57VkiLAQwDpN-mt2-IeV9JWpC4xzHruDjMGeopnV2T8S2Wj3aNwfVrpCDdBmPuqypU0ailcrHWjKPWn7kcg6jHixoJ2jC0U_prAEnOkZQgBIdUCf_-9cEnxpVacXodRghYXJI-pcHYpSjNseeisj4UGKBUl" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="624" data-original-width="371" height="582" src="https://blogger.googleusercontent.com/img/a/AVvXsEhIvItDBtk4mETsNoeAmRH4a1ZfKzaStfV_r57VkiLAQwDpN-mt2-IeV9JWpC4xzHruDjMGeopnV2T8S2Wj3aNwfVrpCDdBmPuqypU0ailcrHWjKPWn7kcg6jHixoJ2jC0U_prAEnOkZQgBIdUCf_-9cEnxpVacXodRghYXJI-pcHYpSjNseeisj4UGKBUl=w347-h582" width="347" /></a></div><br /><i><span style="font-size: xx-small;">[disclaimer: my employer never acknowledged or recognised my efforts for this, even to this day - due to internal politics. sigh.]</span></i> <p></p><p>It looks like it has taken a while for it to go from that early version<a href="https://velindre.nhs.wales/news/latest-news/velindre-cancer-centre-launches-artificial-intelligence-chatbot-rita1/" target="_blank"> through to something in production</a> - mainly because you CANNOT get it wrong in this subject area:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3ib6ZUVOipGS9Ook-ifRFzWeyBWn4GxgdhhkElGf23jVZtfvvRBdIDEQBwL-3L0znjk1VrnmOaUP7s25UUJWk9cz06Snz5FAweg1lQhclhdjW-FQI8QQEvvGxFASskLWXIYnnTe9kAEfzWy5woIKARcqgXnFPY8iOhNz4yAw8xWFL6R6zTZIrIlFl4yBO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="832" data-original-width="842" height="485" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3ib6ZUVOipGS9Ook-ifRFzWeyBWn4GxgdhhkElGf23jVZtfvvRBdIDEQBwL-3L0znjk1VrnmOaUP7s25UUJWk9cz06Snz5FAweg1lQhclhdjW-FQI8QQEvvGxFASskLWXIYnnTe9kAEfzWy5woIKARcqgXnFPY8iOhNz4yAw8xWFL6R6zTZIrIlFl4yBO=w491-h485" width="491" /></a></div><p>I met and discussed at length for many months with the real life Rita, the types of people she spoke to, how she approached conversations, how she stayed distanced but caring etc..etc... and I helped to build that into the first version of the tooling:</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgQVZLTS73w7FWsRXStazu-O4jqYuP5HKO3tmobW7xgusIfljdRZAbmKK7js8hxO6FwTw02y3-a5Xi3Ba4Ru4Stnqzz7Ts7vt1oMXcGi3kBI3LEBliyGOoygZwwlneEuYlh4WY6r748kC0hrcjyJ5z0gOMn-REEnGxu3eoqDnxmDqtK5YCUhHfJGQ7ZdMjN" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="591" data-original-width="837" height="286" src="https://blogger.googleusercontent.com/img/a/AVvXsEgQVZLTS73w7FWsRXStazu-O4jqYuP5HKO3tmobW7xgusIfljdRZAbmKK7js8hxO6FwTw02y3-a5Xi3Ba4Ru4Stnqzz7Ts7vt1oMXcGi3kBI3LEBliyGOoygZwwlneEuYlh4WY6r748kC0hrcjyJ5z0gOMn-REEnGxu3eoqDnxmDqtK5YCUhHfJGQ7ZdMjN=w405-h286" width="405" /></a></div><br /><br />My hope is that tools like Inflection Personal Intelligence can help people, real people, like Rita did - make a difference to every day lives.... and not be driven by profit or monetisation. <p></p><p>I know, I live in a fantasy world sometimes, but y'know, we have to at least try. </p><p>Money is not really worth anything at the end of the day - but kindness & support for your fellow human beings is priceless.</p><p>Enjoy your experience with Pi. Maybe one-day, you'll be inspired to MAKE your own "Pi" rather than having to always be a "user"....maybe...</p><p><br /></p></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-44573259933924059812024-03-03T14:03:00.008+00:002024-03-17T22:16:54.838+00:00Snow, a little rant about society/AI and using a GPS, BDS, GLONASS, GALILEO and QZSS positioning device<p>Well, the sun is out, the frost is melting, it actually snowed yesterday, it didn't snow anywhere else in the UK (<i>that I'm aware of</i>), but it did <a href="https://edition.cnn.com/2024/02/29/weather/california-storm-snow-blizzard-climate/index.html" target="_blank">snow a LOT in California</a> (<i>and still is</i>)</p><p> Here's a photo of my garden from yesterday morning, I was very surprised as it meant I couldn't really continue with the landscape waterfall remodelling that I'd started the previous day:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjTITBEtsw6l5JfvvZkSGoaIU6XVKzxFuRaz1z66g4ByX35RXlTzpDdehAOjrKXme7FntPsAzLh46jZJxqAM3uWm9GDqTPGuUme64OveugGCp9TjHVlQR_VvxNFTp4mKmNLjF0TW8DChbuxpoHsK66MoAjYEQ4P1GDV6BItVIjQuJjKXpMG0h7RDvztkH2P" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="715" data-original-width="1145" height="384" src="https://blogger.googleusercontent.com/img/a/AVvXsEjTITBEtsw6l5JfvvZkSGoaIU6XVKzxFuRaz1z66g4ByX35RXlTzpDdehAOjrKXme7FntPsAzLh46jZJxqAM3uWm9GDqTPGuUme64OveugGCp9TjHVlQR_VvxNFTp4mKmNLjF0TW8DChbuxpoHsK66MoAjYEQ4P1GDV6BItVIjQuJjKXpMG0h7RDvztkH2P=w614-h384" width="614" /></a></div><p></p><p>With such loveliness that Spring is coming and Winter is just making an attempt to show it is still a force to be reckoned with, I was pondering on how I spend my last couple of days of "freedom", ie. the as-before-mentioned-time-off. I'll document below the tech. toys that I decided to setup & get working ready for next months "time off" where I can pull a lot of this technology together to actually start to "make something".</p><p>Oh and then I noticed this headline in my fav. IT news website: <a href="https://www.theregister.com/2024/02/29/ibm_launches_voluntary_redundancy_scheme/" target="_blank">IBM announces European layoffs</a></p><p>and for some uncontrollable reason, I just started doing the hand-dance, whilst I started to sing to myself: "We love the company"</p><p>If you don't know what that is in ref. to, then you need to watch these guys play this game (<i>they've done about 20 videos - they suck at the game, but that's not the point</i>) and "sing the song":</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="494" src="https://www.youtube.com/embed/T8_KOt0Ncdw" width="595" youtube-src-id="T8_KOt0Ncdw"></iframe></div><br /><p>OR, watch the animation version that is shorter but gets the point across:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="433" src="https://www.youtube.com/embed/7lOfzo1K5Gc" width="521" youtube-src-id="7lOfzo1K5Gc"></iframe></div><br /><p><br /></p><p><br /></p><p>This also reminded me that, I had read a lovely quote earlier today:</p><p><span style="font-size: medium;"><b>"AI is the new outsourcing"</b></span></p><p>I'll let that sink in for a few minutes. Think about it. Think about it harder than that. Now, sit back, sip your coffee & think about it in a bit more depth.................THAT, that moment you just had right there (<i>if you didn't get distracted</i>) is exactly the "oh-sh!t, it is, isn't it" moment.</p><p>I'll be blunt & truthful (<i>I've never been anything else, in life or work</i>), just over 20years ago (<i>it was actually in the late-80s/early-90s, read a book called "<a href="https://en.wikipedia.org/wiki/Decline_and_Fall_of_the_American_Programmer" target="_blank">Decline and Fall of the American programmer</a>", but it took until the early 2000s to be fully executed</i>), CTOs or IT Directors as we UK people called that role, were influenced into offshoring the IT departments to some place that was going to "save the company money" and in turn award them a lovely bonus, a pat on the back and either promotion into the special golf-club or allow them to purchase that 50ft luxury yacht that they'll retire on and let "someone else sort out the future". Now, those IT departments included operations support, think hardware installs, configs / setups / maintenance / network plumbing, technical support personnel, front-line support personnel and people who wrote code. Now, these people were trained to be skilled in these areas in the late-80s/early-90s, they knew what they were doing - but, y'know, the bare-faced cheek of these people, they actually wanted to be "paid for their skills", how very dare they. IT was seen as a backroom thing, something that was kept in the basement, something that "supported" the business. Business could operate & run on it's own. IT was just there to help it run faster, better, leaner, meaner and more profitably... imagine Business being in the top half of a circle, IT was underneath, in the bottom half of the circle. IT needed to be kept in it's place. So too, did the people who did "IT stuff". I mean, it was the Business people who "did stuff", they made decisions, they made money, they were self appointed narcissistic ego-pumping capitalist guru's with MBAs, goddamit.</p><p>Therefore, it was their right to bully the IT geeks / nerds so they knew their place, just like they (probably, allegedly, personal-opinion) did when they were back in school days. With that in mind, IT people were tolerated as a necessary evil that was going to impact "the bottom line". In stepped the concept of "outsourcing", not only did it mean that all those pesky IT people could be gotten rid of, it also meant that (probably, allegedly, personal-opinion) some CEOs/CTOs/Managing Directors/IT Directors could buy shares/setup companies offshore in far away places that no-one could see or smell the IT people, places, such as India (<a href="https://edukemy.com/blog/phases-of-economic-exploitation-of-india-by-british-and-various-economic-policies-modern-history-notes/" target="_blank">UK history lesson here</a>) - except, now we're 20-odd years down the line those outsourced IT people, like <a href="https://www.bbc.co.uk/news/world-asia-india-59870297" target="_blank">most others are now starting to demand a decent living wage</a>.</p><p>"Well, we cannot have that now, can we?, I mean we're back to where we were in the late-80s" - if you do your homework, you'll see that India (<i>sorry for picking on you India</i>) didn't have 2-farthings to rub together and well, let's just say 2+2=4. you can fill in the blanks. However, <a href="https://aflegal.org/america-first-legal-slams-ibm-for-racially-discriminating-against-white-and-asian-americans-files-federal-civil-rights-complaint/" target="_blank">someone is looking to help them out</a> now.</p><p>Now, you think that same business mindset has changed? nope. In fact, it's even worse with the introduction to the general public of "xxxGPT" and other such tools, the marketing of "AI" is dreadful, these stupid imbeciles who believe they are business guru's, think they can just repeat the same thing again, except, they're relying on Big Tech. to have gotten the outsourced IT people to create tooling that will be their own undoing. ie. '<i>Hey, everyone, use "Public" tools like StackOverflow and GitHub to ask questions & "help" other people to sort out their coding problems - when there's a right answer, make sure you flag it</i>'.... why flag it? oh, so everyone will know the "right" answer..... or... so when the LLM models are slurping the content they know which "right" answer to focus on... anyway, you get the point, lots of kind and nice people have done a community thing, helping other people out who might need help, in their own time, with their own kindness etc... only to have the companies (<i>yes, I am looking at you too StackOverflow, "our content", excuse me... "public generated / shared and open content", surely!?</i>) slurp that up and monetise access to it.</p><p>As is the same with all these things, the content is only as good as the last point in time it slurped the data. Also, the content it slurped has to have been verified as valid / correct / good. If we switch back to the 1970s and "go the other way" and keep the know-how to ourselves, keep the knowledge local, share know-how verbally (<i>as long as no mobile phones or 'smart speakers' are nearby - ah, the conspiracy theorists wet-dream right there</i>) then these "AI tools" will be as useful as a chocolate teapot.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj2VQYAjjM-hfab7FiAENPbjHoR4h03-Y2qSJD3YbNEujAoZReIGl9x8NW8yexdheyTkTeFpgAQGE2rW6Ax1o2YSj4hAnl9jln94waLLUfBcp-ZEH3paFBDRtbzHBEJ3PwCurXqEP5laqXUT-KtNfc4vFah2BNNDAXlHO4t-sORj98o6_zqaIy1qCIUIqbv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="482" data-original-width="628" height="446" src="https://blogger.googleusercontent.com/img/a/AVvXsEj2VQYAjjM-hfab7FiAENPbjHoR4h03-Y2qSJD3YbNEujAoZReIGl9x8NW8yexdheyTkTeFpgAQGE2rW6Ax1o2YSj4hAnl9jln94waLLUfBcp-ZEH3paFBDRtbzHBEJ3PwCurXqEP5laqXUT-KtNfc4vFah2BNNDAXlHO4t-sORj98o6_zqaIy1qCIUIqbv=w582-h446" width="582" /></a></div><br />One last chuckle about this AI-delusion. <a href="https://www.theguardian.com/uk-news/2024/feb/27/glasgow-willy-wonka-experience-slammed-as-farce-as-tickets-refunded" target="_blank">The Wonka Experience</a>. If you're in the UK, you would have heard about this just recently, for all the wrong reasons. I'll boil it down into the simple stuff as I'm now bored of writing (<i>oh, how that is related!</i>). <a href="https://www.bbc.co.uk/news/uk-scotland-glasgow-west-68431728" target="_blank">The person behind the Wonka experience used "AI"</a> to generate the artwork and the scripts / content and foolishy believed in the fantasy of what the AI can do, but failed to translate the into real life....and I believe this is what is running true across society, the delusion that "AI" is something amazing, something creative, something magical - it's not.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBGjeGXsxZOV5yYTt3YSYGqtry8rQjK8ZFE8wXiKoFczQgYDkwV7BCTsoVPHS0PNWVCPW8OeSCnT1_6isJedTsd-K1t8Ed7NfIHbfzU-EjpWerpbfJacjsyyx3t9n5WtnYWuQkxsXGN3hpxGeXHZ3YFkJXO0b8r39XKRFC24iOW5I26vFVm7jeUHwNdAU8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="431" data-original-width="617" height="437" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBGjeGXsxZOV5yYTt3YSYGqtry8rQjK8ZFE8wXiKoFczQgYDkwV7BCTsoVPHS0PNWVCPW8OeSCnT1_6isJedTsd-K1t8Ed7NfIHbfzU-EjpWerpbfJacjsyyx3t9n5WtnYWuQkxsXGN3hpxGeXHZ3YFkJXO0b8r39XKRFC24iOW5I26vFVm7jeUHwNdAU8=w624-h437" width="624" /></a></div><br />Therefore looping back to the "AI is the new outsourcing", yeah, great, as you can see in the images above, there is a HUGE difference between the "idea" and the "reality". There will be an attempt by Big Tech. to convince Big Business that they can save/make more money by adopting "AI", but it is going to be a very bumpy & prolonged ride - just make sure that you "keep your options open" and don't get tied into a <a href="https://www.bbc.co.uk/news/technology-68445981" target="_blank">"closed system AI"</a>, such as chatGPT.<p></p><p>RIGHT, I'M NOW BORED OF THAT & YOU PROBABLY ARE TOO.....moving on.</p><p><br /></p><p>Anyway, there's the INTRO out of the way, now onto the GOOD STUFF that I was originally going to post about, so that I have a record of how to do this, so when I come back to doing it again at some point in the future, I will just have to follow these instructions....because, y'know, I just know when I get "back to work", I'll have so many stupid demands on my time I won't be able to live a normal persons life and do "life things"...or maybe in 2024 the "worm shall turn". watch this space ;-)</p><p><br /></p><h3 style="text-align: left;">The GPS, BDS, GLONASS, GALILEO and QZSS positioning device.</h3><p>or should I say, why limit yourself to just the US satellites for doing global positioning (<i>ie. knowing where you are located on this planet</i>), there are PLENTY of satellites zooming around up there, from different countries that offer the same service, so why not utilise them all - that way, if, for instance, GPS were to stop functioning, you could use the EU version, or the one from CHINA or even RUSSIA.</p><p>Welcome to Ali Express.</p><p>Here <a href="https://www.aliexpress.com/item/4001147538089.html" target="_blank">is an example of the product that I purchased</a>. In fact, I purchased about 10 of them.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEglUliDAMkzyfNXTp7hQj2NkxiicCd4l8-ylkkf6aVPZ4SQU735CgrSJ2B1EmIX8xlR97JyvcWmK2sZbhpayCIQ_3jxP8NjAmul85wQgmXPGzbiYb1cmHms8b8Zo0tSihtFndGkOTDQPJrVo6tNJ3RHZcf7_kI01sMRNiEIrgyhlfHoDFjiq7-QBT9_V9j1" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="837" data-original-width="1666" height="299" src="https://blogger.googleusercontent.com/img/a/AVvXsEglUliDAMkzyfNXTp7hQj2NkxiicCd4l8-ylkkf6aVPZ4SQU735CgrSJ2B1EmIX8xlR97JyvcWmK2sZbhpayCIQ_3jxP8NjAmul85wQgmXPGzbiYb1cmHms8b8Zo0tSihtFndGkOTDQPJrVo6tNJ3RHZcf7_kI01sMRNiEIrgyhlfHoDFjiq7-QBT9_V9j1=w596-h299" width="596" /></a></div><br />Why did I write, "example" above? Well, if you look over on the far-right, you'll see the wording "1 per customer". ah. for that price, you can only buy one. If you want / need to buy more in bulk, you need to go take a look around to find a good bulk price, they won't be as cheap but you'll be able to buy more of them at a reasonable price, then it's just a case of waiting a few weeks and they'll arrive.<p></p><p>Here's the description blurb that you should be looking for:</p><p>"The ATGM336H-5N series module is a generic term for the 9.7 * 10.1-size high-performance BDS / GNSS constellation positioning navigation module family. </p><p>The series of products are based on the fourth generation of low power GNSSSOC single chip-AT6558, support <b>a variety of satellite navigation systems, including China's BDS (Beidou satellite navigation system), the United States GPS, Russia's GLONASS, the European Union GALILEO, Japan's QZSS</b> and satellite enhancement system SBAS (WAAS, EGNOS, GAGAN, MSAS). </p><p>AT6558 is a true sense of the six-in-one multi-mode satellite navigation module, including 32 tracking channels, you can also accept the satellite navigation system GNSS signal, and to achieve joint positioning, navigation and timing. </p><p>This series of modules with high sensitivity, low power consumption, low cost and other advantages, suitable for car navigation, handheld positioning, wearable equipment, you can directly replace the U-blox MAX series modules."</p><p>Whilst information was a little light on the Ali-Express website, I did find <a href="https://wiki.dfrobot.com/GPS_+_BDS_BeiDou_Dual_Module_SKU_TEL0132" target="_blank">MORE INFO HERE</a> on the DFRobot website. The most important information is what the few pins do:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg--CwIIFap4Uphx9N0SxpacxsUlqGu3t7Vj_id3_FwGL4gpEKc2da5lUlv26yojRmaUEhx2Zra8I9Q9p93ptX6qe9LKlUJ1xy_j-L3NO61gRBDfvDytQOKotSyv9Yz4zvO1AADGbT0Voyc-XKYQmknNLRlNLurTzr0epIcjnqsaJEu_QJj5gdEdQrcw_7z" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="525" data-original-width="309" height="398" src="https://blogger.googleusercontent.com/img/a/AVvXsEg--CwIIFap4Uphx9N0SxpacxsUlqGu3t7Vj_id3_FwGL4gpEKc2da5lUlv26yojRmaUEhx2Zra8I9Q9p93ptX6qe9LKlUJ1xy_j-L3NO61gRBDfvDytQOKotSyv9Yz4zvO1AADGbT0Voyc-XKYQmknNLRlNLurTzr0epIcjnqsaJEu_QJj5gdEdQrcw_7z=w234-h398" width="234" /></a></div>Basically, we can ignore the PPS pin and we're just interested in the Tx/Rx pins. Well that doesn't take a genius to work that one out. The DFRobot website has a great breakdown of what each of the output messages is used for and the format structure - that is really handy if you want to break the content down yourself<p></p><p>Hooking up the device to a spare Arduino UNO4 device was simple enough, just connect the Tx/Rx pins to GPIO 11 and 12:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSw5lawvoT393LDtKhnBisbxakK2mUHFxOs4n4x-zABL-OvjwQLk77JJDp4gCZKO2I2qA0pYy0F8_njNWrCBdy3A4xIBG4okW8nv8BZgVgkVltNqJkz0V5a51uZHi8bWT5qOavUO35Je40wZ_IhZf3VsB-JsOuSt4JxjATci9mT6_DSNLpzQFc-vK539A7" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="790" data-original-width="665" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSw5lawvoT393LDtKhnBisbxakK2mUHFxOs4n4x-zABL-OvjwQLk77JJDp4gCZKO2I2qA0pYy0F8_njNWrCBdy3A4xIBG4okW8nv8BZgVgkVltNqJkz0V5a51uZHi8bWT5qOavUO35Je40wZ_IhZf3VsB-JsOuSt4JxjATci9mT6_DSNLpzQFc-vK539A7" width="202" /></a></div>As stated in the webpage, the default comms speed for the GPS module is 9600, make sure we set that in code and then the Serial.Monitor in the Arduino IDE we can set to whatever we want, in this case 115200:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj9V_9nvLu8-QV2Jf20lbVc3rhVzRW0sf4rsuwo-cAAmTSpElZm0CZHQpvBJZIhy9mSXGU95RXV2SB0sEaaUlnL3vbVuyt_dz4uOIgoBE926lpuoF_gnpBMz3ReAadgkFYuF4a0Kea_pQHUE0ZWF_c0jBlKyx1bAlMBWCSAO1I_XrzV6rs695OOXwr60QeY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="392" data-original-width="378" height="352" src="https://blogger.googleusercontent.com/img/a/AVvXsEj9V_9nvLu8-QV2Jf20lbVc3rhVzRW0sf4rsuwo-cAAmTSpElZm0CZHQpvBJZIhy9mSXGU95RXV2SB0sEaaUlnL3vbVuyt_dz4uOIgoBE926lpuoF_gnpBMz3ReAadgkFYuF4a0Kea_pQHUE0ZWF_c0jBlKyx1bAlMBWCSAO1I_XrzV6rs695OOXwr60QeY=w339-h352" width="339" /></a></div>Well, that just writes out the RAW data as-is, it writes out all the text output.<p></p><p>There is another sample code snippet from that webpage, however it is slightly buggy, as in the GPIO pins are the wrong way around and there is a missing }, but it is very useful to just show filtered data:</p><div style="text-align: left;">17:32:15.623 -> ************************<br />17:32:15.623 ->$GNRMC,173215.000,A,5120.54216,N,00212.29826,W,1.23,151.47,010324,,,A,V*1D<br />17:32:15.623 -> Save_Data.UTCTime = 173215.000<br />17:32:15.623 -> Save_Data.latitude = 5120.54216<br />17:32:15.623 -> Save_Data.N_S = N<br />17:32:15.623 -> Save_Data.longitude = 00212.29826<br />17:32:15.623 -> Save_Data.E_W = W<br />17:32:17.648 -> ************************<br />17:32:17.648 -> $GNRMC,173217.000,A,5120.54225,N,00212.29837,W,0.00,151.47,010324,,,A,V*1F<br />17:32:17.648 -> Save_Data.UTCTime = 173217.000<br />17:32:17.648 -> Save_Data.latitude = 5120.54225<br />17:32:17.648 -> Save_Data.N_S = N<br />17:32:17.648 -> Save_Data.longitude = 00212.29837<br />17:32:17.648 -> Save_Data.E_W = W<br />17:32:19.644 -> ************************<br />17:32:19.644 -> $GNRMC,173219.000,A,5120.54235,N,00212.29864,W,0.00,151.47,010324,,,A,V*16<br />17:32:19.644 -> Save_Data.UTCTime = 173219.000<br />17:32:19.644 -> Save_Data.latitude = 5120.54235<br />17:32:19.644 -> Save_Data.N_S = N<br />17:32:19.644 -> Save_Data.longitude = 00212.29864<br />17:32:19.644 -> Save_Data.E_W = W<br />17:32:21.633 -> ************************<br />17:32:21.633 -> $GNRMC,173221.000,A,5120.54206,N,00212.29907,W,1.18,151.47,010324,,,A,V*11<br />17:32:21.633 -> Save_Data.UTCTime = 173221.000<br />17:32:21.633 -> Save_Data.latitude = 5120.54206<br />17:32:21.633 -> Save_Data.N_S = N<br />17:32:21.633 -> Save_Data.longitude = 00212.29907<br />17:32:21.633 -> Save_Data.E_W = W<br />17:32:23.625 -> ************************<br />17:32:23.625 -> $GNRMC,173223.000,A,5120.54210,N,00212.29925,W,0.00,151.47,010324,,,A,V*1C<br />17:32:23.625 -> Save_Data.UTCTime = 173223.000<br />17:32:23.625 -> Save_Data.latitude = 5120.54210<br />17:32:23.625 -> Save_Data.N_S = N<br />17:32:23.625 -> Save_Data.longitude = 00212.29925<br />17:32:23.625 -> Save_Data.E_W = W<br />17:32:25.649 -> ************************</div><p>So, there we have it - we have a fully functioning mini-global-positioning module that can use a multitude of differing satellites to determine the best position, even inside it was very fast to get a position, near a window or even outside it was hitting [22] satellites! As it is, this is a great little tool for this specific purpose and I'm sure I'll figure out a way to get it wrapped up into some other little projects that might need such data.</p><p>However, the main purpose of this was to solder it onto the Heltec 3 LoRa device to get a true position of the devices, rather than hard-coding them. That required me to do a little bit of early morning soldering.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiAEOlONJEkzkmX3rKZBFWjpKHkwz2yPmSXkZDGWdgM0QMLbk6zMFX0-AU0zMEd8FXjZo1xci-MlqLOjVY1Xv4qMZB7Ejq9hi4cVzslUPISn-utc6xULmURHxFL7K6AJHPYxQ2RzCaz9A0ljmXiuOQZRukj8jdSXZxYgMlSzvVeW7ds5Dwq5Wck3NeyueBC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="715" data-original-width="1145" height="384" src="https://blogger.googleusercontent.com/img/a/AVvXsEiAEOlONJEkzkmX3rKZBFWjpKHkwz2yPmSXkZDGWdgM0QMLbk6zMFX0-AU0zMEd8FXjZo1xci-MlqLOjVY1Xv4qMZB7Ejq9hi4cVzslUPISn-utc6xULmURHxFL7K6AJHPYxQ2RzCaz9A0ljmXiuOQZRukj8jdSXZxYgMlSzvVeW7ds5Dwq5Wck3NeyueBC=w615-h384" width="615" /></a></div><br />Not too shabby, if I say so myself.... nicely tucked up at the back of the Heltec board, wires nice and trim - the green one is on the other-side and is the 32mm Bluetooth replacement wire, it's meant to stick out!<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgeXS4D7jqm6Ar0tx65x2-tV-H4Lq6XhAWQqa5P8b_oKq6c1odiV3ZIxJezpYKR5AAX2Tw-0jVVDHXGbV0vOX0h1pfFZPzcGNfz1GaRNUI2admXvrXpbgT8DnNz_4LSWQAL5YPM9-3nmSNR8vxumfAgxpsmPJkXto9FpB9BJL-m7yxA110F-seD_AiH4T0K" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="715" data-original-width="1145" height="386" src="https://blogger.googleusercontent.com/img/a/AVvXsEgeXS4D7jqm6Ar0tx65x2-tV-H4Lq6XhAWQqa5P8b_oKq6c1odiV3ZIxJezpYKR5AAX2Tw-0jVVDHXGbV0vOX0h1pfFZPzcGNfz1GaRNUI2admXvrXpbgT8DnNz_4LSWQAL5YPM9-3nmSNR8vxumfAgxpsmPJkXto9FpB9BJL-m7yxA110F-seD_AiH4T0K=w616-h386" width="616" /></a></div><br />A first power up, after changing the Meshtastic settings to allow GPS to be used and to tell it what Pins are being used 40 / 41. On the top-right we can see that "inside" it has just picked up [9] satellites, it also shows that it has connected to the T-Beam device that I have sitting a few feet away from me - right, time to move this device into a different location / room and see how it goes from there.<p></p><p>It did pick-up [22] satellites when I placed it near the "home office" window and it picked up the correct co-ordinates too. excellent. looks like the device is doing exactly what it says it would do.</p><p><br /></p><h3 style="text-align: left;">M5Stack Keyboard</h3><p>Well.....seeing as I was "on a roll", I thought I'd do something else useful (?), <a href="https://thepihut.com/products/m5stack-cardkb-mini-keyboard-programmable-unit-v1-1-mega8a" target="_blank">I ordered a couple of these little keyboards a while back</a> - kinda with the mindset to somehow hook them up with the Heltec devices so that I can type messages directly rather than having to use Bluetooth and my phone. </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjNlcfrYmgKNc38AgAmBMkqTQORUdHbUdH2FnuDElVKU9pK0oBIO6mKOA6GFE9e7r4ThqnnhZZL85e62y_2FACE5IHUToAj7FZ-GS0kZOQm1wNYxJOeOslZu73cSJWOVTvbaJ7bQsn-4mic0diGhOzSFIi1TQl8zsIbwAcx4jO8bpfXLQYJeh-Ees0OHT7S" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="594" data-original-width="608" height="388" src="https://blogger.googleusercontent.com/img/a/AVvXsEjNlcfrYmgKNc38AgAmBMkqTQORUdHbUdH2FnuDElVKU9pK0oBIO6mKOA6GFE9e7r4ThqnnhZZL85e62y_2FACE5IHUToAj7FZ-GS0kZOQm1wNYxJOeOslZu73cSJWOVTvbaJ7bQsn-4mic0diGhOzSFIi1TQl8zsIbwAcx4jO8bpfXLQYJeh-Ees0OHT7S=w398-h388" width="398" /></a></div><br /><br /><p></p><p>Yes, <a href="https://tonyisageek.blogspot.com/2024/01/lilygo-t-deck-lora-device-setup.html" target="_blank">I am aware of the T-Deck and I do indeed have 2 of those devices</a>, but I was also wondering how these little keyboards work.</p><p>My previous investigation with such things led me to believe that keyboards required a lot of complication, all to do with keyboard matrixes, the keys being split into sections of that matrix and determining which key was actually pressed was a complicated thing....</p><p>Well, for the low low price I was about to be surprised!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhn5zMUYAdyM1T3cSfJCBxj7N3xsKBgo3aqy_uENeNFyjPy-27_j3M4-dSrb0UxETV9ZkIz6WGhKZResBmF6s0APVn8u3Y-OAE2lFtkoEMlItT06JhaaMKT_tLw50mWCWYNYfTPdpxuyueUba9b_Ug0-vAEB-a-WCNUjYh20p-m58cpK4Yl5jA6_N6lHC8I" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="829" data-original-width="638" height="468" src="https://blogger.googleusercontent.com/img/a/AVvXsEhn5zMUYAdyM1T3cSfJCBxj7N3xsKBgo3aqy_uENeNFyjPy-27_j3M4-dSrb0UxETV9ZkIz6WGhKZResBmF6s0APVn8u3Y-OAE2lFtkoEMlItT06JhaaMKT_tLw50mWCWYNYfTPdpxuyueUba9b_Ug0-vAEB-a-WCNUjYh20p-m58cpK4Yl5jA6_N6lHC8I=w361-h468" width="361" /></a></div><br /><br />The device connects to the I2C bus - which is amazing by the way - therefore it literally just sends 1-byte per keypress<p></p><p>Now, there is some example code available on github <a href="https://github.com/m5stack/M5Stack/blob/master/examples/Unit/CardKB/CardKB.ino" target="_blank">HERE</a>, but that assumes you're using the M5 stack device along with the LCD screen, as I'm not I can butcher the code to just do the basics that I need.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgofVwIYs-UKD3calRj5n3SbWzVwyEo8UITXJtqCPRdD6F4k1omyWto5TEuYWum5RMtDBLlDVU1v91K2zM_b6RaTVQDd-pWjaFNQro_Qs1s5a93vrROrwzU2bJ0vGHo75S4pBvy4pdrc08BNg3xCQSlJ_T3wbDN2r_c2_sBJiN0iRGwWE6wYZu76hDYEDlm" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="583" data-original-width="459" height="501" src="https://blogger.googleusercontent.com/img/a/AVvXsEgofVwIYs-UKD3calRj5n3SbWzVwyEo8UITXJtqCPRdD6F4k1omyWto5TEuYWum5RMtDBLlDVU1v91K2zM_b6RaTVQDd-pWjaFNQro_Qs1s5a93vrROrwzU2bJ0vGHo75S4pBvy4pdrc08BNg3xCQSlJ_T3wbDN2r_c2_sBJiN0iRGwWE6wYZu76hDYEDlm=w394-h501" width="394" /></a></div><br />As you can see above, the value from Wire.read() is inserted into the [c] variable. In the debug output, I spit that out as the HEX value and then the string value. The [20] is [SPACE] and [D] is [Enter], so this little keyboard takes the keypress for each press and passes it to whatever wants it, no mess, no fuss.<br /><br /><p></p><p>In fact here's the snippet of simple code that I was using above:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgW22hLcKr4bj-U73x8N1ZmDnMVr1LvwOEyeJ-n3pZDLh6EWl70cqKjShojl4EI35eUuI73lW-BICxVWhLESXh48CHiKyyWaP9Yo99Yho1IBfi8Y0Tr2TXZcUXG2b0hPpgGGuIboX4Chhh0UQBQh-ejOfF2itiDCyPwWuy9K3rQ1W2PQg6gYyUJcgxZxxzU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="653" data-original-width="605" height="495" src="https://blogger.googleusercontent.com/img/a/AVvXsEgW22hLcKr4bj-U73x8N1ZmDnMVr1LvwOEyeJ-n3pZDLh6EWl70cqKjShojl4EI35eUuI73lW-BICxVWhLESXh48CHiKyyWaP9Yo99Yho1IBfi8Y0Tr2TXZcUXG2b0hPpgGGuIboX4Chhh0UQBQh-ejOfF2itiDCyPwWuy9K3rQ1W2PQg6gYyUJcgxZxxzU=w458-h495" width="458" /></a></div><br />So simple.<p></p><p>I'm sure that along with the BME280 and individual LoRa modules that I have "in the post", that in 3 weeks time, I'll have thought of "doing something useful" with these lego-block components and I'll keep you updated with what I'm doing and I'll also attempt to keep the "work/work" and "anti-AI" rants down to a minimum ;-)<br /><br /></p><p>You know it's true:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjgN9Q1HwX6ikXzi0uhFnGEGxXQOEe4AJMHzF90iC14zWSjgZsUy67t1Xh8jaYwgxMFZScrtXLP5EDn2irBj8nE4JyX1GJk-RjcIuA1nwnnfhfe6_1oGA8E9KHGG9nEPmpluWd78akyFSTfL7HQyH5OU1RawOC1sb_HCpQwax_5MbAtGp6Am7J7c0E-yqHi" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="653" data-original-width="681" height="563" src="https://blogger.googleusercontent.com/img/a/AVvXsEjgN9Q1HwX6ikXzi0uhFnGEGxXQOEe4AJMHzF90iC14zWSjgZsUy67t1Xh8jaYwgxMFZScrtXLP5EDn2irBj8nE4JyX1GJk-RjcIuA1nwnnfhfe6_1oGA8E9KHGG9nEPmpluWd78akyFSTfL7HQyH5OU1RawOC1sb_HCpQwax_5MbAtGp6Am7J7c0E-yqHi=w586-h563" width="586" /></a></div><br /><br /><div>UPDATE:<br /><p></p><p>Amazon just delivered the "next shiny thing".</p><p>I took a gamble, as I've just recently been stung by some 256Gb SD-cards that were, a little less and didn't always behave, ie. I was able to copy just over 8Gb, but was getting errors doing more... so, <a href="https://www.amazon.co.uk/dp/B0CP28H8HF" target="_blank">I noticed these 1TB sd-cards for a really low pric</a>e & thought I'd take a gamble:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg-vgjZZZiSo_JLbBc5MyNb5M5iTnB1IzEnYfvq17whahE4hstxKbPMhYqqasCSCjTTtYnxvOwFC9MCh1pdN2iGOgcDJThbOR6QaCI7b_XMXmJnm93BShaZQoZpl7x8sey9AlB7_jyQiThewGLk96Ti4XE2Qrk-T-8oBOwag3-aVMBF9DmWULdIS6urMjic" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="490" data-original-width="1360" height="217" src="https://blogger.googleusercontent.com/img/a/AVvXsEg-vgjZZZiSo_JLbBc5MyNb5M5iTnB1IzEnYfvq17whahE4hstxKbPMhYqqasCSCjTTtYnxvOwFC9MCh1pdN2iGOgcDJThbOR6QaCI7b_XMXmJnm93BShaZQoZpl7x8sey9AlB7_jyQiThewGLk96Ti4XE2Qrk-T-8oBOwag3-aVMBF9DmWULdIS6urMjic=w604-h217" width="604" /></a></div><br />According to UBuntu, it looks to be legit:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhAlLsTBCc3JqFR5T7O994tUn1p9u8Q5b2Y7G2ttxUzEr-X4vpTQfirDF4AxGAsBkmArd64Ktd4e9P7UiuhNsvsYWa2KVWRufoOSx-OvncEKJQzMSpitdmGWDTfw6n2SgNWTPrz0F1p-WQ663ZwX44KaDXTXqilavoN-nwWhrGilh8iCvCUoWeCI-QinW-M" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="816" data-original-width="1129" height="365" src="https://blogger.googleusercontent.com/img/a/AVvXsEhAlLsTBCc3JqFR5T7O994tUn1p9u8Q5b2Y7G2ttxUzEr-X4vpTQfirDF4AxGAsBkmArd64Ktd4e9P7UiuhNsvsYWa2KVWRufoOSx-OvncEKJQzMSpitdmGWDTfw6n2SgNWTPrz0F1p-WQ663ZwX44KaDXTXqilavoN-nwWhrGilh8iCvCUoWeCI-QinW-M=w506-h365" width="506" /></a></div><br />and from Disks:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi1wQtN0wR2J5hgM7K97H-TJektETFNxuHbvRrh7YDfFWpRCgtFOYlIvR9OQYCvDUpxFpw6ELRM-iZ6j7rWtOVKNudzotJgFqxKSbOC9yiryNZngUV9AjoymSNyu8uLHD2AaU8ZDZTboNJ6saR1QAxmU7ZfedFybi0_gxS7Z0EiJWh_nYiDRKJIHNv7vGmf" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="430" data-original-width="905" height="237" src="https://blogger.googleusercontent.com/img/a/AVvXsEi1wQtN0wR2J5hgM7K97H-TJektETFNxuHbvRrh7YDfFWpRCgtFOYlIvR9OQYCvDUpxFpw6ELRM-iZ6j7rWtOVKNudzotJgFqxKSbOC9yiryNZngUV9AjoymSNyu8uLHD2AaU8ZDZTboNJ6saR1QAxmU7ZfedFybi0_gxS7Z0EiJWh_nYiDRKJIHNv7vGmf=w499-h237" width="499" /></a></div><br />and from GParted:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZBnJvma746m9qOudeNIqsXuSuZ9rGLABqP0jFLLyKjkKHnYfGYYD2YklRQK6MTyXrAvjl-KofwPolaQaiVYJe2vIMzU9VaXH6mCmwR1mpOJrM2WtajAn9_mkYm7KHVkjrz0QZU1KN1vVMvEn_XRlP0yWwHgyjIVo6-xyurH7bEKLjWGX4Tv8zVfKGTAbC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="406" data-original-width="856" height="245" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZBnJvma746m9qOudeNIqsXuSuZ9rGLABqP0jFLLyKjkKHnYfGYYD2YklRQK6MTyXrAvjl-KofwPolaQaiVYJe2vIMzU9VaXH6mCmwR1mpOJrM2WtajAn9_mkYm7KHVkjrz0QZU1KN1vVMvEn_XRlP0yWwHgyjIVo6-xyurH7bEKLjWGX4Tv8zVfKGTAbC=w515-h245" width="515" /></a></div><br /><br /><p></p><p>I guess I'll go stick it in the RPi5 later on and start "using it". </p><p>It'll be a nice "backup" drive, somewhere to stick all my "prepper" info, such as the backup of wikipedia via <a href="https://kiwix.org/en/" target="_blank">kiwix</a>... an article for another day.</p><p><br /></p></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-55861811602862157852024-02-29T09:01:00.004+00:002024-02-29T15:08:44.947+00:00In other news.... the Genie is out<p>Google has literally let the genie out of the bottle:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEio9lp94KfyKlTOnjfkL0zDVY_CZGXB7W3F0cjJwaQIrLHWwQMH0XOw8b_cQpF4fEl_BDWpMV6qMTRmChf_eROYCPZar6OOQj1mqJB0-gTb1Cc5WIJDinumW7YSlpZ0PfKz7lktFHHlNEZY-x2JRjCx8imC6C0dOiRINOzAoc1jVlIykm95XBkDC5wYLgAp" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="790" data-original-width="704" height="552" src="https://blogger.googleusercontent.com/img/a/AVvXsEio9lp94KfyKlTOnjfkL0zDVY_CZGXB7W3F0cjJwaQIrLHWwQMH0XOw8b_cQpF4fEl_BDWpMV6qMTRmChf_eROYCPZar6OOQj1mqJB0-gTb1Cc5WIJDinumW7YSlpZ0PfKz7lktFHHlNEZY-x2JRjCx8imC6C0dOiRINOzAoc1jVlIykm95XBkDC5wYLgAp=w492-h552" width="492" /></a></div><p></p><p><a href="https://sites.google.com/view/genie-2024" target="_blank">https://sites.google.com/view/genie-2024</a></p><p>"<span face=""Lucida Grande", Helvetica, Arial, sans-serif" style="background-color: white; font-size: 13.608px;">We introduce Genie, the first generative interactive environment trained in an unsupervised manner from unlabelled Internet videos. The model can be prompted to generate an endless variety of action-controllable virtual worlds described through text, synthetic images, photographs, and even sketches. At 11B parameters, Genie can be considered a foundation world model. It is comprised of a spatiotemporal video tokenizer, an autoregressive dynamics model, and a simple and scalable latent action model. </span></p><p><span face=""Lucida Grande", Helvetica, Arial, sans-serif" style="background-color: white; font-size: 13.608px;">Genie enables users to act in the generated environments on a frame-by-frame basis despite training without any ground-truth action labels or other domain-specific requirements typically found in the world model literature. Further the resulting learned latent action space facilitates training agents to imitate behaviors from unseen videos, opening the path for training generalist agents of the future.</span>"</p><p>of course there is a PAPER on it HERE.... <a href="https://arxiv.org/abs/2402.15391" target="_blank">https://arxiv.org/abs/2402.15391</a></p><p><br /></p><p>That's lovely, but "what can it do for me?". I'm glad you asked.</p><p>Well... from what I can tell, it can help to make a quick PoC (<i>or PoS, depending on how well the Engine works</i>) 2D platform game for you, without you having to do all the hard stuff.... y'know, like writing code, making pixel art, working out how to move sprites, collision detection, creating puzzles, defining original gameplay ideas, devising your own scoring mechanism....</p><p>oh, I started to get all negative there. I'll come back to that later, for now, let's keep an open/empty/blank mind about this "progress".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEga5omGWkJFzuEGpqa5Jv-4C6t9O1br1YN7cPfAnRg2uO20E91JcSBETdHVeE0i7tNmCOosqwwYqltf-UH0IzYFS6ym9AuNkHWS1nYlUDsun4RHv9b8Qv-6JktiRqXVoDgE5vCs9bak1kEbUlN1DeZLHih2GBuZVxWKAqo0deHgeP7hEWO_bwDJvlIq6YQn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="554" data-original-width="1157" height="287" src="https://blogger.googleusercontent.com/img/a/AVvXsEga5omGWkJFzuEGpqa5Jv-4C6t9O1br1YN7cPfAnRg2uO20E91JcSBETdHVeE0i7tNmCOosqwwYqltf-UH0IzYFS6ym9AuNkHWS1nYlUDsun4RHv9b8Qv-6JktiRqXVoDgE5vCs9bak1kEbUlN1DeZLHih2GBuZVxWKAqo0deHgeP7hEWO_bwDJvlIq6YQn=w601-h287" width="601" /></a></div><p>That still sounds like, "computer do the thinking for me".... but y'know.... that is kinda what computers were invented for, I suppose. Also, it does kind of read like this is not what it is actually going to be used for, ie. this "pattern" can be applied to 2D games platforms, but the learning & application techniques can & most probably will be applied in a totally different area.</p><p><a href="https://www.gartner.com/en/newsroom/press-releases/2024-02-19-gartner-predicts-search-engine-volume-will-drop-25-percent-by-2026-due-to-ai-chatbots-and-other-virtual-agents" target="_blank">I did read earlier that there has been a starting trend for the general public to stop using Google</a> to search for the answers to things, for instance, over the past 10-20years, if you wanted to know the answer to something, you would open up a web-browser on a desktop PC, a laptop, a tablet or a phone and you would type or say (<i>via STT</i>) the question and, originally you would get a list of websites that might have content that could help you to find that answer, or more recently, you may actually get the response output to you and have links to the source websites..... and we'd be happy with that.</p><p>Google would be happy with that, as they have charged advertising companies to put ad's in the web-browser or they've charged companies to appear nearer the top of the search results, I mean who nowdays goes to page 2? I'm saying that like I know? <a href="https://duckduckgo.com/&" target="_blank">I've been using DuckDuckGo for YEARS now</a>, so there is no page 2 or ooooooooo to click through, you just keep pressing [show more results] and the list grows longer down the screen</p><p>People now, apparently, are going to start just using xxxGPT tools to ask those questions and they probably won't fact check the answers either. Nope, can't see that this is going to cause any issues at all. nope. all will be fine. I can see the Gen. Z-ers snearing at me from behind their phone screens, whilst I see the reflection in their pupils of the latest TikTok fad wiping away the last elements of their personality or sense of original thought....and I ponder, "what did we create?" (<i>double meaning there, in case you missed it</i>)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjQDAuK1mbd4j1JbEwxKSpSQ9CNiRzuE8LuspxXHWCflb2aeIXpJm9j4vOccFkz7tD51LWYkzxtbVHel74fvkg-g9omguUMLyXFC7cYN-jQ1feORsj4hRkCPZ23DQ0puvGuvTUziRCLj6jrZXA3G3ea4bZaeRUGeuX6F50ZazxwoIm9T_-pfSjHb65lC5xr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="779" data-original-width="847" height="487" src="https://blogger.googleusercontent.com/img/a/AVvXsEjQDAuK1mbd4j1JbEwxKSpSQ9CNiRzuE8LuspxXHWCflb2aeIXpJm9j4vOccFkz7tD51LWYkzxtbVHel74fvkg-g9omguUMLyXFC7cYN-jQ1feORsj4hRkCPZ23DQ0puvGuvTUziRCLj6jrZXA3G3ea4bZaeRUGeuX6F50ZazxwoIm9T_-pfSjHb65lC5xr=w530-h487" width="530" /></a></div><br /><br /><p></p><p><br /></p><p><br /></p><p>Old-man rant time:</p><p>Sigh. okay, well, like all things xxxGPT or LLM focused, these models rely on EXISTING things for them to use as pattern matching starters, ie. they take "previous" things, like images, videos, screenshots, games, etc... and then use those as baselines to then come up with variants based on them... and that's the problem. I know, I know... at some point the mythical AGI will pop into existence (<i>and you think we'll still be alive at that point? lol</i>) and the code / tooling will "create" something fresh & new, however, that is NOT how it works today, you are taking people's previous work / achievements / creativity / art & then just making a newer version of it. </p><p>Okay, I hear the argument that that is pretty much what humans do, we learn by looking at an existing "thing", we then aim to replicate it, we then look to improve it and then we evolve it and then pat ourselves on the back for what we have achieved - "so what is the difference here?". well, there is no "create", there are only a vast amount of parameters being put into the equation, ie. a human can take the experience of 1000 things over a 50year lifespan and can then apply that experience; however a "model" can take 1,000,000 things over a 5month lifespan and come up with options that we would not have reached in a 100 lifetimes (or more), so we "think" that it is smarter than it is - it is not, it just has more variant parameters, once you realise that this is not "intelligence" or "smart", you can start to understand that whilst this is novel & has a level of amusement, it does actually have a darker side for humanity.</p><p>What happens if you continue with something like Genie? You keep it rolling forward another 10years. It will still have a baseline of the 1980s / 90s / 00s (<i>good games stopped there</i>) but it will then stagnate - there is not any more "new" material for it to learn / work from. Yes, it can come up with a few new variant branches, but they will still be similar. You will end up with a very bland and boring outcome.</p><p>"Calm down Tony, it's only a 2D game generator!", well, yes & no. I'm no doom-monger and I like the "idea" of this technology, however, "humans". That is the problem, right there. Humans have become lazy in society. They have. Of sorry, we now have technology to help us with our busy lives (<i>well, there is an argument that the technology has made the lives busy for no value, but that's another rant for another time</i>), however, we are offloading THINKING. We are offloading CREATIVITY. We are offloading HUMAN. As a society, we're sleep-walking into an abyss of darkness where the doors will close behind us, we'll look back and about 1% will then realise, "oh f**k", but by then it'll be too late.</p><p>My take is - this is great and all that, for what it is... but it will never replace that 4-square centimetres of squishy stuff inside your skull - that evolved and grew for a reason, that reason was not for it to be shutdown and run at a minimum zombie state. If you don't use it, you will lose it.</p><p>Enjoy playing your computer generated 2D platform game, mouth open wide, dribbling, eyes scanning the next "gap" to jump over, thumbs pressing the controller every 4secs (<i>muscle stimulation to go with brain stimulation to keep you addicted</i>) OR pick up a pencil (<i>or pen</i>), take a piece of paper and draw a design, draw out a series of screens for your character to navigate their way around, work out some puzzles for the game player to solve, be as nice or as nasty as you like, revel in that for a bit, sketch out some pixel characters, you could even use coloured pencils, eat some food, drink some sugary soda drink, then, well, although I do dislike Python, I'm going to recommend getting your hands on a copy of <a href="https://store.rpipress.cc/collections/books/products/code-the-classics" target="_blank">THIS BOOK</a> - then, code and build your game, yourself. </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjTBwPvHRZms8K4I_2e9-fafNv5F9IF0HxnmCKQQ3uEprrGBMuNga-9bNcrFifEJW3Gj7C0aTky24-q2eRiFVyhQvNKnh2R8azcBtfm8aDkRw36OPU120G9Q0g2U5y4bn843bFugFif2kVWyeP-W9FRZjHRIzKWNjKNDoT1vaL77lwn0TYKlpqjlfIRiRwQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="613" data-original-width="1145" height="341" src="https://blogger.googleusercontent.com/img/a/AVvXsEjTBwPvHRZms8K4I_2e9-fafNv5F9IF0HxnmCKQQ3uEprrGBMuNga-9bNcrFifEJW3Gj7C0aTky24-q2eRiFVyhQvNKnh2R8azcBtfm8aDkRw36OPU120G9Q0g2U5y4bn843bFugFif2kVWyeP-W9FRZjHRIzKWNjKNDoT1vaL77lwn0TYKlpqjlfIRiRwQ=w638-h341" width="638" /></a></div><br /><br /><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="416" src="https://www.youtube.com/embed/9z7j4TZ5xaQ" width="500" youtube-src-id="9z7j4TZ5xaQ"></iframe></div><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgB00jKhSXyJ__djduKW4IfYeh-78nG9YjjIHNlfFUeWDTROUy2y25A20LXvrLUmSvptI9YKW7SUL9egbB5su574pgzgNzGuVESEmIV6ju_42MheMKCKw4BvrxU1ISbi_o43M0SIr20GS4SGQTddrJpoHPOo6Zqcv2O8sAePNGzEgR7hC11uU7iJ32zFW0O" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="686" data-original-width="1157" height="381" src="https://blogger.googleusercontent.com/img/a/AVvXsEgB00jKhSXyJ__djduKW4IfYeh-78nG9YjjIHNlfFUeWDTROUy2y25A20LXvrLUmSvptI9YKW7SUL9egbB5su574pgzgNzGuVESEmIV6ju_42MheMKCKw4BvrxU1ISbi_o43M0SIr20GS4SGQTddrJpoHPOo6Zqcv2O8sAePNGzEgR7hC11uU7iJ32zFW0O=w642-h381" width="642" /></a></div><br />Click <a href="https://store.rpipress.cc/collections/latest-releases/products/retro-gaming-with-raspberry-pi-3rd-edition" target="_blank">HERE</a> to buy your copy.<p></p><p><br /></p><p>OKAY, OKAY, OKAY, so this is actually the step where GENIE can be used, ie. take your sketches / images / photos and then turn those into part of the game level / design, so yes, I can see that it could be a useful way of going from "conceptual artwork" to "something real" without y'know, having to do that "hard bit" in the middle.</p><p><br /></p><p>Regardless of whether you use Genie or code something yourself, it is actually satisfying to do, the sense of achievement, the sense of fulfilment, the sense that YOU did a thing (<i>not a tool</i>). Okay, it might end up being a bit cr@p, but hey, you had a go - you MADE A THING. You didn't just lazily type a few words into a text box and something else spewed out some generic thing that will keep you interested for about 3minutes until you go and scan (un)social media for your next dopamine hit. I'll go get back in my garage and start prepping for when the world turns to cr@p IRL and "no", I won't be sharing any of my stuff to keep you alive, how selfish of me. I'll be playing a RL game, called "how will you all live with no electricity for >90 days".....</p><p><br /></p><p>Right, I guess it's time for me to go waste 10 minutes of my life having a quick game of Manic Miner:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="422" src="https://www.youtube.com/embed/1XXzcPejBsQ" width="509" youtube-src-id="1XXzcPejBsQ"></iframe></div><br /><p>..and yes, I filmed & uploaded that to YouTube in March 2007.... 17years ago..... yep, before some Gen Z-ers were even out of nappies....</p><p>Admittedly, the game itself <a href="https://en.wikipedia.org/wiki/Manic_Miner" target="_blank">came out of the brain of 1 person, way back in 1983</a> and I first played it at xmas 1984 on the Amstrad CPC 464 (as per the video above) and I loved the simple but frustrating challenges that I needed to overcome.... </p><p><br /></p><p>Whether you choose to use Genie or whether you wish to learn to make it yourself - go and CREATE, go and DO, you are living in a fortunate and blessed time, that will probably never exist again, so go and enjoy life for a bit - make something, read something, go do some gardening, help make a pond, help make a waterfall, help grow some plants / herbs / potatoes.... go and exist, with or without technology.</p><p><br /></p><p>UPDATE:</p><p>okay, so after doing something very different & random - basically taking apart a patio door lock mechanism & figuring out how to replace the 20year old central mechanism, I started to think a bit more about the "Death of Google"....or the usage of alternatives.....</p><p>Google has been in place since the mid-1990s, so they've had a good stranglehold on their domain for long enough, however, as they are Billion / Trillion - aires? Big Tech, indeed. They are in a position to continue to dominate, just due to the financial clout they have, so it's unlikely they will be going anywhere or get replaced by an upstart.... "why do I say that, Tony?"</p><p>Well, that's what I was thinking as I was deconstructing the door mechanism....</p><p>Google is built on advertising, the scraping and indexing of websites is a bonus, a draw, a feed to get you, the user to use their services. However, the table is actually the other way around (same model for Meta / facebook / etc..etc...), the business is the business of selling things to people, pushing the adverts under the noses of people who just might click on the links and spend money. That is BIG business. it is not genius. It's actually very simple. However, all the wrappers around that is what makes it complex - just the sheer size of the data centres required would bankrupt most companies attempting to replicate such a service, managing, maintaining, etc...etc.. staying relevant in todays society is a full time job.</p><p>So, advertising. That is the ££££ driver.</p><p>"What has this got to do with Large Language Models?"....well, if you recall my previous rant about society going down the road of becoming reliant upon LLMs for handling Q&A, where does that leave all that potential advertising revenue....well, the same place as it was before. ATM xxxGPT and other open-source models are not engrained with advertising wrappers, you ask a question, you get a response, end of. However, we're still in the honeymoon period. This simplicity will end. Then the revenue generators will want to get in on the act. Big Tech joins the party once more.</p><p>I was also pondering where we might be headed, as Apple have made noises that they'll most likely be bundling "AI" (think offline Siri LLM on the iPhone) onto their next models this year & Dell are looking at forcing you to buy the latest new laptops that will have "AI" chips onboard & Micro$oft will spread "AI" throughout Windows 11/12 like some form of nervous system virus, so everything will have an LLM in it someplace... but they'll all be "generic", ie. capable of answering pub quiz style questions and general knowledge...</p><p>...and that is where I predict the next wave of money makers are going to come surfing over the waves.... "knowledge specific LLMs", KiSS-LLMs, if you will.</p><p>The purpose of these models will be to be very knowledge-able & specific about a focused subject, they will have knowledge of generic grammar, but, they will only be trained on a specific topic. For instance, instead of attempting to be a Doctor, having to know about everything a human Doctor might know, there will be a model specifically for Ears, Eyes, Nose, etc... or an LLM that has indepth specific knowledge about Car Mechanics, but more granular than that, specific knowledge about gearboxes, fuel injection, ECUs, etc...</p><p>You can then have a master-LLM that can offload your question to these specific specialist KiSS-LLMs, yes, a bit like a multi-agent LLM (I've even written a few of these myself, last year), BUT, you're missing the point, I mean SPECIALIST, super-knowledgeable, very narrow focused, doesn't care about anything else, is obsessive just about their specialist subject matter.</p><p>You can still wrap advertising around this - in fact, the algorithm writes itself here, if you are wanting to know specific information about a certain element, then it is implied that associated elements will also be of interest to you, therefore showing adverts or prompts/questions/phrases to ask "other" KiSS-LLMs questions can be proposed to you. kerching £$£$£$£$£$. sigh, it's all sadly about the money, be nice if it wasn't.</p><p>anyway, turns out Screwfix didn't have the part I needed for the door - even though their website said they did have it instore (I guess technology isn't that great!), so I'll have to wait until tomorrow to put the door back together.</p><p>This thinking did remind me of the following though - instead of downloading the knowledge, we'll just have access to a specific KiSS-LLM model that can assist us in a specific task.</p><p>We all know the infamous Matrix quote, "I know Kung Fu". as Neo has the specific knowledge about just Kung Fu downloaded (made accessible) to him:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="457" src="https://www.youtube.com/embed/0YhJxJZOWBw" width="549" youtube-src-id="0YhJxJZOWBw"></iframe></div><p>"I know Kung Fu"</p><p><br /></p><p><br /></p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-68889238292686635312024-02-27T11:06:00.003+00:002024-02-27T14:55:41.499+00:00FlightAware - PiAware - SkyAware<p>I'm about to have (<i>yet another</i>) week off... I'm allowed, I literally was recorded as being utilised 100.1% last year, that's AFTER deductions of holiday days, etc...etc... (<i>most people struggle to get 50-60%</i>) and well, then being treated like sh!t by my employer by not recognising my efforts, but happy to take their rewards (<i>[no surprise] I pi$$ed off a higher up a few years back & they just won't let their d!ck swinging ego, move on... ho! hum!</i>), so, I've now got to take off one week per month, until April otherwise I lose the holiday days. Fine by me. But, oh, what to do?</p><p>Well.....you may recall that a while back, maybe mid-last year, I wrote an <a href="https://tonyisageek.blogspot.com/2023/07/rpi-rtl-sdr-ads-b-ais.html" target="_blank">ARTICLE HERE </a>about using an SDR (Software Defined Radio) USB dongle for listening to the radio waves around us... and then I purchased a Flightaware USB stick and antenna. I had a little play around with it. I proved it could capture commercial flight data in a 100-or so mile radius from the antenna, save that data and replay it back using whatever tool that I wanted, I chose the awesome <a href="https://flows.nodered.org/node/node-red-contrib-web-worldmap" target="_blank">node-red worldmap</a>.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhr2A7hIByU9EaJKpaIe3g0QP4WB-atKU_rpjhShHlZq1e2GKTa5a4jvbbSnrLgt45dOODLDmuQoh6bV6ssfM53KaiYgYRr0NjX8YIXtG_9Z8BJBLAe4mi7WtXFx9Wb65JEUrDpBwedLT_nMX-j-A-T5qm49d9QzdnYKszSv2yzMTrKsN58Y_jEOQ7x0_Z3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="851" data-original-width="1114" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEhr2A7hIByU9EaJKpaIe3g0QP4WB-atKU_rpjhShHlZq1e2GKTa5a4jvbbSnrLgt45dOODLDmuQoh6bV6ssfM53KaiYgYRr0NjX8YIXtG_9Z8BJBLAe4mi7WtXFx9Wb65JEUrDpBwedLT_nMX-j-A-T5qm49d9QzdnYKszSv2yzMTrKsN58Y_jEOQ7x0_Z3=w523-h400" width="523" /></a></div><br />So, it was a session of first deciding what I was going to install the software onto, how I was going to do that and whether I was going to make this a dedicated machine or not. Previously, I had installed the dump1090 software onto a Raspberry Pi and had captured the data either to a file or via telnet to port 30003 for streaming the data live.... Then I had a thought, why don't I actually, for once, do something like "other people do" and do it the "easy way", rather than always having to go through life the "hard way" (<i>funny, in ref. to the comments at the start - I do find it difficult to be a 'sheep', I guess I just never believed enough in Jus Asaf</i>)<p></p><p>Easy way = go to Flightaware website, find PiAware, download it (unzip it first!), then burn it to an SD-Card. I believe I was meant to tweak the piaware-config.txt file at this point, but I forgot and did it after the event.</p><p><a href="https://www.flightaware.com/adsb/piaware/build" target="_blank">Visit HERE</a>:</p><p>watch this video</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="434" src="https://www.youtube.com/embed/A15lyH63cnM" width="522" youtube-src-id="A15lyH63cnM"></iframe></div><br /><p>It's pretty simple, plug the FlightAware USB dongle into the RPi, connect the antenna, just for visibility plug the RPi into a monitor - you'll see the PiAware 8.2 splash screen appear and the very basic text telling you what version it's running, what it has detected hardware wise and whether it has an IP Address or not. The last part is important! On initial start-up you'll also NOT have an associated FlightAware account so that will be missing.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi478PLYy9mNMJIaRa-FNgzM2SzTVTf8g2b9F3hgIgF25agTtaYKOA2BEObeg6fg-96MZqkbXEgZBWqrwv5ggHivrc0IkvZPA3-K0SNp8DoAXXD6YCP8RsLzVPkFxJM9Ipp11cJOrEKHeO85IRje2f6r_Z6fcvqvALRMHMjmur4-s02Ucb0OKA6cOTOP69m" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="742" data-original-width="1030" height="425" src="https://blogger.googleusercontent.com/img/a/AVvXsEi478PLYy9mNMJIaRa-FNgzM2SzTVTf8g2b9F3hgIgF25agTtaYKOA2BEObeg6fg-96MZqkbXEgZBWqrwv5ggHivrc0IkvZPA3-K0SNp8DoAXXD6YCP8RsLzVPkFxJM9Ipp11cJOrEKHeO85IRje2f6r_Z6fcvqvALRMHMjmur4-s02Ucb0OKA6cOTOP69m=w589-h425" width="589" /></a></div><br />As it says in the "advanced" webpage HERE - you can edit the /boot/piaware-config.txt file AFTER the event (<i>like I did</i>), just select to drop out to the CLI, enter the default credentials pi/flightaware and then sudo /boot/piaware-config.txt and make the changes to the wireless details, yes, it's in plain text, but y'know...<p></p><p>Note: do NOT run $ sudo raspi-config and configure for the wifi - whilst it "will work", it won't persist after a restart - you need to use the piaware-config.txt file changes. You can guess how I learnt that ;-)</p><p>If you access the RPi4 IP address directly (after the Claim thing) you get this page appear:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhDtZITe7hmiHVZHZmP3Yqr0-wUjLRN4dtAbQ_PCAVltDPkH77pDwILRzAPVaoVCd6hAPgY0rS3KoTyHedY80cHbKmbb0X1GPrbdTO1aGK4OLriADNtVcCxpH0ZtkmZ2xY0yRzQkpyu8ttuhFvICOylaPpivTeWAwE6Ry5fgkThHoy795JTfR7UDNBzdwPv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="587" data-original-width="1008" height="289" src="https://blogger.googleusercontent.com/img/a/AVvXsEhDtZITe7hmiHVZHZmP3Yqr0-wUjLRN4dtAbQ_PCAVltDPkH77pDwILRzAPVaoVCd6hAPgY0rS3KoTyHedY80cHbKmbb0X1GPrbdTO1aGK4OLriADNtVcCxpH0ZtkmZ2xY0yRzQkpyu8ttuhFvICOylaPpivTeWAwE6Ry5fgkThHoy795JTfR7UDNBzdwPv=w496-h289" width="496" /></a></div><br />The [SkyAware Map] is what you see in images below, it's showing you the flight data you are currently obtaining from the antenna. If you click on the [stats] link that then takes you to the FlightAware website, where you can, well, see stats! The chart on the right, most likely be in a different position for you as I moved it, shows how the extended antenna is helping to pick up aircraft up to 200 miles away - that is awesome. As I say, when I first set this up, leaning the antenna against a double-glazed window I was only getting data in the first column, ie <50miles!<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjXNV-JPA-HP39gQGjpprhkW71hjktB0RA0qYKCoDwXm-s1zA2cOTluoFbDNcuINbfu9OcGjL4uluMeC6RbsGhvYqMWIl6Z3z6Ejq03eraVE824DGdQdnodmVhEI9BjP6W-v3Zn0OiDnsssWlQb1K6vVnvef73-MhUEXD_kIGznJQcxckF-jz4foQnjv6oF" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="709" data-original-width="1477" height="302" src="https://blogger.googleusercontent.com/img/a/AVvXsEjXNV-JPA-HP39gQGjpprhkW71hjktB0RA0qYKCoDwXm-s1zA2cOTluoFbDNcuINbfu9OcGjL4uluMeC6RbsGhvYqMWIl6Z3z6Ejq03eraVE824DGdQdnodmVhEI9BjP6W-v3Zn0OiDnsssWlQb1K6vVnvef73-MhUEXD_kIGznJQcxckF-jz4foQnjv6oF=w629-h302" width="629" /></a></div><br /><br /><p></p><p>I'm actually using an RPi 5 with dual HDMI outputs (<i>bottom device</i>), one mini-HDMI output goes to the KVM that outputs onto a nice big-ish SONY monitor as output and the other mini-HDMI output goes to a VGA converter that outputs to a 15" old monitor just dedicated to show the web-page output</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbYH96ZQOLc7AEnDyQjXuQMMw8_B9bJNwyxuuqMXgmKVKpYFMtwz12V1C57B3pLlKbx-uE8s8NhKRLNSIyMmPZXB_vIf9pXv6y9vns_ROip7G79qXs8eJQHEAU4gx_mqLga-yqZNtMEdTA5h-EUXkpYtFjLf-o6sjsHaihTdZuQy_sErvvlbVdO4cH5p8A" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="851" data-original-width="1114" height="410" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbYH96ZQOLc7AEnDyQjXuQMMw8_B9bJNwyxuuqMXgmKVKpYFMtwz12V1C57B3pLlKbx-uE8s8NhKRLNSIyMmPZXB_vIf9pXv6y9vns_ROip7G79qXs8eJQHEAU4gx_mqLga-yqZNtMEdTA5h-EUXkpYtFjLf-o6sjsHaihTdZuQy_sErvvlbVdO4cH5p8A=w537-h410" width="537" /></a></div><br />I thought I would run a "test" and setup the antenna, in the middle of this image, outside - it makes a HUGE difference just being the otherside of a double-glazed window, it really does! The antenna on the right hand side is for the Meshtastic device that is running outside connected to a Heltec3 device (<a href="https://www.youtube.com/watch?v=_OpC4fH3mEk" target="_blank">offgrid comms for the end of the world</a> - lol )<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgBoB5siNwos-3k1K3vqdHbI07iiQt7vcwbZHj1rLu217_oC7-SnsGNRQwyo5mcehYUuDTvNYTc6rTKYgK_Q9M83WdGJBsrv0xo4foEzkTULNkm_wpCBbgiK9tw6NEAia6vRML19x-10oOZ1AG1MbZjNfH9Nkb1lIL856DkNdAkSuA4TpwFktP3ZDxaqgYG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="851" data-original-width="1114" height="389" src="https://blogger.googleusercontent.com/img/a/AVvXsEgBoB5siNwos-3k1K3vqdHbI07iiQt7vcwbZHj1rLu217_oC7-SnsGNRQwyo5mcehYUuDTvNYTc6rTKYgK_Q9M83WdGJBsrv0xo4foEzkTULNkm_wpCBbgiK9tw6NEAia6vRML19x-10oOZ1AG1MbZjNfH9Nkb1lIL856DkNdAkSuA4TpwFktP3ZDxaqgYG=w509-h389" width="509" /></a></div><br />With this setup - and doing the FlightAware claim ID thing - that did take a few hours and I found that a Chromium web-browser just did not work, but a Firefox one worked fine - interesting. Then the device and FlightAware were now in-sync.<p></p><p>A quick check on the monitor showed, we have data. woo!hoo!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjL6dokVtDBR9b1PHiSeJO0jWE-Px5AGGYgkBTH0N2bPcCZIImj_nljrt_jnrmr7qjeJMRUvV9-hGv_NFW1ol4KJx7sGohWG1rd66VpRhSY50TpP5F_l6eP-WaYVbs47Epxb0Iu1HJoHS1rwQ3uK-ikUQzvZedMyhpvT8Z546bzne4nFtbE44Sj2_yq1dSH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="851" data-original-width="1114" height="431" src="https://blogger.googleusercontent.com/img/a/AVvXsEjL6dokVtDBR9b1PHiSeJO0jWE-Px5AGGYgkBTH0N2bPcCZIImj_nljrt_jnrmr7qjeJMRUvV9-hGv_NFW1ol4KJx7sGohWG1rd66VpRhSY50TpP5F_l6eP-WaYVbs47Epxb0Iu1HJoHS1rwQ3uK-ikUQzvZedMyhpvT8Z546bzne4nFtbE44Sj2_yq1dSH=w563-h431" width="563" /></a></div><br />Albeit it was "good", but I was pretty sure we could get "better"....<p></p><p>So I got the ladder out and some cable-ties......and a broken broom handle, it was only about a 2-foot increase in height, but....did it make any data difference?</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj281iBTiCD2IxP55e9saipH5D59oBc3RpKUonYDaHKYEe2YSiSU3ENZUSbbId2dP_tIYVPdp7Yr1e9sW3IobCnTxcyFXD35LpCKiSW89i9emRpFPInJxZr7wgoxc3skJavYp44zsmAM6UHaGQzgnnqSG3wafpDCrePdtIWB4sYrdJZvVeD1vu8QfJAjY8q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="769" data-original-width="1061" height="387" src="https://blogger.googleusercontent.com/img/a/AVvXsEj281iBTiCD2IxP55e9saipH5D59oBc3RpKUonYDaHKYEe2YSiSU3ENZUSbbId2dP_tIYVPdp7Yr1e9sW3IobCnTxcyFXD35LpCKiSW89i9emRpFPInJxZr7wgoxc3skJavYp44zsmAM6UHaGQzgnnqSG3wafpDCrePdtIWB4sYrdJZvVeD1vu8QfJAjY8q=w535-h387" width="535" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj58jn-KMlrf2XRerdy1JpOM-gGzdUCEG1_G9ZyQMvcVwTfBsw4UC0ElQILZXdAIL--LIk8_4kq-95wApgGCwWgkQT_jhXjpgLBmfKiabUwSkX5fo1R3v0lbVuR-Y9QA1vpfKxxZDKESh1zAUJ0Kjpz_On3FbZkdvmxJmTD3Cgbiam5-QgR597WCRxqQQaD" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="769" data-original-width="1061" height="387" src="https://blogger.googleusercontent.com/img/a/AVvXsEj58jn-KMlrf2XRerdy1JpOM-gGzdUCEG1_G9ZyQMvcVwTfBsw4UC0ElQILZXdAIL--LIk8_4kq-95wApgGCwWgkQT_jhXjpgLBmfKiabUwSkX5fo1R3v0lbVuR-Y9QA1vpfKxxZDKESh1zAUJ0Kjpz_On3FbZkdvmxJmTD3Cgbiam5-QgR597WCRxqQQaD=w535-h387" width="535" /></a></div><br />If you compare the flights shown in the image above with this new image, you can see, I can reach out to Birmingham and out to Essex and if I zoom out, right down into France too... so MUCH better!<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhxBCZ9ACOTgw31lMw978l4W2AD8UKU1U23fYv87GIdFpFJopCHoItJKIdeAetLBvR4Gn8O6LMRQ8ExZfnXVP8AnYiIhS-5fsLa_CUUYA6y7YhumtbW-GU-T4gGscxQg_MqNz3tsLZXwgufFFz8xc2whzHjR6e1VQtf93llLdQ76BQ0Sfk1zhyWDnSTbTUR" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="851" data-original-width="1114" height="455" src="https://blogger.googleusercontent.com/img/a/AVvXsEhxBCZ9ACOTgw31lMw978l4W2AD8UKU1U23fYv87GIdFpFJopCHoItJKIdeAetLBvR4Gn8O6LMRQ8ExZfnXVP8AnYiIhS-5fsLa_CUUYA6y7YhumtbW-GU-T4gGscxQg_MqNz3tsLZXwgufFFz8xc2whzHjR6e1VQtf93llLdQ76BQ0Sfk1zhyWDnSTbTUR=w594-h455" width="594" /></a></div><br /><br /><p></p><p>Of course, I couldn't just "let it lie" with using FlightAware, of course I had to get a node-red flow running that takes the streaming data and outputs it using the worldmap dashboard UI:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjK7QrUBqPbK-oY4xJxILjWaX3OG6Q4j4UTH3uyd1_ZYLxrQlyBmW3ggKX9KT3zl0BTnKPAdQr_J8IX37i-6LIyR1dtLaqNWv4D9yofSMSCUW69cl0VBierdL05WuwFOg7krnAVKJSiaP6n-6AHu6MCHUedMlNv4SsdlKU7DYQfeu7L3TIMVncWgVfdkAtH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="869" data-original-width="1132" height="471" src="https://blogger.googleusercontent.com/img/a/AVvXsEjK7QrUBqPbK-oY4xJxILjWaX3OG6Q4j4UTH3uyd1_ZYLxrQlyBmW3ggKX9KT3zl0BTnKPAdQr_J8IX37i-6LIyR1dtLaqNWv4D9yofSMSCUW69cl0VBierdL05WuwFOg7krnAVKJSiaP6n-6AHu6MCHUedMlNv4SsdlKU7DYQfeu7L3TIMVncWgVfdkAtH=w615-h471" width="615" /></a></div><br />This means that I actually have access to the "same data", but I can modify / change the UI etc.. to match my preferences, I do actually like the ability to colour-code the aircraft based upon the height, that is a really cool indicator, I also have more freedom (thanks Dave!) to have different icons, but also range-rings around aircraft, so I have the potential to have a nice blur of the best of FlightAware and my own concoction.<p></p><p>I actually also like the fact that I am gathering data for FlightAware and adding to the wider audience of users - maybe not quite so keen that FlightAware are actually "selling that data" to other people / businesses - but I suppose they have to make money somehow, they've got servers to keep running, people to system admin everything, storage costs, etc..etc... so it is fair in this case.</p><p>Oh, as the above maps are just internal IP address URLs, of course I can then access them on any other devices too, such as my phone, here's the node-red output rendering pretty well:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbq9t3OO7pX20es92EfwUjUEYrAOoOhmcaqinxQXDgtOwi-02zIaiEz4O0VJmM9XhyjbE07R6F3wRnijdcRsuovvV7gQKcDbD3p_GWU4XG1WlYpjeZ3quRVkV8dy0AoA5CzXthLHs98UCZKp6hq6TQ2iU7j2mEO4-llfSDkMcTSTVmCJRzfWMUk1MRRrwN" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="806" data-original-width="911" height="516" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbq9t3OO7pX20es92EfwUjUEYrAOoOhmcaqinxQXDgtOwi-02zIaiEz4O0VJmM9XhyjbE07R6F3wRnijdcRsuovvV7gQKcDbD3p_GWU4XG1WlYpjeZ3quRVkV8dy0AoA5CzXthLHs98UCZKp6hq6TQ2iU7j2mEO4-llfSDkMcTSTVmCJRzfWMUk1MRRrwN=w583-h516" width="583" /></a></div><br /><br /><p></p><p><br /></p><p>"That's lovely Tony, but where is the AI?"</p><p>hahahhahahaa... y'know, not everything has to have the latest buzzword associated to it. Think more like a Consultant & less like a sales person. The question you should ask is, "Does it NEED AI? and if so, WHERE would it be best put to use?"</p><p>Taking that one step further, FlightAware are receiving all of that time-series flight data, storing it, using a UI to present it and then selling access to that massive data lake of data via APIs. What are people using those APIs for? That is the real question.</p><p>I can actually do the same, as I said in my <a href="https://tonyisageek.blogspot.com/2023/07/rpi-rtl-sdr-ads-b-ais.html" target="_blank">original article in July last year</a>, you don't need to use PiAware, you can just run dump1090 and get the raw data, formatted nicely, from an RPi and store it within an InFlux database (or other of your choice), once it is there, you can perform analysis on that data - or you could look for anomalies, ie. more air traffic or less air traffic in a specific region.</p><p>You could even hook into the <a href="https://www.metoffice.gov.uk/weather/maps-and-charts/rainfall-radar-forecast-map#?map=Rainfall&model=ukmo-ukv&layer=rainfall-rate&bbox=[[40.88029480552824,-45.17578125000001],[64.83025374388303,37.17773437500001]]" target="_blank">Met data website content and look at weather data</a>, see how that impacts flights.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgx838Zx8Y8emwlNqiX4rEDsgPU1dVs0fcr4lK4Zvz7-Tph2xvVEs1oGY7aap-09EizJytxqLks0fnBMHnUxQC_bHKIKdhg-RGynZ3DebfFHFFxcvWKyOYG-GnSO3bsarjBPuUblvgRbxLF0FZKxQzWysUJD6blM_bVMcq_-y7LGHedOEZKTvXxz_lC7oI9" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="787" data-original-width="1339" height="325" src="https://blogger.googleusercontent.com/img/a/AVvXsEgx838Zx8Y8emwlNqiX4rEDsgPU1dVs0fcr4lK4Zvz7-Tph2xvVEs1oGY7aap-09EizJytxqLks0fnBMHnUxQC_bHKIKdhg-RGynZ3DebfFHFFxcvWKyOYG-GnSO3bsarjBPuUblvgRbxLF0FZKxQzWysUJD6blM_bVMcq_-y7LGHedOEZKTvXxz_lC7oI9=w553-h325" width="553" /></a></div><br />You could even look into the <a href="https://www.swpc.noaa.gov/about-space-weather" target="_blank">Solar flare analysis websites</a> and look into the predicted and current solar flares / storms that are erupting and either predict or analyse the impact of communications of aircraft in specific regions, ie.<a href="https://www.theregister.com/2024/02/23/solar_flare_warning/" target="_blank"> if a solar storm hits the Earth in a specific region</a>, you WILL get a comms. black out of aircraft over a certain altitude, from the data you could detect this and also not put in the red flashing panic light bulb because 100 flights just "went dark", lack of GPS, RF etc...<p></p><p><a href="https://www.swpc.noaa.gov/communities/aviation-community-dashboard" target="_blank">https://www.swpc.noaa.gov/communities/aviation-community-dashboard</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgSgHMQETu-rGcr3azug6LzAOfAULhyLUaQ6eh_2gi-RZieyoEUZJVzoGhipyVLim2JiVTCkLNLsotUXEqfQjvrS58bJMLnxYUtm4t6qsNS2CqnlbKRoXq_QRfoQGIUACqCP3SdfE_5CU4-vD2O-JS82KFgIDbwkPu1PsvVhXnZp75zdz-yz5dAWMPldOzr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="843" data-original-width="1177" height="381" src="https://blogger.googleusercontent.com/img/a/AVvXsEgSgHMQETu-rGcr3azug6LzAOfAULhyLUaQ6eh_2gi-RZieyoEUZJVzoGhipyVLim2JiVTCkLNLsotUXEqfQjvrS58bJMLnxYUtm4t6qsNS2CqnlbKRoXq_QRfoQGIUACqCP3SdfE_5CU4-vD2O-JS82KFgIDbwkPu1PsvVhXnZp75zdz-yz5dAWMPldOzr=w532-h381" width="532" /></a><a href="https://blogger.googleusercontent.com/img/a/AVvXsEghFFOugC62_7cotWpqeeEOX2B8F4ixJvJhV_TwqnF07K0K0wz6trfKmrCP5B9T9ugtP49XtUA_iKJnoKc_DXk3PWanJtkP3dDusQFbH4JuJcwq4Mob_8BZtbiccPdybOOtVj3q2ngB5cpO8GMTn-12XXRDcU8N7rBN-6koUXEwVcX-cojRXIPDmI5myEVY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="902" data-original-width="1181" height="406" src="https://blogger.googleusercontent.com/img/a/AVvXsEghFFOugC62_7cotWpqeeEOX2B8F4ixJvJhV_TwqnF07K0K0wz6trfKmrCP5B9T9ugtP49XtUA_iKJnoKc_DXk3PWanJtkP3dDusQFbH4JuJcwq4Mob_8BZtbiccPdybOOtVj3q2ngB5cpO8GMTn-12XXRDcU8N7rBN-6koUXEwVcX-cojRXIPDmI5myEVY=w532-h406" width="532" /></a></div><br /><p><br /></p><p>No AI, but analysis of data in order to relieve cognitive burden or to assist with other tasks, so maybe it is "Assistive Intelligence", certainly not Artificial Intelligence - that does not exist and likely never will in our life time - pull up a chair & let's discuss that statement in more detail..... you can now see how / why I pi$$ off sales people, that's not the snake oil that they are peddling and wanting me to do so too.</p><p><br /></p><p>All that's left to do is to enjoy the moving dots on a screen out the corner of my eye, just for SA, nothing more. For me, it's just "moving art"......</p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-67734388229233761882024-02-27T09:15:00.003+00:002024-02-27T11:33:47.804+00:00(Non) Standard Vanguard<p>I'm not just an IT / Computer / Robot / Electronics geek.... did you also know that I'm also a mechanical engineer too?</p><p>Yeah, that's right. I think. I have a brain. It works, sometimes & when it does.... it does.</p><p><br /></p><p>Yesterday, I just picked up my kustom vanguard car from Valley Gas (yes, I broke it back in November and I needed them to fix it as it was a specialist task).</p><p>I aim to drive this now as my DAILY DRIVER to / from work, cruising along the Wiltshire & Dorset country lanes listening to cool rock music.</p><p>The car, like me, was built to be unique - it literally is one-of-a-kind. enjoy: </p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="500" src="https://www.youtube.com/embed/vTXVnaI3EGw" width="601" youtube-src-id="vTXVnaI3EGw"></iframe></div><br /><p>You can follow the car going to hot-rod, custom & normal car shows at its own instagram page: @kustomvanguard</p><p><br /></p><p><br /></p><p>What can I say? I was / am / are the true Iron man, before the MCU movies appeared :-) </p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-36896361922227576262024-02-20T08:14:00.003+00:002024-02-21T21:08:30.088+00:00Local, offline LLMs on CPU (&GPU if you're rich), laptops, RPis and potentially phones<p>On a <a href="https://tonyisageek.blogspot.com/2024/01/raspberry-pi-5-offline-llm.html" target="_blank">previous post HERE</a> I described my first foray into using ollama as an LLM Engine on a Raspberry Pi 5 device.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgqdX52M4h2ZFVBZv9e_A-ezMRZ_HdXqgwgLJULumKtvGasEJLf4fV2lnO3T8tNEJGo7B-sLV9GiONEagKoI3YzxqUODQKmcCMp0FyqbDecH892PtQMkDU31zubdmUnhvX9FC7p86lCS5CI_CVpOeSG_7v568n4XUFESlQNwpavZsc7VYq_nKYESgsKC8HX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="618" data-original-width="938" height="335" src="https://blogger.googleusercontent.com/img/a/AVvXsEgqdX52M4h2ZFVBZv9e_A-ezMRZ_HdXqgwgLJULumKtvGasEJLf4fV2lnO3T8tNEJGo7B-sLV9GiONEagKoI3YzxqUODQKmcCMp0FyqbDecH892PtQMkDU31zubdmUnhvX9FC7p86lCS5CI_CVpOeSG_7v568n4XUFESlQNwpavZsc7VYq_nKYESgsKC8HX=w508-h335" width="508" /></a></div><br /><p></p><p>This time, I'm going to describe how to install / use that ollama Engine with a front-end UI. </p><p>Show options where you could use docker containers to run the components</p><p>Show how to use native installation onto a laptop (VM Ubuntu) as it's just simpler</p><p>Then, how to modify that UI code, rebuild it & see the changes.</p><p>"Why Tony? Why?"</p><p>Y'know, if you have to ask "Why?" then you don't understand. Well, the reason being, I did some work about 1-year ago in relation to LLMs, very cutting-edge, very new & never done before, pretty ground breaking stuff. However, it was too far advanced that no-one really understood it, quite a lot still don't. Now, 1-year later, people are saying, "wow!amazing" about things that are loosely similar to what I did a year ago... sigh... the burden of being a geek. So, this time, I'm just going to record what I've been doing, yes, this has been done, used, and now collecting dust - however, I have had to set this up a couple of times & my golden rule is, "if you do it more than 3 times, create a function for it" - well, it loosely relates to, "if you have to do this again, write it down so you can come back & follow the instructions".</p><p>"So what is it? and why?"</p><p>It's just a pattern where you can install an LLM Engine (ollama) that is built very much like docker, ie. the code pulls down the LLM models in a similar style to how docker pulls down container images.</p><p>(<i>If that didn't make sense, go away & go figure it out. I'm not teaching you</i>)</p><p>Once you have the many different LLM models downloaded & available, you can then use a different UI to interact with the ollama models. You can actually interact with the ollama Engine via REST API calls - so you could put a node-red API layer in-front of it and drive it "headless" - will come in useful later on.</p><p>For now though, I'll just use ollama-web-ui as the UI interface as it is nicely coded and covers pretty much all you need and as it's open-source can be extended (which we shall do).</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEio_tmIcfmtxQXsG_uq1y8fe3LH3pGdywMSCSUF_MFXKbRNc6x7fFhmECtwiZoHWt68u5ZXM2axC1lMf-vcj3-m5D6jEH_d5aevmWbgiuCJAN3A0i3Ygal6m3TlQkVh4QoFI76heYGTvor5EiPkNZ-s_lImx1V8Odt_WVOozUU-1xMYj2JiVy2ETZdan5sH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="625" data-original-width="1344" height="224" src="https://blogger.googleusercontent.com/img/a/AVvXsEio_tmIcfmtxQXsG_uq1y8fe3LH3pGdywMSCSUF_MFXKbRNc6x7fFhmECtwiZoHWt68u5ZXM2axC1lMf-vcj3-m5D6jEH_d5aevmWbgiuCJAN3A0i3Ygal6m3TlQkVh4QoFI76heYGTvor5EiPkNZ-s_lImx1V8Odt_WVOozUU-1xMYj2JiVy2ETZdan5sH=w481-h224" width="481" /></a></div><br /><br /><p></p><p>I have to address the icon on the corner of my desktop that says, "<a href="https://gpt4all.io/index.html" target="_blank">GPT4All</a>". Yes, I installed that last year at some point during my inverstigations, however it was a bit of a walled-garden approach, it was great - not knocking it, however, I've not returned back to it to see the new benefits, will upgrade in the background now:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEieNKoh68dxUtc_Jfcv9sitUcTdJ_jNtM7TXqlL7xjn_fXyHtvPjYd-CGT664SF0DrbrKuZBN-3apVqNJh-cwGrAEMsMdju7kjTmbAWWTqDfPqbM5OeAlP0NBMAttXpjE7wgMgzfDJFejCd7kZNKuL6zXLBOaLyBedamFBAJeF7W7rP_dW9729oC-ux9E_V" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="260" data-original-width="723" height="174" src="https://blogger.googleusercontent.com/img/a/AVvXsEieNKoh68dxUtc_Jfcv9sitUcTdJ_jNtM7TXqlL7xjn_fXyHtvPjYd-CGT664SF0DrbrKuZBN-3apVqNJh-cwGrAEMsMdju7kjTmbAWWTqDfPqbM5OeAlP0NBMAttXpjE7wgMgzfDJFejCd7kZNKuL6zXLBOaLyBedamFBAJeF7W7rP_dW9729oC-ux9E_V=w485-h174" width="485" /></a></div><br />Okay, back to ollama.<p></p><p>From the ollama website</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhA4qlDE8bC66LjswuE8og-zX-glRuEYMNobP-7Gof9egNCrqSso_vYCgZK_dzaDRSGR9Ju7A0NrVfFApuuKs0chrXLJDMwMPdizw2p6H7OQF2X1gm1SjQrVbwNnllLwhNEfAgi2zawdfdtbWUcuKEiRpl_4ijqIFJSywfQRam_s6SZhZ9b6n-7_adr17bM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="333" data-original-width="509" height="272" src="https://blogger.googleusercontent.com/img/a/AVvXsEhA4qlDE8bC66LjswuE8og-zX-glRuEYMNobP-7Gof9egNCrqSso_vYCgZK_dzaDRSGR9Ju7A0NrVfFApuuKs0chrXLJDMwMPdizw2p6H7OQF2X1gm1SjQrVbwNnllLwhNEfAgi2zawdfdtbWUcuKEiRpl_4ijqIFJSywfQRam_s6SZhZ9b6n-7_adr17bM=w417-h272" width="417" /></a></div>As previously stated, you can go and check that command by clicking [manual installation] and see what it is doing - in fact, you can go check out the <a href="https://github.com/ollama/ollama" target="_blank">github repo </a>and see the actual internal code if you really want to triple-check.<p></p><p>NO AI VENDOR LOCK-IN & MONETISATION GOING ON HERE. I'm looking at you M$oft, AWS, Google and especially the ironically named "openAI" that is so closed it's hilarious. <br /><br /></p><p>Execute that command from the CLI (of course this is UBuntu, why use anything else?)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhZhsThY4cOXpWTT0bQSibG1gBmB0U0w8y-xbgMqbJuvzpMhD7scFeLXXeOeNLfcQioewPRrj0u-Yyity5-PBErbMAqNkCyw7odNfraNR8-28KB-kNevAlM_U6OrNJtgFmrX6DJyF41dEN81CZ8cLnHTt0cR2KorQ_gV8a2K5v9brANNoG6QNqMN4mCv_vN" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="238" data-original-width="902" height="170" src="https://blogger.googleusercontent.com/img/a/AVvXsEhZhsThY4cOXpWTT0bQSibG1gBmB0U0w8y-xbgMqbJuvzpMhD7scFeLXXeOeNLfcQioewPRrj0u-Yyity5-PBErbMAqNkCyw7odNfraNR8-28KB-kNevAlM_U6OrNJtgFmrX6DJyF41dEN81CZ8cLnHTt0cR2KorQ_gV8a2K5v9brANNoG6QNqMN4mCv_vN=w645-h170" width="645" /></a></div><br />That's it. It downloaded the ollama Engine app, put it into the executable folder and made it available for CLI calling as a service. You can now either invoke from the CLI or the REST API.<p></p><p>However, you need some LLM models to be available to use first:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhkfj4Tc9xt-eC0295vtTHQL8Idt_P5lrJYay47WLUVyk1SjRwfQTe4C8E42b7ERj0z67WU4FYzvixBGG8oRE0QyBafwe3a1uFBrbZgO8biwV12ewsMb6SpNJVPEEU69hZB_0-v3y0YFKUwcWAtn0m9qdTY2SXcRfkjpz90fqDaqUhPrj-sXYBG7kfxNuXE" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="838" data-original-width="1408" height="246" src="https://blogger.googleusercontent.com/img/a/AVvXsEhkfj4Tc9xt-eC0295vtTHQL8Idt_P5lrJYay47WLUVyk1SjRwfQTe4C8E42b7ERj0z67WU4FYzvixBGG8oRE0QyBafwe3a1uFBrbZgO8biwV12ewsMb6SpNJVPEEU69hZB_0-v3y0YFKUwcWAtn0m9qdTY2SXcRfkjpz90fqDaqUhPrj-sXYBG7kfxNuXE=w414-h246" width="414" /></a></div><br />It's as simple as running the following command:<p></p><p>$ ollama pull llama2</p><p>Repeat that for however many models you want - you don't need to get all of them, in fact, if you check out the descriptions you should only really download & use the models that look of value to what you are going to want to work with. For instance, no need to download the "code generation" model if you're never going to ask the LLM model to help you write some code. confession time: I've never used one of those, maybe I should? I don't know, maybe it's the GenX-er in me, it feels like cheating in some way. It shouldn't, I mean the LLM model has just been trained on a bunch of reference info off the internet (maybe I don't trust those sources? reddit / stackoverflow / etc...?) rather than a bookshelf of approved & authored books from O'Reilly that I can trust. Maybe that's more of a "me" thing, I don't have clarity, therefore I don't "trust" the output, maybe I'm just being resistant as somehow my brain is thinking that the 25-30years of coding experience and know-how is now worthless, someone with 0 (zero) experience / previous knowledge can now type a sentence and describe what they want the code to do & the code will be written perfect first time & just work and they don't need to know anymore than that. Yes, job done - but that's probably the irksome point - after how many iterations will it take for "people" to lose that traceability of "knowing", yes, they'll get the answers, but they won't know how - and in essence they'll actually get "dumber", not smarter.... that was a nice tangent, but oh look, the download has finished:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh61BxgE_slgnLKAE_M6wHzOou7gil1l0X7sLXUOQMkqwfEPal64c8yV1vP4g7kaTWZa50L9AwC153NgySXU3lJcqf2CO_PywGSDVDLuYS6UokRxhRtpNc3le1iLrQLAHuvTtRfFASbX0He9jFy7DFcl35qNhaNtAVP6hv5GIXTBkZvT02c54WPDntQkw9G" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="200" data-original-width="1173" height="108" src="https://blogger.googleusercontent.com/img/a/AVvXsEh61BxgE_slgnLKAE_M6wHzOou7gil1l0X7sLXUOQMkqwfEPal64c8yV1vP4g7kaTWZa50L9AwC153NgySXU3lJcqf2CO_PywGSDVDLuYS6UokRxhRtpNc3le1iLrQLAHuvTtRfFASbX0He9jFy7DFcl35qNhaNtAVP6hv5GIXTBkZvT02c54WPDntQkw9G=w630-h108" width="630" /></a></div><p><br /></p>Continue for others you wish to download, like so:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg_WuB85sBqSuzRmAXS1rB6czc0CoplPKD9_Sp4ZksQX9WcHkM4PSrGwKP-62U09axmrBbHsAjNi9hIQ3qeb4FRZG60Ii9Nsxjiqhqtm0QuBnfPRPPV5_UDR_4yAgTJm5IXWktua8dhV72ILDPrR56GikxP_iSXavI2PCf0T-HPWPJH9Eg8VDcVt8jlPXvA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="723" data-original-width="1192" height="381" src="https://blogger.googleusercontent.com/img/a/AVvXsEg_WuB85sBqSuzRmAXS1rB6czc0CoplPKD9_Sp4ZksQX9WcHkM4PSrGwKP-62U09axmrBbHsAjNi9hIQ3qeb4FRZG60Ii9Nsxjiqhqtm0QuBnfPRPPV5_UDR_4yAgTJm5IXWktua8dhV72ILDPrR56GikxP_iSXavI2PCf0T-HPWPJH9Eg8VDcVt8jlPXvA=w628-h381" width="628" /></a></div><p>A quick test can be made from the CLI:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBcjNGtPaiyPdpfHs4qUvBGcQtPFZ4jw0z3Vdm4UOD-ZSLhZpkOz-ROOvs4Ym3rLDbTlGUHGjDDYuxlOvNSrCaVdIOl0zwwdYfPNL2zSnI548d8C3OlavtwoXEoQDl-EMbYUpqW4zjgJ6DBdVAg_SQDEktArO-jqFD2kNYntTPEVegtNPR3pIzCY6vsB0s" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="158" data-original-width="1335" height="77" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBcjNGtPaiyPdpfHs4qUvBGcQtPFZ4jw0z3Vdm4UOD-ZSLhZpkOz-ROOvs4Ym3rLDbTlGUHGjDDYuxlOvNSrCaVdIOl0zwwdYfPNL2zSnI548d8C3OlavtwoXEoQDl-EMbYUpqW4zjgJ6DBdVAg_SQDEktArO-jqFD2kNYntTPEVegtNPR3pIzCY6vsB0s=w643-h77" width="643" /></a></div><br />Yep, that works okay.<p></p><p><br /></p><br />Right, now onto the ollama web ui - oh, look at that - told you this was fast moving. That was LAST WEEKs name, this week it has evolved (probably quite rightly) to now be called Open-WebUI.<p></p><p>I can understand the logic - it was tying itself to the ollama Engine a bit in the name & this name change gives the options to switch out the back end Engine to whatever you want. You could see that in the earlier codebase, it was allowing you to call out to OpenAI GPT if you want, also to call out to local LLMs, so the design was already evolving, logical for the name / branding to follow.</p><p>Right, time to take a look <a href="https://github.com/open-webui/open-webui?tab=readme-ov-file#how-to-install-without-docker" target="_blank">HERE</a>.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhXuzhbSd7h2iS1dzzSxQmdFIKBXlgUu95lqGCmL0BI2YA_VLSMNPwYnqC392kq0Iuabe-0r56Zgr3Rc1G0JGeN6QARkPtsef6YNMZwYHYuLdG-qMEJrHaT-kQaooOB4mXJho2ogVLvJrRl-osr3c2q6ds3k3L87BvuWqHfgDHuFtvq_QT7Mm547GznmiSu" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="792" data-original-width="671" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEhXuzhbSd7h2iS1dzzSxQmdFIKBXlgUu95lqGCmL0BI2YA_VLSMNPwYnqC392kq0Iuabe-0r56Zgr3Rc1G0JGeN6QARkPtsef6YNMZwYHYuLdG-qMEJrHaT-kQaooOB4mXJho2ogVLvJrRl-osr3c2q6ds3k3L87BvuWqHfgDHuFtvq_QT7Mm547GznmiSu=w390-h462" width="390" /></a></div><br />Looks simple enough, just follow those instructions. Okay, that was mean of me - don't do that, let me save you a little bit of a headache / time...... you do do "most" of what it says there, but follow these steps:<p></p><p>Firstly, let's check what we currently have installed:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhpHyEQow5PIFqCYG9_7SuivE2Rku5-alDKlYo0uDlM46Hvs8eReqWmmF1IBmWS5KhDLHHxoUyZrYAKGztnztkbiBcHgy18O9y9LMzAr6tzJFQZlv30mt42ITULBa84ecRx4pV0sK8nLHnr0n_tU1AxEX9WStjeStWxrP-68IZBgA_oSIGB7eBfhHPyASXQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="130" data-original-width="323" height="167" src="https://blogger.googleusercontent.com/img/a/AVvXsEhpHyEQow5PIFqCYG9_7SuivE2Rku5-alDKlYo0uDlM46Hvs8eReqWmmF1IBmWS5KhDLHHxoUyZrYAKGztnztkbiBcHgy18O9y9LMzAr6tzJFQZlv30mt42ITULBa84ecRx4pV0sK8nLHnr0n_tU1AxEX9WStjeStWxrP-68IZBgA_oSIGB7eBfhHPyASXQ=w414-h167" width="414" /></a></div><br />Nearly, but not quite.<p></p><p>First, let's upgrade NodeJS. Visit <a href="https://github.com/nodesource/distributions?tab=readme-ov-file#installation-instructions" target="_blank">HERE</a>.</p><pre style="background-color: #161b22; border-radius: 6px; box-sizing: border-box; color: #e6edf3; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 13.6px; line-height: 1.45; margin-bottom: 0px; margin-top: 0px; min-height: 52px; overflow-wrap: normal; overflow: auto; padding: 16px; word-break: normal;">curl -fsSL https://deb.nodesource.com/setup_21.x <span class="pl-k" color="var(--color-prettylights-syntax-keyword)" style="box-sizing: border-box;">|</span> sudo -E bash - <span class="pl-k" color="var(--color-prettylights-syntax-keyword)" style="box-sizing: border-box;">&&</span>\
sudo apt-get install -y nodejs</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgz0MmOLdGOHILiSsPpZhwUWf3razQ6RCVnpe6mEv8fPDJ47RrWUO4NxPuddpUFmTO9ABa5Fi81US7jZwfGvZfwfQqa5hBNsLth4YWx-PKbVSOmNP3S5db-MSlrbFun3f7ilfcaq9y5Ja4XB0Vgr9Cz14G7eabecQOmAUMd0FXZf3NQi6nP-cNAYU6I1rXC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="761" data-original-width="1146" height="212" src="https://blogger.googleusercontent.com/img/a/AVvXsEgz0MmOLdGOHILiSsPpZhwUWf3razQ6RCVnpe6mEv8fPDJ47RrWUO4NxPuddpUFmTO9ABa5Fi81US7jZwfGvZfwfQqa5hBNsLth4YWx-PKbVSOmNP3S5db-MSlrbFun3f7ilfcaq9y5Ja4XB0Vgr9Cz14G7eabecQOmAUMd0FXZf3NQi6nP-cNAYU6I1rXC" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhEPIqAzM8f0ENrXIQqxXAZ73Glus2GC6Ww_EZKtYcGHpINkw4G93clZf65aOh3D_ORBG0eObGFJJSHwmIBmz7sNN9oy8z33jI-759msWOM08P_F82QWvQgQ6kggu1vplbwNwsIhw75568uPNYfK362cmIfCjLWxZvDJ37upd2cVHQcv6ItUE5H79dTEpKJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="544" data-original-width="1147" height="152" src="https://blogger.googleusercontent.com/img/a/AVvXsEhEPIqAzM8f0ENrXIQqxXAZ73Glus2GC6Ww_EZKtYcGHpINkw4G93clZf65aOh3D_ORBG0eObGFJJSHwmIBmz7sNN9oy8z33jI-759msWOM08P_F82QWvQgQ6kggu1vplbwNwsIhw75568uPNYfK362cmIfCjLWxZvDJ37upd2cVHQcv6ItUE5H79dTEpKJ" width="320" /></a></div><br />Now, this is more interesting.....Python is 3.10 and NOT 3.11.<p></p><p>One way to handle this upgrade is to basically upgrade the UBuntu distribution to 23.x. I actually did this on my personal Honor laptop, it was a bit of a faff / hit & miss and a late night to get there, but I managed it and it all works well... however..... pfffhh.....</p><p>This is partly why I don't like Python. It reminds me far too much of the DLL-hell days of the Windows 95/98-era, when loads of people distributed their Visual Basic 6 apps with a bunch of .dll files for their code to work, but that overwrote / conflicted with other apps etc... EXACTLY the same thing with Python libraries & versions. Why is it happening again? well, the people who remember it from the first time - and solved it - are being ignored, "'cos they are old" or they've retired & don't give a sh!t and the, well, the new kids on the block are attempting to re-solve the problem, thinking that they'll do better... but probably weren't even aware that it was solved before. what was that about repeating the same thing and expecting a different output being the first step into madness...</p><p>This is also a good reason for not doing a native installation, but using docker - I hated typing that - but that is the reality, you isolate out the components and dependencies. sigh.... do I need to do a docker install now? I could do a Python Virtual Environment (venv), where I create multiple instances of Python and I could have a Python 3.11 inside one of those... sigh.. it's a workaround, but it'd work and wouldn't have the overhead or dependency of using docker...</p><p>First big question is: do I REALLY need Python 3.11? can I use 3.10 and get away with it? probably not - probably down to the internal dependencies of all of those libraries contained within the requirements.txt file - and there is a LOT.</p><p>bugger - okay, here goes... Python 3.11 in a venv.</p><p>Or, maybe not...... I'm running UBuntu 22.04 in this VM image, so I can potentially follow <a href="https://ubuntuhandbook.org/index.php/2022/10/python-3-11-released-how-install-ubuntu/" target="_blank">THIS</a> set of instructions and have 3.11 in the next 10 mins (we'll see).</p><pre style="background-color: whitesmoke; border-radius: 4px; border: none; color: #1f2328; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 14px; line-height: 20px; margin-bottom: 20px; margin-top: 0px; overflow-wrap: break-word; padding: 9.5px; text-wrap: wrap; word-break: break-all;">sudo add-apt-repository ppa:deadsnakes/ppa</pre><pre style="background-color: whitesmoke; border-radius: 4px; border: none; color: #1f2328; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 14px; line-height: 20px; margin-bottom: 20px; margin-top: 0px; overflow-wrap: break-word; padding: 9.5px; text-wrap: wrap; word-break: break-all;">sudo apt update</pre><pre style="background-color: whitesmoke; border-radius: 4px; border: none; color: #1f2328; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; font-size: 14px; line-height: 20px; margin-bottom: 20px; margin-top: 0px; overflow-wrap: break-word; padding: 9.5px; text-wrap: wrap; word-break: break-all;">sudo apt install python3.11</pre><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj_LIYzW-wf9FZzIJwvHZPxHhJOjdeOYkv8AO3ZBh4soWQPJMJCq36q8gghR1fGRi28fGmLZ_q_rh1fmWrcQAyLZ6tQrgER62qR_YcRjbKxY9phuGYZCkwbZpcvCmASocIcZO7qWN-Ea2WKSJ8Ao5tpuiPpKwgF93IR4xCnBGz-b-6rQ1GQq4Z05HjMTV-U" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="241" data-original-width="623" height="242" src="https://blogger.googleusercontent.com/img/a/AVvXsEj_LIYzW-wf9FZzIJwvHZPxHhJOjdeOYkv8AO3ZBh4soWQPJMJCq36q8gghR1fGRi28fGmLZ_q_rh1fmWrcQAyLZ6tQrgER62qR_YcRjbKxY9phuGYZCkwbZpcvCmASocIcZO7qWN-Ea2WKSJ8Ao5tpuiPpKwgF93IR4xCnBGz-b-6rQ1GQq4Z05HjMTV-U=w625-h242" width="625" /></a></div><br />A quick sanity / verification check:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGXlChk28R6uzVq4F9KpjjdIlTthqD8d1c0onwUZYB7-V53FqVBpz0Lf72E_KFV7W14JGH7tDau5E1EpnIwzLu9Z878Dr6kgSQI8vYaso8t0I98WG-z1qnoByXoXeZBniphXABFWiETGjGy1s_eQy8nYyQ5pYHCeX4NDy5QOqeSCnOBD8AnXAoTnyhDEVm" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="157" data-original-width="1079" height="95" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGXlChk28R6uzVq4F9KpjjdIlTthqD8d1c0onwUZYB7-V53FqVBpz0Lf72E_KFV7W14JGH7tDau5E1EpnIwzLu9Z878Dr6kgSQI8vYaso8t0I98WG-z1qnoByXoXeZBniphXABFWiETGjGy1s_eQy8nYyQ5pYHCeX4NDy5QOqeSCnOBD8AnXAoTnyhDEVm=w640-h95" width="640" /></a></div><br />Okay, but I don't want to type Python 3.11 every time, so how do I tell my machine to use the Python 3.11 as the default, well, as per that website, do the following:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh4dGdni4cQoiACbk_naZG4XhTes0Pn35JqaRk-ehrUpTUuM56tg4X3R1vle9cc3cJb8NbySJqNh5pnjDt1YRbUq4ZpEjmptpV_RSxa-VRYiQGYPlA-_2qiw305DQaFNkxMvoYboJ9E_x5pZnA5VTeyDzPkphO4oD7p4uUSTXxxubiNnweHLaWIrt_cMZDO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="294" data-original-width="875" height="211" src="https://blogger.googleusercontent.com/img/a/AVvXsEh4dGdni4cQoiACbk_naZG4XhTes0Pn35JqaRk-ehrUpTUuM56tg4X3R1vle9cc3cJb8NbySJqNh5pnjDt1YRbUq4ZpEjmptpV_RSxa-VRYiQGYPlA-_2qiw305DQaFNkxMvoYboJ9E_x5pZnA5VTeyDzPkphO4oD7p4uUSTXxxubiNnweHLaWIrt_cMZDO=w624-h211" width="624" /></a></div><br />there we go:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgDWvgLZQ4EOyYtpSJC7zWzgwGUpy3VZknZOH1SmqL-6mmJpzyJdd89ojnm7Rgtdlml6XjC-tNovRJRJovdf219WhakhQ0NanZbMsG01AkpZyqJU9PLK4entplhIhj27hOGl68XiYKezyt8XajXPDzmwhTOWHo2SIL40Icbdb6tw9V0evfnfmt3CHewLLAJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="48" data-original-width="340" height="79" src="https://blogger.googleusercontent.com/img/a/AVvXsEgDWvgLZQ4EOyYtpSJC7zWzgwGUpy3VZknZOH1SmqL-6mmJpzyJdd89ojnm7Rgtdlml6XjC-tNovRJRJovdf219WhakhQ0NanZbMsG01AkpZyqJU9PLK4entplhIhj27hOGl68XiYKezyt8XajXPDzmwhTOWHo2SIL40Icbdb6tw9V0evfnfmt3CHewLLAJ=w563-h79" width="563" /></a></div><br />Thankfully, I have cleaned up this VM Ubuntu image, so it doesn't matter about making this change, but you can image if I had any other apps that were dependent on Python 3.10, they will now be broken. Fortunately, I'm okay with a clean-ish install. Should really have done the UBuntu 23 install and then would have hit the other pip problem (that's for another day!)<p></p><p><br /></p><p>Okay, back to what we're meant to be doing:</p><p>$ mkdir dev</p><p>$ cd dev</p><p>$ git clone https://github.com/open-webui/open-webui.git</p><p>$ cd open-webui/</p><p><br /></p><p># Copying required .env file</p><p>$ cp -RPp example.env .env</p><p><br /></p><p># Building Frontend Using Node</p><p>$ npm i</p><p>$ npm run build</p><p><br /></p><p>The above will generate a build directory where the front-end code will execute from. During the development change cycle, we will delete the build directory (after we've modified the source code) and then re-run the above 2 commands to generate the output.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjg32pBjCJ5ky0gSsKIwP4RlTy1QW3XHnXhBiZp1MLxcJJzYzi5OB8UcmsioSGGkFhbXl6ZFq6jDY8WmmrtDviaUpKBzY5zbcthHGscKmpK5dHALvDUkLGmF75UjGE5URS7RakhKVFfQ4A4WpJPkNC3oEe2IOcXeooe-vXYgq5ED_9VZ-ZTGPO4B-mBOQOj" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="324" data-original-width="826" height="202" src="https://blogger.googleusercontent.com/img/a/AVvXsEjg32pBjCJ5ky0gSsKIwP4RlTy1QW3XHnXhBiZp1MLxcJJzYzi5OB8UcmsioSGGkFhbXl6ZFq6jDY8WmmrtDviaUpKBzY5zbcthHGscKmpK5dHALvDUkLGmF75UjGE5URS7RakhKVFfQ4A4WpJPkNC3oEe2IOcXeooe-vXYgq5ED_9VZ-ZTGPO4B-mBOQOj=w511-h202" width="511" /></a></div><br /><br /><p></p><p>Now onto the backend.</p><p># Serving Frontend with the Backend</p><p>$ cd backend</p><p>$ pip install -r requirements.txt -U</p><p>$ sh start.sh</p><p><br /></p><p>I found that the requirements.txt list of libraries is loooooooooooooooong, so keep an eye out for anything that zooms up the screen in RED - that's a failure.</p><p>Well, there you go, first error:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgL85dIQ40Ym00T31tlbN7TnmhQgZBuA7b61gIx3-q-O-sfSaxyvJPO6Gn9drpigk1w-cQgGrcMOS_xXRxAIySAT0kSmSLo5LLvGLozBlEl14OsfkvT08j9gA2s69CZ7sBTB3Ylwbf2aMxwVA0jpiBQ0movfdBfp9CwiYauUPZnZLZtBQPbdJ07DDmFIgnZ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="302" data-original-width="1147" height="157" src="https://blogger.googleusercontent.com/img/a/AVvXsEgL85dIQ40Ym00T31tlbN7TnmhQgZBuA7b61gIx3-q-O-sfSaxyvJPO6Gn9drpigk1w-cQgGrcMOS_xXRxAIySAT0kSmSLo5LLvGLozBlEl14OsfkvT08j9gA2s69CZ7sBTB3Ylwbf2aMxwVA0jpiBQ0movfdBfp9CwiYauUPZnZLZtBQPbdJ07DDmFIgnZ=w599-h157" width="599" /></a></div><br />Looks like my previous code/libraries may have left some specific DLL HELL versions lying around.<p></p><p>looks like peewee and pypika build wheels failed to execute, so "rain stopped play". investigation time.</p><p>This looks like a Python rabbit-hole of hell. So, I'm going to switch to my Raspberry Pi 5 8Gb device where I have done ALL OF THESE STEPS in a clean / new / fresh UBuntu 23 and it is all working fine - I'm not going to burn hours / days attempting to fix Python crap if I don't need to. But, be warned THIS is exactly why I don't like Python, I needs / wants you to basically burn your existing environment and always install from fresh for anything to work - that sucks & isn't realistic. Also, I don't have the time or patience to dig any further, nor should I have to.</p><p>I also found that due to the usage of vunicorn, I had to perform a machine restart and then I could access the app okay.</p><p>The FIRST registered account is the ADMIN account - remember the credentials that you have used - this is important! If you forget, you will need a complete from the ground-up re-do.</p><p><br /></p><p>The first time you run $sh start.sh required files will also be downloaded as shown here:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiPrrt-X-oaQSjLUy1eEYS76O1FxHW7cd747q6kjVvZMyWS5WDS72R7KXlWad4zXW_KSum2eNSjKkvAcCvgAC1sDNxCS5JOX1BbJSq3HFa4sm8z3bimva7czOPxOr8s7ah5Wk8spWVyX0qTdwc6LJvPYdZpd5y4OwBU_a6gGiiEdiGKv47l8m3o95NeVC5m" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="380" data-original-width="1147" height="209" src="https://blogger.googleusercontent.com/img/a/AVvXsEiPrrt-X-oaQSjLUy1eEYS76O1FxHW7cd747q6kjVvZMyWS5WDS72R7KXlWad4zXW_KSum2eNSjKkvAcCvgAC1sDNxCS5JOX1BbJSq3HFa4sm8z3bimva7czOPxOr8s7ah5Wk8spWVyX0qTdwc6LJvPYdZpd5y4OwBU_a6gGiiEdiGKv47l8m3o95NeVC5m=w630-h209" width="630" /></a></div><br /><br /><p></p><p>Open web-browser to http://localhost:8080 and you will see the login screen. Now you can run in offline mode from this point forward.</p><p><br /></p><p><br /></p><p><br /></p><p>Now...what can you do with this?</p><p><br /></p><p>Well, you now have a FAST offline way to communicate with LLM models using just CPUs (bonus if you do have a GPU on your machine - makes it a LOT faster, like instant response!)</p><p>You can ingest your own documents - RAG style - so you can ask questions about specific documents or collections of documents and get the LLM model to give you responses about questions / summaries etc.. specifically about the chosen document content</p><p>You can build out pre-build PROMPTs that can be used as templates for repeated usage style questioning that you may do, with a dynamic entry</p><p>You can see a history of your chats with the LLM models - you can even export them / save them</p><p>and the one I like the most (although this is best run in a GPU environment) is to load up 3-4 different LLM models and ask a question and see the differences in the responses from each model. This is a really great PoV, as it will start to guide / shape you onto which model is going to be the most useful for you - for your usage or the style output that you are looking for.</p><p><br /></p><p>Right, I now have to take a look at making a fwe code enhancements, sucha s raised by issue 774 and feature request 715. Amusingly, I could just sit back & wait for the code to get changed, probably be available next week - or I could get under the bonnet and have a look at it myself.</p><p>As mentioned previously, I actually did a vast amount of work with Langchain previously, so I need to dig out that code and look at grafting it into this codebase to pump it full of steroids. Why don't I do a PR and make it official. Can't, locked down by my employer, I do stick within certain boundary of rules believe it or not.</p><p>One feature that would be "really good" is to have the ability to ingest 1000s of documents from a directory and sub-directories without having to use the UI - again, cough cough, something I wrote, back in August '23 for something else - just have to graft it onto/into this codebase and it solves a lot of problems.</p><p><br /></p><p>Right, time for a cup of tea and time to get busy.</p><p>UPDATE:</p><p>So...I'm going to focus on the RAG aspects here, for instance, uploading a few documents into different categories / assigning tags to them so I can pick either from [all documents] or from [subsets].</p><p>Now, as I'm a retro-geek, I've uploaded a few PDF documents of old Amstrad CPC 464 books (from the mid-1980s):</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSqLB6t2K_4yN65cYzgoPezaK3sD2E35fZIPQxzMFnepR6SJt030o5w01vhHu7IRob4Xw3UXWbMISrgpCbp2JRUtjNnKLBZSu7lISToqXYa8Cy02DTkQLNxow4tvckJNiWPT001eUkkkN1gqjZ9hoxdexLQSi855B84ybC_iZ_Zy2DQGeJoh2An33cqt3r" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="934" data-original-width="1426" height="384" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSqLB6t2K_4yN65cYzgoPezaK3sD2E35fZIPQxzMFnepR6SJt030o5w01vhHu7IRob4Xw3UXWbMISrgpCbp2JRUtjNnKLBZSu7lISToqXYa8Cy02DTkQLNxow4tvckJNiWPT001eUkkkN1gqjZ9hoxdexLQSi855B84ybC_iZ_Zy2DQGeJoh2An33cqt3r=w585-h384" width="585" /></a></div><br /><br /><p></p><p>I had a look at the backend source code, mainly the main.py file from /backend/apps/rag/main.py</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSibsOm1ibJKPJLYkI5XHw1eiWZxZzBbM5dvfwNMFhgXI2FIDuUeLvnYkCwn86RmKj78AwwONyaMhm6xV4gUBqeVmtUVI3fk3QbBCKp5Hc2Q1ZmfNAOTEJydSDzMtIRI21eQQk4F6E_7gfp1zu4ONJAJIhLLRBTjA8baHAbEl1GmkrHgkFu8Int3HcDQj9" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="747" data-original-width="1524" height="293" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSibsOm1ibJKPJLYkI5XHw1eiWZxZzBbM5dvfwNMFhgXI2FIDuUeLvnYkCwn86RmKj78AwwONyaMhm6xV4gUBqeVmtUVI3fk3QbBCKp5Hc2Q1ZmfNAOTEJydSDzMtIRI21eQQk4F6E_7gfp1zu4ONJAJIhLLRBTjA8baHAbEl1GmkrHgkFu8Int3HcDQj9=w597-h293" width="597" /></a></div><p>As you can see, the /query/collection API code makes a call to langchain to perform a collection.query() and pass the result back as, well the "results" variable - after doing the merge and sort on the data first.</p>Interestingly, this data actually contains ALL of the information about what documents were identified to be relevant, what pages the relevant sections are & what snippet of text makes it relevant, along with the "distances" data (relevancy).<p></p><p>This is shown in the debug on the right-hand side of the following screenshot:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgAEr3SXQNfhKV8c_hZgVwO4zSXEGUZ4vVXyH_p61xJyZ_P33EMIJSgUmgLv-qKCOnIByoABEDPsVYC6ngvdAAr_DFfIf9GnZ3W4fQclnL_RKI2kFUz_i9F57BQtOzsoUtQ6hhhp5J5wU8fAPqkLQCh8E1YPdPj6iOUuoJLFBDCve125XAEND4YyfFXsD38" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="931" data-original-width="1846" height="317" src="https://blogger.googleusercontent.com/img/a/AVvXsEgAEr3SXQNfhKV8c_hZgVwO4zSXEGUZ4vVXyH_p61xJyZ_P33EMIJSgUmgLv-qKCOnIByoABEDPsVYC6ngvdAAr_DFfIf9GnZ3W4fQclnL_RKI2kFUz_i9F57BQtOzsoUtQ6hhhp5J5wU8fAPqkLQCh8E1YPdPj6iOUuoJLFBDCve125XAEND4YyfFXsD38=w630-h317" width="630" /></a></div><br />Now, that was not output normally, I had to find where to do it.<p></p><p>There are actually 2 locations where the [sendPrompt] code is located, the "wrong one" (and I'll dig in later to find out why it's wrong) is located in the sub-folder named "c", "[id]", "+page.svelte".</p><p>The "right one" is the one in the root level as shown.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiMqjHBg9er-leY9Cm2joeugAKtBeW_tUMqg_OVmx-n7H-rNbrguDGvPjPTHZ-njuEeedodKPF5uM6nXy8DjjEirS1pe743zePhPEhShMlRffD_lTk3YDzX_6PLHk9CuzytL4Glkjz1n2zRAhrSTsDk-k-W4YwQUwrwe9L2ZQQ2T25TpzrCrs_5VRLwys_T" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="966" data-original-width="1840" height="336" src="https://blogger.googleusercontent.com/img/a/AVvXsEiMqjHBg9er-leY9Cm2joeugAKtBeW_tUMqg_OVmx-n7H-rNbrguDGvPjPTHZ-njuEeedodKPF5uM6nXy8DjjEirS1pe743zePhPEhShMlRffD_lTk3YDzX_6PLHk9CuzytL4Glkjz1n2zRAhrSTsDk-k-W4YwQUwrwe9L2ZQQ2T25TpzrCrs_5VRLwys_T=w640-h336" width="640" /></a></div><br />As you can see, just dropping a few console.log outputs and changing the call to queryCollection() to return to an object rather than directly return it - this way, we've captured the "results" returned from the backend API call.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgwdbkHeXm4jgFd4y05J2jJdMMi02JChtWDAaMnKNmj2si58zseYLr5xxQeOKDb8zJQDmlJzIkZBpyJjUY6SGbsCMum5Ohi2CBAx4bs9ezAdIMTtzkhLesz3DsfH52tIgliOw1rXWb3L4_XvD4WxRnOvayHYfjC3QGBtLrFBKAPJVDl60Y6PdrDXy_b4Cqe" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="691" data-original-width="550" height="510" src="https://blogger.googleusercontent.com/img/a/AVvXsEgwdbkHeXm4jgFd4y05J2jJdMMi02JChtWDAaMnKNmj2si58zseYLr5xxQeOKDb8zJQDmlJzIkZBpyJjUY6SGbsCMum5Ohi2CBAx4bs9ezAdIMTtzkhLesz3DsfH52tIgliOw1rXWb3L4_XvD4WxRnOvayHYfjC3QGBtLrFBKAPJVDl60Y6PdrDXy_b4Cqe=w406-h510" width="406" /></a></div><br />Now that we have that data in that object, we are in the output page therefore we can now output to the screen before we output the "AI Thought" output.<div><br /></div><div>Just for clarity & completeness, here's the list of documents that were returned - as you can see, that ARE relevant books about "C coding" and are from different pages of the two books available:<div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjoS0Zm7l1PxeEnQ5I7CemsZJ-VYfSYc51Ff74sP5hmf4dNuI5z2RBsqHuS9ML2f5QVtnlt03yi27MFNW0dM3oCmySrRcU208Pt7mLcV9GdXQV2KUfo7cyoq_8gprQWpZec5Yl97KbdGRnx9W590W1d9FPBOUdJaiPYYbLXSL7E_ijFVq4LMA1dKcFIEhFx" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="366" data-original-width="775" height="294" src="https://blogger.googleusercontent.com/img/a/AVvXsEjoS0Zm7l1PxeEnQ5I7CemsZJ-VYfSYc51Ff74sP5hmf4dNuI5z2RBsqHuS9ML2f5QVtnlt03yi27MFNW0dM3oCmySrRcU208Pt7mLcV9GdXQV2KUfo7cyoq_8gprQWpZec5Yl97KbdGRnx9W590W1d9FPBOUdJaiPYYbLXSL7E_ijFVq4LMA1dKcFIEhFx=w623-h294" width="623" /></a></div>Now, that's good news! In the documents[] array the snippets from each document are contained.<br /><br /></div><div><br /><p></p><p>I'll update shortly the code where I put this into the UI - once that is done, it'll be pretty cool & do what I actually want it to do.</p><p><br /></p></div></div></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-50857669857547770262024-02-18T15:41:00.003+00:002024-02-18T16:37:25.296+00:00NVMe 256GB SDD on the RPi5 & ramping up the swapfile size (as you do)<p>I purchased a couple of the <a href="https://shop.pimoroni.com/products/nvme-base?variant=41313839448147" target="_blank">great Pimoroni NVMe Base boards</a>, one I bought with the supplied 256Gb SSD (fitted it to the RPi5 8Gb machine), where I promptly broke the connector on the board for plugging it into the RPi5... so I ordered another base unit without the SSD drive - then purchased a cheap <a href="https://www.amazon.co.uk/dp/B0C48P4RRJ" target="_blank">FikWot FN501 Pro 256Gb from Amazon</a> and took a gamble. I set that board up on the RPi5 4Gb machine. Just to be clear, it was a faff & was a bit hit & miss. why?</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiTKJK3SBS0h_0wDUCqZo4tQGrU5-F8mCQplzKuVIVGeq_lst4F-2GLzg1iNNgLSUL5f5Nh2RroIG44wWvNBPKjclJ6BAWMiOnRYQ4sLgHEmckeekAFpLh9CM-OQfL91khYAU7Nowgth_0xayqdCDN-ywlTBGQPiA_9rvt_98wEtLADcgIeKfwDOeCYhDZJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="566" data-original-width="658" height="380" src="https://blogger.googleusercontent.com/img/a/AVvXsEiTKJK3SBS0h_0wDUCqZo4tQGrU5-F8mCQplzKuVIVGeq_lst4F-2GLzg1iNNgLSUL5f5Nh2RroIG44wWvNBPKjclJ6BAWMiOnRYQ4sLgHEmckeekAFpLh9CM-OQfL91khYAU7Nowgth_0xayqdCDN-ywlTBGQPiA_9rvt_98wEtLADcgIeKfwDOeCYhDZJ=w442-h380" width="442" /></a></div><br />Well, I believe I had to install the Bookworm Raspberry Pi OS onto an SD-Card, go through all of that, then make the tweaks to the /boot/firmware/config.txt file, upgrade the RPi5 eeprom to the latest version, etc.. and then run Raspi Imager to flash the SSD drive once it was detected. This would have been simple had the SDCard I used not been a little "unstable" :-)<p></p><p>It did work for the 8Gb RPi5 and all was good - after completion, the machine boots from the SSD into the latest UBuntu. awesome, exactly what I wanted.</p><p>However, attempting to repeat the exercise on the 4Gb RPi5 was met with "challenges". Now, with hindsight, this may have been due to the FikWot SSD not being formatted? therefore not partitioned, therefore not detected, I don't know. Will have to repeat the exercise again at some point in the future to find out. anyway, the previous SDCard was not playing ball in this RPi5 machine. sigh.</p><p>So, I opted to use the existing UBuntu SDCard that I was booting the machine with - and see if I could use gparted to make partition table, format the drive - make the previous tweaks, set the BOOT_ORDER value, was still not having it. looking at the drive in gparted, it said "lba" but not "boot" as well, so added that flag, restarted, no dice. So I installed rpi-imager into UBuntu and flashed UBuntu to the SSD (yes, it picked it up as storage), waiting for a bit.... then rebooted... took the SDCard out & wouldn't you know, it works fine! It's super fast and "does what it says on the tin" - awesome!</p><p>Right, now it's time to remember why I wanted to use the NVMe SSDs in the first place?!?!!</p><p>Before moving onto that, I stumbled over this great little tool:</p><p><a href="https://github.com/smxi/inxi" target="_blank">https://github.com/smxi/inxi</a></p><p>$ sudo apt install inxi</p><p>So what does it do? well, it outputs lots of lovely information about your linux system all from the CLI.</p><p>Here is the output for my newly rebuilt Raspberry Pi 5 with 4GB RAM and the new 256GB NVMe SSD:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgVNOlCqj_8utrl7uBGBSLngV05ILwkr_ef0ebUHxz6CmmDo12L3ZHrHcFtFLVQOmcxNt2D3WquLyX0UIlJF1pzOK_NCfM8RTSiFUYbtmBmWas66S6YzBERYBMXIUJ56x-zitgMXlVaj27ubK8Tdl9x-nk2mWFPHmwNfSavtG6SDb_9OGTQO86iLE-J20UC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="957" data-original-width="1010" height="576" src="https://blogger.googleusercontent.com/img/a/AVvXsEgVNOlCqj_8utrl7uBGBSLngV05ILwkr_ef0ebUHxz6CmmDo12L3ZHrHcFtFLVQOmcxNt2D3WquLyX0UIlJF1pzOK_NCfM8RTSiFUYbtmBmWas66S6YzBERYBMXIUJ56x-zitgMXlVaj27ubK8Tdl9x-nk2mWFPHmwNfSavtG6SDb_9OGTQO86iLE-J20UC=w607-h576" width="607" /></a></div><br />As you can see, it does output a LOT of interesting (if you're a geek) information.<p></p><p>A key interesting one for me is the [Swap] file size. It is set to 1GB.... hmmmm.... I have 200+GB of super fast SSD (400Mb / Sec READ and 300Mb / Sec WRITE), well those numbers are meant to be higher, but y'know... reality.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjepXZ-v4eFY_3g6hYnxsuN2HRkajGmzgO-Y9mOtjRRZ59M4oYoMRkmmmT9xx0Qo3DfqLOAS23IJupatK4CfD2-nqY7Sp-7wIfYNCkiFMA0YxDQMXAICBoYL5sXSKJgYx6oPzGboTfMkAPR10EHfJAfPJKbQY8M_bJX3ht9tOu55ZLf-iuPVA1KRW4zdBGC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="514" data-original-width="1182" height="257" src="https://blogger.googleusercontent.com/img/a/AVvXsEjepXZ-v4eFY_3g6hYnxsuN2HRkajGmzgO-Y9mOtjRRZ59M4oYoMRkmmmT9xx0Qo3DfqLOAS23IJupatK4CfD2-nqY7Sp-7wIfYNCkiFMA0YxDQMXAICBoYL5sXSKJgYx6oPzGboTfMkAPR10EHfJAfPJKbQY8M_bJX3ht9tOu55ZLf-iuPVA1KRW4zdBGC=w590-h257" width="590" /></a></div><br />The geek in me is thinking.... "can I up that swapfile to be 4Gb"? thereby increasing the RPi5 4Gb to a "fake" 8Gb. I have a true 8Gb RPi5, so I can always set that to have a swapfile of 8Gb - but for now, I can at least performance compare test.<p></p><p>So, what's involved to make this happen?</p><p>There is more info <a href="https://help.ubuntu.com/community/SwapFaq" target="_blank">HERE</a> about setting the swapfile, simple rule is that you can match the "real" RAM with the size of the "swapfile", so for me with the RPi5 4Gb I'll make the swapfile 4Gb and for the 8Gb version I'll change it to 8Gb.</p><pre class="lang-sh s-code-block" style="--_cb-line-numbers-bg: var(--black-150); --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: var(--br-md); border: 0px; box-sizing: inherit; color: #0c0d0e; font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--fs-body1); font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: var(--lh-md); margin-bottom: calc(1.5em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><code class="hljs language-bash" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Turn swap off</span>
<span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># This moves stuff in swap to the main memory and might take several minutes</span>
sudo swapoff -a
<span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Create an empty swapfile</span>
<span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Note that "1024" is basically just the unit and count is an integer.</span>
<span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Together, they define the size. In this case 4GB</span>
sudo <span class="hljs-built_in" color="var(--highlight-literal)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">dd</span> <span class="hljs-keyword" color="var(--highlight-keyword)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">if</span>=/dev/zero of=/swapfile bs=1G count=4
#see below for output</code></pre><pre class="lang-sh s-code-block" style="--_cb-line-numbers-bg: var(--black-150); --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: var(--br-md); border: 0px; box-sizing: inherit; color: #0c0d0e; font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--fs-body1); font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: var(--lh-md); margin-bottom: calc(1.5em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><code class="hljs language-bash" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Set the correct permissions</span>
sudo <span class="hljs-built_in" color="var(--highlight-literal)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">chmod</span> 0600 /swapfile
sudo mkswap /swapfile <span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Set up a Linux swap area</span>
sudo swapon /swapfile <span class="hljs-comment" color="var(--highlight-comment)" style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border: 0px; box-sizing: inherit; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"># Turn the swap on</span></code></pre><p><i>tony@tony-rpi54gb:~$ sudo dd if=/dev/zero of=/swapfile bs=1G count=4</i></p><p><i>4+0 records in</i></p><p><i>4+0 records out</i></p><p><i>4294967296 bytes (4.3 GB, 4.0 GiB) copied, 10.3307 s, 416 MB/s</i></p><p>Check to see if it worked with the following command:</p><pre style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: var(--br-md); border: 0px; box-sizing: inherit; color: #0c0d0e; font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--fs-body1); font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: var(--lh-md); margin-bottom: calc(1.5em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: 0px; border: 0px; box-sizing: inherit; color: var(--black-600); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">grep Swap /proc/meminfo</code></pre><pre style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: var(--br-md); border: 0px; box-sizing: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: var(--lh-md); margin-bottom: calc(1.5em); margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: 0px; border: 0px; box-sizing: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="color: #0c0d0e; font-family: Times New Roman;">tony@tony-rpi54gb:/$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=9ed1bec2-d718-4414-bac3-2b11eec3eef1
tony@tony-rpi54gb:/$ sudo swapon /swapfile
tony@tony-rpi54gb:/$ grep Swap /proc/meminfo
SwapCached: 0 kB
SwapTotal: 4194300 kB
SwapFree: 4194300 kB</span></code><code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: 0px; border: 0px; box-sizing: inherit; color: var(--black-600); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">
</code></pre><div>once happy, make it permanent:</div><p style="--_pr-img-mb: 0; --theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #0c0d0e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI Adjusted", "Segoe UI", "Liberation Sans", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 15px; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px 0px 1.1em; padding: 0px; vertical-align: baseline;">Add this line to the end of your <code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; background-color: var(--black-200); border-radius: var(--br-sm); border: 0px; box-sizing: inherit; color: var(--black-600); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: var(--su2) var(--su4); vertical-align: baseline; white-space-collapse: preserve;">/etc/fstab</code>:</p><pre style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: var(--br-md); border: 0px; box-sizing: inherit; color: #0c0d0e; font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--fs-body1); font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: var(--lh-md); margin-bottom: 0px; margin-top: 0px; max-height: 600px; overflow-wrap: normal; overflow: auto; padding: var(--su12); scrollbar-color: var(--scrollbar) transparent; vertical-align: baseline; width: auto;"><code style="--theme-background-attachment: auto; --theme-background-color: var(--white); --theme-background-position: top left; --theme-background-repeat: repeat; --theme-background-size: auto; --theme-base-primary-color-h: 12.87958115; --theme-base-primary-color-l: 48.82352941%; --theme-base-primary-color-s: 76.70682731%; --theme-body-font-color: var(--black-600); --theme-body-font-family: var(--ff-sans); --theme-button-active-background-color: var(--theme-primary-200); --theme-button-color: var(--theme-primary); --theme-button-hover-background-color: var(--theme-primary-100); --theme-button-hover-color: var(--theme-primary-400); --theme-button-outlined-border-color: var(--theme-primary-400); --theme-button-outlined-selected-border-color: var(--theme-primary-500); --theme-button-primary-active-background-color: var(--theme-primary-600); --theme-button-primary-active-color: var(--white); --theme-button-primary-background-color: var(--theme-primary-400); --theme-button-primary-color: var(--white); --theme-button-primary-hover-background-color: var(--theme-primary-500); --theme-button-primary-hover-color: var(--white); --theme-button-primary-selected-background-color: var(--theme-primary-600); --theme-button-primary-selected-color: var(--white); --theme-button-selected-background-color: var(--theme-primary-300); --theme-button-selected-color: var(--theme-primary-600); --theme-content-background-color: var(--white); --theme-content-border-color: var(--black-225); --theme-footer-background-border-top: 0; --theme-footer-background-color: #393939; --theme-footer-background-position: top left; --theme-footer-background-repeat: no-repeat; --theme-footer-background-size: auto; --theme-footer-divider-color: hsl(210,8%,25%); --theme-footer-link-color-hover: hsl(0,0%,100%); --theme-footer-link-color: hsl(0,0%,100%); --theme-footer-padding-bottom: 0; --theme-footer-padding-top: 0; --theme-footer-text-color: hsl(0,0%,100%); --theme-footer-title-color: hsl(0,0%,100%); --theme-header-background-border-bottom: 0; --theme-header-background-color: #DC461D; --theme-header-background-position: center left; --theme-header-background-repeat: repeat; --theme-header-background-size: auto; --theme-header-foreground-color: transparent; --theme-header-foreground-position: bottom right; --theme-header-foreground-repeat: no-repeat; --theme-header-foreground-size: auto; --theme-header-link-color: var(--theme-primary); --theme-header-sponsored-color: hsla(0,0%,100%,0.6); --theme-link-color-hover: #ec8d73; --theme-link-color-visited: rgba(220,70,29,0.7); --theme-link-color: #DC461D; --theme-post-body-font-family: var(--ff-sans); --theme-post-owner-background-color: var(--theme-primary-100); --theme-post-owner-new-background-color: var(--theme-primary-200); --theme-post-title-color-hover: hsla(210,8%,5%,0.8); --theme-post-title-color-visited: hsl(210,8%,35%); --theme-post-title-color: hsl(210,8%,5%); --theme-post-title-font-family: var(--ff-sans); --theme-primary-custom-100: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .9))); --theme-primary-custom-200: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .75))); --theme-primary-custom-300: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + ((100% - var(--theme-base-primary-color-l)) * .5))); --theme-primary-custom-400: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), var(--theme-base-primary-color-l)); --theme-primary-custom-500: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.3))); --theme-primary-custom-600: hsl(var(--theme-base-primary-color-h), var(--theme-base-primary-color-s), calc(var(--theme-base-primary-color-l) + (var(--theme-base-primary-color-l) * -.6))); --theme-primary-custom: var(--theme-primary-custom-400); --theme-tag-background-color: var(--theme-secondary-100); --theme-tag-border-color: transparent; --theme-tag-color: var(--theme-secondary-500); --theme-tag-hover-background-color: var(--theme-secondary-200); --theme-tag-hover-border-color: transparent; --theme-tag-hover-color: var(--theme-secondary-600); --theme-tag-required-background-color: var(--theme-secondary-500); --theme-tag-required-border-color: transparent; --theme-tag-required-color: var(--white); --theme-tag-required-hover-background-color: var(--theme-secondary-400); --theme-tag-required-hover-border-color: transparent; --theme-tag-required-hover-color: var(--white); --theme-topbar-bottom-border: none; border-radius: 0px; border: 0px; box-sizing: inherit; color: var(--black-600); font-family: var(--ff-mono); font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: var(--_pr-code-fs); font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">/swapfile none swap sw 0 0</code></pre><p><br /></p><p>and here's proof of that showing up with the inxi tool showing the updated info:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgoZegqCeTxP8ihOJIzWl4PTqrd2li8-3OgTD1OSqx7js3fBbvw0fowialUEQTmFOXBRVLzz5M8mY81nyoBqSW4Q7towY7dwX4N8WbsZ7nITxpeZvv4vk1gU1gtuvE67L7bU6bo-EW02dtgOA93xW0og0Xl07Ao6ULBrmrG7rIkz3RuFxStZKAkACR7KkjW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="596" data-original-width="950" height="393" src="https://blogger.googleusercontent.com/img/a/AVvXsEgoZegqCeTxP8ihOJIzWl4PTqrd2li8-3OgTD1OSqx7js3fBbvw0fowialUEQTmFOXBRVLzz5M8mY81nyoBqSW4Q7towY7dwX4N8WbsZ7nITxpeZvv4vk1gU1gtuvE67L7bU6bo-EW02dtgOA93xW0og0Xl07Ao6ULBrmrG7rIkz3RuFxStZKAkACR7KkjW=w626-h393" width="626" /></a></div><br />There we have it - increased swapfile to 4Gb RAM (running from very fast SSD) so the RPi5 4Gb shouldn't now hit any real issues if I run, oh, I don't know, something like <a href="https://ollama.com/" target="_blank">ollama</a> with a larger model...<p></p><p>UPDATE: Will just do a reboot, then check the Ubuntu Desktop GUI to make sure the swapfile changes are shown there via [System Monitor] and [bpytop].....</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi01rLqNr_zNcllNgxk1AtZL_Jh6q98fl7B1XeQih3O-EKG_0NtYZ4KIqvNNil8BFI78hrUrGxywOjywsb_FpUcBm0XdkoBpnFB4rtMSa3TLa8D5Mb4SaM2LLpeQhlPViStXn0caqrgYHV6T_FDDH3tYyrsFU7ZZcHXbj6pSEKAA7WB6GvTJu7C4j5VtV-4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="495" data-original-width="690" height="395" src="https://blogger.googleusercontent.com/img/a/AVvXsEi01rLqNr_zNcllNgxk1AtZL_Jh6q98fl7B1XeQih3O-EKG_0NtYZ4KIqvNNil8BFI78hrUrGxywOjywsb_FpUcBm0XdkoBpnFB4rtMSa3TLa8D5Mb4SaM2LLpeQhlPViStXn0caqrgYHV6T_FDDH3tYyrsFU7ZZcHXbj6pSEKAA7WB6GvTJu7C4j5VtV-4=w549-h395" width="549" /></a></div><br /> There we go! Proof in the pudding.<p></p><p>Now, one lesson learnt, in the fstab file DO NOT put a LABEL=swapfile at the start of the new line, as this will cause a start up error, put it in like it is shown above.</p><p>UPDATE UPDATE: I repeated the above on the RPi5 8Gb machine and was complete with that in minutes. sweet.</p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-48705837179643836462024-02-17T12:15:00.003+00:002024-02-17T12:15:48.062+00:00CD-ROM Archive is back online<p>Huge CD-Rom archive now back online:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgRS37MXVl-22rHRKD78OD7MOeURFWvdGCRtCtCNOM5LxndtOilRGQUisaiciOqn58kBfi735T0Au8fji_JOEQfKk-4i7nZEPviU9XRHLJ1TSRD4u6CAICNh0dfiBlWdIsX2ToAQCN7NuGRbQbu8rKgeDOXL-t_hwGVLfBMwefui9mRUEk8F216TzRnXfTH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1013" data-original-width="735" height="631" src="https://blogger.googleusercontent.com/img/a/AVvXsEgRS37MXVl-22rHRKD78OD7MOeURFWvdGCRtCtCNOM5LxndtOilRGQUisaiciOqn58kBfi735T0Au8fji_JOEQfKk-4i7nZEPviU9XRHLJ1TSRD4u6CAICNh0dfiBlWdIsX2ToAQCN7NuGRbQbu8rKgeDOXL-t_hwGVLfBMwefui9mRUEk8F216TzRnXfTH=w458-h631" width="458" /></a></div><p><br /></p>Discmaster, provides old CD-ROMs and floppy discs to download. The site contains nearly 600 million downloads from the 1980s, 1990s and 2000s, comprising images, documents, music, games, software, animations and videos.<p></p><p><a href="https://discmaster.textfiles.com/" target="_blank">CHECK IT OUT</a> for a retro experience : <a href="https://discmaster.textfiles.com/" target="_blank">https://discmaster.textfiles.com/</a></p><p>also, I :love: the old retro-1995 website format, we should return to a world like that :-)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgF2raJM-kWJsZ1LgW-zKvB-Yn9WcDkZDXPMePFft6DHUt4LudwuLHQ2RYCg4Se4qsfCciFLgp498MIob3MtchXU539e-8hia7dxeSqDbMsEnvtEp4WFvbrY9J4AONIBGqMD04AxdIAG2VnbYmvtwUHdxMqO70f6-tobhuWJofjmewBxQAFJOatf1ZLgXq3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="483" data-original-width="1125" height="137" src="https://blogger.googleusercontent.com/img/a/AVvXsEgF2raJM-kWJsZ1LgW-zKvB-Yn9WcDkZDXPMePFft6DHUt4LudwuLHQ2RYCg4Se4qsfCciFLgp498MIob3MtchXU539e-8hia7dxeSqDbMsEnvtEp4WFvbrY9J4AONIBGqMD04AxdIAG2VnbYmvtwUHdxMqO70f6-tobhuWJofjmewBxQAFJOatf1ZLgXq3" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8ygh3OdnwIyyR6h42RtGl5qrRm_AZd3CgWVa6huaziOqn8i-BchqUuLlMTXJLSua6v-e4MnycsSVr6c-fwl_XRO6ewX75UVKkvTlnin0NLmIRwYA2tt5WN_jOdLl_ozrWIKeFb1FFMMKHPaAYLD0eMakiNFA3AzgTmaj_bpVmVX1J2yH6lZlCsHzBxznQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="377" data-original-width="1125" height="107" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8ygh3OdnwIyyR6h42RtGl5qrRm_AZd3CgWVa6huaziOqn8i-BchqUuLlMTXJLSua6v-e4MnycsSVr6c-fwl_XRO6ewX75UVKkvTlnin0NLmIRwYA2tt5WN_jOdLl_ozrWIKeFb1FFMMKHPaAYLD0eMakiNFA3AzgTmaj_bpVmVX1J2yH6lZlCsHzBxznQ" width="320" /></a></div><br /><br /> <p></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-78951284122629373272024-02-05T23:04:00.005+00:002024-02-05T23:04:51.880+00:00Meshtastic shenanigans<p>"<a href="https://www.youtube.com/watch?v=0vECGh9hY68" target="_blank">You wouldn't let it lie</a>" and I don't mean a Vic & Bob Friday night quote, you have to be a certain age to remember that reference & have a certain sense of humour.</p><p>I now have many / multiple Heltec LoRa devices, okay, about 6-ish, along with a couple of T-Decks and I've been trying to figure out what to do with them, well, it's obvious for the T-Deck as they have keyboards attached, but the Heltec devices.... that's a different thing all together.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjp_SUHqPLzrc-ysyiqKDh49D9fGdYYxABsHbAVvvjUI9ldym1oAkJRm8_EbP7mWdL2mFTaSARxaZNDGD7-uNtlZlAm1v3i9rbSZfqNIBWaZF0ma1vaJ5NGLhsZJ11kOepR2G3sxFovbEXjlrVlky-Rmz52r_MsIAU-FtxqeZCVa211Wd3A6JjwcbW8xExv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="248" data-original-width="573" height="251" src="https://blogger.googleusercontent.com/img/a/AVvXsEjp_SUHqPLzrc-ysyiqKDh49D9fGdYYxABsHbAVvvjUI9ldym1oAkJRm8_EbP7mWdL2mFTaSARxaZNDGD7-uNtlZlAm1v3i9rbSZfqNIBWaZF0ma1vaJ5NGLhsZJ11kOepR2G3sxFovbEXjlrVlky-Rmz52r_MsIAU-FtxqeZCVa211Wd3A6JjwcbW8xExv=w583-h251" width="583" /></a></div><p></p><p>I've bought a few new antenna's for usage outside so I can have a permanent outside repeater node, I rigged it up earlier and then I noticed I'd picked up another node 26km away! OMG! That is awesome, right up over by the white horse by Tan Hill, the other side of Devices on the way to Avebury. anyway, this got me thinking a bit more.</p><p>I do dislike having to use the Bluetooth connectivity from my phone to be able to interface with the Heltec devices. The BLE antenna's are crap, you have to be about 6ft from them to get a signal, which means for the one outside I basically have to stand underneath it. Not ideal.</p><p>I thought, there must be a better way. Of course there is, there always is, it's just software.</p><p>I had a little look online and examples / tutorials for this is very scarce, or my DuckDuckGo foo is not so good with this type of searching? probably the latter.</p><p>My goal was to find a way to write NodeJS JavaScript to interface with the Heltec device, whilst plugged in as a serial device. Access the device, get the info from it and then send / receive text messages via the device, all from my laptop.</p><p>As I'd already installed $ meshtastic previously (<i>it's a Python3 library in case you were wondering</i>), that got me thinking... I wonder if it has an API or whether I could just use the meshtastic library myself and call the functions that are exposed.</p><p>After a little bit of jiggery-pokery, this was an example of what I could access and do:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgM_w2cUZEvGucLrv-V1IVINmG7pqBN07MT-P8bWXw_LXP7jsiKRM4LAb_tYGUt4Qw4Q4oOJ08mmyHnH4AiGze1gEABTJKU-F8CmBz-xPKlh9comEHmanKUKulq1_wbOHMFbzqeLwRkjWaRlos6vy8Fi54yxHKKMrj4bM9eUKvrgKHXn6jsaiOJG2AkTPUg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="699" data-original-width="1759" height="252" src="https://blogger.googleusercontent.com/img/a/AVvXsEgM_w2cUZEvGucLrv-V1IVINmG7pqBN07MT-P8bWXw_LXP7jsiKRM4LAb_tYGUt4Qw4Q4oOJ08mmyHnH4AiGze1gEABTJKU-F8CmBz-xPKlh9comEHmanKUKulq1_wbOHMFbzqeLwRkjWaRlos6vy8Fi54yxHKKMrj4bM9eUKvrgKHXn6jsaiOJG2AkTPUg=w636-h252" width="636" /></a></div><br />basically, I have 2 x Heltec devices plugged into my laptop, 1 is using a usb-c cable for serial comms. the other is just using it for power, the other device is outside in the garden.<p></p><p>The python code (<i>yes, I know... it IS cardboard code, after all</i>) makes a serial connection and then calls a few functions to get info about the device itself, as shown above, then it calls the nice function that prints out a nice table for the nodes in the current mesh, then it does it as an object and then I send a text message to a specific device - all very simple, but powerful stuff. Did I say it was SIMPLE, like really simple... a 4 year old could write this code:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhtAs4RniU80ckgfZhw0LpMlPa_Bw-iFEU6Zv0o4Tp1zStXkfVodgfa34jry3__hK8YeW3-LB-rzMsum53jh1-brRG3T3LNYQdfttzfpl5OxFdEow8W9mqGAeCKr0D8Gf8dKahfXO8ZEpYIfw8NwXRh6t2Rk-0Hg1PhNueJFs0v2gAmtLLelXhNwKWz-D2M" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="488" data-original-width="954" height="323" src="https://blogger.googleusercontent.com/img/a/AVvXsEhtAs4RniU80ckgfZhw0LpMlPa_Bw-iFEU6Zv0o4Tp1zStXkfVodgfa34jry3__hK8YeW3-LB-rzMsum53jh1-brRG3T3LNYQdfttzfpl5OxFdEow8W9mqGAeCKr0D8Gf8dKahfXO8ZEpYIfw8NwXRh6t2Rk-0Hg1PhNueJFs0v2gAmtLLelXhNwKWz-D2M=w630-h323" width="630" /></a></div><br />I found this <a href="https://python.meshtastic.org/mesh_interface.html#meshtastic.mesh_interface.MeshInterface.getMyNodeInfo" target="_blank">website that details the python code</a>, it is written as a reference set of documentation and not a tutorial / example set of pages, so don't expect an easy life.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEit7neXX9gTUGsp-m2aij9damOVs_PKOFomlo8mw-Zd3nbfeKZeznbvsY9wcKAasRrMowrYyuk0mvlvEuLAbsFINWjuh8mRaoTnMCPiPcxbpLxyL7EFUDt-8EF9kx6M355reOC0CLwQ8ggtt10yVVr1imhsTE_9nLk3t0X5gzzz9XndWxrmFqWbgVGQnRkK" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="862" data-original-width="1393" height="351" src="https://blogger.googleusercontent.com/img/a/AVvXsEit7neXX9gTUGsp-m2aij9damOVs_PKOFomlo8mw-Zd3nbfeKZeznbvsY9wcKAasRrMowrYyuk0mvlvEuLAbsFINWjuh8mRaoTnMCPiPcxbpLxyL7EFUDt-8EF9kx6M355reOC0CLwQ8ggtt10yVVr1imhsTE_9nLk3t0X5gzzz9XndWxrmFqWbgVGQnRkK=w568-h351" width="568" /></a></div><br />But, with a logical approach, it is pretty easy to work out what is needed to be done.<p></p><p>The last command I do is to send a text message from the serial connected device to the other device - I can confirm that it did this perfectly! I would show a photo of the tiny little screen, but my phone camera is crap & cannot focus that close / small, so you'll have to trust me....or I could video it, but, pffhhhh, that's way too much effort.</p><p>Now the easy PoC has been done, it's now time to see if I can do the same from JavaScript, if not, then double-pffhhhh, I'll stick with Python and look at making a proper application that saves messages etc...</p><p><br /></p><p>Right, well, that's all nice & lovely, but what can you do with this?</p><p>Oh, I don't know...maybe lots of things!</p><p>The Heltec devices devices themselves can have pins soldered to them and I can extend the devices to make usage of the GPIO pins on them, so they can be used to monitor sensors OR to activate sensors or actuators or anything else.</p><p>I can send a message and trigger a request for reading of some information and have that sent back to this device or onto another specific one, or, I could detect my car is approaching the end of my road and it is past 6pm, therefore trigger the garage door to open, bat-cave style. Lots of possibilities.</p><p>Now that I can write a centralised piece of code that can, potentially be run as a web-server, I can then manage comms. from the "fixed node" to all of the others, transmitting messages and data to / from them. There's nothing to stop me having a client app connected to the Heltec device that is not connected to my laptop, so someone else can respond / react to a message sent. Lots of ideas.</p><p><br /></p><p>Again, I'm just currently looking at the art-of-the-possible, a technology looking for a purpose, no real user requirements, proper R&D innovative thinking (<i>very anti-work/work attitude, but meh!</i>), I have LOTS of ideas how I could use this technology along with some smart LLM / ML code & I'm sure over the coming months I'll try out a few of them.... could even integrate it somehow with <a href="http://ollama.ai">ollama.ai</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbCoHbwyngSedpctDGq4xDtmUuWEYNMP_kt8_q5xWt49iIWnY6JTidW7DBaAGXkanTlwlbDyWIx6hoPr3R1dZu6clgVoJkKKmPNxk3fEx3DdvTJNZulECReYyCvAHvt6grmo1Kqa_nBCkauXJXe0MfItJpAHMbTNQC1yixDSJRoSVz15eozhUlqDwkVUFX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="307" data-original-width="453" height="271" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbCoHbwyngSedpctDGq4xDtmUuWEYNMP_kt8_q5xWt49iIWnY6JTidW7DBaAGXkanTlwlbDyWIx6hoPr3R1dZu6clgVoJkKKmPNxk3fEx3DdvTJNZulECReYyCvAHvt6grmo1Kqa_nBCkauXJXe0MfItJpAHMbTNQC1yixDSJRoSVz15eozhUlqDwkVUFX=w400-h271" width="400" /></a></div><br /><br /><p></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-87054125570623839432024-01-28T11:11:00.001+00:002024-01-28T11:46:47.431+00:00meConsole? weConsole? uConsole!<p>Okay, so I wasn't going to do this, but y'know...I had the purchase of 2 x T-Echo devices "cancelled", so I some "spare" cash available that was close to the price of this device.....I watched a few YTube videos, scanned a few online reviews & then did some research on the CM4 Pi modules, it looks like it should upgrade to handle the CM5 Pi module, so it "should" have a longer usage life.</p><p>So what is it? a <a href="https://www.clockworkpi.com/uconsole" target="_blank">uConsole</a>.</p><p>It's a tablet, no, it's a mini-laptop, no, it's a ..... well, it's a thingy. It's an inbetween & I like it.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgPgkrROiDpoLJzdDY_l6lzqd0BG0Hjqtia8Z6c6t1vvaQIYSpoYIGcFsPM0_3Y06iZlEcnMtndx0ePOLJFjbuuKTRKwTbAk1KSGPwqZiGdfIE3HeR_vcskdRWQ8WV9BpjUe217EvOuRCTSPydB8NKyr3GYf0atRrdsbp9CFh7Ar3E0PniOtAini7p68HEH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="645" data-original-width="980" height="416" src="https://blogger.googleusercontent.com/img/a/AVvXsEgPgkrROiDpoLJzdDY_l6lzqd0BG0Hjqtia8Z6c6t1vvaQIYSpoYIGcFsPM0_3Y06iZlEcnMtndx0ePOLJFjbuuKTRKwTbAk1KSGPwqZiGdfIE3HeR_vcskdRWQ8WV9BpjUe217EvOuRCTSPydB8NKyr3GYf0atRrdsbp9CFh7Ar3E0PniOtAini7p68HEH=w631-h416" width="631" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjxzU7S1-Ln7Cs13qNEXR9b07a2cEw9QXm2dHlTRNxmuHSfjZSv77eJi6noN569rgORvxtYJpSVfnHHBqIDrUuGVdIendhsALOYxtShqqZzwJU_M3gMAQfZu_Q3x0Gbbk4g2Etd-cuyrCsF-2sEpMUcO3beNHXmdWMa9Z4x4sKN1cqfGHH7lCktjDkH38dr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="387" data-original-width="743" height="265" src="https://blogger.googleusercontent.com/img/a/AVvXsEjxzU7S1-Ln7Cs13qNEXR9b07a2cEw9QXm2dHlTRNxmuHSfjZSv77eJi6noN569rgORvxtYJpSVfnHHBqIDrUuGVdIendhsALOYxtShqqZzwJU_M3gMAQfZu_Q3x0Gbbk4g2Etd-cuyrCsF-2sEpMUcO3beNHXmdWMa9Z4x4sKN1cqfGHH7lCktjDkH38dr=w508-h265" width="508" /></a></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEil8QlDbPl8NhytKgIDmEhuWUX9beFG6xmPRZPJitAY2Teh1L5QnyUIdu-uwd3AdUn1VE6MyMiyfXq7abmr9ntemg0a96NlmNoOpL15TKHQjf78SXx8zS9qoz4XuAMrDmd52TkwL2s67asvsg8F-33AMVkWbUd9oLPsOuMsy7sUd8wc5E7I2WuDu-gKWPXL" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="342" data-original-width="666" height="258" src="https://blogger.googleusercontent.com/img/a/AVvXsEil8QlDbPl8NhytKgIDmEhuWUX9beFG6xmPRZPJitAY2Teh1L5QnyUIdu-uwd3AdUn1VE6MyMiyfXq7abmr9ntemg0a96NlmNoOpL15TKHQjf78SXx8zS9qoz4XuAMrDmd52TkwL2s67asvsg8F-33AMVkWbUd9oLPsOuMsy7sUd8wc5E7I2WuDu-gKWPXL=w503-h258" width="503" /></a></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEihAtgCmU1LdZ6OkYTlx05wHGjIveWg55UJ2sSnjR8eFv5zfbcQNnqPGj8-LriDN47dJqTOTSHH1ZjzajCy4k_FwJBSD7Chl9CIJfMxbl32wvMHkDcz7dl3tTFTkHdMtA3IZU8plpKacVCgqWDNNOOAKzNHBK9n7AgljjTWPgtSOmydtlT6kGOvKFSfek1L" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="342" data-original-width="691" height="213" src="https://blogger.googleusercontent.com/img/a/AVvXsEihAtgCmU1LdZ6OkYTlx05wHGjIveWg55UJ2sSnjR8eFv5zfbcQNnqPGj8-LriDN47dJqTOTSHH1ZjzajCy4k_FwJBSD7Chl9CIJfMxbl32wvMHkDcz7dl3tTFTkHdMtA3IZU8plpKacVCgqWDNNOOAKzNHBK9n7AgljjTWPgtSOmydtlT6kGOvKFSfek1L=w431-h213" width="431" /></a></div><br />Back in 2007/8-ish I purchased an <a href="https://openpandora.org/" target="_blank">openpandora.org</a> device, it was way ahead of its time. It is a single board computer, no moving parts, just a small keyboard, small touchscreen with a stylus, able to handle 2xSD-Cards with external USB, onboard WiFi and Bluetooth.... it was & still is amazing! So much so that I ended up getting another one, just in case I broke one. I did end up chipping the corner of one, so this was a good idea. Oh, the battery life - about 11hours of continual usage! I used to use the device for a full day when I was flying over to SFO, I could use it to write notes, write code, work out plans using mindmaps and spreadsheets as well as playing Grand Theft Auto and Playstation emulation games.<p></p><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi1Y9VswC0Xy84eMcUKl37yUjEqAFB15yrM28JlYxbHitsFgcbq5x1dpf1salP_jMOqQXYryYpUme0vyNrGSGjJdJgg9uf-uNmggFYVMmaSshljeoLBDqV4UZzE9m-Rs3AGZez26a1Z-Diq2CALN9Ly6K9GcXXa5-SNnS54tlnHx8WWiH4u1x7vYxH-QLIW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="673" data-original-width="1216" height="347" src="https://blogger.googleusercontent.com/img/a/AVvXsEi1Y9VswC0Xy84eMcUKl37yUjEqAFB15yrM28JlYxbHitsFgcbq5x1dpf1salP_jMOqQXYryYpUme0vyNrGSGjJdJgg9uf-uNmggFYVMmaSshljeoLBDqV4UZzE9m-Rs3AGZez26a1Z-Diq2CALN9Ly6K9GcXXa5-SNnS54tlnHx8WWiH4u1x7vYxH-QLIW=w627-h347" width="627" /></a></div><br />As it says, bottom right text, production of these devices stopped in 2013.<p></p><p>I used this device pretty much until about 2015-ish when I was working with more Android & iPad devices. I would have continued usage, however the base OS for the devices was/is based on Linux, however the software is packaged a bit differently requiring a bit of a walled garden approach. A smart person did end up porting Slackware that was a closer to Linux OS that allowed for a better behaviour of a more natural Linux. I did keep an eye on the progress and I did keep the OS/software up to date, however it seemed to stop around the 2017/2018 time period, which is when I got a bit more distracted by work/work & these devices went onto the shelf to gather dust until I re-organised my home office and I plugged them in, charged them up & they work(ed) absolutely fine, no issues at all. Amazing.</p><p>I had kept an eye on the websites and noticed that there was a proposal to build a newer version that had a higher spec & potential 4G connectivity, <a href="https://pyra-handheld.com/boards/pages/pyra/" target="_blank">called the Pyra</a>. I recall seeing this mentioned previously & I also remember tutting & shaking my head & saying, "good luck with getting that licensed"... & guess what, yep.... that has held things up quite a bit. Also, the price & method of building/selling these devices is very unique, you have to put down a rather large deposit and be placed into a queue, if/when a device is manufactured it can then be sent to you, they make them in small batches. This was fine back in 2007, but things have moved on significantly since then, for instance kickstarter, indigogo, PCBWay & the technology available from China has gotten smaller / faster / cheaper, so the thing that made the openpandora.org unique is now the normal & it is falling behind.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgN0SUTmKA-qJLMBFjF3fE3i-Z1xbjPeWJczXooVJScZ7qF8BduOGfEAwW9fbb_0RBwANx4PCBdBuOxobsejUA8eT8tqOLwqYX6VkU1aHg_BTk73PfzuPAXM0iSnjynrb1yTTvqMoMMQPgu0nzpsa8FnJ_ktO2rmsfy1a6KAoWBrfUncOxdB90fUWuyNyMO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="775" data-original-width="1718" height="287" src="https://blogger.googleusercontent.com/img/a/AVvXsEgN0SUTmKA-qJLMBFjF3fE3i-Z1xbjPeWJczXooVJScZ7qF8BduOGfEAwW9fbb_0RBwANx4PCBdBuOxobsejUA8eT8tqOLwqYX6VkU1aHg_BTk73PfzuPAXM0iSnjynrb1yTTvqMoMMQPgu0nzpsa8FnJ_ktO2rmsfy1a6KAoWBrfUncOxdB90fUWuyNyMO=w637-h287" width="637" /></a></div><br />Now, with that in mind, the newer version works out at about £1000. Hmmm.... that's quite a lot and I don't believe I can run UBuntu OOTB (<i>I could be wrong about this, please correct me</i>). I've been keeping an eye on other devices as they appear & I've been bookmarking them & I've not seen anything that can offer me what I was really looking for.<p></p><p>I did <a href="https://wiki.sipeed.com/hardware/en/lichee/th1520/lcon4a/lcon4a.html" target="_blank">find this device, the sipeed</a>, which is more a laptop than the uConsole, but again, the price ranges from £300-£450, so more in alignment with the openpandora.org device. I'll keep an eye on this one from a distance, it's also based on the RISC-V chipset...</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh6fU6GoabyQ7TpaybJUB9bPfhDfU6T-tEdFDYAEy_vpAR_TBNdQFpzXi8AC0SX57Ar4wXJzMQ0_23xIbk5SPGFF6BpEO5xUlVYt_PUhb3BvVVH3Iqt-qWNdsSQUAm93LtPwfZEJIyfaSqBUS0sFzyfBO4g8OFGcTmO548aqQqju62wHyNNiG36i_iufrxF" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="841" data-original-width="1668" height="281" src="https://blogger.googleusercontent.com/img/a/AVvXsEh6fU6GoabyQ7TpaybJUB9bPfhDfU6T-tEdFDYAEy_vpAR_TBNdQFpzXi8AC0SX57Ar4wXJzMQ0_23xIbk5SPGFF6BpEO5xUlVYt_PUhb3BvVVH3Iqt-qWNdsSQUAm93LtPwfZEJIyfaSqBUS0sFzyfBO4g8OFGcTmO548aqQqju62wHyNNiG36i_iufrxF=w559-h281" width="559" /></a></div><br />For instance, I've been using a Raspberry Pi 5 8Gb for a few months as a desktop replacement (<i>running UBuntu</i>) and tbh I've been more than happy with it. It is on par with my £800 laptop, however it requires a keyboard, mouse and monitor - which suits me, as I can pick up the case and take it from place to place and use it. However, I really want that as a small laptop device.<p></p><p>I liked the idea of the <a href="https://www.tomshardware.com/news/hand-386-handheld" target="_blank">retro Hand 386 device</a> layout, but that is more a novelty - however, I did like the form factor / layout.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhWajz2YLIsUTTHpEjiUNvguzFXOMNP6VFqZgFMb1utOKBT3jB1bezyOAs2kcvDT4qKWxCjcC1S2ApGiFzFWdbRralW4HvTQkkyttHdRhySpOs52-ynSnPVpIIesHttvBDkz2LALQKZSjZ1vFAbhY-aq9H7WpoVdkh6amUcH4QfhrIo8sgpLbCDCyPiGJD4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="457" data-original-width="837" height="326" src="https://blogger.googleusercontent.com/img/a/AVvXsEhWajz2YLIsUTTHpEjiUNvguzFXOMNP6VFqZgFMb1utOKBT3jB1bezyOAs2kcvDT4qKWxCjcC1S2ApGiFzFWdbRralW4HvTQkkyttHdRhySpOs52-ynSnPVpIIesHttvBDkz2LALQKZSjZ1vFAbhY-aq9H7WpoVdkh6amUcH4QfhrIo8sgpLbCDCyPiGJD4=w596-h326" width="596" /></a></div><br />I also liked the T-Deck device as this is more a Blackberry style device, I like the keyboard usage, small screen and mouse/trackball... but it's a bit too small. yes, it's an ESP32, so I could write my own apps, but it is way too small for a full UBuntu OS, it's an embedded device not a computer.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEghRkSkCxC_9Vc0ixCNlwHwzPUY7nsos2ER-M7vWnlCzBOzUmyoLYS98A6GS5eUgUGoah_jn2M5mOlOd245r7sZsBsR_0qe4j02F-Q8s7hGY7IMtJGr7KeN4usISdyQNJQQNbJjBKLWYS6gDHmlzgthQdaD5k-HyNYAki0n2aNe4HpSSwkodKj0H7y1kxyR" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="357" data-original-width="437" height="342" src="https://blogger.googleusercontent.com/img/a/AVvXsEghRkSkCxC_9Vc0ixCNlwHwzPUY7nsos2ER-M7vWnlCzBOzUmyoLYS98A6GS5eUgUGoah_jn2M5mOlOd245r7sZsBsR_0qe4j02F-Q8s7hGY7IMtJGr7KeN4usISdyQNJQQNbJjBKLWYS6gDHmlzgthQdaD5k-HyNYAki0n2aNe4HpSSwkodKj0H7y1kxyR=w419-h342" width="419" /></a></div><br />So....when I saw this device... and after much debating (<i>okay, about 8hours</i>) I decided to press the [buy it now] button, I decided upon the CM4 Raspberry Pi module (<i>RISC-V might be the future, but I'll let other pioneers go down that route</i>) as well as the 4G plug-in. <p></p><p>For the pricely sum of around £220 ($280) - now, in comparison, that's an f---ing bargain!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgLKGNK8YY03X-EYe0vo-VA-zy5x3MdBmSMmp-XMRUuT9QdwK7AphgjWUmECDwZkUCJIyhS6ze0AS5VzeoXUgopveJyIYwmF2TlHteLkyaWbfpVMQ_pqpAARPeLZSVSviOUBx1fIjD0fJONYZ2iisNJhSy9xLoPeKL8Q-W7Ec4xJGUgOkV8OpYUcxXFbGtk" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="547" data-original-width="747" height="351" src="https://blogger.googleusercontent.com/img/a/AVvXsEgLKGNK8YY03X-EYe0vo-VA-zy5x3MdBmSMmp-XMRUuT9QdwK7AphgjWUmECDwZkUCJIyhS6ze0AS5VzeoXUgopveJyIYwmF2TlHteLkyaWbfpVMQ_pqpAARPeLZSVSviOUBx1fIjD0fJONYZ2iisNJhSy9xLoPeKL8Q-W7Ec4xJGUgOkV8OpYUcxXFbGtk=w481-h351" width="481" /></a></div><br />I don't know when it will be sent to me, I did read on some sites it has an April 2024 release date, but there was no mention of that in the sales page or follow-up emails. We'll see. Even if it is April, I don't really mind / care, as that just means I offset the "playtime" with it until then.<p></p><p>My only minor niggle with the device is the fact it only has 4Gb RAM, but that is actually more than enough in normal usage, I have just been doing some "stuff" with ollama and running LLMs offline that really need 8Gb, but y'know I can live with running that still on the RPi 5 / Jetson - and you know what'll happen, ollama as software will evolve, LLMs will become SLIMs (<i>Small Language Inference Models!</i>) that will get trimmed down more & more and probably end up fitting within the 4Gb range.</p><p>After reading through the uConsole forum postings, it also looks like they are making it more module with upgrade paths being thought about / planned for the start - or if not direct plug & play replacements, there will be the ability from the community to work out a way to upgrade and keep it future relevant.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhD5DIGCMJvDcGDz-Z4CBb6fFYalNF_UjV2iEEn3VMjcKMOzhKYiS1-CFjRwpDthLTlGxDFDlYKpLJOLmj8S6alfDAXNZesUArPVrUuWQU7JvhBTQISkbvPjpvXWAx4pkDpORqoJmqBMjhmcClUefoYKigAM4uJUzRplRAP011WMkl5tPAg7g31bdmomuF0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="646" data-original-width="1070" height="368" src="https://blogger.googleusercontent.com/img/a/AVvXsEhD5DIGCMJvDcGDz-Z4CBb6fFYalNF_UjV2iEEn3VMjcKMOzhKYiS1-CFjRwpDthLTlGxDFDlYKpLJOLmj8S6alfDAXNZesUArPVrUuWQU7JvhBTQISkbvPjpvXWAx4pkDpORqoJmqBMjhmcClUefoYKigAM4uJUzRplRAP011WMkl5tPAg7g31bdmomuF0=w610-h368" width="610" /></a></div><p></p><p>Oh, the other "nice thing", you get the device in pieces. I love that. you get to put it together. Why do I like that? Well, if I get a device, first thing I do is invalidate the warranty by removing those stickers and undoing the screws of the case to take a peek inside and see what is there. Take some photo's / video's & then put it back together. This device starts off that way, you get to see the components to start off with, no surprises, you see where components are on the board, where the heat is going to come from, where the airflow needs to be, where extra space is available for potential modifications etc..etc..</p><p>Until it arrives, I'll keep on keeping on and will post an update when I do get my hands on it. More than likely the update POST will be created & published from the device itself!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj5WLt8qNReCMFTIiSoDRwH8HH93dsUdsT_9MGYC8WYqGlpX3ZISlUgH2kjLc01NosVf1WtjHMkXm_tUYDfTmD55XyMl2rrakZoZWHv6lCS1yiaWWTNFBKdeZuUbrlGgEOPHA6HGrZdrna3fJKnyBL3Z_T59iQ2D1MTdPdH8qXQcdBPDDgJplZVWeKnfpN_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="645" data-original-width="519" height="603" src="https://blogger.googleusercontent.com/img/a/AVvXsEj5WLt8qNReCMFTIiSoDRwH8HH93dsUdsT_9MGYC8WYqGlpX3ZISlUgH2kjLc01NosVf1WtjHMkXm_tUYDfTmD55XyMl2rrakZoZWHv6lCS1yiaWWTNFBKdeZuUbrlGgEOPHA6HGrZdrna3fJKnyBL3Z_T59iQ2D1MTdPdH8qXQcdBPDDgJplZVWeKnfpN_=w484-h603" width="484" /></a></div><br /><br /><p></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-32636905976244233762024-01-27T23:23:00.005+00:002024-02-05T23:09:38.971+00:00Raspberry Pi 5 & offline LLM (Ollama.ai)<p>Well, it's been about a year since I was writing some python code (<i>yes, I did type that & admit that I did that & to be fair it worked okay....as cardboard code</i>), I was using Llama.cpp, langchain and I wrote RAG and COT code. I was quantizing my own model on the laptop that I was using, therefore I was fully exploiting the 64CPUs, 16GB GPU & 128GB RAM and was then pushing the boundaries with that spec when using the streaming Q&A, ingesting my own documents & storing in a Chroma vector store and then questioning the content....I actually overloaded and crashed the Windows 10 OS on the laptop & it needed a fresh re-build afterwards... it never quite worked the same.</p><p>Anyway, my point being I was chuffed that I could run a Llama LLM offline on a laptop & it worked pretty reasonably, I was using code that I'd written & it was doing okay. I attempted to explain it to other people & it turns out it was too complicated...</p><p>Then a very early version of privateGPT appeared, so I re-purposed that code, modified it & tweaked it & then took a direction to use the GPT4All model which seemed to work well..... then I wrote a python gradio ui that worked very well, however it was still a single-user experience & I wasn't going to take the python code further to handle the document upload stuff... it was good enough, simple enough for other people to understand and basically I then got bored, handed over the code to other people to work with...</p><p>I then decided to sit back on the fence in reference to LLMs... grabbed some popcorn & focused on some other things. Turns out that was a good idea. By attempting to keep up with the latest changes, that were happening on a daily basis, it was starting to distract me far too much & I decided that it was simpler to step back, keep an eye on things and then wait for some dust to settle.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjmot8W7vpObE42AoL4HrkhSfc-BdnlmqVDak6vfK13f_Ct6j146wcFw9VqHN_D4f1BaTchPq92QtW4j_2mYm3xBwqpxamWqpAV6YtWdGO1iAfnVnN1SRkiYnLN0gQPAto8a0sVHBMJYrbh3B0obAdgWW6slE3cy8W4a16i0FnqpNJk6RMvl5L9uO2a9Ezy" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="498" data-original-width="1076" height="189" src="https://blogger.googleusercontent.com/img/a/AVvXsEjmot8W7vpObE42AoL4HrkhSfc-BdnlmqVDak6vfK13f_Ct6j146wcFw9VqHN_D4f1BaTchPq92QtW4j_2mYm3xBwqpxamWqpAV6YtWdGO1iAfnVnN1SRkiYnLN0gQPAto8a0sVHBMJYrbh3B0obAdgWW6slE3cy8W4a16i0FnqpNJk6RMvl5L9uO2a9Ezy=w409-h189" width="409" /></a></div><br />Then I got a Raspberry Pi 5 8Gb device in Nov 2023...I installed UBuntu and did some other work with the device and now it's the end of Jan 2024 that work has been wrapped up, so I thought I'd take a look at how things have moved on and I wondered if I could take last years code, or a variant of it, and run it on the Raspberry Pi 5 device.....<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiwsqirAPr-o1YJMKO3fD0KRzXOQIy-sRJnOKY3P6z74AosgQ7WZ_hAAIyUlGGeqHZVfkKSCLlSuPgl7pwroiLOa8Ri2ofbomFDCgKcWft-bbcEM0gJdZulyvfPZgW1DxyaTlduhWGVpHupVIXoMc-D5LkIjHirvVvAihJs2CO-DjdkdSpevvGLpaNlKOay" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="449" data-original-width="448" height="363" src="https://blogger.googleusercontent.com/img/a/AVvXsEiwsqirAPr-o1YJMKO3fD0KRzXOQIy-sRJnOKY3P6z74AosgQ7WZ_hAAIyUlGGeqHZVfkKSCLlSuPgl7pwroiLOa8Ri2ofbomFDCgKcWft-bbcEM0gJdZulyvfPZgW1DxyaTlduhWGVpHupVIXoMc-D5LkIjHirvVvAihJs2CO-DjdkdSpevvGLpaNlKOay=w361-h363" width="361" /></a></div><br />Along has come ollama. wow, that has made life so much simpler / easier!<p></p><p>Here's some screenshots, more for me as a reminder, that show ollama being setup / used on the RPi 5 as well as using a chat UI interface, the ability to use langchain and being able to use Javascript too....</p><p>I'm going to take this a bit further now, as these examples showed that the responses were FAST, you may think 2-5tokens a second is NOT fast, but trust me, when I was using the original laptop it was taking me 100's of seconds to get a response that now takes 1-2seconds. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRvAi_MoklA97JwKEbvEvMDMDwbuWnS_Buvmx4vAhUbdXmt-THc3W8YpzsH7xs79geUG1y6-yW_ZTg1FitlgTlTX8bBxhCKWHwY3YcMgxqY55Iq1Ej9VhxVEtrVcC4MMl57bdyKL3yHDpRmkUpgLVzv_2dLe7FYN87fEjtIoJX0Vo5D_cqiClv9cPleinP/s1906/Screenshot%20from%202024-01-27%2016-32-10.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1906" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRvAi_MoklA97JwKEbvEvMDMDwbuWnS_Buvmx4vAhUbdXmt-THc3W8YpzsH7xs79geUG1y6-yW_ZTg1FitlgTlTX8bBxhCKWHwY3YcMgxqY55Iq1Ej9VhxVEtrVcC4MMl57bdyKL3yHDpRmkUpgLVzv_2dLe7FYN87fEjtIoJX0Vo5D_cqiClv9cPleinP/w500-h281/Screenshot%20from%202024-01-27%2016-32-10.png" width="500" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSnw4XIA479tVGa5fr91BueudWDsHypmh1Niv2hMDZ5Te1YD2DumJP5O-XKbalQ8sBG-6vSKKCF_5udKy6dhACOjTMF2J_vZ63zCo4yye5WyEBMj1BYIvk9qJKYvXxqjYyD-cy7YCoe4fn4p-7wdjORrAUZ3c47JJVi6XFYlmjhPr308tDGBu3lX2GBjYd/s1906/Screenshot%20from%202024-01-27%2016-47-50.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1906" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSnw4XIA479tVGa5fr91BueudWDsHypmh1Niv2hMDZ5Te1YD2DumJP5O-XKbalQ8sBG-6vSKKCF_5udKy6dhACOjTMF2J_vZ63zCo4yye5WyEBMj1BYIvk9qJKYvXxqjYyD-cy7YCoe4fn4p-7wdjORrAUZ3c47JJVi6XFYlmjhPr308tDGBu3lX2GBjYd/w496-h279/Screenshot%20from%202024-01-27%2016-47-50.png" width="496" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzMREkVdqy1mknsxBl6zla6QD1zyBJBSwfT-hs6RBhFp2cJNYsxYlcF0UXAurq558xV5TCarucQanUtAU6lUgOdecomiKFqHB1c1APdUtYjRYFZzU-nEGPHbKfP509akXTZp-7bVhjwVV58QuWgeZFRgl_RlCWSRuU9i2N3PkrxYlZYUffEObPv2znxe8/s1906/Screenshot%20from%202024-01-27%2016-48-57.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1906" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpzMREkVdqy1mknsxBl6zla6QD1zyBJBSwfT-hs6RBhFp2cJNYsxYlcF0UXAurq558xV5TCarucQanUtAU6lUgOdecomiKFqHB1c1APdUtYjRYFZzU-nEGPHbKfP509akXTZp-7bVhjwVV58QuWgeZFRgl_RlCWSRuU9i2N3PkrxYlZYUffEObPv2znxe8/w498-h280/Screenshot%20from%202024-01-27%2016-48-57.png" width="498" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLll_Sj4L0tzRNZXvQ2VXJC4rb4MDWZJbbCpCcJLbGWrfZlrcYBVEqgNo28_kQXOA3kzYbLwEgxuhL9vlSyYPaY9AgHG430cG5olpRi7ldzmJDYQ8OwwKU3L-s1oOpw5IM5ejVVS1-Q9_Q4etB1_ytQiK3y-1_dlm_eQcqtr9XzgDd18dhslpIyDeQpf12/s1906/Screenshot%20from%202024-01-27%2016-54-04.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1906" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLll_Sj4L0tzRNZXvQ2VXJC4rb4MDWZJbbCpCcJLbGWrfZlrcYBVEqgNo28_kQXOA3kzYbLwEgxuhL9vlSyYPaY9AgHG430cG5olpRi7ldzmJDYQ8OwwKU3L-s1oOpw5IM5ejVVS1-Q9_Q4etB1_ytQiK3y-1_dlm_eQcqtr9XzgDd18dhslpIyDeQpf12/w491-h276/Screenshot%20from%202024-01-27%2016-54-04.png" width="491" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCs3yXHW08p3J-wOtB1zFAD9kzdrIoJWAqtRp2M1Hvs7xWBAfxEq0mTBoObcYdMBIKbn_bF_9bebZQ0qnudRB4gJO9Taf4Ifwe6OuMURv4xB_48Ln_12NA-ufPre8YTzZ5Oc3Dc0r9NiT9-2A6MViILwyiSXGNra8lYJwa865I0xwYR1VoK4ek63RTltJb/s1906/Screenshot%20from%202024-01-27%2016-54-16.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1074" data-original-width="1906" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCs3yXHW08p3J-wOtB1zFAD9kzdrIoJWAqtRp2M1Hvs7xWBAfxEq0mTBoObcYdMBIKbn_bF_9bebZQ0qnudRB4gJO9Taf4Ifwe6OuMURv4xB_48Ln_12NA-ufPre8YTzZ5Oc3Dc0r9NiT9-2A6MViILwyiSXGNra8lYJwa865I0xwYR1VoK4ek63RTltJb/w573-h322/Screenshot%20from%202024-01-27%2016-54-16.png" width="573" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisZQ2qJujhkKGpgjT-x6YFEtiHP2XRkZzSNTn2B2pUg4tXHFWqPeswsKAZxI1b333BzWcKYy13QE4KTKy9cYzEMfmk2oMUVnurj3yNmsjhE-x0YKgU-5YMXlzWQhZDY-6Xtqnbd1jxfzahIJABMgd7MxrcVLL5VgdTUgiPxDFD9UinpmcJACcQ0150TBbQ/s994/Screenshot%20from%202024-01-27%2017-10-29.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="994" data-original-width="903" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisZQ2qJujhkKGpgjT-x6YFEtiHP2XRkZzSNTn2B2pUg4tXHFWqPeswsKAZxI1b333BzWcKYy13QE4KTKy9cYzEMfmk2oMUVnurj3yNmsjhE-x0YKgU-5YMXlzWQhZDY-6Xtqnbd1jxfzahIJABMgd7MxrcVLL5VgdTUgiPxDFD9UinpmcJACcQ0150TBbQ/w384-h422/Screenshot%20from%202024-01-27%2017-10-29.png" width="384" /></a></div><div>Really liked the fact that you can use this model to question the text from an image - this may have some interesting usages....hmmmm.... need to think more about this.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeRz0vrK14RPYTsixwusdV5dcVjMNrsTTLcJ2Gb_RFa-uB_xiAhploL4TMRpBskv_TXs0h4iK1xX1Zw3Jvsm0Z08ilbdz2HLmN8FSs-FIfRr9Br2Z4otMbjCJBO5WBMisdmeIG-P8g_05jxZFGHql7GydQ_7me_Bx_JdYNcwF1KfpctlyjNh7Ygog90n7Z/s1141/Screenshot%20from%202024-01-27%2017-17-27.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="741" data-original-width="1141" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeRz0vrK14RPYTsixwusdV5dcVjMNrsTTLcJ2Gb_RFa-uB_xiAhploL4TMRpBskv_TXs0h4iK1xX1Zw3Jvsm0Z08ilbdz2HLmN8FSs-FIfRr9Br2Z4otMbjCJBO5WBMisdmeIG-P8g_05jxZFGHql7GydQ_7me_Bx_JdYNcwF1KfpctlyjNh7Ygog90n7Z/w480-h312/Screenshot%20from%202024-01-27%2017-17-27.png" width="480" /></a></div><div>I'm so going to ramp up a Javascript app to use the API and Langchain...</div><div><br /></div><div><br /></div>Ah, this should have been first, basically the curl command that does the install, this is what happens behind the scenes, again pretty simple:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9k_fR9CyTxMYUVCU_q5mUljcEKL7oainpw54FC1nH1AR01V-_J61gbSHrJ7dZ5mA8MoxfySnezNVyUN3EJQ54O0X7g27WONhCIMPT-wwi8mb3otAZsCxm9sSRBYVZzJ_ja5pUUc8h7cINsPyib3MwIZRK51JiB3jP_APsoNXZ5C976k1ItghEuPSPZJt/s1618/Screenshot%20from%202024-01-27%2017-21-48.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1004" data-original-width="1618" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9k_fR9CyTxMYUVCU_q5mUljcEKL7oainpw54FC1nH1AR01V-_J61gbSHrJ7dZ5mA8MoxfySnezNVyUN3EJQ54O0X7g27WONhCIMPT-wwi8mb3otAZsCxm9sSRBYVZzJ_ja5pUUc8h7cINsPyib3MwIZRK51JiB3jP_APsoNXZ5C976k1ItghEuPSPZJt/w562-h350/Screenshot%20from%202024-01-27%2017-21-48.png" width="562" /></a></div><div><br /></div>and for when I get back to work next week and set this up on the <a href="https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/" target="_blank">NVidia Jetson Orin</a> device that I've had on my desk, wondering what to do with it, it has a GPU, so I'll have to setup CUDA as explained below:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcjoRVOHmYqIq7Gi-9m4Re5dTs47ppcV6dGN4Vafsd-67JJvU_pQ2FOyaPXJU8Wa8TAm2e8lIRJ8uoljaiEvYJpxNDNrrs_CfH5O9X9ll_U98gMmJoweNxixRoNX_Jj_JqpuVocQZuSMeaYHE1qHGJc-T823wgZp-HfhpuI5yivzITd-32uMeM-QgmtL_/s1618/Screenshot%20from%202024-01-27%2017-22-07.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1004" data-original-width="1618" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcjoRVOHmYqIq7Gi-9m4Re5dTs47ppcV6dGN4Vafsd-67JJvU_pQ2FOyaPXJU8Wa8TAm2e8lIRJ8uoljaiEvYJpxNDNrrs_CfH5O9X9ll_U98gMmJoweNxixRoNX_Jj_JqpuVocQZuSMeaYHE1qHGJc-T823wgZp-HfhpuI5yivzITd-32uMeM-QgmtL_/w569-h354/Screenshot%20from%202024-01-27%2017-22-07.png" width="569" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAiV2F2lTnKlsA29eDaMJr7AA1DNNMMdOg5Xikl9N7Wu6FmkdBlNGODwGmGA5YXT2vIlUT79EioE8y0ayVQrh1xg6AGg_tb02MCGDUxHEgCF1azLQYK-ISgQniaalcB3DYdf_dGvLyX2Qt8x8UnVa0wTNFyaUmi7mJGDVHO_xF1TJPd2yKgakjeCjZYzGy/s1265/Screenshot%20from%202024-01-27%2017-25-00.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="994" data-original-width="1265" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAiV2F2lTnKlsA29eDaMJr7AA1DNNMMdOg5Xikl9N7Wu6FmkdBlNGODwGmGA5YXT2vIlUT79EioE8y0ayVQrh1xg6AGg_tb02MCGDUxHEgCF1azLQYK-ISgQniaalcB3DYdf_dGvLyX2Qt8x8UnVa0wTNFyaUmi7mJGDVHO_xF1TJPd2yKgakjeCjZYzGy/w475-h373/Screenshot%20from%202024-01-27%2017-25-00.png" width="475" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2A9KW421CinThuFBC7RfMw2WxYiSReZ2kCzCJN4dpC5kgpVsEZXp5l2eABP3UExVvuzTWrPb-agNCrhaq0Zv-DG_CPGjiMzX8w_rmuZ-hhc_UxHHenIMxZj1NU9Z3gxQTX4T8wS-W7bvDkT9e71cjkNQevinvTNF-iqz0JyvZlJggkDIvpOyrJbT7prN/s1402/Screenshot%20from%202024-01-27%2017-28-32.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="999" data-original-width="1402" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2A9KW421CinThuFBC7RfMw2WxYiSReZ2kCzCJN4dpC5kgpVsEZXp5l2eABP3UExVvuzTWrPb-agNCrhaq0Zv-DG_CPGjiMzX8w_rmuZ-hhc_UxHHenIMxZj1NU9Z3gxQTX4T8wS-W7bvDkT9e71cjkNQevinvTNF-iqz0JyvZlJggkDIvpOyrJbT7prN/w564-h402/Screenshot%20from%202024-01-27%2017-28-32.png" width="564" /></a></div>Ah, talking of the original privateGPT, this is how I can use this as a skeleton to morph my previous code to use ollama and langchain, via Javascript this time - however, looking at the python code above, it looks super simple.<br /><p>This might be about the right time to step back into the LLM world running on Edge devices...RPi 5 is a good start, then the Orin and then I reckon it'll be time to run on Android and iOS platforms - who needs all that "Cloud" bullsh*t? no, that is so 2014....</p><p><br /></p><p>Here's the future... it looks a lot like 2001 :-D</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjt2WAa2uk8vFRP52EMjtkUidMnrbPL-oRpqxibc1fPLpTDWCFeMThi7WzGTmULnYjc18Wbpv5qx_A3vcNyei7tbpg4qpKdxF3ZVUc2agu8Is9KWwo9xklDNqNdCIVIPz38asSgfjAXWmAS-gjEZDyH1GynoPDy36XCgjgcUa9aPoWr24mlINcdPuqTHX9M" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="270" data-original-width="972" height="174" src="https://blogger.googleusercontent.com/img/a/AVvXsEjt2WAa2uk8vFRP52EMjtkUidMnrbPL-oRpqxibc1fPLpTDWCFeMThi7WzGTmULnYjc18Wbpv5qx_A3vcNyei7tbpg4qpKdxF3ZVUc2agu8Is9KWwo9xklDNqNdCIVIPz38asSgfjAXWmAS-gjEZDyH1GynoPDy36XCgjgcUa9aPoWr24mlINcdPuqTHX9M=w631-h174" width="631" /></a></div><br /><br /><p></p><div>UPDATE:</div><div>RAG performance still sucks on the RPi 5 and the Jetson, when I say sucks, I mean it takes 30-300seconds, which is still pretty good considering, but it's not as quick as the native LLM access. I'm going to do some performance tests between these 2 devices, the laptop metioned at the start, along with a beefy server with dedicated GPUs (<i>yes, I will also run it on Azure Cloud, but I still don't see the point of running anything in any "Cloud" environment</i>), I guess I'm more of a Hybrid-Cloud kinda person.</div><div><br /></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-12805980702403711272024-01-27T06:45:00.003+00:002024-01-27T23:07:00.405+00:00"Good Morning, Gentlemen...."<p>Bees - by Rudolf Steiner</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiD6Jx3P63Id8GCmXB8enDfllAGm0R073YlsNo20iRXJuvVaI-hCMp-n4PAANWHG-JLaTsv3lwLlm0LuLCk3oqcbJPsMMPzcnRUVrmtRKdGJJIRGbfIm0jpr8TFp0NQ0O40g6kYhAjMEebSKx09BfA_vj6Bd1qDLdVanLwJy64UzZGtkJlcTr8igkbuqCZ6" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="468" data-original-width="298" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEiD6Jx3P63Id8GCmXB8enDfllAGm0R073YlsNo20iRXJuvVaI-hCMp-n4PAANWHG-JLaTsv3lwLlm0LuLCk3oqcbJPsMMPzcnRUVrmtRKdGJJIRGbfIm0jpr8TFp0NQ0O40g6kYhAjMEebSKx09BfA_vj6Bd1qDLdVanLwJy64UzZGtkJlcTr8igkbuqCZ6" width="153" /></a></div><br /><br /><p></p><p>Buy the book (<i>I just found a copy that I purchased back in July 2002</i>). Read the words. Listen to the audio book. Learn. Think. Smile. Love.</p><p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="509" src="https://www.youtube.com/embed/BaQh2b1UPx4" width="613" youtube-src-id="BaQh2b1UPx4"></iframe></div><br /> Enjoy that honey on your toast whilst you give a nod to the cosmos, especially to Venus.<p></p><p>"Good Morning, Gentlemen...."</p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p>the <a href="http://geomagnetics.org/sitebuildercontent/sitebuilderfiles/myworldbyviktorgrebennikovfinpdf.pdf" target="_blank">hexagonal house</a></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-20030369658501745512024-01-23T10:12:00.007+00:002024-01-24T16:27:00.725+00:00DollaTek / Heltec LoRa devices & meshtastic<p>Well, totally not unexpectedly, the Lora ECHO devices were "cancelled due to security concerns", so I got a refund from AliExpress.... no cheap devices for me there then.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjIx6VrpXumxZ6top5HGYreuOFcQ_Wx1jjteMWClPmM_O4mQSFQsB78LkUJobvX1nNw6r63cxJWAlYODsYPaZDzzOmVvu3m6PD72M8tqwkW-5ul32-bom40gxii_zMKYKTgeMg6wSKtaoOAT2WdDM4LVx1UUmJFcz2PF54UXy4ipZBc_hgiWgkteoGkL0Gx" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="772" data-original-width="1216" height="306" src="https://blogger.googleusercontent.com/img/a/AVvXsEjIx6VrpXumxZ6top5HGYreuOFcQ_Wx1jjteMWClPmM_O4mQSFQsB78LkUJobvX1nNw6r63cxJWAlYODsYPaZDzzOmVvu3m6PD72M8tqwkW-5ul32-bom40gxii_zMKYKTgeMg6wSKtaoOAT2WdDM4LVx1UUmJFcz2PF54UXy4ipZBc_hgiWgkteoGkL0Gx=w482-h306" width="482" /></a></div><p></p><p>However, remember those 3 x "DollaTek" devices that were basically a very good visual clone of the Heltec v3 WiFi/BLE/LoRa/OLED devices - well, they arrived & they were really well done, you would think they were the originals - the box was branded, the PCB was branded exactly the same, the same components (<i>from what I could tell</i>), so as far as I was concerned that's what I was now going to treat them as.</p><p>After receiving the devices from Mr(s).Postman-person, I then had to head out to Glastonbury to get my haircut - 'cos, y'know I'm a really hippy and all that. As you can see 11am on a Monday is NOT a busy time:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6m9qMr6_7FSNHHybwPaGqFzdWo5pNaN0Bc_fEXnumv8Yfc6BaU3hVpRXd2cogq0RLp13k_v83X8rZ8dPu7QiZvnd47DzKcQ6rKBBvIkW9h5pcj-9w1YHot8gsRLwBH3qbjzdPc9sx87YuXatvkyV9o6I4Np_wM3t58Clgoj6x1FrbxScLZvmZYw7a-LtA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="820" data-original-width="611" height="295" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6m9qMr6_7FSNHHybwPaGqFzdWo5pNaN0Bc_fEXnumv8Yfc6BaU3hVpRXd2cogq0RLp13k_v83X8rZ8dPu7QiZvnd47DzKcQ6rKBBvIkW9h5pcj-9w1YHot8gsRLwBH3qbjzdPc9sx87YuXatvkyV9o6I4Np_wM3t58Clgoj6x1FrbxScLZvmZYw7a-LtA=w220-h295" width="220" /></a></div>and the actual place I get my luscious locks trimmed is actually HERE - yep the shop with the mural:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj4onVi86uAHlhSjvVV8vIPaXgiwYmSZfjvV5VAGPT7Qrqh7zf-gaojXDFaOAXfoILrOX2jUyCwOZYs6hqeHVdifmXyd6a017_3d8yqU-eB1N6t-r3DfoEAAC-wiqTDeljKtdktv_HAC4bv3GJdp9viKQ9JITK1IORvG_lNKXFQWEtg-NOLqjx5JvTr9Plt" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="773" data-original-width="1010" height="491" src="https://blogger.googleusercontent.com/img/a/AVvXsEj4onVi86uAHlhSjvVV8vIPaXgiwYmSZfjvV5VAGPT7Qrqh7zf-gaojXDFaOAXfoILrOX2jUyCwOZYs6hqeHVdifmXyd6a017_3d8yqU-eB1N6t-r3DfoEAAC-wiqTDeljKtdktv_HAC4bv3GJdp9viKQ9JITK1IORvG_lNKXFQWEtg-NOLqjx5JvTr9Plt=w642-h491" width="642" /></a></div>Rock and Roll!<br /><br /><p></p><p>I then spent far too much time on a Monday afternoon/evening (<i>hey, it's my week off, I'm allowed to do personal stuff</i>) getting libraries / code samples etc... in an attempt to get the devices to work from Arduino 2 IDE. I was confusing myself because although there was a little [V3] above the antenna, the listing led me to believe I had a hybrid, ie. a v3 USB-C board but with the "older" LoRa chip. Anyway, the device came pre-flashed with a WiFi scanner app that output nicely to the 0.96" OLED screen that is actually really nice and clear and bright. I had the "fun" then of attempting to select the right board within the Arduinno IDE in order to deploy some code and test that I had the config setup correctly. This is the bit that took far too long. Whilst I accepted that the device was the V3, as all other selections informed me that they were ESP32 and not ESP32-S3 - which is what the new board is, the code would execute but refused to show anything on the OLED. I could Serial Monitor and see output no problem, I could execute code with WiFi, no problem.</p><p>I eventually, through some combinations of using the Board Manager / manually installing "stuff" managed to get something to work.</p><p>However, as I say, I was being especially stupid in the lead up to this and I ass-u-me'd that these were the same devices:</p><p><a href="https://randomnerdtutorials.com/ttgo-lora32-sx1276-arduino-ide/">https://randomnerdtutorials.com/ttgo-lora32-sx1276-arduino-ide/</a></p><p>Clearly, once you've noticed the finer details you see that, ignoring the branding, this is actually the V2 board and not the V3 board.</p><p>What it does introduce you to though is: the LoRa Frequency that you want to work with / use is set in CODE. Now, that is brilliant. As I've just had to "throw away" (<i>of course I didn't, that merely means they went into the "can I steal bit of this later" box</i>) several 915Mhz LoRa devices as they were hardware "hardcoded" to that frequency, this is really nice to see - let the code dictate what frequency to use.</p><p>After realising my blunder above, I then found this page:</p><p><a href="https://www.sabulo.com/sb/esp32-development-board/how-to-use-the-heltec-oled-display-on-the-esp32/">https://www.sabulo.com/sb/esp32-development-board/how-to-use-the-heltec-oled-display-on-the-esp32/</a></p><p>that then helped me to get to grips with the heltec library itself.... ah, and then I noticed within the Arduino IDE I now had the "extra" Examples</p><p>and that then looped me back to the Heltec website:</p><p><a href="https://heltec.org/project/wifi-lora-32-v3/">https://heltec.org/project/wifi-lora-32-v3/</a></p><p>that then re-enforced that I was using the V3 device and you could see the differences to the TTGO V2 devices I was looking at earlier.</p><p>I'll keep this image here for future reference:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSwsI8jvo-R8G4XyoTfyfpViNZp1XPdK-gvhqlhlWM4yEHKguFVpx84i-lp1Q88jQhM7dmSiOtav5J8-gZyn_WbOfAjCel_GxlOAk_-9BkguPlfkhxjFiV-9Z_I07zdINHVvlZDhts3zQNb73vdyJBMNExtzR7uA5MvlmXm2vXkqZMkT42Y5pj_In7kSSs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="529" data-original-width="802" height="368" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSwsI8jvo-R8G4XyoTfyfpViNZp1XPdK-gvhqlhlWM4yEHKguFVpx84i-lp1Q88jQhM7dmSiOtav5J8-gZyn_WbOfAjCel_GxlOAk_-9BkguPlfkhxjFiV-9Z_I07zdINHVvlZDhts3zQNb73vdyJBMNExtzR7uA5MvlmXm2vXkqZMkT42Y5pj_In7kSSs=w558-h368" width="558" /></a></div><br />So, Arduino 2.0 IDE....<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgB8Lz6UHUyEumKCEfRPRS8YN1kJ2VhnaIgHkcsN37WkGWplMgS19eWJjtvp3WTQBDNEHxg84_dmnH0MfpZRXigGB4Q0aAEqUtFcMcmfiAOlWIt21UrdLOBk8ZPmYMX57UgzN8sMbufZViuNcW_0qmwPvLAmdxbpueYPjbeG1vd9jWGQ4SiqiP9mb_Nygh0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1035" data-original-width="1341" height="472" src="https://blogger.googleusercontent.com/img/a/AVvXsEgB8Lz6UHUyEumKCEfRPRS8YN1kJ2VhnaIgHkcsN37WkGWplMgS19eWJjtvp3WTQBDNEHxg84_dmnH0MfpZRXigGB4Q0aAEqUtFcMcmfiAOlWIt21UrdLOBk8ZPmYMX57UgzN8sMbufZViuNcW_0qmwPvLAmdxbpueYPjbeG1vd9jWGQ4SiqiP9mb_Nygh0=w612-h472" width="612" /></a></div><br />No matter what code I tried, all I was getting was "LoRa failed starting"... I then went down into debugging mode for myself and thought maybe I'd broken the device, so I switched out for a different one (<i>hence buying 3!</i>), same experience...Hmmmm<p></p><p>And then I thought, why am I burning time on this? The T-Deck is running Meshtastic and all I really want to do, for now, is just test that the devices can communicate with each other - d'oh! so why don't I just see if i can set them up with Meshtastic?</p><p>I then thought, "hey, I can use the online flasher for this". No. Still doesn't work, even though the USB-C is recognised as a USB, so back to the manual flashing from the CLI. As you can see, I could see the chip information from this command:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgq3Zu0UhQa568K3a_njXF4mdNwd81yLnJsNtOn1n2zdKXMC6R5srTLSZlO-er6Hn_Ll0BUiAqu4UcO_u7TDca_8NL9ZY3PT1fslZbOC-T3EHTX8o7mIQgRf5YgB8LoAGvDU4QYJIbHjFLIpnRsdcOeN_pHzbrxbO2sWQ4Nj8bC2QA5d2wUKUWmhAHyeD8X" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="302" data-original-width="539" height="260" src="https://blogger.googleusercontent.com/img/a/AVvXsEgq3Zu0UhQa568K3a_njXF4mdNwd81yLnJsNtOn1n2zdKXMC6R5srTLSZlO-er6Hn_Ll0BUiAqu4UcO_u7TDca_8NL9ZY3PT1fslZbOC-T3EHTX8o7mIQgRf5YgB8LoAGvDU4QYJIbHjFLIpnRsdcOeN_pHzbrxbO2sWQ4Nj8bC2QA5d2wUKUWmhAHyeD8X=w465-h260" width="465" /></a></div><br />and then it was just a case of running the flashing command with the right firmware reference:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjeWIJNIAWmgz-JOI39b2ilNDVlWHZHwJ6hRFjWHl4sikYUxxdqbPhmE_dbE2N86m6KADtisq0xFVqayc_e4M7ADx_Sq3IZYl54LWfOYV1qtk9wm2TvRp9A5QFxkTF4EI931bfl9bEFCm090h_4aFUSIfm2TcoYAZ2pV5s6fnLseq3sWj-0v_jzMV0ALMgd" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="721" data-original-width="1762" height="259" src="https://blogger.googleusercontent.com/img/a/AVvXsEjeWIJNIAWmgz-JOI39b2ilNDVlWHZHwJ6hRFjWHl4sikYUxxdqbPhmE_dbE2N86m6KADtisq0xFVqayc_e4M7ADx_Sq3IZYl54LWfOYV1qtk9wm2TvRp9A5QFxkTF4EI931bfl9bEFCm090h_4aFUSIfm2TcoYAZ2pV5s6fnLseq3sWj-0v_jzMV0ALMgd=w635-h259" width="635" /></a></div><br />and about 2 minutes later, the device reboots itself, flashes the Meshtastic logo, and then flips between two text screens telling you that you need to BLE connect to it in order to configure it.<p></p><p>Out with the same phone I used a few days ago - BLE PAIR the two, then the phone can "see" the device:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhVtpSOnumNI0GNmZRJUonVZuC4BPbyUlq7UQvqVZnftwgENpj7KQkLLtKJf1oCDFSofo7o7vl6JkqEMGiqymmEKXooGYT-JtiaLW6s4jPANuQBh_tWYsewUDaCrSQK9QMC48v84X_sEL6rp4YsR4yBwwEhDAWnmlw5WorTG1xP85pHY8sj27EMBDk2yDJ8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="778" data-original-width="1016" height="489" src="https://blogger.googleusercontent.com/img/a/AVvXsEhVtpSOnumNI0GNmZRJUonVZuC4BPbyUlq7UQvqVZnftwgENpj7KQkLLtKJf1oCDFSofo7o7vl6JkqEMGiqymmEKXooGYT-JtiaLW6s4jPANuQBh_tWYsewUDaCrSQK9QMC48v84X_sEL6rp4YsR4yBwwEhDAWnmlw5WorTG1xP85pHY8sj27EMBDk2yDJ8=w636-h489" width="636" /></a></div><br />My phone camera is awful, it will NOT do close photo's in focus, that's as good as it gets.<p></p><p><br /></p><p>I then pressed the UNSET word to set the region to EU_868, another reboot later and there we have the familiar UI and a flashing LED on the board - well, that was pretty simple!</p><p>As it is default, it is using the LongFast channel - I might reset that back on the T-Deck just for testing and then add custom channel for myself later on.</p><p>Next step is to repeat the same thing on the other 2 devices and then find enough USB-C cables to power the devices and then test sending comms. between them.</p><p><br /></p><p>Why am I doing this on a Tuesday morning? Well, as mentioned, I'm <i>off work</i> this week, but more specific than that I'm also waiting for a recovery truck to come and pick up my Kustom Vanguard - yep, the custom car is broken (<i>again</i>), but that's the nature of the beast. I've only done 1500 miles in it, so it's still in "snagging" mode, ironing out the kinks / loose bolts, literally giving it a "shake-down". What's wrong with it this time? I literally shook the prop-shaft and gearbox mounts off the car! I think. Well, I'll know more once she's gone back to Valley Gas and is up on a 4-poster to check out exactly what went wrong and what subsequent damage I did and then how to fix her back up again - and then I'll be driving the car at LEAST once a week to rack up that mileage and to iron out any other issues. I'm already aware that it gets "hot" under that bonnet, so some form of extra cooling, potentially a remote electric water-pump to help with cooling, cutting out airflow vents in the inner-wings, who knows, this is the "fun" of having "code in the shape of a vehicle". It's the same thing as doing the above electronics / coding work - just on a bigger scale that costs more ££££.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjXwfUStrZZXFpYiaRpraFQk2M-cnOlZzAZDbC4Kl3dikzHNTDovPo911zjH25roR4qoWz5QbsXF2OjnHvkwqlzqewLg6gYtixUcy_45Cw00tOYsXI0sT8cjZ3TZ1EbsStMSanB--zBy_c0mhY0zz1fUUPEshCwHfFyFL1dH2psecxodzmtLxipoPuCCmYL" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="511" data-original-width="646" height="496" src="https://blogger.googleusercontent.com/img/a/AVvXsEjXwfUStrZZXFpYiaRpraFQk2M-cnOlZzAZDbC4Kl3dikzHNTDovPo911zjH25roR4qoWz5QbsXF2OjnHvkwqlzqewLg6gYtixUcy_45Cw00tOYsXI0sT8cjZ3TZ1EbsStMSanB--zBy_c0mhY0zz1fUUPEshCwHfFyFL1dH2psecxodzmtLxipoPuCCmYL=w627-h496" width="627" /></a></div><br />Oh, it's also pi$$ing it down with rain, so that's going to be fun getting the car up onto the low-loader in the rain... and then off to the ear Doctor.... and then back to more LoRa fun!<p></p><p><br /></p><p>Well, I should really be digging out stuff in the garden so we can have a proper water "runaway" (awesome movie from the mid-80s!) "soakaway" so that with this excessive amount of rain we're having, I end up with more water around the outside of the hot-tub than inside it. That is a tomorrow task...with proper wellies and a shovel time.</p><p>The LoRa devices are actually for the garden and for that mentioned hot-tub, so I can monitor the "levels" of the water quality, temp, etc... as well as manage the greenhouse, opening/closing the roof window for airflow / temp control and a variety of other "gardenBot" related things. The LoRa devices might be overkill for what I want to use them for atm but I'll learn. Then when the world goes to sh!t and we hit the apocalypse I can then re-purpose the devices for end-of-the-world comms devices. nice.</p><p><br /></p><p>UPDATE:</p><p>okay, so I hooked up 2 devices. Different callsigns obviously. However, I used the same phone BLE to connect to each one.</p><p>As you can see there are 2 devices detected and 'cos I turned on Location on the phone, it knows the geo co-ords. This did actually settle down and the last digit for one of the devices changed to a 7, which is pretty much spot on as I moved it to the other end of the sofa, about 1mtr away.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjc23U4FXPmI6cEkWebrSHe1CSt9ijxpXhTzHHaJxLdhKhOmuao1wXsDjgj1LK85wMKja_epfRp3OTjrqXgfXI6gIVX9UlVr4QRkOe1Qr3AwW3YQ665skYCdwigOV2SVvglYDOjZhelhrxK8NfVAHvxpsSYl7O4whbt7CKPvXt4gxz4OBN-TXjBlwwu1gFB" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="426" data-original-width="403" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjc23U4FXPmI6cEkWebrSHe1CSt9ijxpXhTzHHaJxLdhKhOmuao1wXsDjgj1LK85wMKja_epfRp3OTjrqXgfXI6gIVX9UlVr4QRkOe1Qr3AwW3YQ665skYCdwigOV2SVvglYDOjZhelhrxK8NfVAHvxpsSYl7O4whbt7CKPvXt4gxz4OBN-TXjBlwwu1gFB" width="227" /></a></div>The power settings are interesting, as they are both plugged into USB-C fixed power and not battery, so not sure why that mis-reads, but will test further when I find my LiPo batteries and plug them in.<p></p><p>What is slightly annoying is that I cannot photograph the actual devices - darn you cheap camera phones. However, I can confirm that when using the phone BLE to connect to a device and send a text message it appears on the "other" device screen.</p><p>In fact, as there are now 2 devices, there are initially 3 small dots at the bottom of the device OLED that indicates 3 screens. If you press the BOOTSEL button for a second it switches between the screens. The first screen now shows a circle on the right hand side, indicates where N(orth) is and has a pointer that I believe is pointing me towards the other device? I'll need to test this further.</p><p>Now, from the phone, as mentioned, you can connect to each device and send out messages. The success indicator in the phone UI is that the cloud has a little tick in it. On the device itself a new screen (now we have 4 dots) is created and the message is displayed. It only shows the last message, there is no history - you only get the history on the phone device itself.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiTfWSdhPLEX9ez2FRoyh96KRMNZUkadxF7QIQahlzq_jjXwncPcxSA6OcV9CwpJ0FlvsvTEAlBIxp4_pFI5I1aJRZhQDlG3jDrbxFi2auzGDrbzmKwvcCv-WATcrWpjP460aW3giT4oJKXP65O07P4HPN8VW5NQe1oME5p4o9ojU_pOhmhqp2bwGbyIwZ_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="760" data-original-width="405" height="538" src="https://blogger.googleusercontent.com/img/a/AVvXsEiTfWSdhPLEX9ez2FRoyh96KRMNZUkadxF7QIQahlzq_jjXwncPcxSA6OcV9CwpJ0FlvsvTEAlBIxp4_pFI5I1aJRZhQDlG3jDrbxFi2auzGDrbzmKwvcCv-WATcrWpjP460aW3giT4oJKXP65O07P4HPN8VW5NQe1oME5p4o9ojU_pOhmhqp2bwGbyIwZ_=w287-h538" width="287" /></a></div><br />As you can see above, I connected as the 84f8 device sent 2 messages, then connected as the 9080 device and sent a reply message. Both these messages are visible on the devices themselves, as well as showing up on the connected BLE phone. This is "ok" for testing to make sure the comms. works, it's not really how you would use this in real life.<p></p><p>I should really connect 1 BLE phone to one device, such as mine, and then connect another one to my missus's BLE tablet/phone and then we can control each device. However, huge overkill just for that scenario - but at least it'd isolate the BLE connections.</p><p>I'd be interested to get the Meshtastic github repo code and take a look to see if I could modify it to keep the last 2-5 messages on the device and a bit like the 3/4 dots horizontal scroll, handle a simple vertical scroll just on that screen - don't know, might get tricky, but worth a potential fiddle at some point.</p><p>It's 11:15 and still no recovery truck..... am glad I've got a distraction to pass the time until 1pm when I have to leave for ear Dr.....</p><p>UPDATE:</p><p>12:15 the truck arrived! Time for some Jenga - always fun to get the car onto a recovery truck.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEggo9FdScyVw0Wi35qwrLupKvsS2ms2F6YPb3TgkHW6dMLFdi05NfZqxmN1bT-6KbGgwu2dWfyOlEW0ufsgefqMqju9yxRzmUmVLPftGMKr59XQMFIBOYazfcAzyxiPyIkorqiVOfLRWSQGn-_VXHXxOilSy1VAYyCo_SY6871Mzczgc0GWPYuNH-2i9Ia3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="710" data-original-width="1050" height="364" src="https://blogger.googleusercontent.com/img/a/AVvXsEggo9FdScyVw0Wi35qwrLupKvsS2ms2F6YPb3TgkHW6dMLFdi05NfZqxmN1bT-6KbGgwu2dWfyOlEW0ufsgefqMqju9yxRzmUmVLPftGMKr59XQMFIBOYazfcAzyxiPyIkorqiVOfLRWSQGn-_VXHXxOilSy1VAYyCo_SY6871Mzczgc0GWPYuNH-2i9Ia3=w540-h364" width="540" /></a></div><br />I managed to get a look underneath and could see that the main problem was/is the propshaft having a falling out (literally) with the back of the gearbox:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjLVXwpQcH4KNF5LySJhumASrRPaWEFyf3-51NKUZQYvt3ee-2HHlQEVV--xJDr8hfVK0sq4Bifo_shZQ2BlW4zvj3IvL8HO2H_-ocA79wQWKo18OhBmlvYG3rf6jHvwyTkCvaLogNgxlxaKQGeAmEalXtutbC4xe6c3ogaUijYPB264PUTIoLUoFmwqdWL" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="542" data-original-width="692" height="468" src="https://blogger.googleusercontent.com/img/a/AVvXsEjLVXwpQcH4KNF5LySJhumASrRPaWEFyf3-51NKUZQYvt3ee-2HHlQEVV--xJDr8hfVK0sq4Bifo_shZQ2BlW4zvj3IvL8HO2H_-ocA79wQWKo18OhBmlvYG3rf6jHvwyTkCvaLogNgxlxaKQGeAmEalXtutbC4xe6c3ogaUijYPB264PUTIoLUoFmwqdWL=w596-h468" width="596" /></a></div><br />You can see at the end of the propshaft, that circular thing with the shiny bit in the middle - that's the back of the gearbox that is meant to be connected to that propshaft. If you zoom in, you can see the metal has been ripped off the gearbox mounting / fixings. Too much power?! anyway, out of my scope of expertise, over to the experts to fix it and improve it.<p></p><p>all up on the back of the truck and off to the "fix me up" shop....</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='596' height='496' src='https://www.blogger.com/video.g?token=AD6v5dwmmFstKvorKBF07M2wUCfQaZ1j31p0OL75tA3vNS69hIuumn4WLGc8UNtFfmEQMYAndukuxa7XWaM1d_NfUw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p><br /></p><p>.</p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-71019248216526708022024-01-20T19:50:00.005+00:002024-01-20T20:06:35.109+00:00LilyGo T-Deck LORA device - setup<p>"A what now?", "What is that and why is it needed?"</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhMKV3RIbYKwFLHKmEGxdwKzGSqaUp4j74Fu1S8G7BXFq3L-VT7-wEU1XmKUBqDDoD0EraUE7sZK3gpJ36wahBJlAZSz6vlphxFFuTRWnQRjSHQ1F7uZr5RB3vUwwymgbYWhlqq_z-SPrUJuwbl-ujlyRaa2zRQ0JDRcEg0akX-G1zAchKl1U6TB-PP6ZAs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="667" data-original-width="919" height="421" src="https://blogger.googleusercontent.com/img/a/AVvXsEhMKV3RIbYKwFLHKmEGxdwKzGSqaUp4j74Fu1S8G7BXFq3L-VT7-wEU1XmKUBqDDoD0EraUE7sZK3gpJ36wahBJlAZSz6vlphxFFuTRWnQRjSHQ1F7uZr5RB3vUwwymgbYWhlqq_z-SPrUJuwbl-ujlyRaa2zRQ0JDRcEg0akX-G1zAchKl1U6TB-PP6ZAs=w582-h421" width="582" /></a></div><br />Basically it's a communications device that does not use WiFi or Bluetooth or 4G/5G SMS / GPRS - it uses the LoRa comms protocol, it's basically Radio Frequency output that will broadcast for miles / kilometers - average of 2Km but if you live in a flat area it can reach 20Km. That's "free" comms between devices, passing "data", ie. small packets of text based data between devices, it's not built for audio or video (that "can" be done, but it's not the purpose). So when the world ends, or a nuke drops or a solar flare bursts and an EMP pulse fries all the electronic devices (you did store a bunch of these in a Faraday cage didn't you?) you'll still be able to have comms without using smoke signals.<p></p><p>There's a bunch of YouTube videos about that sort of scenario - however, that's not what I was wanting to use it for. I actually just wanted to have comms between devices in my garden! Not really needing the milse & miles of transmission power, but far enough to have a mesh-network, as, I don't know about you my home WiFi router doesn't reach the end of my garden & if it did, I would not be happy it transmitting that far. So what options do I have? I could set up a load of BLE devices... but y'know....LoRa seems like a better option and a perfect excuse to have a fiddle around getting it working & then figuring out how I can use it for "other things".</p><p>Right, so we have HARDWARE and we have SOFTWARE in this equation.</p><p>Hardware will be LilyGo T-Echo (currently waiting to be delivered, held up in UK customs) and a LilyGo T-Deck and a couple of yet-to-be-delivered ESP32 generic lora devices. For now we'll focus on the T-Deck as I have it to hand.</p><p>Software is initially just the OOTB Arduino .ino ESP32 code to make sure I can connect & flash the device from my laptop. I'll try a few apps just to be sure - I did find an oddity with the Arduino 2 IDE that I'll show, more annoying than anything else. Then I'll move on over to the MESHTASTIC open-source application and how that can be used for encrypted messaging between multiple devices. I may or may not continue with this, we'll see...</p><p>So what does a T-Deck look like? Well... a Blackberry device, of course! Well, the keyboard is direct re-purpose of the infamous Blackberry from back in the day. The trackwheel is a little odd to get used to again, but the touchscreen is something I keep forgetting to use! I was to use an arrow key and then remember I can just swipe the screen or press it with my finger!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiWr28JowNUFl3C9kzuVE_gkJQofPM99EDe8cn8RX1ddUn7_PaBHIbPMlVOT6zG_oBs6vGjtWALitCaOQuFtjwXGv1jBGqfkeCJlZwvtEE9lkXu6NsqFgJ_HrrpiRUhM6f2xrhVAqEVa3hK0J1YHaknAKSU0_da_1fSq3R5afAAkBC5qeSftdl_ss9elMxe" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="280" data-original-width="401" height="372" src="https://blogger.googleusercontent.com/img/a/AVvXsEiWr28JowNUFl3C9kzuVE_gkJQofPM99EDe8cn8RX1ddUn7_PaBHIbPMlVOT6zG_oBs6vGjtWALitCaOQuFtjwXGv1jBGqfkeCJlZwvtEE9lkXu6NsqFgJ_HrrpiRUhM6f2xrhVAqEVa3hK0J1YHaknAKSU0_da_1fSq3R5afAAkBC5qeSftdl_ss9elMxe=w533-h372" width="533" /></a></div><p></p><p>The device itself is provided in "raw" format - ie. it is not in a case, apparently you can 3D print one - I'll give that a go over the next week (as I'm off work, yay! and should have time for messing around with the 3D printer bed-levelling faff!). It does come with lots of things that won't be used straight away, such as a SD-Card socket.</p><p><br /></p><p>As I say, I started using this device as an ESP32-S3 Arduino device that just has a screen and keyboard attached. I got distracted via the following URLs:</p><p><a href="https://www.instructables.com/T-Deck/">https://www.instructables.com/T-Deck/</a></p><p><a href="https://github.com/moononournation/T-Deck">https://github.com/moononournation/T-Deck</a></p><p><a href="https://github.com/moononournation/T-Deck/blob/main/LvglLoRaMessenger/LvglLoRaMessenger.ino">https://github.com/moononournation/T-Deck/blob/main/LvglLoRaMessenger/LvglLoRaMessenger.ino</a></p><p>Then after setting that up in Arduino 2 IDE, deploying the app to the T-Deck it was just erroring about not being able to invoke the radio. Then I checked and I needed to install / upgrade the following library within the Arduino IDE:</p><p><a href="https://github.com/jgromes/RadioLib">https://github.com/jgromes/RadioLib</a></p><p>and then it all worked fine! sweet.</p><p>Then I decided to go to the OFFICIAL github repo:</p><p><a href="https://github.com/Xinyuan-LilyGO/T-Deck/tree/master">https://github.com/Xinyuan-LilyGO/T-Deck/tree/master</a></p><p>Just like above, it requires you to copy files around in ref. to the Arduino IDE.</p><p>I couldn't get the 'UnitTest' app to compile, it complained about the last include file - y'know life's too short, I gave it 5 seconds and moved on. I did however get the basic 'Keyboard' app to compile, build, upload and could see the output in the 'Serial Monitor', that's what I was really looking to achieve.</p><p>I think it was just my fingers, but getting the device into "flash mode" or "download mode" requires pressing in the trackball, turning the switch from OFF to ON and holding the trackball for about 3-5 seconds - I think I kept letting it go too early.</p><p><br /></p><p>After being being happy that I could compile / upload apps and they worked, I then thought I would move on over to this MESHTASTIC open-source software that I was finding all over YouTube.</p><p>Before going there...that Arduino IDE problem I mentioned earlier, let me show / explain what I was referring to (if anyone knows how to override this, let me know!)</p><p><br /></p><h3 style="text-align: left;">Meshtastic</h3><p>As with most things, every YouTube video / web page says, "hey use this wonderfully easy web-browser tool to download the latest firmware to your device, it's super easy". Of course it didn't work on my laptop, so I had to go about doing it the "hard / long-winded way", but by doing that I learn more!</p><p>My journey started here. Quick read of this page:</p><p><a href="https://meshtastic.org/docs/getting-started/flashing-firmware/esp32/">https://meshtastic.org/docs/getting-started/flashing-firmware/esp32/</a></p><p>Led to scrolling to the bottom of this page and downloading the required file:</p><p><a href="https://meshtastic.org/downloads">https://meshtastic.org/downloads</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg37Tln8fNQ8KUYQ0AtlqIzOvCX6HmsyqamXpGZLqi3JCgM7uXskq_UlQR3uau7ezCsJjEr2_xFfmdy9IK4piXlunRQQWE3l381gENG795KMijSqTsgmK_dU8-XQFHgKU4CZ83wgA9UNN9HvG9m_GG4bFhu-kY8mWCpXI1_eIVGxZin67OgmQgXrZgc9o8p" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="344" data-original-width="624" height="176" src="https://blogger.googleusercontent.com/img/a/AVvXsEg37Tln8fNQ8KUYQ0AtlqIzOvCX6HmsyqamXpGZLqi3JCgM7uXskq_UlQR3uau7ezCsJjEr2_xFfmdy9IK4piXlunRQQWE3l381gENG795KMijSqTsgmK_dU8-XQFHgKU4CZ83wgA9UNN9HvG9m_GG4bFhu-kY8mWCpXI1_eIVGxZin67OgmQgXrZgc9o8p" width="320" /></a></div><br />and then onto this page:<p></p><p><a href="https://meshtastic.org/docs/getting-started/flashing-firmware/esp32/cli-script">https://meshtastic.org/docs/getting-started/flashing-firmware/esp32/cli-script</a></p><p>Which required me to download / install some extra Python (yeurgh!) apps</p><p>Now, down that page, for Linux it says to just run</p><p>$ esptool chip_id</p><p>of course that did not work, as you can see:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjjyHTffexXs77qtrqMr57qc8_JU6QRb5wCBrq6CRdKu2KO8TI9Mk0_9-em2SljlIZquHZsgoXanoLRdKfFJofMiO12v8EB5UP4FpCdTehMJ2cHokXZ_STxWbgmdquJK05ZHMYGGz9HiIbrAedXFYXGwNdzk_Nw_AQNBeZu0Au7uM_hQwCxjNBEG0_FlVW6" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="676" data-original-width="916" height="461" src="https://blogger.googleusercontent.com/img/a/AVvXsEjjyHTffexXs77qtrqMr57qc8_JU6QRb5wCBrq6CRdKu2KO8TI9Mk0_9-em2SljlIZquHZsgoXanoLRdKfFJofMiO12v8EB5UP4FpCdTehMJ2cHokXZ_STxWbgmdquJK05ZHMYGGz9HiIbrAedXFYXGwNdzk_Nw_AQNBeZu0Au7uM_hQwCxjNBEG0_FlVW6=w625-h461" width="625" /></a></div><br />A quick apt install later... and then I can run the command:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiZfVgoYRI2e1s1Sleund-1NunHr4CwD4dn0oiMp2JJGUcwAkPpQPmnEXACUF7uGmdEGwkaMNNFg92OPPgQrjL5MvbZYueOKLahsIwbMLK4ZDX0M01Y__7Z-eUpPGzhD2-9FQc0iknJqqe2cfeG5iNclSj7ylzNjQWBRZSOP8Y08CPMwXV5nvGkRYVR-8Yr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="199" data-original-width="963" height="129" src="https://blogger.googleusercontent.com/img/a/AVvXsEiZfVgoYRI2e1s1Sleund-1NunHr4CwD4dn0oiMp2JJGUcwAkPpQPmnEXACUF7uGmdEGwkaMNNFg92OPPgQrjL5MvbZYueOKLahsIwbMLK4ZDX0M01Y__7Z-eUpPGzhD2-9FQc0iknJqqe2cfeG5iNclSj7ylzNjQWBRZSOP8Y08CPMwXV5nvGkRYVR-8Yr=w627-h129" width="627" /></a></div><div><br /></div>Well... maybe, nearly, not quite.... FFS... sigh....<br /><br /><div>I went around this cycle a few times, searching for that error code online etc... and then stupidly (I say that in a genius way), I then did this by mistake:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgp5o0DgsJHCmmrlw7LOiLsMdvby5_PEzSksEJlCDxF6jAMPBL7El-dQ8JP-p2DBjmGBz0-mBFtse8GmO6M2k0tUj7Bp6Ak-8skJg3WzGSKlTox32NZdnJcJhgZK4nGxhK1MS4961jA6RdS4rUw3b99DhIeGrhZPpS_PqsS7yvLXCzKSDBkROGFNcOQ2yCJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="423" data-original-width="1297" height="205" src="https://blogger.googleusercontent.com/img/a/AVvXsEgp5o0DgsJHCmmrlw7LOiLsMdvby5_PEzSksEJlCDxF6jAMPBL7El-dQ8JP-p2DBjmGBz0-mBFtse8GmO6M2k0tUj7Bp6Ak-8skJg3WzGSKlTox32NZdnJcJhgZK4nGxhK1MS4961jA6RdS4rUw3b99DhIeGrhZPpS_PqsS7yvLXCzKSDBkROGFNcOQ2yCJ=w631-h205" width="631" /></a></div><br />Well, of course it was a ME issue... there's me being all anti-Python and well, here you go:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhnsGaehOVm8QCQbbU9LjU0RFUCgV8vnw9KHsY2VOLlNKQCqBqOWWvCsQc6F3aXa9XR6k1kitmmKvrhNgRK-0mTkO1kv8Hi2WvIfRGzaopzp0y5oGVWUR2FaiS3r-0I5Nho2nu0_K2p92dx1K10V8TaGWBByNsA6qOHx_EA8ylP5tlNCB8iQTOPt0ppxEZe" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="309" data-original-width="551" height="291" src="https://blogger.googleusercontent.com/img/a/AVvXsEhnsGaehOVm8QCQbbU9LjU0RFUCgV8vnw9KHsY2VOLlNKQCqBqOWWvCsQc6F3aXa9XR6k1kitmmKvrhNgRK-0mTkO1kv8Hi2WvIfRGzaopzp0y5oGVWUR2FaiS3r-0I5Nho2nu0_K2p92dx1K10V8TaGWBByNsA6qOHx_EA8ylP5tlNCB8iQTOPt0ppxEZe=w520-h291" width="520" /></a></div><br />Oh look, it works...it detects the device, detects it's a SERIAL device (and not a USB device even though it is plugged into the USB cable, ho-hum) it detects the correct chip type, settings etc...<p></p><p>"Everything is AWESOME", as the Lego movie would sing about now.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh7M9Yyq0VFJIjNZbIzbmuBQwE3DG_PXluuSXhKk63n4g5lScqiz-SImM_7hsA4ptnYYRhI1DoWyUGayt7NOjZZ_Y9GlOpQch16-DTopE4kzr6jvgTQavIor0k0kQXT4mglZKWHMV5OZ3asW_C3exY_S5jNIPHVHoskU_Ko_hb_JIwDptgY7auf-iusAvuB" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="796" data-original-width="1065" height="451" src="https://blogger.googleusercontent.com/img/a/AVvXsEh7M9Yyq0VFJIjNZbIzbmuBQwE3DG_PXluuSXhKk63n4g5lScqiz-SImM_7hsA4ptnYYRhI1DoWyUGayt7NOjZZ_Y9GlOpQch16-DTopE4kzr6jvgTQavIor0k0kQXT4mglZKWHMV5OZ3asW_C3exY_S5jNIPHVHoskU_Ko_hb_JIwDptgY7auf-iusAvuB=w604-h451" width="604" /></a></div><br />As per the original web-page it says to run the ./device-install.sh command telling it to use the firmware file we downloaded earlier. As you can see in the output above, it does the whole detect the device cycle and it repeats about 3 uploads and reboots of the device<br /><p></p><p>As we're connected to the device, we can run the meshtastic command line app and find out more about the device settings (btw - this is a cheat-peek as I set these values via the Android app, but this just demonstrates that you could set all of these values from the command-line rather than from a BLE connected phone device.... am just saying, you don't NEED a phone, it's just simpler / quicker)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj6VQQEXdwCGnleY-T3S9HFVT5dI1wgOFSGiN5wmPrcviQWKsQ9u9KHIkpgXVQb6eDcpWU1CDG_r8trkJ77tIw6AK_CZ_IiU1oIPapZYga6yvj32fx6rXGGND7aCGWQ6-im_K6cpqkNL64Cn-vAKC6qCLhotppW2yZCTbQ8YFD7VfbPh8OsVUz_sPfHBVu0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="545" data-original-width="1288" height="267" src="https://blogger.googleusercontent.com/img/a/AVvXsEj6VQQEXdwCGnleY-T3S9HFVT5dI1wgOFSGiN5wmPrcviQWKsQ9u9KHIkpgXVQb6eDcpWU1CDG_r8trkJ77tIw6AK_CZ_IiU1oIPapZYga6yvj32fx6rXGGND7aCGWQ6-im_K6cpqkNL64Cn-vAKC6qCLhotppW2yZCTbQ8YFD7VfbPh8OsVUz_sPfHBVu0=w633-h267" width="633" /></a></div><br />As you can see there is a LOT of info there and it's all in nice sweet JSON format, I believe there is an API you can use to interact with, pretty sure it uses protobuff, so we could use Node-Red if we need to go down that road.<p></p><p>Appreciate that I've shared my super-secret AES256 encryption key there, but hey, y'know, like that's going to stay the same for longer than 2 days?!</p><p><br /></p><p>Now, comes the Android phone part. Download the app from the Google Play store, or alternatives, for ease of life I just went for the Play Store, I'll do the side-load at some point to see if the app gives me more features, but for now, "just get it working" is the goal.</p><p><a href="https://meshtastic.org/docs/software/android/installation">https://meshtastic.org/docs/software/android/installation</a></p><p>Once the app starts up on the Android phone, you need to setup a Bluetooth connection and pair the device. A random seeded number will be displayed on the T-Deck, just type it into the phone and job done.</p><p>Now you've done that, you'll see the device listed on the [Settings] tab page, a default name is assigned to the device. You can change it but I'm not too fussed atm. The one thing you DO NEED TO DO is to press literally on the word UNSET and select [EU_868], that will set the REGION frequency you want / need to use. As I'm in the UK (cough cough to the EU in the title, but hey-ho) that is the frequency to use and that will be the same for the other devices that we need to use, they can only "talk" to each other if they are listening/shouting at the same RF. The device does a lot of reboots - reminds me of Windows, if you know what you're doing with the CLI you can actually script everything and run it once and the device reboots once and everything is applied. If I get a lot more devices (more than 3...oh wait, yes, I'll have more than 3), then I'll write those scripts and share.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgRIbEGoSCg52tnmovyO4NcaAECJ5xBF93FwYT8DrI-i5CL3kjzuvWtSKuefreoCqLdg6fdiBB4TsZ1w8E43hRIH9xuf3DmNHFAXJNQDcfwsLwwqsb-SZeIkTSNZDc7rp_pSZpTZoxuCpgdK84eFxs-RX6QFIwLx5BGh78lTWBmhrBLQh9GMLI8dVsOfZul" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="437" data-original-width="410" height="415" src="https://blogger.googleusercontent.com/img/a/AVvXsEgRIbEGoSCg52tnmovyO4NcaAECJ5xBF93FwYT8DrI-i5CL3kjzuvWtSKuefreoCqLdg6fdiBB4TsZ1w8E43hRIH9xuf3DmNHFAXJNQDcfwsLwwqsb-SZeIkTSNZDc7rp_pSZpTZoxuCpgdK84eFxs-RX6QFIwLx5BGh78lTWBmhrBLQh9GMLI8dVsOfZul=w389-h415" width="389" /></a></div><br />Now, from the [settings] tab you select the device from the list, you'll see the text above it do some counting about libraries and modules and some numbers, once finished it'll show a [Connected to radio (t-deck 2.2.17.dbac2b1)] message<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgqRyOpn-jE29Rar5I8hWmj0P0mG4F4eJPtkMwGbH_K9kb1fqE_ExJXBm3n4v32cch-_ezikj-9Ppb9T7PuhtqK16Z8i9NK46HNvsXm4hGf1dJ1yUKjfcnPbUBkbcySi5d8-dkxzlda7MSAQnGIWjzuU7NdLdaYln-I_CGaYCD65IrazQd8-nSZfdZuSERs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="280" data-original-width="401" height="223" src="https://blogger.googleusercontent.com/img/a/AVvXsEgqRyOpn-jE29Rar5I8hWmj0P0mG4F4eJPtkMwGbH_K9kb1fqE_ExJXBm3n4v32cch-_ezikj-9Ppb9T7PuhtqK16Z8i9NK46HNvsXm4hGf1dJ1yUKjfcnPbUBkbcySi5d8-dkxzlda7MSAQnGIWjzuU7NdLdaYln-I_CGaYCD65IrazQd8-nSZfdZuSERs" width="320" /></a></div><br /><br /><p></p><p>oooo, clicking on those co-ords:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhsq3xRrkGRNk94Ufv7dEFWWgt6U7A4WjOj2V0zBY03Ep7OlBd_Y5ol5lMxNNY-xLSNrqQUyPAse2ar9Cxjt-z_vioXdm2sDiW8uUE8WyOhMKbnL71YJaX3SOIbAecWVA1phrxne2ilHRvsfxH-wJEr-qa8O6rnWTJDwYHy-IbZ6knf4zt0ErfMsq6-ygc3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="610" data-original-width="406" height="448" src="https://blogger.googleusercontent.com/img/a/AVvXsEhsq3xRrkGRNk94Ufv7dEFWWgt6U7A4WjOj2V0zBY03Ep7OlBd_Y5ol5lMxNNY-xLSNrqQUyPAse2ar9Cxjt-z_vioXdm2sDiW8uUE8WyOhMKbnL71YJaX3SOIbAecWVA1phrxne2ilHRvsfxH-wJEr-qa8O6rnWTJDwYHy-IbZ6knf4zt0ErfMsq6-ygc3=w298-h448" width="298" /></a></div><br /><br /><p></p><p>You even have a DEBUG output option too:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEieBDfh8Prb2HoM8_pQVr9D-bqS0p4MsjnLFE29zcE7zWTFFuGJNRL61dgPBJz3mMk3-hu5Bi3aQPPBbmomB3OpaNABGb7h_Wux5kET-IoxD6aLwt_YG6rPmgXna-A85SZokkgtVwH1TbY2zN5ePDBIU1Bo1XIaZQs6OPPkMzJjr5VANboQ5PS4BLD94al0" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="610" data-original-width="406" height="509" src="https://blogger.googleusercontent.com/img/a/AVvXsEieBDfh8Prb2HoM8_pQVr9D-bqS0p4MsjnLFE29zcE7zWTFFuGJNRL61dgPBJz3mMk3-hu5Bi3aQPPBbmomB3OpaNABGb7h_Wux5kET-IoxD6aLwt_YG6rPmgXna-A85SZokkgtVwH1TbY2zN5ePDBIU1Bo1XIaZQs6OPPkMzJjr5VANboQ5PS4BLD94al0=w339-h509" width="339" /></a></div><br />You can "see" what data is being sent by which part of the app - it does show the SENDMESSAGE too, which may be useful for debugging.<p></p><p><br /></p><p>That means the Android phone is now connected to the T-Deck. You can do more config:</p><p><a href="https://meshtastic.org/docs/configuration/radio/">https://meshtastic.org/docs/configuration/radio/</a></p><p><br /></p><p>It was at this point, funny of all funnies..I found this web page:</p><p><a href="https://meshtastic.org/docs/hardware/devices/tdeck/">https://meshtastic.org/docs/hardware/devices/tdeck/</a></p><p>That basically walked me through the above.</p><p><br /></p><p><br /></p><p><br /></p><p>As I say, I ordered another T-Deck, seems daft to only have one of them - you really NEED two of them for them to work properly.... That sounds like it will arrive in a few weeks time, as it's from AliExpress.</p><p>Until then, as mentioned I ordered the last three of these that were in stock:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgZt48_M8LH2IsR_5-aBCrG-hsAPMLwB9xSvOXBYln83lVfFqxwapTFYqi5m41SFqrHl2JJx7RHaM3A4Eh4uVvZRGcotf5VEKF7CCB9Kjr_a-0DHlG13unt2FL1bBhfPXcuyi1pyKQabE1aCOi09aU8QWxE3WMirv1wtiKPI6xDyqWnlVMzXsde4P9HAH9E" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="653" data-original-width="1216" height="299" src="https://blogger.googleusercontent.com/img/a/AVvXsEgZt48_M8LH2IsR_5-aBCrG-hsAPMLwB9xSvOXBYln83lVfFqxwapTFYqi5m41SFqrHl2JJx7RHaM3A4Eh4uVvZRGcotf5VEKF7CCB9Kjr_a-0DHlG13unt2FL1bBhfPXcuyi1pyKQabE1aCOi09aU8QWxE3WMirv1wtiKPI6xDyqWnlVMzXsde4P9HAH9E=w557-h299" width="557" /></a></div><br />They are a slightly different chipset, but they ARE ESP32 based... so the basic lora library code should work with them.<p></p><p>As they are ESP32 devices, I can write C code (yay!) in Arduino IDE and access the GPIO pins, that means sensors can be added / listened to and then that info. can then be transmitted as a message. Let's think of boring temp / humidity values in a greenhouse... or a seismic sensor that detects a mouse walking in the garden or a vehicle driving down a road - think massive big posh house with a nice big / long driveway, a very power hungry camera could be setup, but cameras are not the best and can be easily detected / cut off...however a nice seismic detector running on a super low power battery that can be "woken" up and send a "silent" mesh message to trigger an action, now that's more like it :-D</p><p>When they turn up, I'll see what I can do with them.</p><p>The code from here will do the basics:</p><p><a href="https://github.com/BSFrance/BSFrance-avr/tree/master/avr/libraries/LoRa">https://github.com/BSFrance/BSFrance-avr/tree/master/avr/libraries/LoRa</a></p><p>As a total distraction I found this guy, Eric Nam on You Tube and whilst I don't see the fascination of making an API call to chatGPT, I do like the usage of the UI library: LVGL.</p><p><a href="https://github.com/YnotZer0/ESP32Berry">https://github.com/YnotZer0/ESP32Berry</a></p><p>Okay, so digging into the LVGL, it 100% took me back to the early 2000's using Embedded Visual C++ 3.0 (I still have the CD-Rom somewhere upstairs) for coding mobile applications onto the Compaq PDAs... you write the C code and mentally "picture" the UI in your head and then you don't actually "see" the UI until you compile, deploy and run the app. We've not moved on much in 20years have we?</p><p>Anyway, as it's so samey, I'm sure I'll adopt it as it'll be so much easier for me to hit the ground running.</p><p>What I liked about Erics repo (and why I forked it), is that he put the effort into making a nice LVGL UI for his app, personally I would have just done a black screen with green text (in fact what I did do on the M5 Stack Cardputer!), so my lesson for today is "be more like Eric".</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhz-tbs_NV5cnkdDF9qzc8pFrQenIXVgyoJKszaEt7LjyBFxREkGsMoRzK2HKRoIe-rauSF0kMbOu-6Y8jpsVzvsboUvsUCTSD_PAUeyOFG9Yn6IymSn6L63zZ1tpqDA2nek7BCx-iWgc2dRsMbxY8BymuU3ELZEuxryoVutf1mOMmPCg8ieWjUhHkd8aSq" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="605" data-original-width="507" height="355" src="https://blogger.googleusercontent.com/img/a/AVvXsEhz-tbs_NV5cnkdDF9qzc8pFrQenIXVgyoJKszaEt7LjyBFxREkGsMoRzK2HKRoIe-rauSF0kMbOu-6Y8jpsVzvsboUvsUCTSD_PAUeyOFG9Yn6IymSn6L63zZ1tpqDA2nek7BCx-iWgc2dRsMbxY8BymuU3ELZEuxryoVutf1mOMmPCg8ieWjUhHkd8aSq=w297-h355" width="297" /></a></div><br />Actually, what I liked is the fact Eric split his code up nicely into sections, not too keen on the C++ usage of classes though, that brings back memories of arguing with "Daves" in Canada at Sybase/iAnywhere and the AvantGo days about the pointlessness of making a class / object when you're only going to make 1 instance of it on a mobile device. The overhead is not worth the coding, it'll also run 25% slower.. but hey... I'm nit picking there - the nicety is the fact that he shows a nice way to CALL an external REST API from the device, just so happens he calls chatGPT, however, I want to call an internal networked REST API that happens to be connected to my own custom trained LLM....<p></p><p><br /></p><p>And last but not least, with Meshtastic you can "sniff" the ATAK comms</p><p>There's a whole YouTube video on how to set it up and use it but here's the basic info:</p><p><a href="https://meshtastic.org/docs/software/community/community-atak">https://meshtastic.org/docs/software/community/community-atak</a></p><p><a href="https://meshtastic.org/docs/software/integrations/integrations-atak-plugin">https://meshtastic.org/docs/software/integrations/integrations-atak-plugin</a></p><p><br /></p><p>and some more info here:</p><p><a href="https://github.com/paulmandal/atak-forwarder">https://github.com/paulmandal/atak-forwarder</a></p><p>Basically you can now send CHAT messsages from within ATAK device applications and, well, go read the github repo yourself.</p><p><a href="https://www.civtak.org/download-atak/">https://www.civtak.org/download-atak/</a></p><p>Now put 2 & 2 together.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhhjaAN0mC0eTBJmCXhSXKG1a6N7xCoXJOd2nnVC8ePfQRuiBj5f6FGUZvm-It4fpUs86LJ8gxbRqcWoTadD3z4sV6iXqtolHiKeXcy10e-MAQ1y78MEDrtQ1elb0DBqt1silRv6ryg206oBcu3WMmAUxKUB2ipQiyRGWVQ2ETqGj5WO8850XI_TtUsEKvc" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="731" data-original-width="1165" height="390" src="https://blogger.googleusercontent.com/img/a/AVvXsEhhjaAN0mC0eTBJmCXhSXKG1a6N7xCoXJOd2nnVC8ePfQRuiBj5f6FGUZvm-It4fpUs86LJ8gxbRqcWoTadD3z4sV6iXqtolHiKeXcy10e-MAQ1y78MEDrtQ1elb0DBqt1silRv6ryg206oBcu3WMmAUxKUB2ipQiyRGWVQ2ETqGj5WO8850XI_TtUsEKvc=w621-h390" width="621" /></a></div><br /><br /><p></p><p>UPDATES to follow.</p><p><br /></p><p>oh, I forgot about the Arduino IDE problem.</p><p>So, yesterday when I plugged in the T-Deck it was recognised as:</p><p>[Deneyap Kart G] device</p><p>All seems good until you deploy and then it will error telling you that it is not an ESP32 S3 device.</p><p>Today, after the Meshtastic firmware update it now appears as a [TAMAC xxxx S3] device.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEioIqITDmsj4LBamuMAS2ipu7ic0W6zN6FsrqU0zDFEWwcjMuu3KFRuIwXwqEHyl5VsWVnoQh9eJgQTm-ALXA_LcZubD7U_fbqj1v6mhCdf1taOByKmNebFzjRg590MmCiNdRCN3OKI0s8Vv5MxOqr9YjMvDg7mJ-wOD6FH0U-JmqkA53mPK7_BHx4QuaO4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="872" data-original-width="1274" height="412" src="https://blogger.googleusercontent.com/img/a/AVvXsEioIqITDmsj4LBamuMAS2ipu7ic0W6zN6FsrqU0zDFEWwcjMuu3KFRuIwXwqEHyl5VsWVnoQh9eJgQTm-ALXA_LcZubD7U_fbqj1v6mhCdf1taOByKmNebFzjRg590MmCiNdRCN3OKI0s8Vv5MxOqr9YjMvDg7mJ-wOD6FH0U-JmqkA53mPK7_BHx4QuaO4=w602-h412" width="602" /></a></div><br />Again, that is NOT correct. You need to manually select the [ESP32 S3 Dev device]<p></p><p>These settings were valid for the LoraMessenger application</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgwuso4uNPTTN3-aJmSdXeYBgV12h6-RP8Pty4I6dbkcSvLo8p8xdoJfePDYzbUViCnwDXbmXt0BQFp2YqALu_0IzlCvaf5wrJL-0iwVE2hSkNd0YDHnfAajaAQuVaC7qnAMrLrYvMf-XILxsDRSoosRkgMvNQeH8L3Lix9_Hloowfxlnh3BHHLzoZSNxAF" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="872" data-original-width="1274" height="413" src="https://blogger.googleusercontent.com/img/a/AVvXsEgwuso4uNPTTN3-aJmSdXeYBgV12h6-RP8Pty4I6dbkcSvLo8p8xdoJfePDYzbUViCnwDXbmXt0BQFp2YqALu_0IzlCvaf5wrJL-0iwVE2hSkNd0YDHnfAajaAQuVaC7qnAMrLrYvMf-XILxsDRSoosRkgMvNQeH8L3Lix9_Hloowfxlnh3BHHLzoZSNxAF=w604-h413" width="604" /></a></div><br />We'll come back to that later on, no doubt.<p></p><p><br /></p></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-18962178473807875812024-01-14T22:30:00.110+00:002024-01-15T14:04:02.926+00:00Kaluma-9 (K9) update<p> UPDATE:</p><p>okay, <a href="https://tonyisageek.blogspot.com/2024/01/well-isnt-that-surprise-no-not-really.html" target="_blank">as previously mentioned I spent a little bit of time (<i>on a Saturday evening</i>)</a> looking to use a Raspberry Pi PICO W and a Robo Pico board, along with a very old Dr.Who K9 robot toy to create a functioning "modern day" object avoidance detection robot. No rocket science going on here, execpt me being me, I wanted to use JavaScript and NOT Python to control everything.</p><p>Why JavaScript? Well, when coding for Arduino you are using C. The cleanest and most sensible coding language to use (<i>ignore all that modern day OOP rubbish that people attempted to shove on/around it - that just ruined it, sometimes Software Architect are NOT right & if you accept that, you then chose what is best for the job, rather than forcing everything to fit what you know, bit of a life lesson there, me's thinks</i>) for the task at hand whilst running on constrained embedded devices. Well, I'm not using an Arduino atm, however, I might, so to make the "switch" easier, I decided to use Kaluma on the Pico W, which is in essence a JavaScript Engine - VERY similar to the one I was working with at <a href="https://duckduckgo.com/?q=avantgo&t=canonical&iax=images&ia=images" target="_blank">AvantGo</a> back in 2000-ish running on Palm PDAs and Compaq PDA devices along with an offline web-browser (<i>the ex-netscape devs had hacked it from the remains of the netscape browser wars - I'll write a book one day</i>), so simpler and easier for me to use.</p><p>As <a href="https://tonyisageek.blogspot.com/2024/01/well-isnt-that-surprise-no-not-really.html" target="_blank">mentioned previously</a>, I got so far on the Saturday and was going to return on the Sunday. Which, I actually did! okay, it was in mid-afternoon, but that was good enough.</p><p>I had the basics working, I had the ability to prod & poke the digital and analog pins, I could get readings from the HC-SR04 ultrasonic sensors, now, I just needed to get the motors to work. I noticed there wasn't actually a library / package available (<i>I now might write one?</i>), so I scanned the previous CircuitPython code and noticed it was actually compiled so I couldn't read it - I'm assuming that is for size/compression reasons? anyway, I noticed reference to frequency and duty cycle settings that indicated to me that the Python code was interacting with the motors as PWM (Pulse Width Modulation) and Kaluma has that as a native library - no package needed. I then set about doing some debug testing and lo-and-behold, within 5mins I was able to trigger the left motor and spin the wheel and then the right motor and the wheel.... and then I was able to control the speed, so I could go 'flat out' or I could go 'half speed'. Why is that important? well, that is actually how the K9 turns left or right! you go forward with the right wheel and backwards with the left wheel to turn left, but if you do it at full speed you spin on the spot! so you must be able to vary the speed to make it smoother and have more control.</p><p>This is left here more for my reference than anything else.</p><p>Appreciate that the code is not the cleanest or most efficient, but for PoC it works & does the investigation job. I even highlighted to myself that as I put this code within a loop I can never call .close() on the motors, not sure if that will ever be a problem? I'll come to that issue when I add a HTTP web-server into the equation, then I'll be able to handle doing such things as it'll be a re-write to cater for that sense of state-machine.</p><p><b>User Requirement: (LOL)</b></p><p>Right, my objective was to turn on the wheeled motors (<i>still using the original plastic gearing so they are mega-loud and retro sounding</i>) so the K9 is always moving and then use the HC-SR04 ultrasonic sensor to detect any objects within it's PING zone (<i>appreciate this is currently a limitation, but y'know start small</i>), if objects are >5cm and <10cm away, then move left or right until the detection distance is further - this indicates that there is a way past the object, decide which gave the most distance and then move forward in that direction, if the object is now <5cm away then either something materialised from another dimension infront of it (<i>or I placed an object there to freak it out</i>) or we didn't get an accurate reading before but now we do, so back up, basically go in reverse for a couple of seconds until the distance is >10cm. As I say, this is all basic object avoidance and will give the perception that the K9 is navigating around its environment "making decisions" about where to go etc... until it either runs out of battery or drives off the top of the stairs to its doom. That's sufficient requirements to get going & as with everything code-wise, as I shall show, you don't have to get it ALL working first go, I'll do it in increments, prove things out, learn from the behaviours and then build on that in the next step.</p><p><br /></p><p>Now let's turn that into some code. As you can see I've lent into the Arduino style template of declaration, setup (run once) and then loop, that runs forever.</p><p><br /></p><p><span style="font-family: courier; font-size: x-small;"><b>//import library to detect what Pico is being used - Pico W</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const { PicoCYW43 } = require('pico_cyw43');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const pico_cyw43 = new PicoCYW43();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//import ultrasonic sensors library</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const {HCSR04} = require('hc-sr04');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const echo_pin = 17;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const trigger_pin = 16;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const hcsr04 = new HCSR04(trigger_pin, echo_pin);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//import PWM library for motors</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const { PWM } = require('pwm');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const m1a_pin = 8;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const m1b_pin = 9;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const m2a_pin = 10;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const m2b_pin = 11;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const frequency = 50000;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const duty = 0;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const stop = 0;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const half_speed = 0.5;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const full_speed = 1;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const creep_fwd = 0.1;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const creep_bwd = -0.1;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const pwm_m1a = new PWM(m1a_pin, frequency, duty);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const pwm_m2a = new PWM(m2a_pin, frequency, duty);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//BIG blue LED</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>const bigblue_pin = 4;</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>console.log('init complete');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//just like arduino C coding</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b><br /></b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//setup goes code here</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//set motor pins as output</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>pinMode(m1a_pin, OUTPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>pinMode(m1b_pin, OUTPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>pinMode(m2a_pin, OUTPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>pinMode(m2b_pin, OUTPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//set bigblue pin as output</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>pinMode(bigblue_pin, OUTPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//pinMode(x, INPUT);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b><br /></b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>// loop code goes in here</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//this can be defined as EITHER of these, they are the same:</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//setInterval(() => {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>//setInterval(function() {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b><br /></b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>setInterval(() => {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //let's just have a heartbeat flash every second</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //could also do the BIG blue one as it's on the K9 and removes the need for this library code</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> if (pico_cyw43.getGpio(0)) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> pico_cyw43.putGpio(0, false); // turn-off LED</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> digitalWrite(bigblue_pin, LOW);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> } else {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> pico_cyw43.putGpio(0, true); // turn-on LED</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> digitalWrite(bigblue_pin, HIGH);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> }</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b><br /></b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //get the distance detected from the sensors</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> let dist = hcsr04.distance();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('get distance:'+dist);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> if(dist != null) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log(`Distance is ${dist} mm`);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> } else {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('Failed to measure distance');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> }</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> </b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //move motors depending upon the distance away logic</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //if object > 10cm (100mm) away = move forwards - go towards object</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //if object < 10cm (100mm) > 5cm (50mm) away = stop and think</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //if object < 5cm (50mm) away = move backwards - run away from object</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> if(dist < 50) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('obj less than 5cm away');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //move();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> } else if((dist >50) && (dist <100)) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('obj less than 10cm away but further than 5cm');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //move();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> } else if(dist >100) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('object further than 10cm away');</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //move();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> }</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> </b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> //as this will run FOREVER, we shall never call the pwm_xxx.close(); to close the ports of the PWM motors </b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>}, 1000); //loops every 1 second</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b><br /></b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>function move(obj, duty) {</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> obj.setDuty(duty);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> console.log('moving...'+duty);</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> obj.start();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> delay(500); // run at the duty speed for 0.5seconds</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b> obj.stop();</b></span></p><p><span style="font-family: courier; font-size: x-small;"><b>}</b></span></p><div>What happens when you run it? Here's some debug output:</div><div><br /></div><div style="text-align: left;"><span style="font-family: courier;"><b>> .load<br />init complete<br />get distance:null<br />Failed to measure distance<br />obj less than 5cm away<br />get distance:181.05<br />Distance is 181.05 mm<br />object further than 10cm away<br />get distance:94.52<br />Distance is 94.52 mm<br />obj less than 10cm away but further than 5cm<br />get distance:16.49<br />Distance is 16.49 mm<br />obj less than 5cm away<br />get distance:135.32<br />Distance is 135.32 mm<br />object further than 10cm away<br />get distance:168.30<br />Distance is 168.30 mm<br />object further than 10cm away</b></span></div><p><br /></p><p>As you can see, the init happened, for some reason the first scan failed, but then it worked, it pinged to the full distance 18cmm away, which is about right for where the sensors are placed and where a monitor shelf is in front of them. Then I put my hand in the way and we got a 9.4cm distance, which was detected to be >5cm and <10cm and then I moved my hand a lot closer to 1.6cm and we got the <5cm detection, then I moved my hand out of the way completely and if I'd let it go a few more times it would have resorted back to the 181.05mm value.</p><p>So there we have it, the code is doing what it should, you can see the commented out move() code to move the motors for the driving piece.</p><p>I'm umming and erring at this point, do I get the WiFi connectivity coded into place so I can use a web-browser wither on the phone or laptop to then drive/control the K9, I'll be needing this for when the XIAO ESP32S3 camera is plugged in for visual detection & recognition, or I just do the simple coding for now and rebuild the codebase next week?</p><p>Whilst I ponder here's a short video to prove that the PoC motor code does work!</p><p>Here's the K9:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='564' height='469' src='https://www.blogger.com/video.g?token=AD6v5dwB2lfQPziHxDoEm7KM_A0X2f37erZzuflhQ-snyOdTRcMVW9Nclx3dkrfLA8QuyvDA_a6Q2Jbc7FLjuMV6gQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p><br /></p><p>and here's the code executing and debug output (that led into the code above)</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='433' height='360' src='https://www.blogger.com/video.g?token=AD6v5dxKoEEPPMOhcYfAlrifF_3_RUnbSqyZEhm3QX2ccxyhtXEsYPmUJj2Rdm60ueQOKGul_YqSANNA0iSHfeCwbA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p><br /></p><p>....</p><p>on that note, I'll go read all about "<a href="http://www.vielewelten.at/pdf_en/dimensions.pdf" target="_blank">Dimensions</a>" by Mr.Vallee & then get some sleep & get back to the day job tomorrow.</p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-35952736409156214152024-01-13T19:52:00.001+00:002024-01-13T19:52:05.722+00:00Well, isn't that a surprise!?... no, not really<p>Back in <a href="https://tonyisageek.blogspot.com/2023/12/its-that-time-of-year-again-yep-its.html" target="_blank">mid-December 2023, I made a statement</a>, more for myself than anything in an attempt to "force myself" to put aside some time for "me" and do something I want/need to do.</p><p>Did I do it? Did I b*ll*x. Why not? well, you guessed it. Yep, those underpaying, whip cracking, slave masters that I am forced to serve insisted that I dedicate my time to earn them more mulla. sigh. So, I wrote the beginnings of an application that will become a COrE system that was just enough for me to hand-over to 3-4 other people to continue with. I think they'll take it further with minimal guidance from myself and that will "free me up" to at least get some "me" time.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhBee78_iTd2xwtOMR0C27EqWzfb6pgQx9ajbIhhd8rl0rVnS-kJ_-zGfhfvIkxDNYqyD5xiMpEBP3D6I5NF7iRf8lE5vrUSZlBsBC2xK40Jvyijb8SOeefubaYUlvKRiBGpRRu0CO5LEdOHJmovJGRIEQtiIYHzstD977aIiLat2hXy6UG5ua3huAsgjYj" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="796" data-original-width="1025" height="476" src="https://blogger.googleusercontent.com/img/a/AVvXsEhBee78_iTd2xwtOMR0C27EqWzfb6pgQx9ajbIhhd8rl0rVnS-kJ_-zGfhfvIkxDNYqyD5xiMpEBP3D6I5NF7iRf8lE5vrUSZlBsBC2xK40Jvyijb8SOeefubaYUlvKRiBGpRRu0CO5LEdOHJmovJGRIEQtiIYHzstD977aIiLat2hXy6UG5ua3huAsgjYj=w614-h476" width="614" /></a></div><p></p><p>Saying that, it took until 6pm on a Saturday in mid-January for me to get around to starting what I wanted to do - and boy was it really small BABY steps, but at least I'm forcing the issue on myself. Why did it take so long? well, I got a tiny bit distracted by the dimensional blurs going on in the good old USA atm, it's not in mainstream media so you could very well have missed it & I would say 90% probably have, I'll just say, bayside mall miami, and leave you to your own sleuthing. </p><p>Right, back to what I was doing. K9 using a PICO W driven by JavaScript. YES, Java-F*cking-Script, none of that Python b*llsh*t that we are being force fed by everyone, I initially setup the Pico W to run on top of a Robo Pico board and that forced me to use CircuitPython, which was "fine", I got it tested and proved out the point of what I wanted to do.....but y'know, as I've always said, Python is cardboard - it's great for testing / proving a point, but it has now become the lazy option for deployment and real production use. I actually wanted to (<i>and will do</i>) write the code in C. like it should be done.</p><p>However, I reference a while back a project called, KALUMA, that is a JavaScript engine that runs on the Pico and Pico W and you can write good old JavaScript code to interface with the GPIOs and devices connected to your Pico. Yes, you could argue that I'm just swapping one bad thing for another, however, I've been coding JavaScript since the mid-90's, both client side and server-side (<i>many many years before noodeJS was even a twinkle in someones eye</i>), it has served me well, it IS scalable (<i>don't believe the Java naysayers on that one</i>) and it is "closer to C", so easier to port over when I need to do that & that's the whole point. Yes, Python has C libraries underneath it & a lot of people like to point that out to me - however, it's the coders who then write the Python code BADLY that destroys any form of performance or credibility, they'll use libraries like pandas to load dataframes and leave 5-6 of them floating around in memory - rather than write a proper piece of code that uses a SQL statement to just get the data that is needed and then put it into an ARRAY. yes, an ARRAY. that thing we've had since the 1970s, that is lovely and does just what we need it to do.</p><p>I digress.</p><p>So, <a href="https://kalumajs.org/" target="_blank">Kaluma</a>. Great idea, much appreciation out to the creator. respect.</p><p>I then hooked up the K9, figured out that it had CircuitPython on it, and then extracted the "test code" that I had on it - it was not genius. It was super basic. I seem to have "lost" the motor control code that I was using for controlling the motors for FWD/RWD and LEFT/RIGHT - but as it's just GPIO pins, it'll be easy-peasy to just output what is needed.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhTOPGKSLmFiSV4Az3nSFGfe7FJqDvjkdw26Jf-TbGU1KBYd4WdXJ-Z9UgcdyaIRnN6E7kDPY3WyoxrK2f23peIK4eEa7C0LqPtoYKMEojl9R6J-x5PbOrZIzl_t45W4e3qn-wUzuV_JQjRQqo0u2Ia0cqd0LRXlokP04x6bsfKPAs_9JICn01Zp6ASEnQC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="707" data-original-width="740" height="451" src="https://blogger.googleusercontent.com/img/a/AVvXsEhTOPGKSLmFiSV4Az3nSFGfe7FJqDvjkdw26Jf-TbGU1KBYd4WdXJ-Z9UgcdyaIRnN6E7kDPY3WyoxrK2f23peIK4eEa7C0LqPtoYKMEojl9R6J-x5PbOrZIzl_t45W4e3qn-wUzuV_JQjRQqo0u2Ia0cqd0LRXlokP04x6bsfKPAs_9JICn01Zp6ASEnQC=w472-h451" width="472" /></a></div><p></p><p>As you can see, simple. I have an HC-SR04 ultrasonic sensor strapped to the front of the K9 to detect objects in front of it, I just wanted to then write super simple code that then powered the K9 forward and then calculated how much to turn left or right to avoid objects and see how long it was before it drove off the top of the stairs to a clunky / smashy death at the bottom. Well, hopefully that won't happen, but you know & I know, it will.</p><p>So, back to Kaluma.</p><p>I <a href="https://kalumajs.org/download/" target="_blank">downloaded the .uf2 file from HERE</a>:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbBpbsC7c8XmdMZpAyHuCV7sGrm1G_6vV_k_se2mgBE772NOArCPG4wFTca6nzv3mxsF8PBAXqlj3fyTtVnoO8nmpzAnX6KZ8st-rLX4q3dXDSxQbqHxo1SuTnB1JCuwowE6jW6djGDQchfKnzK26xxTbJpBpzCsj641YX4vvJY0LXbNu-9OYP1Lt5E-EW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="489" data-original-width="669" height="310" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbBpbsC7c8XmdMZpAyHuCV7sGrm1G_6vV_k_se2mgBE772NOArCPG4wFTca6nzv3mxsF8PBAXqlj3fyTtVnoO8nmpzAnX6KZ8st-rLX4q3dXDSxQbqHxo1SuTnB1JCuwowE6jW6djGDQchfKnzK26xxTbJpBpzCsj641YX4vvJY0LXbNu-9OYP1Lt5E-EW=w424-h310" width="424" /></a></div><p></p><p>Did the old [bootselector] button press and drag and dropped it over and kaboom. That bit was done.</p><p>Right, how do I morph the code from above to now do what I need in JavaScript? Well, first things first, we need to "HELLO WORLD". it's the law.</p><p>It smoke tests the environment / setup and makes sure everything is tickety-boo.</p><p>a quick,</p><p><b>$ mkdir kaluma</b></p><p><b>$ nano index.js</b></p><p><b>setInterval(function () {</b></p><p><b> console.log("hello from pico, every 1 sec!");</b></p><p><b>}, 1000);</b></p><div><i><b>$ctrl+x+y</b></i></div><div><br /></div><p>Then it was time to upload it. You DID install the CLI, didn't you? Go <a href="https://github.com/kaluma-project/kaluma-cli" target="_blank">HERE</a>.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjrpRfB1pyr45KTB5-w_b9gSmgHdwOA6xaJLhpXApgIY57wVtp1u1pPGKwScc3YCGzBbYyo6XACwnlfDbnnF8iGGc7YrS-TA6jFK-_tQZu23Uuvv2pwVO0JkJnGoIOYucSoHPzVaSss6et3EOmJ6VgyWCtlD4Y9aixzBubbzUgJaXyB1rBI--NOqo0cFydm" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="153" data-original-width="668" height="126" src="https://blogger.googleusercontent.com/img/a/AVvXsEjrpRfB1pyr45KTB5-w_b9gSmgHdwOA6xaJLhpXApgIY57wVtp1u1pPGKwScc3YCGzBbYyo6XACwnlfDbnnF8iGGc7YrS-TA6jFK-_tQZu23Uuvv2pwVO0JkJnGoIOYucSoHPzVaSss6et3EOmJ6VgyWCtlD4Y9aixzBubbzUgJaXyB1rBI--NOqo0cFydm=w552-h126" width="552" /></a></div>and as it says, of course you need NodeJS - as I said earlier, it is needed nowdays, go get it.<p></p><p>Now you can push that index.js file onto the Pico to execute.</p><p><br /></p><p><b>$ kaluma flash index.js </b></p><p><b>connected to /dev/ttyACM0</b></p><p><b>flashing .</b></p><p><b>[85.00 Bytes] flashed</b></p><p><br /></p><p>NOTE: okay, a little bit of an assumption here, you may or may not appreciate this to start off with, the code above is set in a setInterval() function, what does that mean? It means that it will loop that function every X milliseconds (<i>the value you put at the end</i>), it also means that once you have flashed it and it has uploaded it will execute straight away and execute every X miiliseconds, in our case above, every second.</p><p>Why is this important - well, we'll get to that in the example in a minute and you'll see you can have finer control, if you want, but will also stop you from scratching your head wondering why the code is not running.</p><p>Now, to "see" the console.log, you need to have installed the CLI as mentioned above, in linux we'll just use screen to take a look:</p><p>$ sudo screen /dev/ttyACM0 115200</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjzFnhONhMVbR3XBx42OwZpqNy4tnXcMz-Yj2-xJS1s1pErStp11dZa0r4srrSLG_hKQW3SpcM6Yc1MPGfyAKQP4HeKtPz0DSHVFMgWkhlZ_r1n0ymsVKyqyzMh7H5sKz3aqdSsJo1EBh_Yw52RT1ETqrwvt6BDHij9Q3O_ZVz0Yq8YrDwCP7tBnum7hRp6" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="256" data-original-width="670" height="122" src="https://blogger.googleusercontent.com/img/a/AVvXsEjzFnhONhMVbR3XBx42OwZpqNy4tnXcMz-Yj2-xJS1s1pErStp11dZa0r4srrSLG_hKQW3SpcM6Yc1MPGfyAKQP4HeKtPz0DSHVFMgWkhlZ_r1n0ymsVKyqyzMh7H5sKz3aqdSsJo1EBh_Yw52RT1ETqrwvt6BDHij9Q3O_ZVz0Yq8YrDwCP7tBnum7hRp6" width="320" /></a></div><br />there we go. we know it's working as it should. btw - it is <i>ctrl+a, k, y</i> to get out of screen! You need to exit from it everytime you flash upload otherwise the port is locked.<p></p><p>Right, so now onto the good stuff....</p><p>I was about to write my own code to do the code that was hidden behind the scenes in the "sonar" Python library, when I thought, there's bound to be a nodejs package for Kaluma that does this.</p><p>Yep, here's the page that lists the <a href="https://kalumajs.org/packages/" target="_blank">current packages</a>:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjCWNSZc4ZcGhBJCRqrBL2Q2i-ba_fZTB441nfv-weCzxSwDnSQVmo5r6TVM7hvTezMMTB8LmUAFcGlMaV_HUfL2aPciB4j0WKqmKrIBzubvajjCDlEBXIjXJsln0Mcwfm8cWE1g1aWO2IQEaJWCdUqyyr0YKeDXmw1Fg0yHY-3VQoQfIH6b9rur85TvcrE" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="902" data-original-width="1283" height="314" src="https://blogger.googleusercontent.com/img/a/AVvXsEjCWNSZc4ZcGhBJCRqrBL2Q2i-ba_fZTB441nfv-weCzxSwDnSQVmo5r6TVM7hvTezMMTB8LmUAFcGlMaV_HUfL2aPciB4j0WKqmKrIBzubvajjCDlEBXIjXJsln0Mcwfm8cWE1g1aWO2IQEaJWCdUqyyr0YKeDXmw1Fg0yHY-3VQoQfIH6b9rur85TvcrE=w447-h314" width="447" /></a></div><br />and here is the one we want:<p></p><p><a href="https://github.com/niklauslee/hc-sr04https://github.com/niklauslee/hc-sr04" target="_blank">https://github.com/niklauslee/hc-sr04https://github.com/niklauslee/hc-sr04</a></p><p>Right, let's setup a new folder for this:</p><p><b>$ mkdir hcsr04</b></p><p><b>$ cd hcsr04</b></p><p><b>$ npm init -y</b></p><p>This creates a package.json file - this will be familiar to nodeJS coders. you can see how this works now. Now type:</p><p><b>$ npm install https://github.com/niklauslee/hc-sr04</b></p><p>This downloads the node_module library into the current folder. Now we can create an index.js file, let's take a variant of the example:</p><p><b>const {HCSR04} = require('hc-sr04');</b></p><div><b>const hcsr04 = new HCSR04(16, 17);</b></div><div><b>console.log('init hcsr04');</b></div><div><b><br /></b></div><div><b>let dist = hcsr04.distance();</b></div><div><b>console.log('get distance');</b></div><div><b>console.log(dist);</b></div><div><b>if (dist !== null) {</b></div><div><b><br /></b></div><div><b> console.log(`Distance is ${dist} mm.`);</b></div><div><b><br /></b></div><div><b>} else {</b></div><div><b><br /></b></div><div><b> console.log('Failed to measure');</b></div><div><b><br /></b></div><div><b>}</b></div><div><br /></div><div>Now, the eagle-eyed one's of you will look at the example and then the code above and say, hey wait you got the 16 and 17 the wrong way around - nope. If you check the original CircuitPython code above, it tells you what the trigger pin and echo pin are set to. Also, if you look at the actual Robo Pico board you can see the GPIO numbers against the yellow and white wires that you can trace back to the sensors and visually confirm what is connected to what. Hence, I changed it around.</div><p>Now, uploading the code here is a little bit different. If you just do the same command as before. Nothing happens. You scratch you head for a bit, you think you did something wrong, you re-upload the hello-world, that works, you come back, you then go into the $ screen and then you type $ .help you have a dig around and then you finally go back to the website where they explain you need to use the BUNDLE command to upload libraries, it's simple and combined into a single command:</p><p><b>$ kaluma flash ./index.js --bundle</b></p><p><b>bundle.js [2.11 KiB]</b></p><p><b>connected to /dev/ttyACM0</b></p><p><b>flashing ...</b></p><p><b>[2.11 KiB] flashed</b></p><p><b><br /></b></p><p>and then you switch to $ screen .......... and oh, nothing. hmmm....just a flashing cursor.</p><p>press [Enter], type: $ .help</p><p><b>> .flash -s</b></p><p><b>>2158</b></p><p>Oh, so that kinda matches, you did upload everything okay, but why is it not running.</p><p>Remember what I said earlier, the code is NOT set to auto-run, you have to tell it to run!</p><p><b>> .load</b></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjl0MlO9hV1mJGBuxe4RO1g96UW3AeCtpE3Er0QFmsGfL46A_mBvjW0ekZb9Ln5z4xPO5KoszwWVH8xPYi4rFX_PwU39WDQdCrJUKpHVD6CYnmPLWb-IoniOsku5EtXLHkta6OIGyj2IZb2hJQqYYxEMlEv5Qhwqa-Fxvb_ac-OQrT7Nnp-5sThOgcPQXcb" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="358" data-original-width="342" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEjl0MlO9hV1mJGBuxe4RO1g96UW3AeCtpE3Er0QFmsGfL46A_mBvjW0ekZb9Ln5z4xPO5KoszwWVH8xPYi4rFX_PwU39WDQdCrJUKpHVD6CYnmPLWb-IoniOsku5EtXLHkta6OIGyj2IZb2hJQqYYxEMlEv5Qhwqa-Fxvb_ac-OQrT7Nnp-5sThOgcPQXcb=w381-h400" width="381" /></a></div><br />I put my hand infront of the ultrasonic sensor and the value it shows it how far away it detected my hand from it. awesome!<p></p><p>Now... one thing that IS nice is that from that $ screen session you can actually type code directly, so you can TEST things too. The HC-SR04 sensors are Analog pins and the Motors are Digital Pins, so we'll use different commands in the code to interact with them, which I'll do tomorrow.</p><p>However, I can do a quick test to see if I can turn the Pico W onboard LED on and off (<i>well, it's actually the Robo Pico blue LED as that overrides in my case</i>), to do that...</p><p><b>> pinMode(0, OUTPUT);</b></p><p><b>> digitalWrite(0, HIGH);</b></p><p>turns on blue onboard LED</p><p><b>> digitalWrite(0, LOW);</b></p><p>turns off blue onboard LED</p><p>We can add that into the code now as we've tested that we have the right GPIO values. I'll probably do the same for the Motors as they are GPIO 10,11 & 8,9 - I've also noticed that on GPIO 4 I have a BIG blue LED connected too, as well as some other things connected inside the K9 too - again, it's all just GPIO INPUT or OUTPUT settings, so should be easy stuff to get this up & running tomorrow.</p><p>Yep, a quick test proved that lights up nice and BLUE!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgiAeA3YrGcuihImUizFABYiUXwsn3mUeki4-mfO6qElCJntcUtnaJsgZG1Do7nLEp1BWVukOsJnJ4UQ0fUJ486Msjg-6Gq5YCFZ2iBREkYABvBL-jHktJT3b1ptMqbegA0CRxDmgzuIpna8TN136e2IF59gRBu4PWReLOBnVm8HUSCW7h96RE1Dc01CnPv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="737" data-original-width="539" height="443" src="https://blogger.googleusercontent.com/img/a/AVvXsEgiAeA3YrGcuihImUizFABYiUXwsn3mUeki4-mfO6qElCJntcUtnaJsgZG1Do7nLEp1BWVukOsJnJ4UQ0fUJ486Msjg-6Gq5YCFZ2iBREkYABvBL-jHktJT3b1ptMqbegA0CRxDmgzuIpna8TN136e2IF59gRBu4PWReLOBnVm8HUSCW7h96RE1Dc01CnPv=w325-h443" width="325" /></a></div><br />Okay, so this is all lovely and dumb and stuff... but it's not really genius is it? agreed.<p></p><p><a href="https://www.seeedstudio.com/XIAO-ESP32S3-Sense-p-5639.html" target="_blank">I have ordered a couple of these devices though</a>. I have a week off in a few weeks time & <a href="https://www.instructables.com/Face-Recognition-Based-Attendance-System-Using-XIA/" target="_blank">guess what I'll be doing</a>.</p><p>The device is REALLY small - and it packs a punch for having Machine Learning capabilities onboard - now the K9 will be able to not only "see", it will "detect" what the obstacle is and then determine the course of action it wants to take, ie. if it recognises the CAT, chase it... but also detect the stairs, to prevent a smashy messy death.</p><p>I purchased <a href="https://thepihut.com/products/seeed-studio-xiao-esp32s3-sense" target="_blank">my 2 device from The PiHut</a> - why? cos they are reliable and are really helpful if you every need assistance or need to do a return from any reason, used them for years. great people.</p><p>Why 2? you have to ask!?!</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi4xik-iN7lxdiynmKEIS6BR04YbiczsOLuAJwA222KbjkWIJGkEitCejRYyFpK9rzoMK5B372PPZpX9-_jcYCO2PetjG8M74as5uomAgEF5Kz2SaHB6erlxW8DpoAwtM2rrWtZQm8jCrxb5zHWTC49jI5hDM00OXq4LrNk0q_TRIC-YH3NcHhV3PbRJbXg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="443" data-original-width="585" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEi4xik-iN7lxdiynmKEIS6BR04YbiczsOLuAJwA222KbjkWIJGkEitCejRYyFpK9rzoMK5B372PPZpX9-_jcYCO2PetjG8M74as5uomAgEF5Kz2SaHB6erlxW8DpoAwtM2rrWtZQm8jCrxb5zHWTC49jI5hDM00OXq4LrNk0q_TRIC-YH3NcHhV3PbRJbXg" width="317" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiTen9abz3z1Uv2sCPofmEkv8_He-a3dhc5RkNuvSkI0NGeZjmQVz1VG-ckTklyih_brC5jdlwEGFyPhWFJXP_Pq1g8nvvdfqix2Hn5Yb7dTkCnpLHwfuONg69tmYMpeq-DBiQ04EOJArupPNPxm67gxYHVq9RpEhjMyfidZvvFJq7EHfacrhmC6MhkxK6Z" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="443" data-original-width="585" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEiTen9abz3z1Uv2sCPofmEkv8_He-a3dhc5RkNuvSkI0NGeZjmQVz1VG-ckTklyih_brC5jdlwEGFyPhWFJXP_Pq1g8nvvdfqix2Hn5Yb7dTkCnpLHwfuONg69tmYMpeq-DBiQ04EOJArupPNPxm67gxYHVq9RpEhjMyfidZvvFJq7EHfacrhmC6MhkxK6Z" width="317" /></a></div><br /><br /><p></p><p>Now, when I say this is SMALL, I mean it. Packs one hell of a punch. I should be able to hook up the GPIOs between this & the Pico W so that I'll also be able to stream the video too... if I really want / need to.</p><p>Once I've proven out what I want to do with this setup.... I'll move onto the REAL ROBOT. hint hint nudge nudge wink wink, say no more.</p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-13313245066197868442023-12-17T11:36:00.017+00:002023-12-20T15:31:52.467+00:00it's that time of year again..... yep, it's time to make TonyBot!<p>What usually happens around this time of year is that I get an escape from the daily work/work life demands & I remember the things that "I" want to spend my time working on. Sounds odd, doesn't it? "Isn't that what your 'free time' is for?". LOL. you funny. you no work for the company I work for. They own your soul & you have to worship the god of commerce, else they throw you to the pit of redundancy and no-one wants that now you've "got a short runway" in a post-50yr old life span.</p><p>Wow, that digressed quick - I must stop watching <a href="https://www.youtube.com/geoffbuyscars" target="_blank">Geoff buys cars</a> on YouTube, he has a lot of answer for :-)</p><p>So, back to the point - robots! yes, I've been faffing about with robots in one shape or form since about, well, since I can remember really, dabbed a bit in the early 90's, mid-90's, then again in early/mid 2000's & then when OOPIC came out, I dabbled there & then the Arduino early days. Did a load of stuff with ROS (Robotic Operating System), visited / met lots of people making real robots, got distracted by day work/work, dabbled a bit more, built things, put them on shelves, came back to the 5+yrs later, move onto the latest tech. repeat. repeat. repeat. & yep, you guessed it, I'm about to repeat it again.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBpEPeLn29PNxvCtTLpzxn6taEEW551uHDu1CFXFAW9gxTr1Oavss1PM8mFRrtbJBx8Dg2JeOr4BJapNjeV7FOZXAkbbyY3FTsF53aH7Ne_AuxhGMemWzb_R_Uxnfi52qMBs-j-A6vB5H2nASRqd4GB2qVEixCqcwhwdRLgBZSdWBNobKmBmZheiUouwAh" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="818" data-original-width="1060" height="492" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBpEPeLn29PNxvCtTLpzxn6taEEW551uHDu1CFXFAW9gxTr1Oavss1PM8mFRrtbJBx8Dg2JeOr4BJapNjeV7FOZXAkbbyY3FTsF53aH7Ne_AuxhGMemWzb_R_Uxnfi52qMBs-j-A6vB5H2nASRqd4GB2qVEixCqcwhwdRLgBZSdWBNobKmBmZheiUouwAh=w638-h492" width="638" /></a></div><br /><br /><p></p><p>However, I'm going to change the parameters a bit this time. The old saying about repeating the same thing again & again & expecting a different outcome results in madness (or is madness?), well, the technology has moved on yet again - but some of the right people have been involved with it.</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="471" src="https://www.youtube.com/embed/YiPwSJbCHW8" width="568" youtube-src-id="YiPwSJbCHW8"></iframe></div><p>Just for giggles - here is a video I found, selling "Tonybot". now...I believe I built & coded one like this, oh, it has to be around 20years ago now, so back in 2002-2003-ish, it was fun figuring out how to get all the servo's to work together, in fact 90% of the work was getting the controller code to work the servo's, get feedback & act on that feedback (rinse & repeat). I do have memories of LOUD & noisy servo's & the faint whiff of burning electrical motors - oh & batteries were HUGE back then, so no real mobility.</p><p>Anyway, leaving this here as a 'simple starter' - if you are someone who has never engineered or built something like this YOURSELF, do not judge, yes, you may look & say, "pffhhh..... childish, pathetic, it's no Boston Dynamics, is it?".... I challenge you, go make one yourself, from scratch, don't go cheating and buying a kit, or copying & pasting code from stackoverflow / chatGPT, do it ALL yourself. Then you will have an understanding & appreciation & respect for what it takes. Why? well, once you've done that, you really respect what has been achieve by other people.</p><p>For instance, it's not simple to make something walk on 2 legs, with 2 feet:</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="420" src="https://www.youtube.com/embed/kECAdJEaJlk" width="505" youtube-src-id="kECAdJEaJlk"></iframe></div><br /><p>I know I'll get it in the ear that I'm being anti-Gen Z (again), however, this time, I am not - I am more anti-lazy-b'stard. <a href="https://www.theregister.com/2023/12/19/windows_nt_30_years_on/" target="_blank">There is a huge pocket of people that our society has created (thanks Apple), that are "users", they are not creators or innovators, they are straight out "users" and sadly, they seem to have an opinion & influence on the rest of society</a>.</p><p>"Why so bitter, Tony?" - well, simple. I wanted to have a flying car by now. I wanted to have a robot helper / assistant in my home helping me with daily tasks. Not some cheap gimmick that is a glorified speaker & microphone that can turn lights on & off, play a song, set an alarm of buy me crap, I can still do all that myself, what I wanted to have by now is a cool / proper robot that can help me in the kitchen, the living room, the garage, the bathroom (not what you think) and help with the garden too - in fact, that is where I started back in the 2000s, wanting to build a GardenBot (ala "Silent Running" style) - not a roomba that runs on grass instead of carpet, a proper GardenBot, one that can trim bushes, identify what is a flower, flower stem, rose, rose stem from a weed. That is the future I was sold. It is 2023 goddamit & we're still navel gazing and getting excited that we can record 15-sec videos and share them with other people (I was building that capability for companies back in 2001!). basically, we've stalled. stagnated. paused. and, y'know time marches on. I have just recently injured my elbow/arm. It's the one I need to do 75% of my daily tasks, this got me thinking. Okay, if I get it removed, it'll be cool, I'll get a prosthetic arm, I'll be semi-cyberpunk. However, it'll literally cost me an arm (and a leg) as I'm over the certain demographic age, so I'd have to sell something major in order to fund it. This would then allow me to continue with my daily life. However, this is an extreme example. I would much prefer to have a personal robot that can do the things I can no longer do, due to that injury. I need to work on my kustom car in the garage, that requires being able to grip and hold the pressure - same a gardening, having a robot arm will help with that a lot - but wouldn't it be great if there was a robot pal to help you do that.</p><p>I like these, even if they do resemble a bunch of waddling ducks.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhKlcvialNoDImx9g25-zQpE0U2HK106NWjQX1KMpI4U1H7gfZ-1YDwxOfvZ1vH_1Vm0rvkSbtxCnjwY8CTsGXcvpewaaSAMqS6Ny2IC6CqKEU63yr6vx3dZTsV5LstPbUUuGe-KHaunN6H_G-UW2i3RJUAtTPcQqHdHLWqnHUoyi3rTz5bddofXeX5H7Yr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="554" data-original-width="773" height="426" src="https://blogger.googleusercontent.com/img/a/AVvXsEhKlcvialNoDImx9g25-zQpE0U2HK106NWjQX1KMpI4U1H7gfZ-1YDwxOfvZ1vH_1Vm0rvkSbtxCnjwY8CTsGXcvpewaaSAMqS6Ny2IC6CqKEU63yr6vx3dZTsV5LstPbUUuGe-KHaunN6H_G-UW2i3RJUAtTPcQqHdHLWqnHUoyi3rTz5bddofXeX5H7Yr=w595-h426" width="595" /></a></div><br />I mean, it's not like we haven't got all the technology now - we do. If you list out all of the components that are required, from the hardware through into the software, we actually DO have everything that is needed - however, corporations don't want to (1) take the risk (2) invest such huge amounts on a gamble (think of how many crap sequel movies keep coming out, or Marvel one's, no-one wants to take a risk on something new, same issue here), (3) be the first to fail &/or get into a lawsuit area. Yes, yes, yes, I know about TESLA-bot, great, but the point about that isn't to help with the above, it's about Industrial usage, same with Amazon - they have bigger visions. Are you going to send humans to Mars? no,you'll send robots that can be controlled by humans to perform the human-esque tasks first & then when humans eventually arrive they can take over. Why then make the robots human-esque? because of that hand-over, if you make the robots too unique for each task, you'll have a dependency on them afterwards & well, robots are expensive, humans are cheap. You know Mars is going to be a sh!tshow when it happens, it'll be worse then going back to the Victorian class era. anyway, digressed again :-)<p></p><p>The Industrial robot market has a LOT of rules & regulations, for a reason, they mostly have niche tasks with specific regulations - the assessors can govern & control / manage those robots nicely. What they do not have is a blend of those tasks, rules, regulations, governance, control/management - because it is too vast an area to cover, it tips the balance of effort versus financial return. There you go, about 1000 words to say that last sentence. It's all about money. Which is a shame & is annoying, why can't we remove money from the equation? We should do / work on things to help human-kind, not grant more fake-worth to individuals who don't really need it. Sadly, I do actually believe society has lost that battle. Money will destroy human-kind, the only glimmer of hope is that the next time around, maybe, just maybe, religion & money is left out & let's see how far we get as a species then.</p><p><br /></p><p>Talking of positivism, this is the real reason for posting here. </p><p>This is DISNEY Entertainment, they have spent 3-years looking into making robots. Did they use any of the OOTB Industrial robot things? yes, but they still needed to create & innovate a load of things themselves - THAT tells you that there is a blocker / something wrong with the industry as a whole. However, Disney are looking at this in a different way - they are looking at this as "Entertainment robots". Robots that can freely walk around the theme parks, interact with children, pose for selfies, engage in a limited way and just generally bring that "magic & sparkle" to childrens lives - maybe it will inspire enough children to then "want to do something", something more than be a "user", but build their own robot, or take an already existing robot & look at tweaking it / enhancing it / extending it to do the next generation of things.</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="464" src="https://www.youtube.com/embed/eVBAJ-uHtvI" width="558" youtube-src-id="eVBAJ-uHtvI"></iframe></div><br /><p>That's a world I would like to see. That is the world I would like today. I like the fact that James has taken this challenge on and, like myself, wants to do something here. However, he gets funded / sponsored by his YouTube channel & can get time to focus on this, sadly, that is where I fall down, but I shall stand on his shoulders and see what I can do extra.</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="435" src="https://www.youtube.com/embed/XHjnWm7hGH8" width="523" youtube-src-id="XHjnWm7hGH8"></iframe></div><p><br /></p><p>So, whilst a LOT of people are doing the commercial thing over the next few weeks, I'll take advantage of this time to see "what I can do" to help accelerate that Robot world of wonder, even if it is just getting some 3D printed parts made to start to make the journey - and whilst waiting for them to print, get the K9 robots I hacked together earlier in the year, operational & working from a software perspective. The hardware is already there, I just need to do the coding part.</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjOeTfWvV4jh16EUaNJV2tlt25viMLI5Dd61YDkJO6Z730tj_Z4DyQwCl0Q0ahSB4iJlygH2CBSJOilS8YP_vrmDvNXMIakZwHHG_y-qbeNQrehVE90IIh6PlRO7lyP7m7i4aleOjTOP3A8bloX4IRep43OqDxnYB-8TkALeqzyXy7l7ndzJa2oNz9kzybb" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="754" data-original-width="1061" height="457" src="https://blogger.googleusercontent.com/img/a/AVvXsEjOeTfWvV4jh16EUaNJV2tlt25viMLI5Dd61YDkJO6Z730tj_Z4DyQwCl0Q0ahSB4iJlygH2CBSJOilS8YP_vrmDvNXMIakZwHHG_y-qbeNQrehVE90IIh6PlRO7lyP7m7i4aleOjTOP3A8bloX4IRep43OqDxnYB-8TkALeqzyXy7l7ndzJa2oNz9kzybb=w644-h457" width="644" /></a></div><br /><br /><p></p><p>Roll on 2024.</p><p>...or maybe even walk?!</p><p><br /></p><p>p.s. those actuators that James uses are $420 EACH - I don't have $2000 just lying around to fund this, time to lookup some cheaper alternatives that can "nearly" do the same thing, but stay within a reasonable price bracket.</p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-89046078919949877902023-11-26T14:25:00.004+00:002023-11-26T14:30:32.265+00:00Mermaid JS<p>Mermaid... and not the Disney kind, the JavaScript kind: <a href="https://mermaid.js.org/" target="_blank">https://mermaid.js.org/</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj7HhYxA8PCZg2cLPFqu8n6AVGMt3ExeYdvBp-W5o2xtybHWTZaBz20u6OtbQocrQ7sKHcWXUp_r5mQuTEkVrEkREKCZp6l4pNJCc3rmyinbuG4evS8rebS6LY17mNXQqLwYxzKRbxbWcIkL8WEfqHnVEupxQbUH_UUwbQRC9QTV2fMeM9RnAd-09Av7-G4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="751" data-original-width="1281" height="318" src="https://blogger.googleusercontent.com/img/a/AVvXsEj7HhYxA8PCZg2cLPFqu8n6AVGMt3ExeYdvBp-W5o2xtybHWTZaBz20u6OtbQocrQ7sKHcWXUp_r5mQuTEkVrEkREKCZp6l4pNJCc3rmyinbuG4evS8rebS6LY17mNXQqLwYxzKRbxbWcIkL8WEfqHnVEupxQbUH_UUwbQRC9QTV2fMeM9RnAd-09Av7-G4=w541-h318" width="541" /></a></div><p></p><p>For quite some time now I've been using <a href="https://www.drawio.com/" target="_blank">draw.io / diagrams.net</a> (instead of the previous usage of <a href="https://www.microsoft.com/en-gb/microsoft-365/visio/flowchart-software/" target="_blank">Visio</a> that cost money from M$oft)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhzYA4vRSbyHAtOsPbrS_c10Y6UuJ5Y9Ayuknwk-mGqJkfcVQEWMbBAZnBPDsoGBPXyFTVb9YWVMWc3cO6k6WqkqtlmQy_qTLbxyoJOluqB1_5h8H8YuRJh9w63AbXEF7bfqsdnHfALYYYs9zLYEYPrVkiT0NOFkHhLSrz2Soa7c4W1zPn-ajFZ0mna85iv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="537" data-original-width="1163" height="270" src="https://blogger.googleusercontent.com/img/a/AVvXsEhzYA4vRSbyHAtOsPbrS_c10Y6UuJ5Y9Ayuknwk-mGqJkfcVQEWMbBAZnBPDsoGBPXyFTVb9YWVMWc3cO6k6WqkqtlmQy_qTLbxyoJOluqB1_5h8H8YuRJh9w63AbXEF7bfqsdnHfALYYYs9zLYEYPrVkiT0NOFkHhLSrz2Soa7c4W1zPn-ajFZ0mna85iv=w584-h270" width="584" /></a></div><br />Whilst I love using Draw.io - it is very flexible, it is great for visually describing what I need to express to other people in nice simple graphical representation (<i>as I have found no-one seems to want to READ anymore, they want videos, pictures / images or diagrams</i>), which makes life interesting doing my work / work job role, it does have some limitations.... and this is the same no matter what tool you use and that is keeping it updated / current and a single-source of truth.<p></p><p>The other BONUS was that Draw.io did NOT require you to use an online service - you can download / install the software (<i>yes, I know, an alien concept for a certain Gen Z. population - but it has HUGE benefits that are not part of your world, ie. some of us aren't "connected 24/7" - shock!horror!</i>)</p><p>Y'know how it goes, you make a nice Draw.io diagram, it shows everything all nice & lovely, you screenshot it and put it into a presentation (such as Powerpoint) so that it is read-only, ie. other people cannot fiddle with it (<i>ok, yes, they often put blocks over the top of the original to modify it themselves, cannot stop that from happening</i>) - however, if you wanted to make a change, you then have to find that draw.io tab, y'know the one that you saved with 10 other tabs, in 100 different draw.io files....</p><p>hmmmm... surely there's got to be a better way?</p><p>A couple of years ago, I was introduced to: <a href="https://www.websequencediagrams.com/" target="_blank">https://www.websequencediagrams.com/</a></p><p>and whilst that was great and all... yes, it went into the "shareware" world, you need to [upgrade] to "premium" in order to do XY or Z... sigh.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgogBDxQvNsymsVIAWqYW6_EP8UG2mMA319QBEqj7uvGQE_T1fqRdavmqxxS14M45oTvEBvajN6k2KqJYpmEGAUakm5a7bcx-l4gDZ2oVkSUB2FarHObNZ3QoNJxHncpHvI_zcqhMlrci0Yldc7fzeHZggcFZryMsqHY_ykK55RXbr_nuJQCYtmElTSsscL" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="637" data-original-width="870" height="309" src="https://blogger.googleusercontent.com/img/a/AVvXsEgogBDxQvNsymsVIAWqYW6_EP8UG2mMA319QBEqj7uvGQE_T1fqRdavmqxxS14M45oTvEBvajN6k2KqJYpmEGAUakm5a7bcx-l4gDZ2oVkSUB2FarHObNZ3QoNJxHncpHvI_zcqhMlrci0Yldc7fzeHZggcFZryMsqHY_ykK55RXbr_nuJQCYtmElTSsscL=w423-h309" width="423" /></a></div><p></p><p>The essence of that tool & why I liked it was that you could verbally/textually describe the diagram and it would generate an image as an output. That way, you can quickly change the text and the diagram is re-draw, ready for exporting and can then be cut&paste into a presentation tool. nice.</p><p>Again, there was a similar tool here: <a href="https://sequencediagram.org/" target="_blank">https://sequencediagram.org/</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgm3htS0ntU0J8VQO6SDAdeHnPvVfuLPajZ_Q-8vIQlrZDSFNUoHuBxMlIt6eTWTpLDlwwTdMeLBMnwRL28ZBq-hQMAVsqiPRah8vpWkKgjaA5DWL5BeW2oyhqzgBefhh8M3vZu5nO1UggiZ0rajUArhhQPsy1Orvgm0VfDGx2lXGxwWXd_0zKVl_968lrh" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="489" data-original-width="1256" height="224" src="https://blogger.googleusercontent.com/img/a/AVvXsEgm3htS0ntU0J8VQO6SDAdeHnPvVfuLPajZ_Q-8vIQlrZDSFNUoHuBxMlIt6eTWTpLDlwwTdMeLBMnwRL28ZBq-hQMAVsqiPRah8vpWkKgjaA5DWL5BeW2oyhqzgBefhh8M3vZu5nO1UggiZ0rajUArhhQPsy1Orvgm0VfDGx2lXGxwWXd_0zKVl_968lrh=w573-h224" width="573" /></a></div><p></p><p>Again, similar as above, it is not my one-stop-shop, also I cannot put the text in and have them store it or even have any of it anywhere near their servers.</p><p>Hmmmm... what to do? Along comes Mermaid JS.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjr2TNmNm5Acs7pYLKasgivTQ3am-Evl2EQG3X0mumqIa5F3xAbTgv8np1nl8NnhptmDxhsR8CgRFj0H6EHrkvxEzD6t0m26ARrmXhFJAs5dvlWOInOl8mRLBtqSq1jGkoWSCEXafNb9fZb_-Qg4MuLUwih_RRc1Hu_uWZQEfzmbMPnADBl35RW_GuSpDQw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="865" data-original-width="1660" height="291" src="https://blogger.googleusercontent.com/img/a/AVvXsEjr2TNmNm5Acs7pYLKasgivTQ3am-Evl2EQG3X0mumqIa5F3xAbTgv8np1nl8NnhptmDxhsR8CgRFj0H6EHrkvxEzD6t0m26ARrmXhFJAs5dvlWOInOl8mRLBtqSq1jGkoWSCEXafNb9fZb_-Qg4MuLUwih_RRc1Hu_uWZQEfzmbMPnADBl35RW_GuSpDQw=w558-h291" width="558" /></a></div><a href="https://mermaid.live/" target="_blank"><br />That is a DEMO from their mermaid.live</a> editor, "hang on", I hear you exclaim, but that is online, that's not airgapped/offline. Correct. The demo is online. But, you can download, install / use the tool offline yourself - go <a href="https://github.com/mermaid-js/mermaid" target="_blank">check out the GITHUB repo</a>.<p></p><p>Not only can you describe textually what you want as an output, you can also choose from a multitude of different diagram outputs too, as well as the complexity of the content:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiQUSdwPLEWB2eClOeE5lyxN2ws9d76ZEqy49Om2f2xHs5q0CypjDXdfZfU_j0mAZlM9CzQHSqdleXLRlcMj7a72PXbwEyOn5uywEfU2Uy0p9196v0VxhpwcjRXmIv2ZHn4o-ACjEGXsf5kdmJVrPVJm8854ZJLA7HboAmGyz_bsTGerxO-ufMKxXWLxX20" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="373" data-original-width="844" height="189" src="https://blogger.googleusercontent.com/img/a/AVvXsEiQUSdwPLEWB2eClOeE5lyxN2ws9d76ZEqy49Om2f2xHs5q0CypjDXdfZfU_j0mAZlM9CzQHSqdleXLRlcMj7a72PXbwEyOn5uywEfU2Uy0p9196v0VxhpwcjRXmIv2ZHn4o-ACjEGXsf5kdmJVrPVJm8854ZJLA7HboAmGyz_bsTGerxO-ufMKxXWLxX20=w429-h189" width="429" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjumfH4FfIhxOmd5Ux4aftwnQjrxDjvI3gLVKRYLOZcLAZ7zwPyUJgBH2Fp3fygXeSxDxi0ywiLYCFausiv1apotnhBRmBX_mZWY2WI_Fmh40mRF4VgIlTy_-5V4UV1orXkj04a6UkcvImGKKh9wCk3DdxW_5Pb_oKCP5WJ3s10M5RLYQm5AlE4dW8XoqEq" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="388" data-original-width="846" height="147" src="https://blogger.googleusercontent.com/img/a/AVvXsEjumfH4FfIhxOmd5Ux4aftwnQjrxDjvI3gLVKRYLOZcLAZ7zwPyUJgBH2Fp3fygXeSxDxi0ywiLYCFausiv1apotnhBRmBX_mZWY2WI_Fmh40mRF4VgIlTy_-5V4UV1orXkj04a6UkcvImGKKh9wCk3DdxW_5Pb_oKCP5WJ3s10M5RLYQm5AlE4dW8XoqEq" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhGnCpYuv__Bjm7xQpJbTbKrYzRdb41J6tnML_VD0Bfm9HMtyVFKGPo02Nk-owJgSgb7MbK5LmpVEOaDQPD4bRcCZOAL0raEvQ46gnKAJiVOeUPApM8Vtta0gqbylNMqLYO01UyIMRZ6pPnLsF87ZTplGjbreM3e7jpFjIYXvx3C5exZ3ieP49drRjz8PCz" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="404" data-original-width="766" height="169" src="https://blogger.googleusercontent.com/img/a/AVvXsEhGnCpYuv__Bjm7xQpJbTbKrYzRdb41J6tnML_VD0Bfm9HMtyVFKGPo02Nk-owJgSgb7MbK5LmpVEOaDQPD4bRcCZOAL0raEvQ46gnKAJiVOeUPApM8Vtta0gqbylNMqLYO01UyIMRZ6pPnLsF87ZTplGjbreM3e7jpFjIYXvx3C5exZ3ieP49drRjz8PCz" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjcuT4Q5vfM_0EpuCj6Wba6_Cmk7HnyjnEBxWZMDNfvRr9Mpd1bd14TfEy5_lR28sBg-DNlBN6xtUT7aB2vQMR--I6ZI9UDoSY3s8K_fMS_dAN8BnkyUJxlJwJaLT2-TItECJEVg05vj9zIhGAQ8cvPszAZCdvDYKO9Y4sUIDC6Ydwxj4zyisPhQ_Ln3eVq" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="788" data-original-width="760" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjcuT4Q5vfM_0EpuCj6Wba6_Cmk7HnyjnEBxWZMDNfvRr9Mpd1bd14TfEy5_lR28sBg-DNlBN6xtUT7aB2vQMR--I6ZI9UDoSY3s8K_fMS_dAN8BnkyUJxlJwJaLT2-TItECJEVg05vj9zIhGAQ8cvPszAZCdvDYKO9Y4sUIDC6Ydwxj4zyisPhQ_Ln3eVq" width="231" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi_ksH_etqUqK7OOghatdaFeCRP2q6bAuS3cfJSmB3_MCD5_gJMcXXUiwVTpesbmSYJWICD3Wtd5FL-HSJIHhV4umD9InOz8Y19cYRf4ecFf8n1slPriZxfSlg_56Qrvke1gsMp0xseHDzEgbs_5A7s6tAOjDD7g-gsziYD9Vy5wIDefCagTxM65FjCPwXx" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="756" data-original-width="777" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEi_ksH_etqUqK7OOghatdaFeCRP2q6bAuS3cfJSmB3_MCD5_gJMcXXUiwVTpesbmSYJWICD3Wtd5FL-HSJIHhV4umD9InOz8Y19cYRf4ecFf8n1slPriZxfSlg_56Qrvke1gsMp0xseHDzEgbs_5A7s6tAOjDD7g-gsziYD9Vy5wIDefCagTxM65FjCPwXx" width="247" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiGhMhupOQcBaO2vYDrTP0SbW8vsMyCSDxSzddJ3z-3KWmDvwkoBhCDwBSJEwOla7CWayBziF8KcfIZqt5VZEdVAHLHh6xvlbwXk6sazQQ9R8YzJODHEA_bz_5X7PH4JsmbOGViV-X3EFVVAHofu5zNF0Itt5_vFqfgqfI_8ytafx1MjIk2bqZxHF3bBjtX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="542" data-original-width="777" height="223" src="https://blogger.googleusercontent.com/img/a/AVvXsEiGhMhupOQcBaO2vYDrTP0SbW8vsMyCSDxSzddJ3z-3KWmDvwkoBhCDwBSJEwOla7CWayBziF8KcfIZqt5VZEdVAHLHh6xvlbwXk6sazQQ9R8YzJODHEA_bz_5X7PH4JsmbOGViV-X3EFVVAHofu5zNF0Itt5_vFqfgqfI_8ytafx1MjIk2bqZxHF3bBjtX" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjhzMfY2FjuwBHLle67e14FY0rXyKuocOtDJBOl2k2Sb0Q5Ydc2TLEkL5A87iFxl2MUSYYP1XL0VcoEJuAuMdQkR48LWsT5xKuBAd04x4s3QKEJdIm4rfL7IwnLYHunkyYpKWuv31KJ03a-LKoD_LND7WlHHq1DNPhk7BVv0MFpksx9MrlJtKKgsmFZWjms" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="437" data-original-width="777" height="180" src="https://blogger.googleusercontent.com/img/a/AVvXsEjhzMfY2FjuwBHLle67e14FY0rXyKuocOtDJBOl2k2Sb0Q5Ydc2TLEkL5A87iFxl2MUSYYP1XL0VcoEJuAuMdQkR48LWsT5xKuBAd04x4s3QKEJdIm4rfL7IwnLYHunkyYpKWuv31KJ03a-LKoD_LND7WlHHq1DNPhk7BVv0MFpksx9MrlJtKKgsmFZWjms" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiC1AChuyJFbqUKfYd514skM_SI-7yIIhjzy3JrrTs7plf5UYBA4vu9BDl0DRHE-waxAdVwV-v3-UML_rTDrhWDscPG4961wfd_V6yZ04p_-J1ykqPK4NEuz-WyvIj7taBzzYn3SLMOK59EzfyZHXoCqkHP-lGsMO37cuzB34QnE6fV5K_1jTNqwjdjyA6p" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="569" data-original-width="777" height="234" src="https://blogger.googleusercontent.com/img/a/AVvXsEiC1AChuyJFbqUKfYd514skM_SI-7yIIhjzy3JrrTs7plf5UYBA4vu9BDl0DRHE-waxAdVwV-v3-UML_rTDrhWDscPG4961wfd_V6yZ04p_-J1ykqPK4NEuz-WyvIj7taBzzYn3SLMOK59EzfyZHXoCqkHP-lGsMO37cuzB34QnE6fV5K_1jTNqwjdjyA6p" width="320" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: center;">For the budding ARCHITECTS out there, they <a href="https://mermaid.js.org/syntax/c4.html" target="_blank">even C4 diagrams</a>:</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZTWnDch8mdTxAEClTno0z1mgTX6ue9e7AkAVA0yu3EgKHSLWMnM2GvzcjEN3UuHxuzDUoWxR_NYBEgO2L2hPgaR14NaygFAdAxqvj1YyeMgJqBXh7yVkCAo8TZRiwBs2_lY3W9vTFxGhHx1GbJSREAEgfBxkApwBsm6JzDmOaJSlzw6p_7rkrtNuaC9j4" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="664" data-original-width="777" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZTWnDch8mdTxAEClTno0z1mgTX6ue9e7AkAVA0yu3EgKHSLWMnM2GvzcjEN3UuHxuzDUoWxR_NYBEgO2L2hPgaR14NaygFAdAxqvj1YyeMgJqBXh7yVkCAo8TZRiwBs2_lY3W9vTFxGhHx1GbJSREAEgfBxkApwBsm6JzDmOaJSlzw6p_7rkrtNuaC9j4" width="281" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiB65XOUukNRH3a0tUqAuh0Q6UcjgMxtWCcMYEysJE8rWS6oW_7KsnIQow_vwhseqvtRGDnpL9bxv8tsqa0tQ_MS6_hcg8SupS0C66_h4NuPeTHL8HOYWtUOtAE3AgHGz2pDhV5vpPWO95scsFa8Y0rRIQE7Otb9IJrJAO9h02np26OnpjBrF6DNtDLw5kn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="626" data-original-width="777" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEiB65XOUukNRH3a0tUqAuh0Q6UcjgMxtWCcMYEysJE8rWS6oW_7KsnIQow_vwhseqvtRGDnpL9bxv8tsqa0tQ_MS6_hcg8SupS0C66_h4NuPeTHL8HOYWtUOtAE3AgHGz2pDhV5vpPWO95scsFa8Y0rRIQE7Otb9IJrJAO9h02np26OnpjBrF6DNtDLw5kn" width="298" /></a></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Oh, they do colour too - it doesn't always have to be in black & white.<p></p><p><br />Did I also mention it has INTEGRATION to tons of other products too, now we're talking: <a href="https://mermaid.js.org/ecosystem/integrations-community.html" target="_blank">https://mermaid.js.org/ecosystem/integrations-community.html</a></p><p><br /></p><p>All-in-all, yeah, I'm impressed with the tool & what it can offer / do and also the fact it can work with the latest release of Node-Red. Yep, you can export your Node-Red Flow to now be documented auto-magically in MermaidJS - adding that little extra to the document creation role we're all meant to be contributing to.</p><p><br /></p><p>There are MORE diagram syntax / types than I showed above, go check them out yourselves - I think you'll start to notice there are a LOT of common diagrams that you get asked to create / generate that you can now do in a really quick manner:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSjjAdT1jqyPP-kzEAek9BO8EXQLAGqQzxxZZOUodrzbDpbcwA8J4p-1sZS8YnRZGZLMD-eiVm46lkBe4QkkqHeQ73iOY4vKbhp4oLJs2CVQw8b8Ry8FWlbgy_MwVYXUQJOgFQgjzGDCSDN4jt1_mo1ws8upiK9BPXNoWTYOxQFahVOFMh4Au2ebaTekYd" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="779" data-original-width="874" height="459" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSjjAdT1jqyPP-kzEAek9BO8EXQLAGqQzxxZZOUodrzbDpbcwA8J4p-1sZS8YnRZGZLMD-eiVm46lkBe4QkkqHeQ73iOY4vKbhp4oLJs2CVQw8b8Ry8FWlbgy_MwVYXUQJOgFQgjzGDCSDN4jt1_mo1ws8upiK9BPXNoWTYOxQFahVOFMh4Au2ebaTekYd=w514-h459" width="514" /></a></div><br />and not a whiff of a <a href="https://en.wikipedia.org/wiki/Generative_artificial_intelligence" target="_blank">Gen. AI </a>anywhere in the equation, what's not to like!<p></p><p><br /></p><p>p.s. I really like how easy it is to <a href="https://mermaid.js.org/syntax/sankey.html" target="_blank">create the sankey diagrams</a>, that is awesome.</p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-51692778171935557452023-11-05T12:11:00.002+00:002023-11-05T12:11:20.971+00:00Internet Artifacts: a year a slide<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgxAPNK1mfy6-gfSahIEcGrdlqujNBCz7lUvVMo21k_HVqJWcOIO31KMNureVroQInDg488yUwZzAyzT3Co92f2Hb9hDPMioNKkcmgs6oxTHRw4-hORltBaQTodJMcghzDovyJON-ZshN8WPhVZmLmpZzx9wxojoi9MN_CkimkNI19qNO1gSkH7HTXZDx-H" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="1746" height="212" src="https://blogger.googleusercontent.com/img/a/AVvXsEgxAPNK1mfy6-gfSahIEcGrdlqujNBCz7lUvVMo21k_HVqJWcOIO31KMNureVroQInDg488yUwZzAyzT3Co92f2Hb9hDPMioNKkcmgs6oxTHRw4-hORltBaQTodJMcghzDovyJON-ZshN8WPhVZmLmpZzx9wxojoi9MN_CkimkNI19qNO1gSkH7HTXZDx-H=w601-h212" width="601" /></a></div><br /><p></p><p><a href="https://neal.fun/internet-artifacts/">https://neal.fun/internet-artifacts/</a></p><p><span style="background-color: #29343d; color: #fcfcfc; font-family: arial, sans-serif; font-size: 15px;"> It's a journey back in time to the beginnings of what has become a daily part of life for most of us today – the Internet.</span></p><p style="background-color: #29343d; color: #fcfcfc; font-family: arial, sans-serif; font-size: 15px; margin: 13px 0px;">Neal has unearthed a few gems that might make some laugh or bring tears to their eyes. Somehow, the web used to be a better, more colourful, and more free place than it is today. But let's be optimistic. Someday, someone will look back at the 2020s and say: <em>Remember back in the good old days...</em></p><p>No, no they won't. Why not? well, people in general today (Gen Z's) are users and mostly not creators.*</p><p>Well, that was a flaming generalistic statement to make & will probably get me 'cancelled' - however, it is a much deeper conversation starter that I'm not going to attempt to embrace in textual verbage here, instead enjoy the trip down memory lane:</p><p><a href="https://neal.fun/internet-artifacts/">https://neal.fun/internet-artifacts/</a></p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgo6M_Dw9cy7xUKSYrWEyLYHCM6Lfml2-F0uhcYXF6nc_HrcdfajuEkyLUpnMRmv4soZWV_iikbq3wYbRryfMg4ciAPJCIFeOwx94B_b6U_B4x6hQjq8_neA2eeWZatBe3tdgmlCgeK8EFSvmaggyvnlGPOuiKGblLhsBKhu1jP2RHGWbn2UebzdLQ1Tdi9" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="826" data-original-width="497" height="602" src="https://blogger.googleusercontent.com/img/a/AVvXsEgo6M_Dw9cy7xUKSYrWEyLYHCM6Lfml2-F0uhcYXF6nc_HrcdfajuEkyLUpnMRmv4soZWV_iikbq3wYbRryfMg4ciAPJCIFeOwx94B_b6U_B4x6hQjq8_neA2eeWZatBe3tdgmlCgeK8EFSvmaggyvnlGPOuiKGblLhsBKhu1jP2RHGWbn2UebzdLQ1Tdi9=w361-h602" width="361" /></a></div><br />go buy the guy a coffee too.<p></p><p><i>*note the final date in the list... not much has happened really since 2007, has it?.... cough cough cough</i></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-65571466090738940332023-10-31T17:57:00.001+00:002023-10-31T18:01:27.059+00:00Atari ST - Oct 2023 revival<p>Why revival? Well... apparently I did "some stuff" with my <a href="http://tonyisageek.blogspot.com/p/30year-old-atari-st-gets-dusted-off.html" target="_blank">Atari ST back in 2017 </a>and then <a href="https://tonyisageek.blogspot.com/2021/01/retro-atari-devices.html" target="_blank">again in 2021</a>... and due to over-working on work/work stuff and not setting aside enough personal-time, the machines kind of moved further and further under piles of "stuff".</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHOWwyZhg4mrGBGk2s7P7zft6rxv3p-kVOAHI3hf_HPztYhZPWb2VqHy7UwXtgYKcMhx5tR1S2jWEuuW_MVlsx8bFkhDH0moUPKmVsgScAEKI9MLjJAFNXfF0TnLYHiph6HERMajQz5t6VOGQS5cRMeZ3lITtXvmXm4QXFwe9ByspE_gnXoyGhequfmOsM/s4160/IMG_20231027_085113_339.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHOWwyZhg4mrGBGk2s7P7zft6rxv3p-kVOAHI3hf_HPztYhZPWb2VqHy7UwXtgYKcMhx5tR1S2jWEuuW_MVlsx8bFkhDH0moUPKmVsgScAEKI9MLjJAFNXfF0TnLYHiph6HERMajQz5t6VOGQS5cRMeZ3lITtXvmXm4QXFwe9ByspE_gnXoyGhequfmOsM/w582-h436/IMG_20231027_085113_339.jpg" width="582" /></a></div>(<i>yes, that is an original <a href="https://duckduckgo.com/?q=Sony+AIBO+ERS-111+robot&t=canonical&iax=images&ia=images" target="_blank">Sony AIBO ERS-111</a> on the shelf that I purchased back in 1999/2000 - that little dog is still more advanced than most of the latest "AI" technology in the market-place today</i>)<br /><p>Well, I decided to take 2 weeks off work. literally. off work. It took a few days, okay, about 5, to totally disconnect and wind down and stop / not think about work/work related things. During this time, I decided to "sort out the 16/32 bit room". This was my old home/office, basically a large double-bedroom that a child of any age would absolutely love to have; however, I had managed to overfill it with "stuff" and it had become a mini-cave with very little or not desk space. In fact, no space at all - considering it is quite a large room, there was a tiny little corner desk where I could use a bit of desk space. I decided to bite the bullet and do what I did earlier in the year when I created the "8 bit room". I got onto Amazon and ordered new furniture (matching throughout now - oh, look at me being all posh).</p><p>As this furniture was going to be delivered flat pack and I had to build it, I needed to dismantle the existing furniture that I'd had for about the past 15+years from a previous house/garage/office space that wasn't really designed to fit in this room, it was all a bit of a mish-mash and was just too big for the room, made it feel smaller...well, that and the huge content of "stuff" on or in the furniture.</p><p>Lots of refuse-centre trips were made, I got brutal with myself and basically just binned the lot and started again - I am so glad I did, it has free'd up the space massively. It has also helped mentally, the room feels non-restricted, free-er - or that could just be me projecting? but anyway, it was needed & it feels better - now I can have a space to work and to play. I keep forgetting about the non-work part and, well, my years are ticking by now, so if I don't do some playing now, I never will...</p><p>Right, so the Atari STs.... well, it turns out I actually have four (4) of them, well, 5 if you count the random motherboard that I found too! "Why the sudden interest?" I thought the Amstrad CPCs were the technical toys of choice? Well... I did indeed have an Amstrad CPC 464 in 1984/85 and I did grow up with it and in around 1988/1989-ish my mate Gary had an Atari 520 ST that was mind-blowing in comparison. In fact, I'm not sure exactly how it happened? but I actually bought that Atari from Gary - how do I know? because it still has a sticker/label on the back with his name and parents address on it! I recall playing Super Sprint, a lot! and using the Atari for early college work, word-processing and print outs etc... before I then moved onto a 286 PC. (Of which I have the original 20MB HDD and I'm pretty sure I have the mother board some place too!) anyway, what I didn't realise is that the Atari ST was actually released in 1985.</p><p>Yes, this machine was released at around the same time as I was using the Amstrad. The difference is a bit like using a Ford Fiesta 1.1L to go to the shops versus taking the Lambo. They are so far removed in relation to specification and potential usage, it's mind-blowing that they existed in the same era.</p><p>"That's lovely, but still doesn't explain the why?"</p><p>Well...as posted about previously, I purchased a <a href="https://fujinet.online/" target="_blank">FujiNet device for the Atari 800XL</a> that internally uses an arduino 8266 to connect to the WiFi and I have a couple of devices for the Amstrads that do the same. I wondered, "is there such a thing for the Atari ST?"</p><p>Turns out that <a href="https://github.com/czietz/picowifi" target="_blank">someone wrote some code for the Raspberry Pi PICO W that plugs into a NetUSBee device</a> and allows for this to occur.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgqVl5J9eXF0bIlAKA-xIs-VKoRYGklbmXZyUha9Gvv7Yu8wgHaNYS2uUOkDh8mW9qApF6tjzAUKpOnfU2UaThL7lwKgSl8glHZwHFMHgKvZAHZESONRyyMlnx-CsS-_xEw6snxPy3G-2OKA1ayhESNsWLSX9IdtjbAwhqLqbfFLeKuWlDT9qFjxUY0KTxO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="327" data-original-width="734" height="234" src="https://blogger.googleusercontent.com/img/a/AVvXsEgqVl5J9eXF0bIlAKA-xIs-VKoRYGklbmXZyUha9Gvv7Yu8wgHaNYS2uUOkDh8mW9qApF6tjzAUKpOnfU2UaThL7lwKgSl8glHZwHFMHgKvZAHZESONRyyMlnx-CsS-_xEw6snxPy3G-2OKA1ayhESNsWLSX9IdtjbAwhqLqbfFLeKuWlDT9qFjxUY0KTxO=w524-h234" width="524" /></a></div><br />Now, I am a huge fan of the PICO W, they cost about £5-6 and you can write native C code, so basically anything you can do on an Arduino you can do with the PICO... and the W...well, that is the "Wireless" part. Of course I have a few "spares" available.<p></p><p>As to the NetUSBee - <a href="https://tonyisageek.blogspot.com/2021/11/retro-sunday-night-atari-st-part-iii.html" target="_blank">yep, apparently a few years ago I had that setup using the ethernet connection to connect the Atari ST to the network</a>, using a linux laptop as a proxy to the WiFi and/or connecting to the plug-in TP-Link thingies.</p><p>So..I thought, seeing as I'm re-designing the "16/32 bit room" (<i>btw - the ST for Atari ST is named that because it means 'Sixteen/ThirtyTwo", so an apt name for the room!</i>) I thought I'd make it so that I can ACTUALLY have desk space to use the Atari STs, the Atari 800 XLs, the Amiga 500 (<i>yes, I have one of those too - I believe an ex-work colleague Ian P. donated that to me (or I paid for it?) anyway, for some reason back in the mid-2000s (2003-2006-ish) I went on an eBay mission and purchased HDDs and stuff for that machine, but have literally never used it!</i>) and a variety of old Pentium PCs running MS-DOS 6.22.</p><p>That was the challenge I set myself. I shall do a follow-up post where I'll show a short video of BEFORE and AFTER, just to show the difference, I really like it now & will do my best to keep it like this & remember to "have fun", whilst I still can.</p><p>Back to the Atari ST & WiFi - so I blitzed the PICO W... the I had the fun task of spending a few days (yes, days!) trying to remember how the UltraSatan SD-Card HDD worked, <a href="https://retrolemon.co.uk/atari-st-ste-falcon/13-netusbee.html" target="_blank">how the NetUSBee worked</a>, setting up new drivers to use the NetUSBee for NET_USB - wasting an entire day or TWO, going around in circles trying to debug why the Atari ST believes it is all setup & working, but not being able to PING the IP Address from my laptop... then figuring out that for UIP-Tool to work, I need to NOT load STinG! aaaaaarrrrrghhhhhh!</p><p>Right, well, that then gave me the ability to basically have the Atari ST connected to the WiFi, expose a web-page where I can drag & drop files to/from the device itself.</p><p>That took waaaaaaay longer than it should have done, but it a nice distraction. I also purchased new furniture on a daily basis from Amazon Prime, so I was doing this debugging whilst cleansing / remaking space(s) around the room...</p><p>Once I then had the Atari ST connected to the WiFi... I then totally moved on! I looked on my home 4TB NAS drive & I saw that I had a folder all about the Atari ST and I had downloaded pretty much EVERY piece of software that was ever available for it. I thought about using the new WiFi connection to drag and drop the files over, but that would take, forever...</p><p>Then I realised that all the files were in the .st file format - these are great for emulators, they are basically an "image" of the floppy-disk. The emulator can load the .st file and read the contents inside as if you'd just put the 3.5" floppy disk inside the machine - however, the REAL machine cannot process these files. I have to extract the contents manually somehow... and even then I would be extracting them and then still need to copy them over to the Atari ST - OR, I could just copy them onto / into the SD-Card that I was using for the UltraSatan HDD device... smart thinking.</p><p>Well, sort of. Quite a lot of the .st files were larger than the 720k DS-DD (Double-Sided Double Density) 3.5" floppy disk formats, some were 800k, 810k and some random other sizes. Some also still had copy-protection in place...and I thought this was going to be simple.</p><p>Luckily, I had been "gifted" a few months back an old Windows XP desktop/tower machine.... and I found some software that was written for Windows 95/98-era that could do the extraction of the .st files for me... in fact, it could also extract the files directly out to the 3.5" internally floppy disk drive (<i>apparently only works with an internal drive due to the low-level hardware access</i>), that I can then take out of the PC and put straight into the Atari ST and boom, the software now runs on the real machine.</p><p>I would like to say that exercise above took me all of about 1-2 days, in reality it took about 5-7 days in total - but y'know what? I didn't THINK about work/work ONCE. Mission accomplished.</p><p>Also, I got very good at ROAD BLASTERS and I even setup and got HI-SOFT C running too - even wrote a few C programs, compiled them (<i>actually, once of the unique things out this version on this machine is that it is interpreted - meaning as you type it tells you if you've coded something wrong, rather than waiting for you to write it all, then attempt & fail to compile - this was genius ahead of it's time</i>). However, as you will see in the images below, I did spend a lot of time just burning disks and playing games until 1-2am!</p><p>As to the WiFi - yes, I will get back to it, now that I have a C-compiler, I'll look at how I can get the Atari ST, the Atari 800 XL and the Amstrad CPC all "talking" to each other over the WiFi network, just for fun, nothing serious, "just because"....</p><p><br /></p><p>Right, here's the whole exercise documented in photo's as and they are in chronological order of when I took them - minus the MASSIVE gaps in time when doing the debugging / troubleshooting:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVb6xdYa-r_OP23bxTlHIJsx09ldZatOzggd5qT94kEzgAW1rIe_faVp7TlERLJzMuAkXdSlHSj2syc0J6WB3INa-89BFaMDMrr4dlUIPuY7slXtpQkjf0AJ296uVIesrzM-l5bT3kvPnYeqb6AWJxXbhdxv8ABLyH5f9wfywuhkmSx-EbVMEocOtSf2w5/s4160/IMG_20231023_162413_509.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVb6xdYa-r_OP23bxTlHIJsx09ldZatOzggd5qT94kEzgAW1rIe_faVp7TlERLJzMuAkXdSlHSj2syc0J6WB3INa-89BFaMDMrr4dlUIPuY7slXtpQkjf0AJ296uVIesrzM-l5bT3kvPnYeqb6AWJxXbhdxv8ABLyH5f9wfywuhkmSx-EbVMEocOtSf2w5/s320/IMG_20231023_162413_509.jpg" width="320" /></a></div>This was the BEFORE - as you can see it was a bit out of hand, with only a small space over on the right for some desk space. In theory there was a desk space on the left, but not really - I did make a video that I'll put up to show a full walk around as a BEFORE and AFTER.<div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIIYnqYVo0kZ43TU7xjG6XDew6JQJYTTzy5BXB6392f14Z_m5gyoZZGrr9jwToeqQ2wEwzRZHPPWSsAaA-1826ycSF_sO54Vk7U_j6KyujlE7hfHYVUuVX3EITyfvjoW8ENkmGtzxC2BULFpD_b5C7P2vwNSad4_9jXDHt8VaFg9bJnHz0MUs-lzDoowF-/s4160/IMG_20231027_085113_339.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIIYnqYVo0kZ43TU7xjG6XDew6JQJYTTzy5BXB6392f14Z_m5gyoZZGrr9jwToeqQ2wEwzRZHPPWSsAaA-1826ycSF_sO54Vk7U_j6KyujlE7hfHYVUuVX3EITyfvjoW8ENkmGtzxC2BULFpD_b5C7P2vwNSad4_9jXDHt8VaFg9bJnHz0MUs-lzDoowF-/s320/IMG_20231027_085113_339.jpg" width="320" /></a></div>Talking of AFTER, now that's a much better work space - even splashed out on a dual-monitor bracket thingy, wasn't cheap at all - but it really does make a HUGE difference.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc3EhDEON9o6pom-eXGYKEHdlegrOBOuPtqQkrff3fFsVyWJw0TwzupQsUiHRtUq48lNv0QeEWSJ8pFkzMqPGik9bjphBEB7zdMhHVca7JhvyUNOhyGCMmkOiRUHlUc5iZazTmJhlirsmdAaugUYG5MsVA6OtBmj6EijRlL_3NCRdXOVFzLh5ncoo6eElw/s4160/IMG_20231027_085126_013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc3EhDEON9o6pom-eXGYKEHdlegrOBOuPtqQkrff3fFsVyWJw0TwzupQsUiHRtUq48lNv0QeEWSJ8pFkzMqPGik9bjphBEB7zdMhHVca7JhvyUNOhyGCMmkOiRUHlUc5iZazTmJhlirsmdAaugUYG5MsVA6OtBmj6EijRlL_3NCRdXOVFzLh5ncoo6eElw/s320/IMG_20231027_085126_013.jpg" width="320" /></a></div><div>Ah ha, had to spend a fair amount of time remembering what the hell this thing was and how to use it!</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqg2TF26E6wOYpwE1fq0ye9deIb9baOvyEiGtE83uLGD0Mkrfm0dqsrN9eFYUdtN8KIHvVd39_AreP-lbLV17oVpguyQvpriiGPb-ga_CwYX6UfJGXs-jOITMoyC8e4qgQ060ZtoOkYoKMtt9lprB8W63M74Eu09iy0HoRvwprA_E2FEiLk9GlBqJo9R3o/s4160/IMG_20231027_085133_155.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqg2TF26E6wOYpwE1fq0ye9deIb9baOvyEiGtE83uLGD0Mkrfm0dqsrN9eFYUdtN8KIHvVd39_AreP-lbLV17oVpguyQvpriiGPb-ga_CwYX6UfJGXs-jOITMoyC8e4qgQ060ZtoOkYoKMtt9lprB8W63M74Eu09iy0HoRvwprA_E2FEiLk9GlBqJo9R3o/s320/IMG_20231027_085133_155.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRwcfFcy7BVxHZvfZm7nXWDPjdzk8mrO3JgKhDBusZfH5v2ZrZ-jRvqEFLjahZYvrkJR2XAyv7AFVFizIpsYJlokxG6pqgg5s2pxjcl7u3w2tw97ZYOiwq2nIejjSOlCwv4NVCGuMNcmal7HZcG6gAZZgBd3lWbc296xBFRg6aUAgi7Z_wYYegIrJCNB7/s4160/IMG_20231027_085144_801.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRwcfFcy7BVxHZvfZm7nXWDPjdzk8mrO3JgKhDBusZfH5v2ZrZ-jRvqEFLjahZYvrkJR2XAyv7AFVFizIpsYJlokxG6pqgg5s2pxjcl7u3w2tw97ZYOiwq2nIejjSOlCwv4NVCGuMNcmal7HZcG6gAZZgBd3lWbc296xBFRg6aUAgi7Z_wYYegIrJCNB7/s320/IMG_20231027_085144_801.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv8gGKA7Mn4UwiU0VXBZ1fyiM4ADr3R_egNVenSK3OmgyJJN-UcyByDiX_Wkyqf1UEEGE4GFu1fXFCgoxPtU_22uUxlfFeP1uXPtkWwldAB7PtrZjbaGUhVXLJg533JcaFKjIm7ds6JX3sHhaHKV3GIUjRIFKTN4upCSJNYOE6z25c3nGgEulqhZm7S4oJ/s4160/IMG_20231027_093913_080.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv8gGKA7Mn4UwiU0VXBZ1fyiM4ADr3R_egNVenSK3OmgyJJN-UcyByDiX_Wkyqf1UEEGE4GFu1fXFCgoxPtU_22uUxlfFeP1uXPtkWwldAB7PtrZjbaGUhVXLJg533JcaFKjIm7ds6JX3sHhaHKV3GIUjRIFKTN4upCSJNYOE6z25c3nGgEulqhZm7S4oJ/s320/IMG_20231027_093913_080.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwPprasrBYHkkWo9YFm1uW4v2Lm3kgm3rEMtue4nrvbH_Njd7zag9GRbPESjrSHrXIH5VOTq03dHPqkTez7qbGwS9PD3zNR3PE2brY0m9Pz6IdFhaAngfavQ3mhqJZdA9Xz7KR6LbyvYhuha7gpX2fAD7jQdx1Na1A7YjIcnwrOCUtN1ZliL4-wvvn9UZc/s4160/IMG_20231027_093924_090.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwPprasrBYHkkWo9YFm1uW4v2Lm3kgm3rEMtue4nrvbH_Njd7zag9GRbPESjrSHrXIH5VOTq03dHPqkTez7qbGwS9PD3zNR3PE2brY0m9Pz6IdFhaAngfavQ3mhqJZdA9Xz7KR6LbyvYhuha7gpX2fAD7jQdx1Na1A7YjIcnwrOCUtN1ZliL4-wvvn9UZc/s320/IMG_20231027_093924_090.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8zjxDpZmCkGMnwK_3HgA1q2K2X-dP9IA-Uu9NFElmQ4sV2NUHV8a0GbIazpZH0okmPgA58fwMRXarK9azUNxf54nPve13u4mVHkFI6XtZifEpwj9-GNpDwiuVC9Z_zYp-EuHXyRQiRcI9gzDWCiKWowoOo1fiQYJq-9DJXmVTL2n8y4nkR4bOc3bkOdJ3/s4160/IMG_20231027_093942_281.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8zjxDpZmCkGMnwK_3HgA1q2K2X-dP9IA-Uu9NFElmQ4sV2NUHV8a0GbIazpZH0okmPgA58fwMRXarK9azUNxf54nPve13u4mVHkFI6XtZifEpwj9-GNpDwiuVC9Z_zYp-EuHXyRQiRcI9gzDWCiKWowoOo1fiQYJq-9DJXmVTL2n8y4nkR4bOc3bkOdJ3/s320/IMG_20231027_093942_281.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3cVBX12GcBbQEEq95trfhbOC2YUmdOPT0DBwQ9FNNTHBIy8Zd8lJ2EEx1Fc7x1hof216Z92S5PDvsGWFPd_xFwC93KsX1ZoZ7Xow4GXBIYGIyrh3UNkORKPxR7MD3r4s0GGwFvTRvR-_GBcmIKu_7cOiw7Rsy2eg_3OmkEnEkXsMMF7zst_vhZsmRMh92/s4160/IMG_20231027_094010_654.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3cVBX12GcBbQEEq95trfhbOC2YUmdOPT0DBwQ9FNNTHBIy8Zd8lJ2EEx1Fc7x1hof216Z92S5PDvsGWFPd_xFwC93KsX1ZoZ7Xow4GXBIYGIyrh3UNkORKPxR7MD3r4s0GGwFvTRvR-_GBcmIKu_7cOiw7Rsy2eg_3OmkEnEkXsMMF7zst_vhZsmRMh92/s320/IMG_20231027_094010_654.jpg" width="320" /></a></div>Yay, we have it recognising the device.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSNVlXDMQSeCeqsSw4ePILQtfSQB1Hj0b54Qu8Cks8i0DqEljcje3Hz0fdNVD_9gzHr3uxiFPNa0D7e_1yk9KFg7ybKhGbEQsqJeAAS3WpvCpA2As-AsHHrVfgE_4rcnkLYWgjFBV-bzzSKObdvmeZteCm7Huy9bOLigkshSgE69MyGaGbbo6Y7ezr7RWZ/s4160/IMG_20231027_104056_770.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSNVlXDMQSeCeqsSw4ePILQtfSQB1Hj0b54Qu8Cks8i0DqEljcje3Hz0fdNVD_9gzHr3uxiFPNa0D7e_1yk9KFg7ybKhGbEQsqJeAAS3WpvCpA2As-AsHHrVfgE_4rcnkLYWgjFBV-bzzSKObdvmeZteCm7Huy9bOLigkshSgE69MyGaGbbo6Y7ezr7RWZ/s320/IMG_20231027_104056_770.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-hcMLVO26ilm2TY0Bwx3Rh6xCW0qzTG15Zp_OU7wURg8jNpcz-hYjDY-OBXxUDd9L1o6WSy5n3xeyZYjuCIrLCID1yrDiP4rC7Br6T1Hq-UJmCQpETAmFojcIO2P-lYlaAcTdNqLrRud4-JJDw7EMBjKaM2uIQ4w47JYKBIKruodd-v-OFDXLJRfmjH0-/s4160/IMG_20231027_105146_987.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-hcMLVO26ilm2TY0Bwx3Rh6xCW0qzTG15Zp_OU7wURg8jNpcz-hYjDY-OBXxUDd9L1o6WSy5n3xeyZYjuCIrLCID1yrDiP4rC7Br6T1Hq-UJmCQpETAmFojcIO2P-lYlaAcTdNqLrRud4-JJDw7EMBjKaM2uIQ4w47JYKBIKruodd-v-OFDXLJRfmjH0-/s320/IMG_20231027_105146_987.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFqEpu085habqoPGeZBH4DaPq79t2uP3l8cwOmGFPsu44aEMUcb83l08_j5Pm1-bAcYicpyDrV_cKjVl_9WTijd2rp93rhxL5hwd5FSJeQQ0rqfI6LFmO2AewfjAJpCz7RJ7U5PIIHjtFEPL6k-S2aSTUErxQs6vtWWBGfgEJ179juUiYdvREsNTSWt9dU/s4160/IMG_20231027_134922_109.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFqEpu085habqoPGeZBH4DaPq79t2uP3l8cwOmGFPsu44aEMUcb83l08_j5Pm1-bAcYicpyDrV_cKjVl_9WTijd2rp93rhxL5hwd5FSJeQQ0rqfI6LFmO2AewfjAJpCz7RJ7U5PIIHjtFEPL6k-S2aSTUErxQs6vtWWBGfgEJ179juUiYdvREsNTSWt9dU/s320/IMG_20231027_134922_109.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZDbQTaYcgTJzKMDL3187mffTxJG92Tba7pJ18980_ndQOducgYVNQtL-iBUhQyRB_KO7yLabJwjH4hCf7qoQ-CozP8z7mo8a7OhzjjUo0IOLYBTp6G_0NKjktdRo1JN-YCPUSLcCFCcOsZ2q4BMZyOEqhSsr7kXIHC2CoYeaiSoUMi8ThLbGaOIjmVSbu/s4160/IMG_20231027_134930_452.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZDbQTaYcgTJzKMDL3187mffTxJG92Tba7pJ18980_ndQOducgYVNQtL-iBUhQyRB_KO7yLabJwjH4hCf7qoQ-CozP8z7mo8a7OhzjjUo0IOLYBTp6G_0NKjktdRo1JN-YCPUSLcCFCcOsZ2q4BMZyOEqhSsr7kXIHC2CoYeaiSoUMi8ThLbGaOIjmVSbu/s320/IMG_20231027_134930_452.jpg" width="240" /></a></div>For the eagle-eye'd out there, yes, that is a super RARE UNICORN style VORTEX HDPlus 30MB HDD sitting on that shelf... on the opposite side I also have an Atari SH204 20MB HDD too - along with some random floppy-drive sized 20MB HDD too - so not short of a few "original" HDDs for these machines.</div><div><br /></div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhelY35LWqv1MeenO3pV0ZpOUaA2Kuv5Omc-HHd_IFJDu3IGcelTAWj4dGvSBLEHf5o5lU_5tQygGPLnO8nkYJqhAGbru6eU4FkyCb9xQM7Syj-kPYNqcPOCHgZHnKMlN_-c4en-uWjgccP4Xri4lU8Cr-drdE1ISebHAMrlMcx7cG8zDUVtZUdYhuLfx_j/s4160/IMG_20231027_134946_454.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhelY35LWqv1MeenO3pV0ZpOUaA2Kuv5Omc-HHd_IFJDu3IGcelTAWj4dGvSBLEHf5o5lU_5tQygGPLnO8nkYJqhAGbru6eU4FkyCb9xQM7Syj-kPYNqcPOCHgZHnKMlN_-c4en-uWjgccP4Xri4lU8Cr-drdE1ISebHAMrlMcx7cG8zDUVtZUdYhuLfx_j/s320/IMG_20231027_134946_454.jpg" width="320" /></a></div><div>How to waste a few days.... attempting to work out networking issues.</div><div><br /></div>Until the penny dropped.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL0LkbA0KtS81uew3E6xizqL1GlzokMOOn2FU29txC4EX_FRcPYEIXELFMZNy5Q8lP5WVsFAgR1AzTesY4A929d0JycmGxMWBMQ_e2NblQuZOxRq99eEzynnNUxV9Wzx7pU2FmC0OG28yJdYTup9p8-Md5CaolL-iuvMmX-_4A0SWOWZMpZxcq0JPM4vmD/s4160/IMG_20231027_154938_174.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL0LkbA0KtS81uew3E6xizqL1GlzokMOOn2FU29txC4EX_FRcPYEIXELFMZNy5Q8lP5WVsFAgR1AzTesY4A929d0JycmGxMWBMQ_e2NblQuZOxRq99eEzynnNUxV9Wzx7pU2FmC0OG28yJdYTup9p8-Md5CaolL-iuvMmX-_4A0SWOWZMpZxcq0JPM4vmD/s320/IMG_20231027_154938_174.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9e4Q2akRbIPZAeQrlMFdGiTY7TkKwDOjd-du6RKp0u_z_BYkAacyiFo0IjjNzLkUVlrlQmQBl8vumXz7_66OZzHa9XQfSQ2xNkbHX_lBNfzuhK1N_RySKhQijl6Ei-gxGASKHYwsUf8DvCE9T5CAbi2c9_ilMHHDDKM0j0rY6KcR-BrYDqSm9D9-GgBtp/s4160/IMG_20231027_155143_644.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9e4Q2akRbIPZAeQrlMFdGiTY7TkKwDOjd-du6RKp0u_z_BYkAacyiFo0IjjNzLkUVlrlQmQBl8vumXz7_66OZzHa9XQfSQ2xNkbHX_lBNfzuhK1N_RySKhQijl6Ei-gxGASKHYwsUf8DvCE9T5CAbi2c9_ilMHHDDKM0j0rY6KcR-BrYDqSm9D9-GgBtp/s320/IMG_20231027_155143_644.jpg" width="240" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi9744gKsEYf3Bos_ZccC2y1UYnlm8P8W0vXw5-2azEZqkOE5FM2s3qGKMrJ8eHYB4Ik4phS2ANO1yn6bZ68LsxAGMxS9vRqoq7_LnQ41C_x0QT6GhulyPKBeVA7BHlZRkKYh50x45UgKXMxFrvE7RJOm4CxI_xyzHyKOF77W3cyh_G-hETzWrW5xiuZEz/s4160/IMG_20231027_162732_299.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi9744gKsEYf3Bos_ZccC2y1UYnlm8P8W0vXw5-2azEZqkOE5FM2s3qGKMrJ8eHYB4Ik4phS2ANO1yn6bZ68LsxAGMxS9vRqoq7_LnQ41C_x0QT6GhulyPKBeVA7BHlZRkKYh50x45UgKXMxFrvE7RJOm4CxI_xyzHyKOF77W3cyh_G-hETzWrW5xiuZEz/s320/IMG_20231027_162732_299.jpg" width="320" /></a></div><div>And there we have a dynamic IP address from the home router!</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCPrsmvzEP4hrRdptbggEUY7qnkkKlK0t09Efo5EREi6k2A32KZz7TG545rbn5AF9G3MAaPtWQYEzMKKFLQPYxd6_tGHWzL3R0gRX4A9LG5TK6s-P0luE952zy4iDe4C3cMORULj4N75INrgVbsfWVWIbIMwsdFAymB24K8Qn2bWvhRjLRADSROjrcusuZ/s4160/IMG_20231027_162745_061.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCPrsmvzEP4hrRdptbggEUY7qnkkKlK0t09Efo5EREi6k2A32KZz7TG545rbn5AF9G3MAaPtWQYEzMKKFLQPYxd6_tGHWzL3R0gRX4A9LG5TK6s-P0luE952zy4iDe4C3cMORULj4N75INrgVbsfWVWIbIMwsdFAymB24K8Qn2bWvhRjLRADSROjrcusuZ/s320/IMG_20231027_162745_061.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhANS49uI98oildftia7b9dWqt1gbooE_ZfPufBKnYTQFkeQdKaLnqO_qXDZlLrY85Fiu_ucVZ53gxHDMLYwIRifFVR_yuZiSjtvWX0M6myiIaNwv8nrHcIcDC1Rv8z9XRfhtGligS6nUu3woL_z_k2lA8_dWnFe_IrTorLiTheyanj6V84OyrNcZIG8DyF/s4160/IMG_20231027_182730_877.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhANS49uI98oildftia7b9dWqt1gbooE_ZfPufBKnYTQFkeQdKaLnqO_qXDZlLrY85Fiu_ucVZ53gxHDMLYwIRifFVR_yuZiSjtvWX0M6myiIaNwv8nrHcIcDC1Rv8z9XRfhtGligS6nUu3woL_z_k2lA8_dWnFe_IrTorLiTheyanj6V84OyrNcZIG8DyF/s320/IMG_20231027_182730_877.jpg" width="320" /></a></div><div>Yep - it's working!</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQbjrPKYlQqJP_GYxseoqi6AmhGzWoJSA1wm1hi33dzi7zylfzxfsFlFq1IzEFUlNigm7_-BNtqx6Un10r9UhoaZwTehFSDhx9m8pA8hcW6kudbsg6F9d4xprj7cIjKegsu-Z0tiXNGtQOYwogq-MYthkP0MTNVjhSTLskFPKHiflzROm2FjdiX5XkbFQa/s4160/IMG_20231027_185831_159.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQbjrPKYlQqJP_GYxseoqi6AmhGzWoJSA1wm1hi33dzi7zylfzxfsFlFq1IzEFUlNigm7_-BNtqx6Un10r9UhoaZwTehFSDhx9m8pA8hcW6kudbsg6F9d4xprj7cIjKegsu-Z0tiXNGtQOYwogq-MYthkP0MTNVjhSTLskFPKHiflzROm2FjdiX5XkbFQa/s320/IMG_20231027_185831_159.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWbuEu3VTaUzJ8WPO9dwT5mBTFuoLJXohho62Lny_4OLjXadnfuYqOX6EoHSZ1Oem32yeVanx7cLHoGxhSbrQ5aVgDe_042k9tO95OMTTw3ANagg7NnekgB7KEOE0DZirdnw41hoid3auipxGxPkKqzJFdRBQVv9owQTuokBMewQvKvdkBBBTPoaGTFutB/s4160/IMG_20231027_185852_006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWbuEu3VTaUzJ8WPO9dwT5mBTFuoLJXohho62Lny_4OLjXadnfuYqOX6EoHSZ1Oem32yeVanx7cLHoGxhSbrQ5aVgDe_042k9tO95OMTTw3ANagg7NnekgB7KEOE0DZirdnw41hoid3auipxGxPkKqzJFdRBQVv9owQTuokBMewQvKvdkBBBTPoaGTFutB/s320/IMG_20231027_185852_006.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1A0t6rTbdyK39Momi4BlMMGH5la7avV57fh_zFc1EF8qp7F92uBn7hq9mhpyzke5PELKZCaAGU384CxD5omaAsDrqmjFOgxpUNl3WTcHQJJb4v-X_m6qj-3uWFzuLThffUfICcwrE02tJptGSfQcWjqlbjc2od2J6qLDKy3BxHbP-dwu3msonKPMIn3NO/s4160/IMG_20231027_185949_327.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1A0t6rTbdyK39Momi4BlMMGH5la7avV57fh_zFc1EF8qp7F92uBn7hq9mhpyzke5PELKZCaAGU384CxD5omaAsDrqmjFOgxpUNl3WTcHQJJb4v-X_m6qj-3uWFzuLThffUfICcwrE02tJptGSfQcWjqlbjc2od2J6qLDKy3BxHbP-dwu3msonKPMIn3NO/s320/IMG_20231027_185949_327.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">bit random - but I found a disk with AUTO-ROUTE application on it & I thought I'd give it a go - wow! for 1985/1986 this app must have been amazing, it was Google Maps in the 80s and it was actually fast too (<i>okay, wrong Staverton, but I didn't care</i>)</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHoYuJUyKPaSju2K0SnST6D8DHf5U5_NilJWwGnoKR4OHOb64kxf-dkoknRnjbE_X_eBMffwcylVkCa2LEOeyFWvP-S6juZmAGZCnICceYPY0gMi7RN1EcKOT7n9-1RrZH1haEv4KTRRQipS_3i-pnimHOJlrbUy-M5IZMm6S-lWYWzMu4hVmFrK953gMu/s4160/IMG_20231027_190023_437.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHoYuJUyKPaSju2K0SnST6D8DHf5U5_NilJWwGnoKR4OHOb64kxf-dkoknRnjbE_X_eBMffwcylVkCa2LEOeyFWvP-S6juZmAGZCnICceYPY0gMi7RN1EcKOT7n9-1RrZH1haEv4KTRRQipS_3i-pnimHOJlrbUy-M5IZMm6S-lWYWzMu4hVmFrK953gMu/s320/IMG_20231027_190023_437.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr4gpkAMsfR2rt2YJweb2at_Fx6HwLlzmJy3HCw_TLMjmrQAvrW7Ehi0Q_BIATZcqITg_Y7XJ2WXVymGA7m_oWYn3i60z8hmXKGKhxjFPNfCXTo-gybWQEnlMn3LTxHCxcpOVBH0em-BlV5ASQWMP-ncgGyGbkGNlgyTrbPErTN3MPVVSqias0WBZem-nU/s4160/IMG_20231027_190038_227.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr4gpkAMsfR2rt2YJweb2at_Fx6HwLlzmJy3HCw_TLMjmrQAvrW7Ehi0Q_BIATZcqITg_Y7XJ2WXVymGA7m_oWYn3i60z8hmXKGKhxjFPNfCXTo-gybWQEnlMn3LTxHCxcpOVBH0em-BlV5ASQWMP-ncgGyGbkGNlgyTrbPErTN3MPVVSqias0WBZem-nU/s320/IMG_20231027_190038_227.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVXImRvFXamPfxH0v-iP_yRTDjQgsjkiqf63jngLPHsh7YLP54nwGs5bIRtkef9dCf6NIJMR_pu2svo2MmAod0-sJepyAFkykLLqeeeShHG7yPfUYyulRBtN_3MdJPcefSt-AZygfRimWIO3Nzur6GjCjDUUSIbCog7ufjm4oFWpc5ioU-pGLXbpGsCNO/s4160/IMG_20231027_190107_083.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOVXImRvFXamPfxH0v-iP_yRTDjQgsjkiqf63jngLPHsh7YLP54nwGs5bIRtkef9dCf6NIJMR_pu2svo2MmAod0-sJepyAFkykLLqeeeShHG7yPfUYyulRBtN_3MdJPcefSt-AZygfRimWIO3Nzur6GjCjDUUSIbCog7ufjm4oFWpc5ioU-pGLXbpGsCNO/s320/IMG_20231027_190107_083.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">Ah, the reminder of the "Bombs" basically telling you, you crashed the machine! "L'Bombe", said Inspector Clouseau style</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnSYo5qSAvqno3fdRbGJzzuN_Ani-YEL_kFCxp5SOMhCwlqOeDia8HONU3bRz1f8BJ2Mz0_WE5dOOIY3ZGKw6-zeuKGmMZ4geEMx2PeaJb0PDr3sLDDWPdI0HWqclrYYL7jHeqMBi8AcwgHkwo4Rqo0flhp2WLSMfCQFzdNuUNQsdp4KRCwiGgCRkvoKLM/s4160/IMG_20231028_222859_600.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnSYo5qSAvqno3fdRbGJzzuN_Ani-YEL_kFCxp5SOMhCwlqOeDia8HONU3bRz1f8BJ2Mz0_WE5dOOIY3ZGKw6-zeuKGmMZ4geEMx2PeaJb0PDr3sLDDWPdI0HWqclrYYL7jHeqMBi8AcwgHkwo4Rqo0flhp2WLSMfCQFzdNuUNQsdp4KRCwiGgCRkvoKLM/s320/IMG_20231028_222859_600.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">I am so glad I had this old Windows machine to hand ;-)</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjev7CmADx839XX4BJoUJpiaofrE5znwas3awN5O7ONbgL-GenEfsS4j9Ud-1wchBiC2RpHequAGP7pfLurezZzVuNlBjPPelKFac0xqZb-9yTES2_9UcunS_t5DjcBj7E4DTWjm362E-3rhyphenhyphenDcNRMb4N_lheJm8rpH80rmDf1OfegbCRz4Z7AXFp8uZLi_/s4160/IMG_20231028_222909_512.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjev7CmADx839XX4BJoUJpiaofrE5znwas3awN5O7ONbgL-GenEfsS4j9Ud-1wchBiC2RpHequAGP7pfLurezZzVuNlBjPPelKFac0xqZb-9yTES2_9UcunS_t5DjcBj7E4DTWjm362E-3rhyphenhyphenDcNRMb4N_lheJm8rpH80rmDf1OfegbCRz4Z7AXFp8uZLi_/s320/IMG_20231028_222909_512.jpg" width="320" /></a></div>Right, time to download a few example .ST files</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs_WijkXF2jUoOx0ScRB0CMYIGWctQhr-gHqA7wSTBRgXgL3mkxhjKOLmA_677shftVTv_cHmiVmCVrEJrojZVgbFj-mQc-gs7eYWzkWYL9ED6Cm73NViNir2n2C_iyXxX_nMSvKF4yVxZzlqXTNvJ4zcvimrILaNWacYGaWChrBCMy5wtRgSlVNVlbXKx/s4160/IMG_20231028_222921_166.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs_WijkXF2jUoOx0ScRB0CMYIGWctQhr-gHqA7wSTBRgXgL3mkxhjKOLmA_677shftVTv_cHmiVmCVrEJrojZVgbFj-mQc-gs7eYWzkWYL9ED6Cm73NViNir2n2C_iyXxX_nMSvKF4yVxZzlqXTNvJ4zcvimrILaNWacYGaWChrBCMy5wtRgSlVNVlbXKx/s320/IMG_20231028_222921_166.jpg" width="240" /></a></div>..and copy them over to the XP machine...</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ9Zyj4qp6pDsp8fgq3hugeLWefEE5QiLP_d7QNGuxnVjryksfiAoT3QHDKWX3l-Iwwf7xW7tdXYtCJRd6L5LDnZAwOoJ_ukxJGyO75OR64S9oRsMIj5ADVjOiZ26TIpzDMd6mqOx6dKpqLd37vdMLnPrBl-kNZKFC4neZMjng04y5alYybC9P7fQMxJuA/s4160/IMG_20231028_222931_462.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ9Zyj4qp6pDsp8fgq3hugeLWefEE5QiLP_d7QNGuxnVjryksfiAoT3QHDKWX3l-Iwwf7xW7tdXYtCJRd6L5LDnZAwOoJ_ukxJGyO75OR64S9oRsMIj5ADVjOiZ26TIpzDMd6mqOx6dKpqLd37vdMLnPrBl-kNZKFC4neZMjng04y5alYybC9P7fQMxJuA/s320/IMG_20231028_222931_462.jpg" width="320" /></a></div>and then stick the 3.5" disk in the machine to "test"</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1nf_Sa-K1AbRsJEGv3XEUm0nG19bipcQwzluoSPrigrYy3rOyrGmx1InLGWTgAQ2AcF-9MmRL23Y9mzrCpLcrWX1K7fsXjZoqj5ebuXsgBJgItxffEJbvOLnGdt42rDAUraKGwnyxKGasCFhT-m7LPKTcirdd4vrGOXUlLX23fLTedoV-yIkkxjdaa-0/s4160/IMG_20231028_223004_415.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1nf_Sa-K1AbRsJEGv3XEUm0nG19bipcQwzluoSPrigrYy3rOyrGmx1InLGWTgAQ2AcF-9MmRL23Y9mzrCpLcrWX1K7fsXjZoqj5ebuXsgBJgItxffEJbvOLnGdt42rDAUraKGwnyxKGasCFhT-m7LPKTcirdd4vrGOXUlLX23fLTedoV-yIkkxjdaa-0/s320/IMG_20231028_223004_415.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5e-YLdSbfDxQxOANdEc3_L6_8wpgBKTkehDQQud2KRhhbYCKgT0uK2kIcKXy_S1HlzAYLVBrbJkNXLLp3cJU7ChhPxxEQ2ifWYTGIgwziu6RGKP93FH36E47r5F4lgGpjJBfZhb-BGVXNdKV0-gxWO2C5ziVnF9ZtC3PCr5JYZNGwRjiMWPxMoJbKqiFz/s4160/IMG_20231028_223014_315.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5e-YLdSbfDxQxOANdEc3_L6_8wpgBKTkehDQQud2KRhhbYCKgT0uK2kIcKXy_S1HlzAYLVBrbJkNXLLp3cJU7ChhPxxEQ2ifWYTGIgwziu6RGKP93FH36E47r5F4lgGpjJBfZhb-BGVXNdKV0-gxWO2C5ziVnF9ZtC3PCr5JYZNGwRjiMWPxMoJbKqiFz/s320/IMG_20231028_223014_315.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPTSmeQPm-khnGPt6ER-rQxjGiqCFHhmH6SWt7CHGTVr_eAYIeaJ4kd8qWRDxI3srzn15A6M6kK2swLe1sNxBb6JemlNHGdspD4Lk2iIp0mY8zYbJLNzXwU7sEtRBtAVtCrk6GXRhPIFPCsSntBZfiNKvLJpe42d9OHWe_gdbFfRg62JYd7yHH6F8tRZf/s4160/IMG_20231028_223120_218.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPTSmeQPm-khnGPt6ER-rQxjGiqCFHhmH6SWt7CHGTVr_eAYIeaJ4kd8qWRDxI3srzn15A6M6kK2swLe1sNxBb6JemlNHGdspD4Lk2iIp0mY8zYbJLNzXwU7sEtRBtAVtCrk6GXRhPIFPCsSntBZfiNKvLJpe42d9OHWe_gdbFfRg62JYd7yHH6F8tRZf/s320/IMG_20231028_223120_218.jpg" width="320" /></a></div><div>Woo!hoo! yes, it works as it should. I shouldn't be so surprised.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjizAeB2PQHTHAmLM_7ggOqF1XodAw9XXAElj_UywMRhaSRU2-pL3NWOcxdtNDsJrQQNUJJXW_egmHMmAiprZHj3wQ3G1qha5H4a0F2v2WSEullzEkzJw_UTtf30SfE5tVTpUyll_wweaviEokCTc9iaSMWJ4is4vXNziSXalrOEHOwv4iu2P4AMYl6hqpu/s4160/IMG_20231028_223833_362.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjizAeB2PQHTHAmLM_7ggOqF1XodAw9XXAElj_UywMRhaSRU2-pL3NWOcxdtNDsJrQQNUJJXW_egmHMmAiprZHj3wQ3G1qha5H4a0F2v2WSEullzEkzJw_UTtf30SfE5tVTpUyll_wweaviEokCTc9iaSMWJ4is4vXNziSXalrOEHOwv4iu2P4AMYl6hqpu/s320/IMG_20231028_223833_362.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvd2gRGoh1iJ4YWhi6c4qbcHyN54rTBPEbZbA5iGYMt2W8p60UGg_zocSCc6BGq1oXQeR1eEaumewupNa1sXA7VraZygy2js74GBq4HiQ3DQmKEiE-LcJpVU2aiVDM_ciFNrDbU1QoWchG-Cxh5lkpKrx9fWISQia8W2nHyFOpl7HnKvl2bRFFB4F9Dom7/s4160/IMG_20231028_223848_836.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvd2gRGoh1iJ4YWhi6c4qbcHyN54rTBPEbZbA5iGYMt2W8p60UGg_zocSCc6BGq1oXQeR1eEaumewupNa1sXA7VraZygy2js74GBq4HiQ3DQmKEiE-LcJpVU2aiVDM_ciFNrDbU1QoWchG-Cxh5lkpKrx9fWISQia8W2nHyFOpl7HnKvl2bRFFB4F9Dom7/s320/IMG_20231028_223848_836.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4Kwxhy3vun9YB55JGRIk2xBzp_cs8pok5QiyrGSXudaUIPMq4ZHmwid32pXuBu4xl4dtQlGyzVdhASD1M9GW4vDVfYfux9bqVYWXxuXxeQs0CnIGPW7Qph5MJJ4B5iAJ2TDhVb4qdlghiPaTXdcPF3aOYCsSampa1ZXvkViIGdNtivikZBsMm5X1gZEN/s4160/IMG_20231028_224147_556.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4Kwxhy3vun9YB55JGRIk2xBzp_cs8pok5QiyrGSXudaUIPMq4ZHmwid32pXuBu4xl4dtQlGyzVdhASD1M9GW4vDVfYfux9bqVYWXxuXxeQs0CnIGPW7Qph5MJJ4B5iAJ2TDhVb4qdlghiPaTXdcPF3aOYCsSampa1ZXvkViIGdNtivikZBsMm5X1gZEN/s320/IMG_20231028_224147_556.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zxOkTd-YwZATTpCZJmMq1BYso0FeHe5FMQbgGUkkM1EL0qDEJ9a_NukVr7zpZcq1tv-jxQkFbJL3YDxTAciXS2jxin28QiQuRGhWcgtagVOUlkLeTKlEih1VPLycHoeYMc8HfpWuytWd2rJJMYLSBEShFeoL4VOI-oqgAjsqeTtzv3JYUXIfZnJe3Kp4/s4160/IMG_20231028_224204_151.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zxOkTd-YwZATTpCZJmMq1BYso0FeHe5FMQbgGUkkM1EL0qDEJ9a_NukVr7zpZcq1tv-jxQkFbJL3YDxTAciXS2jxin28QiQuRGhWcgtagVOUlkLeTKlEih1VPLycHoeYMc8HfpWuytWd2rJJMYLSBEShFeoL4VOI-oqgAjsqeTtzv3JYUXIfZnJe3Kp4/s320/IMG_20231028_224204_151.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9eBNnxF-dBUEbzw_Dt8lOdoavoz2-edX2ZBSuorezNpQIitelZ3dC7x5zkAhEl8hItnPqJY2lqEUxO-l2TyMbEnPT69lbmlaSNkS9S5YTvNzpFggod2ewGtbNW8ot2OfUIJ9AEDAjaPpo4fcz5DlqEU1kKy1AQyHTP5WqMx4Jx0-f3xC9Nte7yaT5Aef0/s4160/IMG_20231028_231632_616.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9eBNnxF-dBUEbzw_Dt8lOdoavoz2-edX2ZBSuorezNpQIitelZ3dC7x5zkAhEl8hItnPqJY2lqEUxO-l2TyMbEnPT69lbmlaSNkS9S5YTvNzpFggod2ewGtbNW8ot2OfUIJ9AEDAjaPpo4fcz5DlqEU1kKy1AQyHTP5WqMx4Jx0-f3xC9Nte7yaT5Aef0/s320/IMG_20231028_231632_616.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggzzYOdPHFNF8HLXWjqhmku5gfIIEanbOomV1p6yz9mw776hB2iiX7bmGsn740jwIv1-XR6cF8SX-CTD6QS1vWvYNNvhmfQMUMTI3y-FvOCxqvqXmF5ipPz027LMyosgp_CJ7QJBuiruA1tCJUdbleDOjGf8YQkj2-lllT7sgMjwDa1g34d5Gl15uAUUpz/s4160/IMG_20231028_231826_183.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggzzYOdPHFNF8HLXWjqhmku5gfIIEanbOomV1p6yz9mw776hB2iiX7bmGsn740jwIv1-XR6cF8SX-CTD6QS1vWvYNNvhmfQMUMTI3y-FvOCxqvqXmF5ipPz027LMyosgp_CJ7QJBuiruA1tCJUdbleDOjGf8YQkj2-lllT7sgMjwDa1g34d5Gl15uAUUpz/s320/IMG_20231028_231826_183.jpg" width="320" /></a></div><p>...and that was that.</p><p>You may wonder why I have been typing "disk" through this article and previous Amstrad ones I have written "disc". Well..... the Amstrad used a 3" disc and everything else used a 3.5" disk. I am not sure if it was a "thing" to distinguish between the two different types of discquettes, even if it wasn't an Industry distinction, it was something I personally did and have done since, well, the late 1980s - so I find myself still doing it today. Not that anyone cares as who the hell uses physical discs/disks when you have USB / SD-Cards and online folders (someone elses servers = Cloud).</p><p><br /></p><p>Right, time to burn some more disks.... test out the joysticks that I found, setup the Amiga 500 on it's own desk area and oh, I need ANOTHER desk table to put the PCs on.... hmmmm.... this has started to turn out rather expensive with all this new furniture - perhaps it would have been cheaper going on a "2 week holiday" somewhere?.... ah, but it wouldn't have been as much fun! Also, I now have an awesome Retro-Cave room to work from over the winter months.</p><p><br /></p><p>As I say, I started off focused on the WiFi connectivity and proving that it could be done - then immediately forgot about it & moved onto getting software for the machine itself. I shall return to the WiFi as mentioned, at least I now have a nice work space to revert back to.</p><p><br /></p><p>Oh, I also need to document the "8-bit room" at some point, that has the old Amstrads and my electronics / soldering space, that's for another post.</p></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-3055618355986842402023-10-21T21:32:00.009+00:002023-10-21T23:52:28.588+00:00Raspberry Pi 5 4GB arrived today - Part 1<p>of course I got one. It was on pre-order with <a href="http://thepihut.com" target="_blank">thepihut.com</a> (actually this one was registered to Mrs.IsAGeek - but shhhh!), I missed my one being delivered as I was "out" and they wanted it signed for..that will arrive on Monday, that one is the 8GB version with the new PSU and fan...</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjDQlQcb4-Iqbn_4JZLc0PzEl-YeNvHL_ZO244YLmncOn4z7pLSWAVGnmooNq8iQPizbHOhmpAqNt5zTT4yU8AS3h5oSu3QbUY3w-an2nP13TmfmNnh7immjfMCUjKdrPXL6VrmZgALfGHIbgEIK4lE4NZ_PiSt61m4dw1OhS6VmomO62LW6NSbZdx-a_Mn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="568" data-original-width="562" height="344" src="https://blogger.googleusercontent.com/img/a/AVvXsEjDQlQcb4-Iqbn_4JZLc0PzEl-YeNvHL_ZO244YLmncOn4z7pLSWAVGnmooNq8iQPizbHOhmpAqNt5zTT4yU8AS3h5oSu3QbUY3w-an2nP13TmfmNnh7immjfMCUjKdrPXL6VrmZgALfGHIbgEIK4lE4NZ_PiSt61m4dw1OhS6VmomO62LW6NSbZdx-a_Mn=w340-h344" width="340" /></a></div><br />What can I say? Well...I had a minor niggle out-of-the-box that I'll cover here.<p></p><p>I went to here: <a href="https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit" target="_blank">https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjv_OGOX6bUEDGFRlyP6-VvjzZr9dc9Cj8gLZJ4s2koBxfVScLGKjezstL_2ToONwIWHDnc5ZAw0Xqzle5UUnSbkcoHQnDGnW7LOe3E9pWy4OulhBv3kTySQ03DMQ4ASDxsMh_mntRpgdYFgYFQR1Kq1bDoxyjvx4lnZGctM3vVDJTkgzAIWqUeRXg5Rc22" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="779" data-original-width="1118" height="350" src="https://blogger.googleusercontent.com/img/a/AVvXsEjv_OGOX6bUEDGFRlyP6-VvjzZr9dc9Cj8gLZJ4s2koBxfVScLGKjezstL_2ToONwIWHDnc5ZAw0Xqzle5UUnSbkcoHQnDGnW7LOe3E9pWy4OulhBv3kTySQ03DMQ4ASDxsMh_mntRpgdYFgYFQR1Kq1bDoxyjvx4lnZGctM3vVDJTkgzAIWqUeRXg5Rc22=w502-h350" width="502" /></a></div><p></p><p>I downloaded this file: <a href="https://downloads.raspberrypi.com/raspios_arm64/images/raspios_arm64-2023-10-10/2023-10-10-raspios-bookworm-arm64.img.xz" target="_blank">https://downloads.raspberrypi.com/raspios_arm64/images/raspios_arm64-2023-10-10/2023-10-10-raspios-bookworm-arm64.img.xz</a></p><p>I burnt it to an SD-Card:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjaZBzCtnG9VhU4_aYF9rzz2eDR2h_BGHfQq-D1ELrGOWCCwvRhhy_U9sHnwl2QOe-9jX7jmPsc3ZzeL0n7y-f98c1nTpzUloJru67qgXUF6ZQbNDQhHWsqfYUoD6cxY0d6o7g_oD1Uq_9tCl4_iXj9XRWsEihbQTdwp-DCy0q6m2qTcllYuRgd6O7gDP0T" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="438" data-original-width="772" height="245" src="https://blogger.googleusercontent.com/img/a/AVvXsEjaZBzCtnG9VhU4_aYF9rzz2eDR2h_BGHfQq-D1ELrGOWCCwvRhhy_U9sHnwl2QOe-9jX7jmPsc3ZzeL0n7y-f98c1nTpzUloJru67qgXUF6ZQbNDQhHWsqfYUoD6cxY0d6o7g_oD1Uq_9tCl4_iXj9XRWsEihbQTdwp-DCy0q6m2qTcllYuRgd6O7gDP0T=w431-h245" width="431" /></a></div><br />Stuck the SD-Card into the device, booted it up and was shown some looping time out issues and errors.<p></p><p><br /></p><p>I thought that the SD-Card was at fault? So I did it a few times, even used another SD-Card.</p><p>Then I actually read the prompt on the screen - It was complaining that a specific RPi-5.dtd file was missing, nope there it was in the main folder, I could see it.</p><p>It turns out it does tell you to modify t<a href="https://www.raspberrypi.com/documentation/computers/config_txt.html" target="_blank">he config.txt file</a> to bypass the OS check:</p><p><i>os_check=0</i></p><p>I modified the file as told, and it booted up into the familiar style install UI. I could see it was new / different as it asks which web-browser you want to use: Chromium or Frirefox and whether you want to uninstall the unselected one. Interesting, it's like the early 2000s browser-wars all over again.</p><p>Anyway, usual questions and connect to internet and download even more updates and stuff....</p><p>[Please wait...]</p><p>(Write this article, whilst I do!)</p><p> </p><p>So...what am I going to do with it? What am I going to do with ALL THAT POWER?!</p><p>I have absolutely no idea - I'll find something though as I have the next 2-weeks off work.. so that means toy-playing time solely for me. I guess it might involve some node-red, some C code, some ML, maybe some other as yet un-thought about stuff. We'll see. Whatever it is, I'll make sure I look to make sure I use or exploit that new CPU and extra grunt that this specific device offers.</p><p><br /></p><p>To find out more specifically about the Raspberry Pi 5 device itself, go check it out.</p><p><a href="https://www.raspberrypi.com/products/raspberry-pi-5/" target="_blank">https://www.raspberrypi.com/products/raspberry-pi-5/</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgFHGB9x90HsMXq2Yqf8VPDppm5XX02wrati6bonw2wB5nZ0Ik1X-qHL9ZfM2udj5y5dJzg2VNCs3dDY__fdXHX3iNx-X0Zkce1ASsRi5NZiYHop1v5gB7lZ9Tr3L1uKqO47rXHIzaNo6iYLaNl_p2eXKR1XhBiJmVvKw7-0p0b5fmei4x2nkV0MUL7tSIZ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="389" data-original-width="666" height="300" src="https://blogger.googleusercontent.com/img/a/AVvXsEgFHGB9x90HsMXq2Yqf8VPDppm5XX02wrati6bonw2wB5nZ0Ik1X-qHL9ZfM2udj5y5dJzg2VNCs3dDY__fdXHX3iNx-X0Zkce1ASsRi5NZiYHop1v5gB7lZ9Tr3L1uKqO47rXHIzaNo6iYLaNl_p2eXKR1XhBiJmVvKw7-0p0b5fmei4x2nkV0MUL7tSIZ=w513-h300" width="513" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEizOKwgBTTuOfXFvu_7T-MqB2z2YZOIeXepAx7yl1QPJwqXFqZ4UfKmal1rnu6MhermHHrmRphx550xyx0x7AicrXMFcSw7zcYdDhOT4e_H6CVwOzjA9UaOKwZmZoTD1kqt6pEJGKl6LunL0gSoi7GW1WbdwU2t6ZMzBs2WW-Ep_phmigJ61fTy8IbBQ75v" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="537" data-original-width="679" height="367" src="https://blogger.googleusercontent.com/img/a/AVvXsEizOKwgBTTuOfXFvu_7T-MqB2z2YZOIeXepAx7yl1QPJwqXFqZ4UfKmal1rnu6MhermHHrmRphx550xyx0x7AicrXMFcSw7zcYdDhOT4e_H6CVwOzjA9UaOKwZmZoTD1kqt6pEJGKl6LunL0gSoi7GW1WbdwU2t6ZMzBs2WW-Ep_phmigJ61fTy8IbBQ75v=w463-h367" width="463" /></a></div><br />The MOST IMPORTANT feature = the power button! LOL - I do love the fact this is shown as a feature. It's a bit like when Apple announced the "copy & paste" feature with the iPhone and everyone was, like, "wow!".....<p></p><p><br /></p><p>anyway, [System is up to date]</p><p>Time to reboot.</p><p>Hmmm.... okay, so THAT doesn't look so good. :-( Seems like a SD-Card read error going on, although it was fine to boot from it earlier.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiRX5Mf-H-aE6qFNutaQcNc7QfbB179Dm4GuOp9MWDZY8MpamqqxypcWdXYUaIAx9J2cnfJm9nk60F6qr5Leumvm4AarH7G--bEnqqHiJmVoyHRyPfb-BzE326xV2kT64AfEJfv47cj26rO-Yt6GvW_ym85pCvScrCsefQ6nfM9B7dIkkrgVmNLFZQwPTPw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="767" data-original-width="945" height="379" src="https://blogger.googleusercontent.com/img/a/AVvXsEiRX5Mf-H-aE6qFNutaQcNc7QfbB179Dm4GuOp9MWDZY8MpamqqxypcWdXYUaIAx9J2cnfJm9nk60F6qr5Leumvm4AarH7G--bEnqqHiJmVoyHRyPfb-BzE326xV2kT64AfEJfv47cj26rO-Yt6GvW_ym85pCvScrCsefQ6nfM9B7dIkkrgVmNLFZQwPTPw=w468-h379" width="468" /></a></div><br /><br /><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiEctc4AgZ9XB4I2zEe55-9PLn_H5MnS6P9mXiY_Mnp-gg-8I0XBg_Ep24MNTcgCyrcL-4kXJKzTxmXiF6UMP__4pzfbmcKseZJAhIWPttDhgaNzAr6FNhxkBjHAQQA5F089HJa4kw5ta94VZanHyeAg0EGrQsBMcP0DfGrDJDQfxZRAj0rc3pqTSbXbpBK" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="729" data-original-width="852" height="403" src="https://blogger.googleusercontent.com/img/a/AVvXsEiEctc4AgZ9XB4I2zEe55-9PLn_H5MnS6P9mXiY_Mnp-gg-8I0XBg_Ep24MNTcgCyrcL-4kXJKzTxmXiF6UMP__4pzfbmcKseZJAhIWPttDhgaNzAr6FNhxkBjHAQQA5F089HJa4kw5ta94VZanHyeAg0EGrQsBMcP0DfGrDJDQfxZRAj0rc3pqTSbXbpBK=w470-h403" width="470" /></a></div><br /><br /><p></p><p><i>SD TIMEOUT</i></p><p><i>FAT read failed.</i></p><p>Ah, I thought it was going to well. Although, as I said earlier, I thought it might be due to the SD-Cards I am using, they are branded as "KEXIN 32GB", they weren't cheap and nasty one's, but they are not Sandisk, which is what I "usually" use. That might be the problem here?</p><p>Wow! That board gets HOT! I have had it running for 30mins or so and just picked it up to remove the SD-Card and, yeah, that's a bit toastie.</p><p>What now?</p><p>Well, I'm going to err on the SD-Card option and try again tomorrow (after the emergency plumber has come to fix the leaking pipework in the bathroom and hopefully I may have some ££££ left over to go buy some decent SD-Cards from somewhere), we'll see....</p><p>........</p><p>Of course, it may also be that I am using the RPi 4 5v 3amp PSU and not the new RPi 5 5v 5amp PSU?</p><p>Hmmm.... troubleshooting time?</p><p>..........</p><p>Ah-ha!!!! Well... what do we have here?! I was being IMPATIENT! If you wait a few minutes after all the error flipping screen, you then get a Desktop splash screen and then you get the following shown:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgbBTjx-xYwHyz549MgN74_beOzxL_e_mVO-tcveJVt4nUwfK3aU9YjcPiv-35sFyC0bMWhzYLrXuoFmUShKDEnZJVJ6UbhnrnKpDL5L8wamitHP_exxHox6z7eU_BRIhnDKFW6_B3fIEODuEZUng_HfXSXt_2keyf7Am_XPEzKTwZIbKj6LLEBAA-xkgOa" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="826" data-original-width="1142" height="450" src="https://blogger.googleusercontent.com/img/a/AVvXsEgbBTjx-xYwHyz549MgN74_beOzxL_e_mVO-tcveJVt4nUwfK3aU9YjcPiv-35sFyC0bMWhzYLrXuoFmUShKDEnZJVJ6UbhnrnKpDL5L8wamitHP_exxHox6z7eU_BRIhnDKFW6_B3fIEODuEZUng_HfXSXt_2keyf7Am_XPEzKTwZIbKj6LLEBAA-xkgOa=w623-h450" width="623" /></a></div><br />THAT's BETTER.<p></p><p><br /></p><p>Turns out there is actually a new app called: Raspberry Pi Diagnostics. It does an SD Card Speed Test.</p><p>I ran it. I failed.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiX4sfjRxk8cZOYR6pEnv1VHoPqhz_EQoW1Fw4-IFRPBtZgOU2tRum8ybbjmDbJ5tyKdzQmZWwXQeg5mQPLxMkXeiaAcR95dBK-nHAjTli_OKS2G60Y3umUVWqJfohnWkxq0PmDbVqyfOFwdEKZCGOcXAQaH8RzpPaVejh9uHyv8x9xld93xN47V5ZHT2G5" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="735" data-original-width="1104" height="280" src="https://blogger.googleusercontent.com/img/a/AVvXsEiX4sfjRxk8cZOYR6pEnv1VHoPqhz_EQoW1Fw4-IFRPBtZgOU2tRum8ybbjmDbJ5tyKdzQmZWwXQeg5mQPLxMkXeiaAcR95dBK-nHAjTli_OKS2G60Y3umUVWqJfohnWkxq0PmDbVqyfOFwdEKZCGOcXAQaH8RzpPaVejh9uHyv8x9xld93xN47V5ZHT2G5=w420-h280" width="420" /></a></div><br /><p></p><p>What does that mean? that means Amazon is delivering 4 of these tomorrow :-)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh1l5sFaX0tPZNKHyhtB3oJ9RTLOPS5gy2WOTdOW3aBmD8wMN74mBkjukRWpnwWM7-pf8RfZCcFfAZnPuwye6yLbE0Eo2ELCMXfzpX1YeAKP3RblsLwqorT7DMqopjXg6_KE3aPTxsgzMO34qvbBw33obx29lDps3BbISZReea4v5ADQVWh9U0AeQS6hiJs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="427" data-original-width="1101" height="201" src="https://blogger.googleusercontent.com/img/a/AVvXsEh1l5sFaX0tPZNKHyhtB3oJ9RTLOPS5gy2WOTdOW3aBmD8wMN74mBkjukRWpnwWM7-pf8RfZCcFfAZnPuwye6yLbE0Eo2ELCMXfzpX1YeAKP3RblsLwqorT7DMqopjXg6_KE3aPTxsgzMO34qvbBw33obx29lDps3BbISZReea4v5ADQVWh9U0AeQS6hiJs=w519-h201" width="519" /></a></div><br />I'm sure I can use the other cards for other "things", but for the RPi 5, I imagine you have to use the "good stuff" to get it to work properly. Makes sense.<p></p><p>UPDATE:</p><p>I just found a LEXAR 128GB SD-Card, installed the same OS version to it, did the initial install / setup, rebooted and straight into the desktop. Just run the SD-Card Speed Test and [PASS]. Okay, so the SD-Card DOES seem to make a major difference. That is good to know. Also makes me feel more confident that the "slowness" I was experiencing is most likely down to the card. I'll repeat the same steps as I was doing to see if there is a noticeable difference. Yes, it is 01:00am now, but y'know...</p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-71241773483341901862023-10-07T16:09:00.001+00:002023-10-07T16:09:45.845+00:00Amstrad updates - disc 2<p>Following on <a href="https://tonyisageek.blogspot.com/2023/09/amstrad-updates.html" target="_blank">from the previous article post</a>, as Bob would say, "you wouldn't let it lie"</p><p>I ordered some cables, <a href="https://github.com/YnotZer0/ACPCPE" target="_blank">actually for the printer conversion project</a>, but as it had 2 x connectors on it, I hijacked it and used it for this first.</p><p><i>There was a LOT of trial and error & learning mistakes 'earnt' during this exercise and I would probably have been quicker and more efficient if I wasn't doing this late at night after long work/work days, but y'know someone has to do the day job as the EPs I work with all seem to be very work shy...</i></p><p>So, armed with screw-drivers, hacksaws and cups of tea... a hacking I went.</p><p><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh5PcI3KYoxLElswQ9CDG3RFSt8ZllsGHGPI1uKy0L35gh7EuefOpVSl4aMUA1zO_b4OZ33sEtcCBkNNoPYhFtYjKLWqubYJMIy-yWm5I_aEbjyAsuDaVFu7-Gv4jDeACiAWwMFU_qTYQDrdVSC-hdlEPEGiKFgqjL2hOFziy0ubE6lAwe9spT1DRH_B6wD" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="494" data-original-width="1036" height="279" src="https://blogger.googleusercontent.com/img/a/AVvXsEh5PcI3KYoxLElswQ9CDG3RFSt8ZllsGHGPI1uKy0L35gh7EuefOpVSl4aMUA1zO_b4OZ33sEtcCBkNNoPYhFtYjKLWqubYJMIy-yWm5I_aEbjyAsuDaVFu7-Gv4jDeACiAWwMFU_qTYQDrdVSC-hdlEPEGiKFgqjL2hOFziy0ubE6lAwe9spT1DRH_B6wD=w585-h279" width="585" /></a></p><p><br /></p><p>I thought I would just cut & splice the existing internal 4 wires that provide the internal 3" disc drive with power, I mean, it'll only be using the power one at a time, wouldn't it? I had a niggling feeling that this would not work - mainly due to the fact the proper "external 3" disc drives" come with a massive PSU transformer at the back of them, which I kept in mind as I proceeded.</p><p>I also had to "trim" the connector down to the custom shorter cable as used to fit to the drive itself:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh231Mm86pow41JEk1ATmTReQehroUuEi_-x65du8DXVMhUPQtIjmUYqthTmB7HO5wPJhgekHjIH0P-5judlW1kufFykKEgEC8sfvKsC-aWU5xfLJjH4wOkAXvwR3SYVHWRoGthlPg70TRvCKBciXfVw8uJBi7yDD0jrIBPxIaOdCEAc-oc0a4BBaRRCXyM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="522" data-original-width="1050" height="159" src="https://blogger.googleusercontent.com/img/a/AVvXsEh231Mm86pow41JEk1ATmTReQehroUuEi_-x65du8DXVMhUPQtIjmUYqthTmB7HO5wPJhgekHjIH0P-5judlW1kufFykKEgEC8sfvKsC-aWU5xfLJjH4wOkAXvwR3SYVHWRoGthlPg70TRvCKBciXfVw8uJBi7yDD0jrIBPxIaOdCEAc-oc0a4BBaRRCXyM" width="320" /></a></div><p>that will get a big splodge of glue-gun glue at some point.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjlDEghCmuEMoKcUpINcW-N1ZRMPDw5xvF8PAHzxq6TrND5_SjzVor7-XmLZI4Fu7zRG6WthO22_lJfGX3C0Gr_ygBJb_ElVYLzbrqe2LkPr0ZeLQ-mPgNfBH68kg3i61Zf-PpXH_9j_KOmqzk2QfKpoEDIf3naFzbPwlM_j3vCPu98j2QVz_1WhkJ2Jf7w" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="522" data-original-width="1050" height="159" src="https://blogger.googleusercontent.com/img/a/AVvXsEjlDEghCmuEMoKcUpINcW-N1ZRMPDw5xvF8PAHzxq6TrND5_SjzVor7-XmLZI4Fu7zRG6WthO22_lJfGX3C0Gr_ygBJb_ElVYLzbrqe2LkPr0ZeLQ-mPgNfBH68kg3i61Zf-PpXH_9j_KOmqzk2QfKpoEDIf3naFzbPwlM_j3vCPu98j2QVz_1WhkJ2Jf7w" width="320" /></a></div><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh4uAb570o0sMOKXQY1gzCKhNTZpAvvPNueElJHkkFlFtpUUvPBrBe4f6cdxCx2P8ns1sTmPJoaN0K23ePZvJi0levcCnaDsyjNjK509SjYlopgYW8WccRTOPA-697xKsAAot07YxADGSb11Co11vjXfBmk8f3WJRgSi56qwlhjGbk4uHEoS1Hw1zcWrFT2" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="670" data-original-width="1060" height="297" src="https://blogger.googleusercontent.com/img/a/AVvXsEh4uAb570o0sMOKXQY1gzCKhNTZpAvvPNueElJHkkFlFtpUUvPBrBe4f6cdxCx2P8ns1sTmPJoaN0K23ePZvJi0levcCnaDsyjNjK509SjYlopgYW8WccRTOPA-697xKsAAot07YxADGSb11Co11vjXfBmk8f3WJRgSi56qwlhjGbk4uHEoS1Hw1zcWrFT2=w470-h297" width="470" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><p>I assumed that the failure of the drive was due to the power draw, ie. piggy-backing the extra drive was just pulling too much from the 12v / 5v for it handle two drives.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='525' height='436' src='https://www.blogger.com/video.g?token=AD6v5dzfQWpoE_lfgQs3zko3O-fjOiSpjnX3oV7NtoZWmwO8AL0FvULoH1fn4RanoOn9EE3eOlHMhDNDHH6_nPx8Lg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p>I tested frequently, as you know, you're supposed to do. I knew what the wonderful noises were coming from the external 3" disc drive - it was the belt riding up the motor and hitting the bottom of the drive electronics board - not really a major concern, but I did remove it, unscrew the motor, clean up the spindle and attempt to move it down as far as it'll go in order to "pull" the belt just that tiny bit further out to put a tiny bit more tension on it. It seems to work okay.</p><p><br /></p><p>As you can see, I had to remember how to access the "other drive", |B is the way to do it in AMSDOS and just B in CP/M. I thought a good test would be to copy a file from the |A drive to the |B drive. Turns out I had a knackered 3" disc, as the casing was open I could physically see the scratched ring on the disc internals - once I threw that away and got another disc, it all worked fine, copied over nicely and executed no problem.</p><p>However, I did find that using DISCKIT3 to format the disc, did show multiple drives and gave the choice of A or B to format, but when invoking to format, it got to sector 0 and, well, hung... all power off was only way to proceed. Not a major problem, I can just format discs on drive A, once they are formatted, never really need to do it again, just use them.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi_wuUgagvdxR-HoQDU-S6BhkZCad38jEY-uoQqcg7707H61I1YyE2dd6AJ07wNneQqparppozmqe_Omj5r1plFPMEHxdBT8pub1-96Hvt9kdKWoEjA4KmeVaAurUPaBrulZC_srXunk_vKEvuGQIamWySzdLoBrF3Nef_uhQ8FdmptHFdDSprfzM80xJiW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="670" data-original-width="1060" height="202" src="https://blogger.googleusercontent.com/img/a/AVvXsEi_wuUgagvdxR-HoQDU-S6BhkZCad38jEY-uoQqcg7707H61I1YyE2dd6AJ07wNneQqparppozmqe_Omj5r1plFPMEHxdBT8pub1-96Hvt9kdKWoEjA4KmeVaAurUPaBrulZC_srXunk_vKEvuGQIamWySzdLoBrF3Nef_uhQ8FdmptHFdDSprfzM80xJiW" width="320" /></a></div><br /><i>UPDATE: an interesting note here is that I have the same issue with this when using a PROPER DDI-1 disc drive connected to a 6128 all properly, external cable and external PSU. Hmmm....</i><p></p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjj23yq1P__sFQfZ98p61jCWEeJ9yeYH0BE6y3ha8YdCqTh1cWnElN57MbOoq2UFCy-3XR_qICLJuzPYinjOhRxOqrSsU_HA5YSV7TApysa-o4YUqQTmZsbJdp2YNeDBgvDvXgQwMsmGwXg_VY_DCYeCwAkYs4f-HROMyZ97MS_4Mrbiqcl-dzUkZNW3cG-" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="670" data-original-width="1060" height="274" src="https://blogger.googleusercontent.com/img/a/AVvXsEjj23yq1P__sFQfZ98p61jCWEeJ9yeYH0BE6y3ha8YdCqTh1cWnElN57MbOoq2UFCy-3XR_qICLJuzPYinjOhRxOqrSsU_HA5YSV7TApysa-o4YUqQTmZsbJdp2YNeDBgvDvXgQwMsmGwXg_VY_DCYeCwAkYs4f-HROMyZ97MS_4Mrbiqcl-dzUkZNW3cG-=w434-h274" width="434" /></a></div><br /><br /><p></p><p>Then I looked at the wall & I noticed I have the carcass of the Spectrum +3 board (<i>that was totally dead - potentially could have been revived, but not in my area of interest</i>), I had already "borrowed" the 3" disc drive and internal cable from it previously - that was salvageable. I looked at the new PSU that I'd purchased for it, I looked at the 4-cables power cable connector that was used internally to plug in the 3" disc drive... and then I thought, "well, there's my external power source, right there!"</p><p>I was wondering what the 4 wires were for? logic said the 2 black ones were GND, but the other 2? A quick multi-meter check and it showed that one was +12v and one was +5v. Makes sense as the motor that spins the rubber belt around has a big [12v] stamped on it and I'm guessing the circuitry for the board itself will run from the +5v. I was going to solder some wires to the connector directly, then I found:</p><p><a href="https://www.cpcwiki.eu/index.php/Powering_a_CPC_6128_from_a_Sinclar_Spectrum_+3_PSU" target="_blank">https://www.cpcwiki.eu/index.php/Powering_a_CPC_6128_from_a_Sinclar_Spectrum_+3_PSU</a></p><p>and whilst that showed me which were the 12v and 5v (and the "stay-away from" -12v), I then looked at the motherboard and thought, "why don't I just cut out that area and I can just keep it as-is, job done?"</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgQW3xm_vlY-3ZvTdAJLDZUL9hjQx7p-w6-6JByA3WOtrN5v7JLM4Ecb-gGIR2MW0UV6trNT9_ORfoXMltWqfJMmCKPxgMR5IZiKPAWndRaOE8N9jLbJ2WkD9hVNgcUxdJywbujN0M9QgikdajcESO7dHTrDQHY3cJobCMYQlXTzveRNTUk0sNZ7C29Kbnf" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="270" data-original-width="480" height="180" src="https://blogger.googleusercontent.com/img/a/AVvXsEgQW3xm_vlY-3ZvTdAJLDZUL9hjQx7p-w6-6JByA3WOtrN5v7JLM4Ecb-gGIR2MW0UV6trNT9_ORfoXMltWqfJMmCKPxgMR5IZiKPAWndRaOE8N9jLbJ2WkD9hVNgcUxdJywbujN0M9QgikdajcESO7dHTrDQHY3cJobCMYQlXTzveRNTUk0sNZ7C29Kbnf" width="320" /></a></div><br />So that is what I did! After proving it all works okay (and saved me buying yet another PSU), I'll cover the whole thing in glue-gun hot-glue to stop it potentially shorting out on anything. If I were going to be professional, I'd probably fire up the 3D printer and make a proper little case. maybe, one day.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEia1b9wXUVHHuLmJ8ozUV33BKB3L9F8d_AybkpZuBWxR4qjtv-G3mifnc3HO5g7FZbNzMspMdxzvG3jnk6Y-AqiUAr2xMn4_VJkBub8XY8VyJkSG4WEuIG15B-oHgtJY58JTdfA2LNO3eJb97uSZaXkqSCNOOc2qSK2vbmf5AIUQNDgSrHkEmtSBZGwInkw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="655" data-original-width="787" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEia1b9wXUVHHuLmJ8ozUV33BKB3L9F8d_AybkpZuBWxR4qjtv-G3mifnc3HO5g7FZbNzMspMdxzvG3jnk6Y-AqiUAr2xMn4_VJkBub8XY8VyJkSG4WEuIG15B-oHgtJY58JTdfA2LNO3eJb97uSZaXkqSCNOOc2qSK2vbmf5AIUQNDgSrHkEmtSBZGwInkw" width="288" /></a></div><br />Well, would you look at that. It was fine, copied file over and executed absolutely no problem.<p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='553' height='460' src='https://www.blogger.com/video.g?token=AD6v5dyii8GD0flS89Q4wRHZ_8AACXoDDli_sQ4neHcU4Pl9nNSL4lb3SKZJKeiXeTI8JpJlfEfq_coKuuTKPblqIQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><p><i>(I'm no movie director at midnight!)</i></p><p><br /></p><p>One slight accident with a hacksaw later....</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg4Ar1TztSNUEg20N0Zo-0fkm4T-3e3kRHJuUTpeOW5A9KDpO-H6M3pjyJweqk83nNuDarpIXUAkEBF21NO_dIfp3qDEP_u3m1IQI4M4HrbMqjFokK42FLOKv2X0cnVwLC_iUK5TDLcMMvqTunQ_Xxh27t5SAxh-rLwhfs0zpQem_3qSMzlrgyNC9SRnRUv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="589" data-original-width="869" height="277" src="https://blogger.googleusercontent.com/img/a/AVvXsEg4Ar1TztSNUEg20N0Zo-0fkm4T-3e3kRHJuUTpeOW5A9KDpO-H6M3pjyJweqk83nNuDarpIXUAkEBF21NO_dIfp3qDEP_u3m1IQI4M4HrbMqjFokK42FLOKv2X0cnVwLC_iUK5TDLcMMvqTunQ_Xxh27t5SAxh-rLwhfs0zpQem_3qSMzlrgyNC9SRnRUv=w408-h277" width="408" /></a></div>and a very dead Spectrum +3 motherboard has donated it's PSU and made me happy - the board is fried / dead / Norwegian blue / ex-board, only good for spare parts. shhhh!<p></p><p><br />Right, multi-meter time:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj8sIvDduEtxagVkBPgrUp0F6es7ZLnLBADs6jA7VlrsF13BCNEllaIsPEyD-djp5hokL7jkeEDVtY0nmRih6l_FbcPZ85_JPS-MlTfIgXulubEIjgaBx0b3E6gazl3pqpuHPpSujewS1MQx_oBqly0mbkxzeEImjSY8YMf5qRIt5cy5PhqjvdNn4H0EB8h" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="624" data-original-width="600" height="303" src="https://blogger.googleusercontent.com/img/a/AVvXsEj8sIvDduEtxagVkBPgrUp0F6es7ZLnLBADs6jA7VlrsF13BCNEllaIsPEyD-djp5hokL7jkeEDVtY0nmRih6l_FbcPZ85_JPS-MlTfIgXulubEIjgaBx0b3E6gazl3pqpuHPpSujewS1MQx_oBqly0mbkxzeEImjSY8YMf5qRIt5cy5PhqjvdNn4H0EB8h=w292-h303" width="292" /></a></div><br />and this little bundle of mini-mess works fine now:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhdHu9xbkLd-59ljyUNQkgjhZq5U1X-N0DU41l_-lVyrbMBDf16Jg2kxijvLrOwV4jUA9HayiR4g6BWMad2f7g-Y6-dAHJ8kGEc--ozcoDPI6-axJCIFfCStoMI15Orw6clMjt1rn9dSt9a36f2P0vx9f6hy4fbdQllRe111FyuowRhZ4E600qXxfNY0OcQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="780" data-original-width="904" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhdHu9xbkLd-59ljyUNQkgjhZq5U1X-N0DU41l_-lVyrbMBDf16Jg2kxijvLrOwV4jUA9HayiR4g6BWMad2f7g-Y6-dAHJ8kGEc--ozcoDPI6-axJCIFfCStoMI15Orw6clMjt1rn9dSt9a36f2P0vx9f6hy4fbdQllRe111FyuowRhZ4E600qXxfNY0OcQ" width="278" /></a></div><br />mission "nearly" accomplished:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh5PcI3KYoxLElswQ9CDG3RFSt8ZllsGHGPI1uKy0L35gh7EuefOpVSl4aMUA1zO_b4OZ33sEtcCBkNNoPYhFtYjKLWqubYJMIy-yWm5I_aEbjyAsuDaVFu7-Gv4jDeACiAWwMFU_qTYQDrdVSC-hdlEPEGiKFgqjL2hOFziy0ubE6lAwe9spT1DRH_B6wD" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="494" data-original-width="1036" height="279" src="https://blogger.googleusercontent.com/img/a/AVvXsEh5PcI3KYoxLElswQ9CDG3RFSt8ZllsGHGPI1uKy0L35gh7EuefOpVSl4aMUA1zO_b4OZ33sEtcCBkNNoPYhFtYjKLWqubYJMIy-yWm5I_aEbjyAsuDaVFu7-Gv4jDeACiAWwMFU_qTYQDrdVSC-hdlEPEGiKFgqjL2hOFziy0ubE6lAwe9spT1DRH_B6wD=w585-h279" width="585" /></a></div><br /><br /><p></p><p>after a little tidy-up:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhsyxkeNmnggKEhVDeLSnqV6eYIzrxyMA61ojRU4j_cleMRxed42iXQxxc6MzyBoFKMJqe_zZI8xMa1YxdD-tKpQW0qu7Bf5VenA5tzuyjqdnENvKIMXDET6u72_vA8SaCReNXFi5j03MIKmW41RMzp6a_-v9aaE4XPpytkSYmVvCfmxBLaT1vEc9P3kYcD" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="774" data-original-width="1073" height="231" src="https://blogger.googleusercontent.com/img/a/AVvXsEhsyxkeNmnggKEhVDeLSnqV6eYIzrxyMA61ojRU4j_cleMRxed42iXQxxc6MzyBoFKMJqe_zZI8xMa1YxdD-tKpQW0qu7Bf5VenA5tzuyjqdnENvKIMXDET6u72_vA8SaCReNXFi5j03MIKmW41RMzp6a_-v9aaE4XPpytkSYmVvCfmxBLaT1vEc9P3kYcD" width="320" /></a></div><br />it tucks in nicely, just far enough away to be useful / accessible, but not "in the way". nice.<p></p><p><br /></p><p><br /></p><p>And as the universe would have it, at 11:44pm I thought I'd have a quick eBay check...and there was a post for a proper external 3" disc drive WITH cable for £100-ish. Ah, F--- it, so I bought it, might as well have a proper one, y'know, just incase.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiPF65egvAWfrWjr8nXe9etXOMSm7KyL7p8skkV1YHBz9V0UqDjeQHICbN8tU3dRQXof4Kl1AuhlhHciNMBmKAybFNs1loyytG8x4jbUoQvFdmk7H-MXR1Pk545TQKlmV0t_xyLHwkFNckeaqAKHYGpbZa3Uo9MsqGWCUb33bnaXnaU1qPIArJm9_L8csDb" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="738" data-original-width="406" height="527" src="https://blogger.googleusercontent.com/img/a/AVvXsEiPF65egvAWfrWjr8nXe9etXOMSm7KyL7p8skkV1YHBz9V0UqDjeQHICbN8tU3dRQXof4Kl1AuhlhHciNMBmKAybFNs1loyytG8x4jbUoQvFdmk7H-MXR1Pk545TQKlmV0t_xyLHwkFNckeaqAKHYGpbZa3Uo9MsqGWCUb33bnaXnaU1qPIArJm9_L8csDb=w290-h527" width="290" /></a></div><br />and as if the universe also knew, I found one on fbook marketplace, 2miles from where I live, collect only for £60. sigh. anyway, bought that one too! :-) a quick belt swap and clean up & it's working great connected to the "other" 6128 machine.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjZ-HOVc3S17gGcR740kEHcqzGqedLkosUcD3pzC7EFmGY3PVOCk1xUtFpKoWN0DS71DfUGZ9vzVkgbwMQW-FQ1E8npFIkgWijLpVyyFqTzwPXszJSJcy30aNMzVTuQ-aOIqPm9ePJRwIw3QLPiXs9dd3O7pNVtChj8aOSQT2JvELx_NPekF0uI8Z_Ypz1f" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="653" data-original-width="391" height="392" src="https://blogger.googleusercontent.com/img/a/AVvXsEjZ-HOVc3S17gGcR740kEHcqzGqedLkosUcD3pzC7EFmGY3PVOCk1xUtFpKoWN0DS71DfUGZ9vzVkgbwMQW-FQ1E8npFIkgWijLpVyyFqTzwPXszJSJcy30aNMzVTuQ-aOIqPm9ePJRwIw3QLPiXs9dd3O7pNVtChj8aOSQT2JvELx_NPekF0uI8Z_Ypz1f=w235-h392" width="235" /></a></div><br /><br /><p></p><p>I also purchased a PSU for the 12v output so I can plug in and power the |A drive, interestingly the PSU allows up to 3amp, so I wonder if that would push that amount of amps through the board and allow multiple drives to be powered okay - as per my original idea. again, I'll give it a try later on.</p><p><br /></p><p>and in case you were wondering, I actually purchased a PC cable for connecting 3.5" and 5.25" disc drives together to a PC motherboard. If you look closely you can see the edge connectors and push in connectors, they do a great job</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiv8dQtfiVo57mGhjdu7-v8hhmzbWC6bwqcbaUcY3am9yMvvNm8kI70xqdEs-EHnWXIornHeSpts9XjFf8ORost_fg-oFqvjjQTs-lx91jzLgc2A9_tTQexx5Rfd0qSsBfbpZ7gQo69LRfytUHBtFGRgu6zh5dI5ii_Founoh6yc0LutKUEKeaaozhw08TG" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="653" data-original-width="391" height="397" src="https://blogger.googleusercontent.com/img/a/AVvXsEiv8dQtfiVo57mGhjdu7-v8hhmzbWC6bwqcbaUcY3am9yMvvNm8kI70xqdEs-EHnWXIornHeSpts9XjFf8ORost_fg-oFqvjjQTs-lx91jzLgc2A9_tTQexx5Rfd0qSsBfbpZ7gQo69LRfytUHBtFGRgu6zh5dI5ii_Founoh6yc0LutKUEKeaaozhw08TG=w238-h397" width="238" /></a></div><br />After getting all this working, it then dawned on me "why" I bought that cable - it wasn't for this project at all! <a href="https://github.com/YnotZer0/ACPCPE/" target="_blank">It was for connecting the CPC Amstrads to an Arduino Teensy so that I can "PRINT" from the Amstrads, to an Arduino, then onto a Raspberry Pi and then to my laser printer (or web page)!</a><p></p><p>Oh, that's for another article post (I did actually complete this the next day, but will write up later)</p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-17929433088015583462023-10-04T21:22:00.074+00:002023-10-04T22:04:53.508+00:00Amstrad M4 Board - Amstrad gets WiFi (again!)<p>What's all this about then?</p><p>Well, I was very late to the game with this one - but the very nice man who made this board (about 6years ago), made a small batch of them again and sent one to me (<i>I had to pay for it of course and it was about 6 months wait - but it was way worth it!</i>)</p><p> Basically, it's a single board that you plug into the back of the Amstrad CPC computers. Either the 464 or the 6128. Now, I am initially plugging this into the CPC6128, however, I am going to move it over to the CPC464 as that is where I think it deserves to be. The CPC464 does not have a disc drive, but this loveely board will allow me to load and access .DSK files, I can also upgrade the BASIC to v3 and add a bunch of ROMs too.</p><p>Yes, you did indeed read that right, a 1984/5 Amstrad now has access to an Arduino wifi board and a 32GB sd-card (<i>that we prob. won't ever use more than 100MB of!</i>)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg83gMu2-idrkRJFbtONRiBQhzpFtmNFHdpzlh-grCy_Vx_HOmUXY-TQR3HR7lebEWR6GHV63APcQPHXMoVoZK6QyXeJoesSIYavftMSenYA6cEgRnnWQNXONr4_CDezRpYhGD3sJRQodjdciv5fMj_5oNDi5btd_u3UwcEgVkflAecj7ILsSbAdNqhWdgX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="262" data-original-width="309" height="410" src="https://blogger.googleusercontent.com/img/a/AVvXsEg83gMu2-idrkRJFbtONRiBQhzpFtmNFHdpzlh-grCy_Vx_HOmUXY-TQR3HR7lebEWR6GHV63APcQPHXMoVoZK6QyXeJoesSIYavftMSenYA6cEgRnnWQNXONr4_CDezRpYhGD3sJRQodjdciv5fMj_5oNDi5btd_u3UwcEgVkflAecj7ILsSbAdNqhWdgX=w484-h410" width="484" /></a></div><br />I shan't repeat all the other things off the internet that explain all the other gubbings, I'll just document what I need to know if I need to set this up from scratch (again).<p></p><p><a href="https://www.spinpoint.org/2019/11/19/m4-board-guides/" target="_blank">HERE is the main web-site of the creator.</a></p><p>More <a href="https://www.cpcwiki.eu/index.php/M4_Board" target="_blank">INFO</a> here.</p><p><a href="https://www.youtube.com/watch?v=NaPwIQE6IHw" target="_blank">Amstrad-Noob video walkthrough</a> - explains how to add the ROMs etc..</p><p>Step 1 - obtain the board</p><p>Step 2 - plug it into the back of the Amstrad CPC - the right way up! basically the wifi and sd-card are on the bottom facing side of the board - when you turn it on, the blue light is flashing at you, if it is not, you're up the wrong way</p><p>Step 3 - put a blank FAT 32 formatted SD Card into the slot</p><p>Step 4 - power everything on</p><p>Step 5 - note the new detection of the board and extra wording on the screen</p><p>Step 6 - do a quick test. Type:</p><p>|version</p><p>this should output the version of the firmware, currently 2.07 (latest)</p><p>Step 7 - you can check the cd-card access. Type:</p><p>cat</p><p>This will output the A:/ drive content of the sd-card.</p><p>|CD</p><p>[]</p><p>now, this will sit there flashing waiting for an input, this is where you will either type the folder name or the .DSK file name. If you enter a .DSK file name, it will "load" the disc and then you can type: cat and you will see the contents and then you can RUN"xxxx.xxx" and it will run as if it is from a floppy disc</p><p>Step 8 - get it on the network! type:</p><p>|netset, "name=CPC6128, ssid=TP-LINK_A833F6, pw=7uCk044$, dhcp=1, dns1=8.8.8.8, dns2=8.8.4.4, ntp=time.windows.com"</p><p>Then type:</p><p>|netstat</p><p>You should then see:</p><p>Signal: 0cCA</p><p>IP: 192.168.0.103</p><p>Netmask / Gateway / DNS / MAC</p><p>That's it, we're on the network.</p><p>Quick check on the router:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjuOS7IWbPK9-b6-jMvnPC9FpHqp964slRWLcKUfpXWqIa-8HVUaqzaBlKdi17ghVDMBdLEV-gg9VabczXP9SMkfwzAjjri99OqM9wKFDGN8rREtTDhdbdPyqDU6HVrRmkdq8hlk7LTbGlkj5DoNvhrlTrlfJI4NQP9CMAMLQvvQwDsL_GuCWdCZRrYBOsn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="725" data-original-width="663" height="410" src="https://blogger.googleusercontent.com/img/a/AVvXsEjuOS7IWbPK9-b6-jMvnPC9FpHqp964slRWLcKUfpXWqIa-8HVUaqzaBlKdi17ghVDMBdLEV-gg9VabczXP9SMkfwzAjjri99OqM9wKFDGN8rREtTDhdbdPyqDU6HVrRmkdq8hlk7LTbGlkj5DoNvhrlTrlfJI4NQP9CMAMLQvvQwDsL_GuCWdCZRrYBOsn=w374-h410" width="374" /></a></div><br />Yep, there it is [bottom-right], it's shown as [CPC6128].<p></p><p>Right, the M4-Board has a built in web-browser, so leaving the Amstrad we go to our normal web-browser and enter the IP address and see what it serves up:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjhjrlAsLCgnAEIOLaAaPxHmdlv6c2yZHynhwbjd4uTSqWwfnNtX0qAQFo_Esl7EgvRp-PQofDvpNNJ9sOantLxyf01qXWZuE_kZJlD-9egrZYb2qWJkV-THO5oVabiTLxU313W4XVJuL187R2E5YkFY8D5zXhAgDhNpNG_rsMVOJNO0kAXmK-UczUB9ArL" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="201" data-original-width="1193" height="98" src="https://blogger.googleusercontent.com/img/a/AVvXsEjhjrlAsLCgnAEIOLaAaPxHmdlv6c2yZHynhwbjd4uTSqWwfnNtX0qAQFo_Esl7EgvRp-PQofDvpNNJ9sOantLxyf01qXWZuE_kZJlD-9egrZYb2qWJkV-THO5oVabiTLxU313W4XVJuL187R2E5YkFY8D5zXhAgDhNpNG_rsMVOJNO0kAXmK-UczUB9ArL=w583-h98" width="583" /></a></div><br />Excellent! well, that proves it is on the network now.<p></p><p>Click on [Files]</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_W7f0-UmbeqzWTy6HRngGMCWl4oK5HbGAEU7GwokyB9pR3DKFrb9noBBJdIn_euQSs5psn6wfISaKYqi51Az39Rfa_C9Bn5CkLyHteOnJBqCKFT55CvghNjlbX4xdE-wbREFqPvvQg-2dkQFj0xVm17boJs98Ckr1U0JjmfAa2myHwpoaZzxsZBEpwkYC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="755" data-original-width="694" height="404" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_W7f0-UmbeqzWTy6HRngGMCWl4oK5HbGAEU7GwokyB9pR3DKFrb9noBBJdIn_euQSs5psn6wfISaKYqi51Az39Rfa_C9Bn5CkLyHteOnJBqCKFT55CvghNjlbX4xdE-wbREFqPvvQg-2dkQFj0xVm17boJs98Ckr1U0JjmfAa2myHwpoaZzxsZBEpwkYC=w372-h404" width="372" /></a></div><br />You can see that I pre-copied a few files onto the sd-card before.<p></p><p>The thing to note here is that when you boot the M4-board up it creates an /M4 folder and generates some files for itself.</p><p>If you click on the [M4] folder name, it'll show you the contents:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiyNCu692fSBUawsm2RfsOCwO5BPeFn_2R9Lgredl0MR5AEKBarHvNcOPW9uLoZLNOHPAYmpPZKsi0TkUDt-_z1omTJHYy2DzmQqXd12D00v9hyrCLYuEW8DHUwv_DK1GKNDdLIbbvAGP2CV3t11laSvXNWm6zf1mZbsMC2uKOz6K3-my8yfdo9sz1Vgn-2" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="718" data-original-width="704" height="407" src="https://blogger.googleusercontent.com/img/a/AVvXsEiyNCu692fSBUawsm2RfsOCwO5BPeFn_2R9Lgredl0MR5AEKBarHvNcOPW9uLoZLNOHPAYmpPZKsi0TkUDt-_z1omTJHYy2DzmQqXd12D00v9hyrCLYuEW8DHUwv_DK1GKNDdLIbbvAGP2CV3t11laSvXNWm6zf1mZbsMC2uKOz6K3-my8yfdo9sz1Vgn-2=w399-h407" width="399" /></a></div><br />Right, this is where you could, is you wanted to drag & drop a load of files around across the network onto the sd-card - if you didn't copy them over earlier, like I did.<p></p><p>If you click on a file, such as [config.txt], it will open that in the web-browser and show you the content - this is the wifi configuration we typed earlier, so if you want to change that file to have:</p><p>name=CPC464</p><p>instead of CPC6128, change that file and it'll be used the next reboot - when moving the M4-board over to the CPC464 machine, OR you can press [SETTINGS]</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiQ3eka4fKegVMlyRNIEztMc2-Uh_CeA0gG-NiWYg9qXbFk84sZe_oQiwb8WOlTyvmas7mawUwT4KYd1NDMBVy3UeItU5eYloNlBEVQn28ywslHG8PnKNKOFZlU6XY1d_xl9trkrTwtR-HODVQnQGu4kG9MC_vITl0YSscOEGWBEJ6bvzs62WY7uustzSFN" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="387" data-original-width="516" height="299" src="https://blogger.googleusercontent.com/img/a/AVvXsEiQ3eka4fKegVMlyRNIEztMc2-Uh_CeA0gG-NiWYg9qXbFk84sZe_oQiwb8WOlTyvmas7mawUwT4KYd1NDMBVy3UeItU5eYloNlBEVQn28ywslHG8PnKNKOFZlU6XY1d_xl9trkrTwtR-HODVQnQGu4kG9MC_vITl0YSscOEGWBEJ6bvzs62WY7uustzSFN=w399-h299" width="399" /></a></div>and make the changes in the UI that will save the updates to the config.txt file.<br /><br /><p></p><p>Clicking on [ROMS] shows a list of the ROMs you can upload into the m4-board, which saves having to find and use a ROMBoard off ebay that will set you back a small fortune - <a href="https://www.cpcwiki.eu/index.php/ROM_List" target="_blank">most of the ROMs have been backed up & are available</a> (<i>I've pretty much got everyone that was ever available already</i>)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEigR8i4dTRODtH7NkXPeSayvypfbNkwLyBdPscU4VC-KjzypOVixeDPm5uzxTflLn9HNthaecwSPPIBKNZx0bQHVk_hNmDqI971SIL3UA51S0-wj3ay1AY-4L6jNn7wbAnphpCTHZ8-qBzHvtUknuVV40FXuBngKK4Cp-la8e3V_PPunePN0We8ZoWz8Uv5" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="805" data-original-width="500" height="467" src="https://blogger.googleusercontent.com/img/a/AVvXsEigR8i4dTRODtH7NkXPeSayvypfbNkwLyBdPscU4VC-KjzypOVixeDPm5uzxTflLn9HNthaecwSPPIBKNZx0bQHVk_hNmDqI971SIL3UA51S0-wj3ay1AY-4L6jNn7wbAnphpCTHZ8-qBzHvtUknuVV40FXuBngKK4Cp-la8e3V_PPunePN0We8ZoWz8Uv5=w290-h467" width="290" /></a></div><br />In the Amstrad-Noob video, <a href="https://youtu.be/NaPwIQE6IHw?si=CVEih-8q9Vdcw3hL&t=1241" target="_blank">at around, 21 minutes he explains how to load the different ROM</a>s<p></p><p>I loaded up a few ROMs as an example and you see them appear when the Amstrad reboots:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_mh8z0gl0UMhp3wNAgD6eAB2NVwULdrgF1bV9fhi1KgZ_LkLi3tyEt_0jFm3LrNj22WVXG_k6NuT8IrYLdcEnwdkUjCE2G3ru6QXNuEb1TqLMIveGcgPZ9cUgsun8_nQM5plpS3VKCSzUJjfU2PTm2_kWhMVlzt4b7PePR_PFIsks65NfB4Sh7TSUuGyi" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="596" data-original-width="1001" height="191" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_mh8z0gl0UMhp3wNAgD6eAB2NVwULdrgF1bV9fhi1KgZ_LkLi3tyEt_0jFm3LrNj22WVXG_k6NuT8IrYLdcEnwdkUjCE2G3ru6QXNuEb1TqLMIveGcgPZ9cUgsun8_nQM5plpS3VKCSzUJjfU2PTm2_kWhMVlzt4b7PePR_PFIsks65NfB4Sh7TSUuGyi" width="320" /></a></div><br />and there they are. Took my brain about 3seconds to remember what the commands were to invoke the ROM appliactions, (<i>good old muscle memory in action</i>)<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhwKNCpRGoTHHxzDSPFiP5RtBDxGa6X2yJidRDPtUory8LAoDmPC0VQ06EG2mkhgLMZb2E3LXSXJg5_6TR7jJIN8a9AU9gSurvjUIAQrIXxNiP7UPlGQ8exRXO1AwKg8I0KTn9BGnqlhyaOJN1K23aq6Wk3BtRZ4YYMoNwf9PE5o6ixqzNMYrc4p31MkEyM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="284" data-original-width="862" height="105" src="https://blogger.googleusercontent.com/img/a/AVvXsEhwKNCpRGoTHHxzDSPFiP5RtBDxGa6X2yJidRDPtUory8LAoDmPC0VQ06EG2mkhgLMZb2E3LXSXJg5_6TR7jJIN8a9AU9gSurvjUIAQrIXxNiP7UPlGQ8exRXO1AwKg8I0KTn9BGnqlhyaOJN1K23aq6Wk3BtRZ4YYMoNwf9PE5o6ixqzNMYrc4p31MkEyM" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEitWNxtPwt44tf1Ndm_pIypw9HhAeN6bA4VoIcb39pIXt0A0t0lGAqUT5uYGKGocld5nLCANUtX3kvM2lRAGX6iG4WkDNDtw2C147A8sTNd4HTGmsg_f_4UZcuLXTGiE8xpxSM3ZzZ-xpIveROJSDpc_GhY2TYS_XzHvut_0pF23rnNDRqeRWkhHEjvk6pW" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="625" data-original-width="937" height="213" src="https://blogger.googleusercontent.com/img/a/AVvXsEitWNxtPwt44tf1Ndm_pIypw9HhAeN6bA4VoIcb39pIXt0A0t0lGAqUT5uYGKGocld5nLCANUtX3kvM2lRAGX6iG4WkDNDtw2C147A8sTNd4HTGmsg_f_4UZcuLXTGiE8xpxSM3ZzZ-xpIveROJSDpc_GhY2TYS_XzHvut_0pF23rnNDRqeRWkhHEjvk6pW" width="320" /></a></div><br /><p>|TOOLS</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjlMR_wNYxFZ9huldDIxZvt2XgLwn0OMF4t__xbzE3aWjtg5PiE6Raxxi3e13ydrXOhzhDd5Cg5PAvM6NVHNAgWRWKQXSIEV4K7fZnRoR0Pm5OInbQPasOFfkW4cy6vCbWYcTtIG3B48f48wTHCuwJk2nTxqh3za8PR7XDifU0v96l_xJUybjiwrsiCJySC" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="594" data-original-width="1041" height="183" src="https://blogger.googleusercontent.com/img/a/AVvXsEjlMR_wNYxFZ9huldDIxZvt2XgLwn0OMF4t__xbzE3aWjtg5PiE6Raxxi3e13ydrXOhzhDd5Cg5PAvM6NVHNAgWRWKQXSIEV4K7fZnRoR0Pm5OInbQPasOFfkW4cy6vCbWYcTtIG3B48f48wTHCuwJk2nTxqh3za8PR7XDifU0v96l_xJUybjiwrsiCJySC" width="320" /></a></div><br /><br /><p></p>For the M4-board itself - that is loaded into ROM slot 6 and here are all the COMMANDS:<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhMnRBojMgGqL0iD10Ak1VuxnRpke99SpiHv_WOMlmk-tCxDXzR6aChPeU9fV5j6fta_mwF2sV0ywT_XmxUZbBRbql3o5N8dDnhVrSaW0VG-8LxQj6xBPP4Run7_W_5PBqJUBUjsDAMTCHgcHH8zX9J1DZSx2n68RRfheSjRByoh5mDPVZ-N_m7jBeqWOQr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="583" data-original-width="845" height="391" src="https://blogger.googleusercontent.com/img/a/AVvXsEhMnRBojMgGqL0iD10Ak1VuxnRpke99SpiHv_WOMlmk-tCxDXzR6aChPeU9fV5j6fta_mwF2sV0ywT_XmxUZbBRbql3o5N8dDnhVrSaW0VG-8LxQj6xBPP4Run7_W_5PBqJUBUjsDAMTCHgcHH8zX9J1DZSx2n68RRfheSjRByoh5mDPVZ-N_m7jBeqWOQr=w566-h391" width="566" /></a></div><br />Quite a few interesting ones there.<p></p><p>Hmmmm......maybe it might be time to figure out how to write my own ROM and be able to boot it up with a |PIPE command.... |PIG or |PIGOS - now there's an idea....<br /><br /></p><p>Can;t explain just how impressed I am with this, not just the hardware but also the simplicity of using it - that hosted web app makes a huge difference. I've literally scratched the surface of this hardware, many are way ahead of me already, but y'know, that's okay - sometimes I like to not be the pioneering Vanguard (<i>sometimes</i>)</p><p><br /></p><p>UPDATE:</p><p>Okay, so I uploaded a MANIC MINER ROM as ROM8 - out of curiosity and I switched to the Amstrad CPC 464 machine and chose to "up" the BASIC from 1.0 to 1.1.</p><p>Even though it says 128k in the heading, that bit isn't true - it is just the BASIC thatw as upgraded, which makes life a lot easier when typing and using variable values etc.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0OL-_PAJieSZ8vmxF38MuYoZK-hOnx5j682hPBbkJH_vQ_HB027t0teJ9yYpXcEXPlOga_ev0whd44Fd_ptUEcvfd7vHiTpZg5p3Wm4aBeIPK8di3smE2qBuQ_6b5MXN5cs706QJKYxwKw5BkPnSmkg2GvxLsBl7F6FyVEkUWqqdXJ36DEJd56kEiKKuO/s2560/IMG_20231004_224240_159.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2560" data-original-width="1280" height="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0OL-_PAJieSZ8vmxF38MuYoZK-hOnx5j682hPBbkJH_vQ_HB027t0teJ9yYpXcEXPlOga_ev0whd44Fd_ptUEcvfd7vHiTpZg5p3Wm4aBeIPK8di3smE2qBuQ_6b5MXN5cs706QJKYxwKw5BkPnSmkg2GvxLsBl7F6FyVEkUWqqdXJ36DEJd56kEiKKuO/w350-h700/IMG_20231004_224240_159.jpg" width="350" /></a></div>As you can see it is booting into the CPC 464 - it is the BASIC 1.0 and it has loaded the ROMs we uploaded from earlier - you'll note it only lists 6 ROMs on the screen here:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTr7YL-Lqg8mc-PaiUQ3pFBtAfoWlplbwl-pP7x1W1SBwC3Vl0_tqGYkg57kdtNrbNaTr9Z_g3G01gJfQGZLnArc2WL8LtlgCwdY4UVqhK-pT9BcTB4_phEHfx7QBz7bknL_4j1zRDj-bxCpzh6NS_j7a9LQH596HtiImNgAAVvWodUS1p5gvwYQgeCvJQ/s2560/IMG_20231004_224249_330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="269" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTr7YL-Lqg8mc-PaiUQ3pFBtAfoWlplbwl-pP7x1W1SBwC3Vl0_tqGYkg57kdtNrbNaTr9Z_g3G01gJfQGZLnArc2WL8LtlgCwdY4UVqhK-pT9BcTB4_phEHfx7QBz7bknL_4j1zRDj-bxCpzh6NS_j7a9LQH596HtiImNgAAVvWodUS1p5gvwYQgeCvJQ/w536-h269/IMG_20231004_224249_330.jpg" width="536" /></a></div><div class="separator" style="clear: both; text-align: center;">Apologies - for some reason when connecting this CPC 464 to this monitor it's a little fuzzy - the other monitor that I usually use for it is lovely and sharp - very odd. The CPC 6128 has no problem.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM3GzmAejhWe6n7nOS6SUfxnwCxBXh3_zHOSMFGhJx8vbGj3SFLKHG0-GgM-jtrFRLZyrvT_5RSX85jSdmpmlNMGds7G0d2ALoKVC7-wR8VI56CI-0MXbXYV0lLeVUbc_bx1DEtQF_vQBXzzNc0ep8lAIWWnpBj33oRBdB_LSy1HR3K1JlY9CQDScUtPyz/s2560/IMG_20231004_224300_063.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM3GzmAejhWe6n7nOS6SUfxnwCxBXh3_zHOSMFGhJx8vbGj3SFLKHG0-GgM-jtrFRLZyrvT_5RSX85jSdmpmlNMGds7G0d2ALoKVC7-wR8VI56CI-0MXbXYV0lLeVUbc_bx1DEtQF_vQBXzzNc0ep8lAIWWnpBj33oRBdB_LSy1HR3K1JlY9CQDScUtPyz/w504-h252/IMG_20231004_224300_063.jpg" width="504" /></a></div><div>Proof that it is now connected to the CPC 464 machine.</div><div class="separator" style="clear: both; text-align: center;"><br /></div>Oh, look there is an EXTRA ROM that I uploaded<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjklz01XtTOhE9sDxjlCRPJhCSaEKFO97lwQwULroOnBc2_BUja8fk4Qtqm5JYdJxdsr5J-YVfO4_KyRSxFvd1XIBp7sZ9dv1QfHOSXXAIFakefv-ZyMMqmHpReHfeBkd1z622YnMUYOEo6Y0h5XcLOpcKqUXOqK78Y68ArHo35mf7LIYZ9fdjGHzCvkS_n/s2560/IMG_20231004_224330_020.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjklz01XtTOhE9sDxjlCRPJhCSaEKFO97lwQwULroOnBc2_BUja8fk4Qtqm5JYdJxdsr5J-YVfO4_KyRSxFvd1XIBp7sZ9dv1QfHOSXXAIFakefv-ZyMMqmHpReHfeBkd1z622YnMUYOEo6Y0h5XcLOpcKqUXOqK78Y68ArHo35mf7LIYZ9fdjGHzCvkS_n/s320/IMG_20231004_224330_020.jpg" width="320" /></a></div><div>I'll give that a go later on.....</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkb-x177kLqtpQvqUXusUnamCiGCs1aljAd3J7f_yKRo1o6WyDgRWm_EONRMcpM4c1KHHzolT8cb87JsPH8BwmixPs_DsFDT1Rhusex8RAljt5qaci8QwYWG14al_53vWI68pvSYMKNH7CgEzFfHdEFNOlL8Pj5r3OtoxAQXa6Ty9V7_O3yw60XOLihjT8/s2560/IMG_20231004_224440_940.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkb-x177kLqtpQvqUXusUnamCiGCs1aljAd3J7f_yKRo1o6WyDgRWm_EONRMcpM4c1KHHzolT8cb87JsPH8BwmixPs_DsFDT1Rhusex8RAljt5qaci8QwYWG14al_53vWI68pvSYMKNH7CgEzFfHdEFNOlL8Pj5r3OtoxAQXa6Ty9V7_O3yw60XOLihjT8/s320/IMG_20231004_224440_940.jpg" width="320" /></a></div><div>As I have downloaded the file using the |HTTPGET, "spinpoint.org/cpc/ROMUP464.BIN" command, I can run it and it flashes up some text to say it will upgrade the LOWER ROM and that I must reset the CPC after seeing the following screen:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtrHTa0UBDVdoKr-WSCH3xjbydi1T-3iFbe21X1DFXOeKyTvOffjQ8HFoFBQXJCHRag4p8jbaw4z-2SWyAL4KPd-ePiC4Na_pzR49ZznVPDjUcW5uYyH23QyzhNvVC-f1MykI2L5J3BPIdY4NfRz0lIfD9kUr5I7tr9nh1rVflpLAkIuWXstGAnC-2QdxS/s2560/IMG_20231004_224451_316.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtrHTa0UBDVdoKr-WSCH3xjbydi1T-3iFbe21X1DFXOeKyTvOffjQ8HFoFBQXJCHRag4p8jbaw4z-2SWyAL4KPd-ePiC4Na_pzR49ZznVPDjUcW5uYyH23QyzhNvVC-f1MykI2L5J3BPIdY4NfRz0lIfD9kUr5I7tr9nh1rVflpLAkIuWXstGAnC-2QdxS/s320/IMG_20231004_224451_316.jpg" width="320" /></a></div><div>Looks lovely, and looks like it has crashed. It's fine. Leave it for a bit and then press the REST button on the M4-board.</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkbuN9grRRWKsxCVJkNhucAO8mmKSnylorrg6k372o21i5Ns__mebw8C4r5u_ewn_LhTogIRhq7kwkJEI1D9I9w_ARCX9VVk7PXY1OxXbb2TOHOLc6pebIwve0TnvZ0C_FU5bPUyBmoxDvfRYi73WlBYl4SbwXVM6LC8EiJadgTnp36kC4kwBAi5vu1rO4/s2560/IMG_20231004_224513_435.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkbuN9grRRWKsxCVJkNhucAO8mmKSnylorrg6k372o21i5Ns__mebw8C4r5u_ewn_LhTogIRhq7kwkJEI1D9I9w_ARCX9VVk7PXY1OxXbb2TOHOLc6pebIwve0TnvZ0C_FU5bPUyBmoxDvfRYi73WlBYl4SbwXVM6LC8EiJadgTnp36kC4kwBAi5vu1rO4/w430-h215/IMG_20231004_224513_435.jpg" width="430" /></a></div>Woohoo! Look at that, it now has BASIC 1.1 running on the CPC 464! and there is the "proof" shot:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJQw6OBFulyWYccGr41vGyZni7ba0oGRdwhnMigQKIYkf9XuMLnAOuxl9Y30nFhA9Pr3xecDB9kHBNvLMKG-sO1a5ZiWtEY7CzCiJncjs-Phsx3wr_LXWB8Yjc2y9_CcmrZhSZ2ICdjZEz4fSBQxuQc2RqtWx_UWWRprMy9Ybr5aFQekLqDFRyU4zzIa08/s2560/IMG_20231004_224519_473.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2560" data-original-width="1280" height="574" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJQw6OBFulyWYccGr41vGyZni7ba0oGRdwhnMigQKIYkf9XuMLnAOuxl9Y30nFhA9Pr3xecDB9kHBNvLMKG-sO1a5ZiWtEY7CzCiJncjs-Phsx3wr_LXWB8Yjc2y9_CcmrZhSZ2ICdjZEz4fSBQxuQc2RqtWx_UWWRprMy9Ybr5aFQekLqDFRyU4zzIa08/w287-h574/IMG_20231004_224519_473.jpg" width="287" /></a></div><div><br /></div>right, back to running |MANICMINER<div>Well, it does allow you to execute - however, it jumps straight into this screen and the miner just jumps up & down and you have no control - pretty useless - but I'm sure there is a valid reason for it?</div><div>Anyway, it was just a tester.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgke-TwJ3bSkZX7JX_ZlGjKbwAXMlCxCz6ZdjcOBKdYkKhS3b1axkVbv7pBcE9HGpLP6qF-v9YtnfyTSS_6P0EEx4wPRT0cc4oJJG8KuvifbvSTQrXVm0eY9K4pGv0FaxjhR_L8E9IeuCB-x55kw9uYnfVkEuVyIF8y4k88IoaQAVDVM1BuetYMBnzLLImM/s2560/IMG_20231004_224557_194.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgke-TwJ3bSkZX7JX_ZlGjKbwAXMlCxCz6ZdjcOBKdYkKhS3b1axkVbv7pBcE9HGpLP6qF-v9YtnfyTSS_6P0EEx4wPRT0cc4oJJG8KuvifbvSTQrXVm0eY9K4pGv0FaxjhR_L8E9IeuCB-x55kw9uYnfVkEuVyIF8y4k88IoaQAVDVM1BuetYMBnzLLImM/s320/IMG_20231004_224557_194.jpg" width="320" /></a></div><div><br /></div>Talking of tester.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXB53OImPzwQJb1WjC5lNdC77xfeEq1Rsy50_P2gAxvTZ9s_EYOzwU1L5KUH0NEjWIfHHSU3DiDe2fOWd_lJbtxPi-H1lkY4GXDXxp0V436OIJ3n4hj45PFb7OLNjYzDZwhnoUd3nk-bSxBPMiBU88KdIZ7vN1UQNhIG1l7PkmXvAv8InanuzK-0q6i7fL/s2560/IMG_20231004_224708_072.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXB53OImPzwQJb1WjC5lNdC77xfeEq1Rsy50_P2gAxvTZ9s_EYOzwU1L5KUH0NEjWIfHHSU3DiDe2fOWd_lJbtxPi-H1lkY4GXDXxp0V436OIJ3n4hj45PFb7OLNjYzDZwhnoUd3nk-bSxBPMiBU88KdIZ7vN1UQNhIG1l7PkmXvAv8InanuzK-0q6i7fL/w460-h230/IMG_20231004_224708_072.jpg" width="460" /></a></div><div><p>I also thought I'd give my old Scarab2 game a go - again, the only files I have for this is a .DSK file that contains the output game, I lost the source-code a looooooong time ago, oh hang on - I wonder if I could use MAXAM or something to crack it open and disassemble it on the CPC itself? hmmm...</p><p>anyway, it runs fine on the CPC 464:</p></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY3Mdbc1pfRH9VejG-XL2K9nR6-5iDIznJ3dk9vl-Rd253WRbinwn58qiDMBF6232VI3O8ymyNw7gYk3x7EiViI8-gxHTQEQpljY8nV4wXzpORGl9SgGv-wsRSwZcC5vV2-5apf_nbz0Ai_lPntmxxwxF1eYj36_RliVan0uONEkj9MnG02XhoOy4q6F9j/s2560/IMG_20231004_224722_774.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY3Mdbc1pfRH9VejG-XL2K9nR6-5iDIznJ3dk9vl-Rd253WRbinwn58qiDMBF6232VI3O8ymyNw7gYk3x7EiViI8-gxHTQEQpljY8nV4wXzpORGl9SgGv-wsRSwZcC5vV2-5apf_nbz0Ai_lPntmxxwxF1eYj36_RliVan0uONEkj9MnG02XhoOy4q6F9j/w462-h231/IMG_20231004_224722_774.jpg" width="462" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi51qVB5fNAJFii1Hh5kyyD4Tu9DhCsyDVV66raW5J1JQxNZJY-6LjbeIJDuakqlfisGGAudInhL1ITy5ARNpsRhQxbEa3-bW9nGXmqf72Rs8w0B7zvkVmwOANfmOBs3bm86Yi0qcQr-WTu-cRD18iqInyu2y-HntdKFhqD2vvsawf5t7kt9312VuFMg7uc/s2560/IMG_20231004_224727_864.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi51qVB5fNAJFii1Hh5kyyD4Tu9DhCsyDVV66raW5J1JQxNZJY-6LjbeIJDuakqlfisGGAudInhL1ITy5ARNpsRhQxbEa3-bW9nGXmqf72Rs8w0B7zvkVmwOANfmOBs3bm86Yi0qcQr-WTu-cRD18iqInyu2y-HntdKFhqD2vvsawf5t7kt9312VuFMg7uc/w458-h229/IMG_20231004_224727_864.jpg" width="458" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlTQQsuWg6Sy4dq2lI5AxKJvLi7_Iuk0ljVDqIL52i6ZUQhqVyrPFZSdM5c1yjdaPWlsKHM2msu2pGwC8FvJrK01HUY5Q2SXnKXuT1hdLbDZs5OHK9d707vnzw7XkiTeNmz1msv5JadLdl4zn6b_Kk49AYW0RkNXXtFN3g7xNWzP72idqFkRHckCbLFt2F/s2560/IMG_20231004_224734_492.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlTQQsuWg6Sy4dq2lI5AxKJvLi7_Iuk0ljVDqIL52i6ZUQhqVyrPFZSdM5c1yjdaPWlsKHM2msu2pGwC8FvJrK01HUY5Q2SXnKXuT1hdLbDZs5OHK9d707vnzw7XkiTeNmz1msv5JadLdl4zn6b_Kk49AYW0RkNXXtFN3g7xNWzP72idqFkRHckCbLFt2F/w544-h272/IMG_20231004_224734_492.jpg" width="544" /></a></div><br /><p>loving this even more now. I have read that the DSK files are currently read-only, so that does limit it a bit for using things like Mini-Office II for word processing - how do I save the files I create? But, I'm sure if I post about it in the CPCWiki, I'll get a few ideas, or maybe I just don't do that type of work on this machine and I just use the CPC 6128 for "work" and I leave this one for "play"</p><p><br /></p></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-74245884054274333972023-10-04T16:58:00.004+00:002023-10-04T16:58:25.333+00:00Raspberry Pi Pico and JavaScript<p>A match made in heaven?</p><p>If you rewind back to one of my first posts on this blog (although I had been "doing" stuff way before then, I just didn't record it), I was setting up a Raspberry Pi 1 to run nodeJS - basically "server-side JavaScript", it was more than capable and was very useful and handy thing to do.</p><p>Well, the Raspberry Pi 5 has just been announced to be available from 23rd October - yes, I've got an order in for a 4GB and 8GB version - well, the specs for the RPi5 are just mindblowing. It is like having a full blown desktop replacement machine in a small form factor, you don't need to "buy a PC" anymore, a £50 RPi v5 will do all you need it to do... if indeed you want to use it as a "PC replacement".</p><p>Personally, I'm more of the, it should be an IoT hardware integration device and not something you use for playing the latest triple-A games on or complaining about "dropped frames" from streaming YouTube videos - it should be a maker-device.... anyway, who cares about what I think.</p><p>What I AM impressed with is the Raspberry Pi PICO - I've been playing around with that for a year or so and have written quite a few things in MicroPython and C code - have even plugged it in and used it with a Robo PICO to control a K9 "robot", using CircuitPython....</p><p>There was always a niggle that I am somehow compromising by using Python - I'm not a fan of Python, it's a dirty word/language, it does the job, I just don't like it. Maybe it is because it reminds me of Perl and has connections back to early 2000s picking up other peoples Perl scipts of mess and having to mentally debug them line by line to work them out and find out they were doing things they shouldn't, maybe.</p><p>Anyway, it looks like someone knew or also had this issue. JavaScript is now contained within the 264K (yes, K, not MB or GB, K) within the Pico. That is awesome!</p><p>Welcome to Kaluma:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_DZP2BHDLQVskkBPPRBKczQfq6wcuv3FL8LJoNyNl7KoFe3bnvnbH8JJy6GJmYQIwFqQqPrh25fiDTYEaRTxVe2XJEBaxNQgnN_WOV6kngAOab1nIDV-5FRwmexX9m9AXhDN27hnk5kYaj2qyKta_jzVgHn7ZxSFs6DmlMCk-9bDOJKj4ND979BX-BaOv" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="502" data-original-width="621" height="456" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_DZP2BHDLQVskkBPPRBKczQfq6wcuv3FL8LJoNyNl7KoFe3bnvnbH8JJy6GJmYQIwFqQqPrh25fiDTYEaRTxVe2XJEBaxNQgnN_WOV6kngAOab1nIDV-5FRwmexX9m9AXhDN27hnk5kYaj2qyKta_jzVgHn7ZxSFs6DmlMCk-9bDOJKj4ND979BX-BaOv=w565-h456" width="565" /></a></div><br />check it out <a href="https://kalumajs.org/" target="_blank">HERE</a><p></p><p>Here's the QUICK START:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjb3gKaQsFgawGZjll7bEfST93uTw5yNzNY7f1NdzbbBgXrMnqnZwdMFLSlxW5DkHH8yfI1v4GuWImzdNHfG_xknLQvk66PzDx7qlj5JdIhDPwJpVCuAGZ3dI3x7nf3chbugX4J-saU5jIMIy9YU1dX21hg6CimIQxFQAGDX8qDteJ4F-GFPt_Bvesws1rM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="545" data-original-width="630" height="497" src="https://blogger.googleusercontent.com/img/a/AVvXsEjb3gKaQsFgawGZjll7bEfST93uTw5yNzNY7f1NdzbbBgXrMnqnZwdMFLSlxW5DkHH8yfI1v4GuWImzdNHfG_xknLQvk66PzDx7qlj5JdIhDPwJpVCuAGZ3dI3x7nf3chbugX4J-saU5jIMIy9YU1dX21hg6CimIQxFQAGDX8qDteJ4F-GFPt_Bvesws1rM=w573-h497" width="573" /></a></div><br />Now, time to dust off those ideas / things I wanted to previously do, but just didn't want to use Python for.... oh, it's going to be a fun next 3 months, I can tell<p></p><p>Click <a href="https://kalumajs.org/docs/getting-started" target="_blank">HERE</a> for the Getting-Started steps. Right, where is a "spare" Pico W?</p><p>Okay, here's a small procrastination reveal...</p><p>I wrote <a href="https://tonyisageek.blogspot.com/2023/09/raspberry-pi-pico-w-powered-k9-robo.html" target="_blank">some Python code a while back for the K9 Robo Pico that used the ultrasonic sensors </a>to detect objects and to control the wheel motors to do some self-driving; well, I wrote the code in modules, I did the motor drivers first and then (after finding out I had 2 broken sensor modules and getting some new ones), I wrote the sensor code.... I've had the K9 sitting on my desk and being moved around regularly - I did plug it in last weekend with the "intention" of merging the 2 modules of code together. It didn't happen.</p><p>Why not?</p><p>Well, as I said, I just cannot bring myself to write Python, unless I "really" have to. It still irks me. It's like deciding to "fix my car", but instead of using a proper welder and the right tools, I've just got some duct tape and will be wrapping it up & standing back and saying, "yeah, great job, that'll hold"... and then wonder why at 100mph bits of the car are flying off, okay, bit extreme example but that's what I think.</p><p>So...now, however.... I can give Kaluma a test run and see what it can do on the K9. Am looking forward to the weekend now!</p><p>.....</p><p>lovely nice JavaScript (o<i>h shut up whining about the fact you are a lazy programmer and cannot write code that deals with adding numbers and strings together = the usual lazy boy comment about using JavaScript - go and play with traffic, <a href="https://www.sfchronicle.com/bayarea/article/woman-run-autonomous-vehicle-san-francisco-18403044.php" target="_blank">maybe a self-driving car that is not running JavaScript will run you over</a></i>)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhP_VSjPxV7YvTU-P_5JHUHTT-umbXEw7uftdkgT8VIAEstJx-pcUD8fcLQ0bQRNNXw66jHvQBGdo4OR7cQLA1C7JoSDNIJf2r0XSa5mqnaEUGgMm1mBRtIR4pNTov4PtQXjPHpRr2yotBV1ir0IORaJ-JQD6BPbpLj-4cw24gAzk__f9N46i_2YKndZe4J" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="815" data-original-width="435" height="840" src="https://blogger.googleusercontent.com/img/a/AVvXsEhP_VSjPxV7YvTU-P_5JHUHTT-umbXEw7uftdkgT8VIAEstJx-pcUD8fcLQ0bQRNNXw66jHvQBGdo4OR7cQLA1C7JoSDNIJf2r0XSa5mqnaEUGgMm1mBRtIR4pNTov4PtQXjPHpRr2yotBV1ir0IORaJ-JQD6BPbpLj-4cw24gAzk__f9N46i_2YKndZe4J=w448-h840" width="448" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiJuJ2iVa_rkDbd8ujgW_-4UIE2fNBTYRYdCt51OX7cILdg9yivmTQimMH02QswfUA_C3wKbXenzs-falrqz9FqlF1Hv5HmRisCvw3r7DZuABV_IBIOcmTmGkKgj3eWheK2sG7Ui0Pb-_lEnzwZRJ40oT9RC-ZEGLYuWFp3CrcddXeAuDd8fRVDjGVHJrIn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="441" data-original-width="552" height="405" src="https://blogger.googleusercontent.com/img/a/AVvXsEiJuJ2iVa_rkDbd8ujgW_-4UIE2fNBTYRYdCt51OX7cILdg9yivmTQimMH02QswfUA_C3wKbXenzs-falrqz9FqlF1Hv5HmRisCvw3r7DZuABV_IBIOcmTmGkKgj3eWheK2sG7Ui0Pb-_lEnzwZRJ40oT9RC-ZEGLYuWFp3CrcddXeAuDd8fRVDjGVHJrIn=w506-h405" width="506" /></a></div><br />.....<p></p><p>oh and here's a quick link to the example github repo:</p><p><a href="https://github.com/kaluma-project/examples">https://github.com/kaluma-project/examples</a></p><p><br /></p>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0tag:blogger.com,1999:blog-1703155745888770882.post-59809051697879745512023-09-23T21:26:00.007+00:002023-09-23T21:34:46.874+00:00Amstrad updates<p>It's been a little busy with the Amstrad updates.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRSCgmASCPMkkrwWiX9R0mji2VUkjVC8hnZb_oBnCnaRXStQyn6NWnYzuikU3E0w7jzqX1O9mmlRWM60KOC5TOw_p2weS5KXIYNFUCOYCaL6aNNdJs-NdzPDKJB7ePwFYgj8PyI1kh1wAvzGuLAKWX6xKC527vmdRoBkzeGdYBMjjz75iMUnvswjFYtwA-/s4160/IMG_20230920_211344_370.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="3120" data-original-width="4160" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRSCgmASCPMkkrwWiX9R0mji2VUkjVC8hnZb_oBnCnaRXStQyn6NWnYzuikU3E0w7jzqX1O9mmlRWM60KOC5TOw_p2weS5KXIYNFUCOYCaL6aNNdJs-NdzPDKJB7ePwFYgj8PyI1kh1wAvzGuLAKWX6xKC527vmdRoBkzeGdYBMjjz75iMUnvswjFYtwA-/w409-h307/IMG_20230920_211344_370.jpg" width="409" /></a></p><p>First of all, the <a href="https://www.cpcwiki.eu/index.php/USIFAC" target="_blank">UsifacII</a> device has been great - it dawned on me that I could convert .DSK images into real 3" disc images and vice-versa. This was a minor break through for me. why?</p><p>well, it allowed me to write out to real 3" discs software apps like CP/M, Arnor-C and Hisoft-C, you may notice a theme there! It also allowed me to convert an entire 3" disc to a .DSK image and save it onto the USB drive for later retrieval. again, why? well, the 3" discs themselves are getting rare and the non-Amsoft banded ones do tend to fail - easy test is to do a format and if all sectors are okay, all will be good, else mark the side of the disc as BAD and if both sides are bad, you have a new coffee cup coaster.</p><p>I visited archive.org and got hold of a nice .pdf version of the Hisoft-C manual</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgr0bUXV7i8r2pXYEaabr1HBxZ_7ReNChaVvO99JFGkYEKOmKccZZTU5_LhglT_m1XtSTziQyG2igUkkjQbAIn6qsznE8OL5FSwQQBJae6hrpTRfa_asV4rUg8WvM6lmqiS_x5ROlDkOLaxgp91aKQ2S3RuWCN-7fdR2p18kSlLa4HOF8cdZ4osBo40dJOX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="832" data-original-width="610" height="569" src="https://blogger.googleusercontent.com/img/a/AVvXsEgr0bUXV7i8r2pXYEaabr1HBxZ_7ReNChaVvO99JFGkYEKOmKccZZTU5_LhglT_m1XtSTziQyG2igUkkjQbAIn6qsznE8OL5FSwQQBJae6hrpTRfa_asV4rUg8WvM6lmqiS_x5ROlDkOLaxgp91aKQ2S3RuWCN-7fdR2p18kSlLa4HOF8cdZ4osBo40dJOX=w417-h569" width="417" /></a></div><br /><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHAX5AWtxAFlYCwDD5rroSczzEjjjqn1AFID28h7B0wq4LorXEUIlXM7R_Dyu1DiECiPs3_Nh1HiVV1eeprTVb_nPt-L7cFL8PNahy1N5QWiXYJYurLtBmeT6QFVxNn3mWeC31Y8kYRLN8DlyNUUGZDmdCUFWIpFiFHoqwvmWaVW78t2IvqJT4OureK1lz/s4160/IMG_20230919_114412_684.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHAX5AWtxAFlYCwDD5rroSczzEjjjqn1AFID28h7B0wq4LorXEUIlXM7R_Dyu1DiECiPs3_Nh1HiVV1eeprTVb_nPt-L7cFL8PNahy1N5QWiXYJYurLtBmeT6QFVxNn3mWeC31Y8kYRLN8DlyNUUGZDmdCUFWIpFiFHoqwvmWaVW78t2IvqJT4OureK1lz/s320/IMG_20230919_114412_684.jpg" width="320" /></a></div>I did the obligatory "hello world" following the instructions:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-KhP1UBmpQgYXXMljs4hZIQOwf3yFbtSs2WOz7srOWN2F7SBjccpqAV_RhaG92iM_kXiTKtzjtIFx0E2BirS6a-JL7dB5zlCRiNUcAnywqPLmD1y4Gy8LpIdVR80ZTvmtu0CHShsBiO2W1vUG58IB7MmoFHu-63NKvY_ifx7702XYhyodOUKmCH1hkNs2/s4160/IMG_20230919_114424_853.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-KhP1UBmpQgYXXMljs4hZIQOwf3yFbtSs2WOz7srOWN2F7SBjccpqAV_RhaG92iM_kXiTKtzjtIFx0E2BirS6a-JL7dB5zlCRiNUcAnywqPLmD1y4Gy8LpIdVR80ZTvmtu0CHShsBiO2W1vUG58IB7MmoFHu-63NKvY_ifx7702XYhyodOUKmCH1hkNs2/s320/IMG_20230919_114424_853.jpg" width="320" /></a></div>and there we have it. it worked.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqZGoiHts-gNld8z0wJc7CPe2pF6Wng3wN73Z_Q-Q21h8859ieIjpcTkHFueCfc8wfa95bM0JhXeqcEvRHZm8XFPv_7Ch30UqB2OlbFilNY_C2aTJSe5Sw194YfHKhvuLcpfY1VXBz84iMlQh4nbUDq82qWU-u5il385JxPY2-H1TZWn5mxOwQjIoz0rLG/s4160/IMG_20230919_114440_495.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="339" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqZGoiHts-gNld8z0wJc7CPe2pF6Wng3wN73Z_Q-Q21h8859ieIjpcTkHFueCfc8wfa95bM0JhXeqcEvRHZm8XFPv_7Ch30UqB2OlbFilNY_C2aTJSe5Sw194YfHKhvuLcpfY1VXBz84iMlQh4nbUDq82qWU-u5il385JxPY2-H1TZWn5mxOwQjIoz0rLG/w452-h339/IMG_20230919_114440_495.jpg" width="452" /></a></div>The manual has CP/M and AMSDOS specific walkthroughs, which is rather good.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAvCU5X-vxRNMn-E2au6zhyNUuVDY4QLVCB5kEZ8HlAFUyNh_MjnM_36UI5kI_5lliF13HFf4kfyDADDdhdBEsRWTdUuPYgyfP8MsH-Ry7oXC10d2WEFqe7qlxnN4HlsClQjShqfAK_tg6h-UOqdWa7IXPjM-ENgdDHB98YyLjDZfZAVtW67SjBYHodO9R/s4160/IMG_20230919_115925_567.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAvCU5X-vxRNMn-E2au6zhyNUuVDY4QLVCB5kEZ8HlAFUyNh_MjnM_36UI5kI_5lliF13HFf4kfyDADDdhdBEsRWTdUuPYgyfP8MsH-Ry7oXC10d2WEFqe7qlxnN4HlsClQjShqfAK_tg6h-UOqdWa7IXPjM-ENgdDHB98YyLjDZfZAVtW67SjBYHodO9R/s320/IMG_20230919_115925_567.jpg" width="320" /></a></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='489' height='406' src='https://www.blogger.com/video.g?token=AD6v5dzKwc0N-Scy4k5Rcuo_W8SSdZUWzPsA0ThavBErcuo3qCtnWFOj34BSiiRKp-eHOf-KdV5CFGoQDHjMNNKCYQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div><br /></div>I then had a thought. At some point in the past I acquired a Spectrum +3, that has a 3" disc drive... just like the Amstrad. It got me thinking. If the Amstrad CPC 6128 3" drive failed, I would have no backup... The Spectrum +3 motherboard had failed and the 3" disc drive did power on, but it was making some awful noises. So I stripped it out. There it is:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIzlU_Hu8z180ofJGM8oMwt0Gr1DEQoTn3SsWhGvly9Wh7M1KnueiR0aVadFIpo2hepvHreKwSMOw26GvMARsgjDvvKensCMkeh2uFUkWAGmLskwRlz2Kx_7h2Ey_EBhQ8bftEc5BLaVTEUYepae8L598VA1mSEgSEClnyRDItEcJWz3FKelY0IM7sYFXM/s4160/IMG_20230920_211042_785.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIzlU_Hu8z180ofJGM8oMwt0Gr1DEQoTn3SsWhGvly9Wh7M1KnueiR0aVadFIpo2hepvHreKwSMOw26GvMARsgjDvvKensCMkeh2uFUkWAGmLskwRlz2Kx_7h2Ey_EBhQ8bftEc5BLaVTEUYepae8L598VA1mSEgSEClnyRDItEcJWz3FKelY0IM7sYFXM/s320/IMG_20230920_211042_785.jpg" width="240" /></a></div><div><br /></div>and after taking it apart (and NOT losing the read/write pin!) I extracted this lovely bunch of sqwish that once was a drive belt.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgORRPoL9WFFj1QrR7qKC7MHnJno5K6iN15JqKYf8YQS--2wJgfkPT8RhAX7OjOxnpOG7KPHklJ67OzPz61u4iQ1LRgJphMRXtkUJqAclJunkXi3E-osNyD-KCyXwBDCoTtvT_pGMyYWP9EJFbMxzP4Z4KFwImgUGpLFkCGZs1RgdqPq8GdBWQ6lcAJPtdh/s4160/IMG_20230920_211051_887.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgORRPoL9WFFj1QrR7qKC7MHnJno5K6iN15JqKYf8YQS--2wJgfkPT8RhAX7OjOxnpOG7KPHklJ67OzPz61u4iQ1LRgJphMRXtkUJqAclJunkXi3E-osNyD-KCyXwBDCoTtvT_pGMyYWP9EJFbMxzP4Z4KFwImgUGpLFkCGZs1RgdqPq8GdBWQ6lcAJPtdh/w428-h321/IMG_20230920_211051_887.jpg" width="428" /></a></div>Everything actually looked in good condition.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjavfhxOmxqcRKZLZNGbBWEp6-Rgeb8-wp4zTlRX4kg5NUJEi-zKJk-MUP0DhWtsgYdInWdiuKfHKH9-QXknAAj9KIDDKJHWOj7cPbQlXT1RSMcyWvtRPq7st3DHcDgPuuJJDJktvfePhcMh5eJ4jXdhPlOpjQdWYv6VKWaYyl7BCx8R5Zh01naBZJQgoK/s4160/IMG_20230920_211100_329.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjavfhxOmxqcRKZLZNGbBWEp6-Rgeb8-wp4zTlRX4kg5NUJEi-zKJk-MUP0DhWtsgYdInWdiuKfHKH9-QXknAAj9KIDDKJHWOj7cPbQlXT1RSMcyWvtRPq7st3DHcDgPuuJJDJktvfePhcMh5eJ4jXdhPlOpjQdWYv6VKWaYyl7BCx8R5Zh01naBZJQgoK/s320/IMG_20230920_211100_329.jpg" width="240" /></a></div>Even upside down, it looks good. <a href="https://www.cpcwiki.eu/index.php/Changing_the_drive_belt" target="_blank">Just be careful about that little r/w pin, if you lose it, you will not be able to write to a disc ever again</a>.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkHBlBmWCwhwUSTkrLxx59kpcBMkWwhrbNpJsmvnSx6d8oiEjWGWzG96YL2-UruLZp-bz_B33ae4qmVMZWZ815jhgUcCG4ioR96bocafC4uSoOFVPUjOSWcPOZ0iXCCMpFiFz2r8QGXfOTNSPhOBEHvGAfF2aL-Q7fKCoIUQiD126k4VF8I-WoywStlmC3/s4160/IMG_20230920_211118_970.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkHBlBmWCwhwUSTkrLxx59kpcBMkWwhrbNpJsmvnSx6d8oiEjWGWzG96YL2-UruLZp-bz_B33ae4qmVMZWZ815jhgUcCG4ioR96bocafC4uSoOFVPUjOSWcPOZ0iXCCMpFiFz2r8QGXfOTNSPhOBEHvGAfF2aL-Q7fKCoIUQiD126k4VF8I-WoywStlmC3/s320/IMG_20230920_211118_970.jpg" width="240" /></a></div><div><br /></div>I ordered a new belt, well, I ordered a 5-pack! Whilst I wait a few days, I pondered a few things.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Md_DgpVCAjBAWXoGVI7tHEKwXlv5dLIO5nTpTF69EanXwgPZp8uqvlNdPEktl3_kwXUwEOyVAFxfIoPclAu81mLApjUoLetTYGr-PMwxnioX5CX_TmxF6S_K2Wt5dL3rHHt4BgnQlFow_fYiAS6JNywN0qtaD82avXWqAmzjBlbdHhJ87U5mnEHnN6qv/s4160/IMG_20230920_211331_356.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Md_DgpVCAjBAWXoGVI7tHEKwXlv5dLIO5nTpTF69EanXwgPZp8uqvlNdPEktl3_kwXUwEOyVAFxfIoPclAu81mLApjUoLetTYGr-PMwxnioX5CX_TmxF6S_K2Wt5dL3rHHt4BgnQlFow_fYiAS6JNywN0qtaD82avXWqAmzjBlbdHhJ87U5mnEHnN6qv/s320/IMG_20230920_211331_356.jpg" width="320" /></a></div><div><br /></div>I was wondering if I could attach the drive as a "B: drive" connecting it as an external drive and hooking in the power from the existing cabling... hmmmm....<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div><br /></div>Well, whilst I wait for the belts to arrive. I wrote a C app on Hisoft-C, it is a simple app, basically, it is annoying seeing files on a 3" inch disc but not being able to "see the content", so I thought I would write a little app that can print to the screen the contents of the file.<div>Here's a little video of using Hisoft-C, loading the file, editing it, compiling it, executing it and using it.</div><div>Kind of works well for small files, a little larger and well, it crashes at the end. I need to come back to that!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='506' height='421' src='https://www.blogger.com/video.g?token=AD6v5dw8dJC4Nep_tGgYkCtavbjtoPp5Hr6F9oxzzjB7LNODKTxWQVQvjVCPKVeRO8BSSfaRfRJr1Xf-8gN3LD3BGg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><br /><div>This got me thinking. Rather than having the file content zooming up the screen, I wonder if I could print it out. Hang on! I "think" I have an Amstrad printer buried somewhere in the far corner of a loft somewhere... so up I went. And, true enough, there it was, in the original box - looks like I purchased it back in June 2005! Still sealed up, I'd never opened it up. Time to do so:</div><div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_rNWbnbS-DBRvA6nx6Aed30zCLxRgoejYONjkEVpxH1x7ZtmkfptuBF9FX-pch_PSzgvU0xyJiU0oSLN2WXrU5NKqCVHlig7EOmOR9846iC3rYn9MUm0DqV97J41SkTmQtyG-RmGYdoLicc0t6HHsYTxeE60T3LiCFEne8sEwZ56A9f5PpIUFXFeJQtmR/s4160/IMG_20230923_125847_556.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="339" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_rNWbnbS-DBRvA6nx6Aed30zCLxRgoejYONjkEVpxH1x7ZtmkfptuBF9FX-pch_PSzgvU0xyJiU0oSLN2WXrU5NKqCVHlig7EOmOR9846iC3rYn9MUm0DqV97J41SkTmQtyG-RmGYdoLicc0t6HHsYTxeE60T3LiCFEne8sEwZ56A9f5PpIUFXFeJQtmR/w452-h339/IMG_20230923_125847_556.jpg" width="452" /></a></div><div><br /></div>It's in great condition, it has both a PC cable and a CPC cable.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHzn6e0jDf6gzBG2QKzR0s8FVMJ0ixV0cTFISf_g7QNm4SaLS9Weg0GsjhieRTnF0cQRN-DWQalbTFlQdCWODPMae5PORmJmZDAe44lfd8QeDTFMXIghZI8oSxtX-2JdrcT_L5mNfqSe1LMa_uKyMHQs-ji2-Z-33tlt_KJNUDHtaUqhrc5wCpFUx06roC/s4160/IMG_20230923_125922_438.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="339" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHzn6e0jDf6gzBG2QKzR0s8FVMJ0ixV0cTFISf_g7QNm4SaLS9Weg0GsjhieRTnF0cQRN-DWQalbTFlQdCWODPMae5PORmJmZDAe44lfd8QeDTFMXIghZI8oSxtX-2JdrcT_L5mNfqSe1LMa_uKyMHQs-ji2-Z-33tlt_KJNUDHtaUqhrc5wCpFUx06roC/w452-h339/IMG_20230923_125922_438.jpg" width="452" /></a></div><div><br /></div><div>I noticed it actually had a printer ribbon inside the casing. I assumed that it had dried up after all these years, but I thought I'd give it a try anyway. Quick & Dirty way to test the printer is to do:</div><div>Print #8,"here is some text for the printer"</div><div>I attempted this on the CPC 6128 and it just made some noises. So I plugged in the CPC 464 and it printed... and it actually printed some text, so the printer ribbon has some ink still!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVKqrabyCKcPq_h1kyYWq3LZpahX_V0SrvbihGm3SWHxMGIzSNSOw3D7Umngg7pjkHnJg3i7OThXmCPH6HCEbVFIm-mHKbHefTWRKgTvh2uV7LAPZt966A8_0A1lodlCCdjtdE7Fiz3964WyYi_6HTEbw6djavylCk5wxEv3PrpZBiYwTugidzFPyyAcjM/s2560/IMG_20230923_135805_116.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="2560" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVKqrabyCKcPq_h1kyYWq3LZpahX_V0SrvbihGm3SWHxMGIzSNSOw3D7Umngg7pjkHnJg3i7OThXmCPH6HCEbVFIm-mHKbHefTWRKgTvh2uV7LAPZt966A8_0A1lodlCCdjtdE7Fiz3964WyYi_6HTEbw6djavylCk5wxEv3PrpZBiYwTugidzFPyyAcjM/w580-h290/IMG_20230923_135805_116.jpg" width="580" /></a></div><div><br /></div><div>I then repeated the same thing with the CPC 6128 & it worked. Why, it helps if you plug the cable the right way around!</div><div>I did spend some time trying to find a DMP 3160 printer ribbon online, looks very difficult, if not impossible to get a new one. I did read that you "can" use Indian ink or even Sharpies (and some random usage of a fine mist of WD-40) to extend the life of the existing ribbon - this might be an option if I actually choose to print out some C code via the printer. Seeing as I didn't even think I had a printer a week ago, this is novel and interesting progress.</div><div><br /></div><div><br /></div><div>...So, back to the 3" disc drive. I had the carcass of a CPC 6128 motherboard hanging on my wall for about a decade, I cannot really remember why I had just the motherboard on it's own. I didn't do a good job, I literally just ripped parts off the motherboard. I was skeptical whether it would even work.</div><div>I took the Spectrum +3 3" disc drive, the internal cable and mated it together with the CPC 6128....</div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqjN2pZ9LwFyKOiuEThfrzEP5nJXT85ZnjVGtKJwL7i9C8xuly0NKdVZ0PWXqryCntQ_adydcElidn2GATPv1UjcVLpT7NSoLkliK633PZWOY7kgC5n2a6RaK3Q3wHJGl52eBqBWtktDSQQgb-CP06gWKS7nTBMYjzrFD1qjx2U1M409tuj7LaxpZvpFyI/s4160/IMG_20230923_161530_015.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqjN2pZ9LwFyKOiuEThfrzEP5nJXT85ZnjVGtKJwL7i9C8xuly0NKdVZ0PWXqryCntQ_adydcElidn2GATPv1UjcVLpT7NSoLkliK633PZWOY7kgC5n2a6RaK3Q3wHJGl52eBqBWtktDSQQgb-CP06gWKS7nTBMYjzrFD1qjx2U1M409tuj7LaxpZvpFyI/w442-h332/IMG_20230923_161530_015.jpg" width="442" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5xCGjOhF9XAth4QhIBevS7lwiDkKcs_JRqRoFO4YcNHz2HOO_v2zVOr6LtsHK-JaPiZs3317PWr-LOKTIeCAYSjTFjC83u1Mzad3zluDm3mFUA0imKemdfRX4V_73GNeM0thO3TMhLDFeCQocM034UYVHxGUi3CWWxzmmBkC8jYx3iThociUyIlDdro2u/s4160/IMG_20230923_161538_916.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="337" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5xCGjOhF9XAth4QhIBevS7lwiDkKcs_JRqRoFO4YcNHz2HOO_v2zVOr6LtsHK-JaPiZs3317PWr-LOKTIeCAYSjTFjC83u1Mzad3zluDm3mFUA0imKemdfRX4V_73GNeM0thO3TMhLDFeCQocM034UYVHxGUi3CWWxzmmBkC8jYx3iThociUyIlDdro2u/w447-h337/IMG_20230923_161538_916.jpg" width="447" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXG2YNv81SiUNqhXNenVeGuQ9alMqUt8LOEmPyxvHQfiZwLjBADnzdss7KZ0ZJbJD6eDuUXDXWRpNHPZbldIZ88aiz2m3NcJpvYp7XCTGQ-zFkuzkF4n-Ai6k4j6z2DYdQJN3fmSV-CWl0HX_ZAa97mChxufpv2fqH2xNpZlP-KS8F355pSoGWGeaLezfE/s4160/IMG_20230923_161555_880.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="337" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXG2YNv81SiUNqhXNenVeGuQ9alMqUt8LOEmPyxvHQfiZwLjBADnzdss7KZ0ZJbJD6eDuUXDXWRpNHPZbldIZ88aiz2m3NcJpvYp7XCTGQ-zFkuzkF4n-Ai6k4j6z2DYdQJN3fmSV-CWl0HX_ZAa97mChxufpv2fqH2xNpZlP-KS8F355pSoGWGeaLezfE/w450-h337/IMG_20230923_161555_880.jpg" width="450" /></a></div><div><br /></div><div>and it only bl00dy well worked! Not only did the CPC 6128 boot up okay, access to the 3" disc drive was fine, the drive was very quiet - that new belt makes a lot of difference. I just ran whatever was on a disc - it was the Demomaker app, as shown here:</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEkhv7U6zs4CVp4RF2uCdrOU58ufeJFpQtNRITjzlvraZ4VVYH-bCNuieEDb9suqIAXmV2KTzm9iBsjwsw5C1EasC5Sb0rmIc5IdwEJMldC-LUXyAi_34_hqHWkkC0XSlIryPmvwOE35NlMtI4z2oYccuRUZKYf4pYHo2P_iKn9zIFQ0kWicguBG-9uNTP/s4160/IMG_20230923_161624_952.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEkhv7U6zs4CVp4RF2uCdrOU58ufeJFpQtNRITjzlvraZ4VVYH-bCNuieEDb9suqIAXmV2KTzm9iBsjwsw5C1EasC5Sb0rmIc5IdwEJMldC-LUXyAi_34_hqHWkkC0XSlIryPmvwOE35NlMtI4z2oYccuRUZKYf4pYHo2P_iKn9zIFQ0kWicguBG-9uNTP/s320/IMG_20230923_161624_952.jpg" width="320" /></a></div><div><br /></div>I'm well chuffed with that. <br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMW0KAGjnU_AAK8HnREgjOSIuoyr9jwarcVc3-ZNVZNI6N0Szn_eUpSbka-bCR5aNgR-O4ZGL0Oh2sPmEUSQvlPMqs4iNxOfGgts1kjeOfQ479a9WNHkI46txaj4fYNBT6e6nQoLhSG_ChDQTrkwNCmEhI6S0_pNQscvTOhbgJAZyPTUleO0vrPOnHy6WW/s4160/IMG_20230923_161643_507.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMW0KAGjnU_AAK8HnREgjOSIuoyr9jwarcVc3-ZNVZNI6N0Szn_eUpSbka-bCR5aNgR-O4ZGL0Oh2sPmEUSQvlPMqs4iNxOfGgts1kjeOfQ479a9WNHkI46txaj4fYNBT6e6nQoLhSG_ChDQTrkwNCmEhI6S0_pNQscvTOhbgJAZyPTUleO0vrPOnHy6WW/w445-h334/IMG_20230923_161643_507.jpg" width="445" /></a></div><div><br /></div>As you can see, I have the bare board and I have a keyboard casing that it plugs into.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0RiZOXLgHWRL_xkBe4YYuVNmI98f4vzDBiQUIE8tUGtSldJ0Ws-ZOmaFjIV_RTgInsUtNLc_MF1yKL7iMaLA9vwASzrKLNju-DAW2aptp-wVyDvBpk5gs-uL96xVTU9NvIG2_7__iTZBv2EWxitmQtrzN60Qd_KCdEjAv3p97W53FOKZuOe5JrlrYLUeM/s4160/IMG_20230923_165519_333.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4160" data-original-width="3120" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0RiZOXLgHWRL_xkBe4YYuVNmI98f4vzDBiQUIE8tUGtSldJ0Ws-ZOmaFjIV_RTgInsUtNLc_MF1yKL7iMaLA9vwASzrKLNju-DAW2aptp-wVyDvBpk5gs-uL96xVTU9NvIG2_7__iTZBv2EWxitmQtrzN60Qd_KCdEjAv3p97W53FOKZuOe5JrlrYLUeM/s320/IMG_20230923_165519_333.jpg" width="240" /></a></div><div><br /></div>For reference, I thought I would take photo's of the "working" CPC 6128, just to see what is missing and for reference.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6_InEeTetau4YuTnE5YTe-UjKIkzVCRkSgErZvGwjC0oa_pB55ghpPAdXBxp-qUGU8UjpwuBM3jHtpU8M-VJnzr4q-0mR-J1eLeSPLVxVOVseeepkiIbpNk15q3f5fi2eYJD9EOU7UkeqS3bs2ztCxEh48Z6mYgvFNmmKbVAgl_nYBVQwEzTGwcvlo0w6/s4160/IMG_20230923_165538_236.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6_InEeTetau4YuTnE5YTe-UjKIkzVCRkSgErZvGwjC0oa_pB55ghpPAdXBxp-qUGU8UjpwuBM3jHtpU8M-VJnzr4q-0mR-J1eLeSPLVxVOVseeepkiIbpNk15q3f5fi2eYJD9EOU7UkeqS3bs2ztCxEh48Z6mYgvFNmmKbVAgl_nYBVQwEzTGwcvlo0w6/s320/IMG_20230923_165538_236.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju2gE1fZ4sEFZVdDm5IN3SsuM95iakoEvYuyiN2tPrpKxw9R-yazkmRsrh7rOxWaNrrb_QkUEHU8Fr4UnFcNgEOj9n60VHl6R-2pvDZ9Ml0s6eth3xGfi0_pLoaVIbcOt0s7unrJXMc3BFFXeuo-eARLOyRSy7Abz1UvePJ8r9MS5JXuMH124wq4_iiHBM/s4160/IMG_20230923_165546_734.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju2gE1fZ4sEFZVdDm5IN3SsuM95iakoEvYuyiN2tPrpKxw9R-yazkmRsrh7rOxWaNrrb_QkUEHU8Fr4UnFcNgEOj9n60VHl6R-2pvDZ9Ml0s6eth3xGfi0_pLoaVIbcOt0s7unrJXMc3BFFXeuo-eARLOyRSy7Abz1UvePJ8r9MS5JXuMH124wq4_iiHBM/s320/IMG_20230923_165546_734.jpg" width="320" /></a></div><div>Hmmmm.... I see that I am missing an on/off switch, a volume dial and a speaker, apart from that it all looks the same.</div><div><br /></div><div>I decided to make a "cardboard" bottom for the "spare" CPC 6128, I glue-gunned the motherboard with some balsa wood to raise it slightly, glued the cable into place so it didn't move around and glued the 3" disc drive into place. It actually doesn't look to bad:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT9h2zuUhnHUSp1277VyzTY5NFIq66Cf_7IMoARz4ckDEHcvEtHDdXOQ-WVCjulJdSgB6wzmwSQ1SYMCz36G8h_uXMfZzv5I3uXTTm3rNvF3Fx_7CD_NxDSS__x6sbq94qdpFNlGkHKIs9BH0q5RfzQ7XLwEL5bVuJtmMCUhDJRpzTodA44wrLQmXxBhvf/s4160/IMG_20230923_174225_898.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT9h2zuUhnHUSp1277VyzTY5NFIq66Cf_7IMoARz4ckDEHcvEtHDdXOQ-WVCjulJdSgB6wzmwSQ1SYMCz36G8h_uXMfZzv5I3uXTTm3rNvF3Fx_7CD_NxDSS__x6sbq94qdpFNlGkHKIs9BH0q5RfzQ7XLwEL5bVuJtmMCUhDJRpzTodA44wrLQmXxBhvf/w442-h331/IMG_20230923_174225_898.jpg" width="442" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaD_uU31JQ3AgLihWAetaKNNQagvgjSU1ouW80o7g852yJe_16hdBIAIJYubooOYZTG1ITNgzHYzJLSKFHwalDETz6AnRgACBsD-ASW5j0O0ZUrRWaQdHSRo5YvzLjjO8gAucUHYzRI3NNDXFT6tSr65c33OW92fEbwEUp6NTSMrBohI27pjFmSNDfw3Hw/s4160/IMG_20230923_174233_480.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaD_uU31JQ3AgLihWAetaKNNQagvgjSU1ouW80o7g852yJe_16hdBIAIJYubooOYZTG1ITNgzHYzJLSKFHwalDETz6AnRgACBsD-ASW5j0O0ZUrRWaQdHSRo5YvzLjjO8gAucUHYzRI3NNDXFT6tSr65c33OW92fEbwEUp6NTSMrBohI27pjFmSNDfw3Hw/w442-h332/IMG_20230923_174233_480.jpg" width="442" /></a></div><div><br /></div>A quick :CPM boot later and yep, it works great:<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqtWz8ptZezrbSWGAJ5LeJMGhZ_jnUeQAugAX0zqhvEzlhzjqP_OA8xuNzxTofejRrgRfBfx4LzfHPLUpbKO3rCibpnYbQMV47g2wHvYwUYOe3ibH2jTANadHk88-bhHqiA0OtEzorYcTc-ObK5PtmVYWKmC2GdUprbcLBMeKCDqJ95yHA2iydtD2FwKB6/s4160/IMG_20230923_174237_453.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqtWz8ptZezrbSWGAJ5LeJMGhZ_jnUeQAugAX0zqhvEzlhzjqP_OA8xuNzxTofejRrgRfBfx4LzfHPLUpbKO3rCibpnYbQMV47g2wHvYwUYOe3ibH2jTANadHk88-bhHqiA0OtEzorYcTc-ObK5PtmVYWKmC2GdUprbcLBMeKCDqJ95yHA2iydtD2FwKB6/w427-h320/IMG_20230923_174237_453.jpg" width="427" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcpjlOAzpckKrVZTzJkUzbHQfjzCyARAiRTzhMoY1VWwh9qIVj3axtBNhDlzQZWvb3H6bsgIGoXL27BIhyBcsobHp4fwt_jl6Bj26Sb8xwYc5dovURZS7NXWtMQASV6YX0qzwdjngBLe-XfKuWVgFAgMMcv--NgkPET0RFu_I1uQ97CJdwuNlu6G-XWNMb/s4160/IMG_20230923_174251_837.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3120" data-original-width="4160" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcpjlOAzpckKrVZTzJkUzbHQfjzCyARAiRTzhMoY1VWwh9qIVj3axtBNhDlzQZWvb3H6bsgIGoXL27BIhyBcsobHp4fwt_jl6Bj26Sb8xwYc5dovURZS7NXWtMQASV6YX0qzwdjngBLe-XfKuWVgFAgMMcv--NgkPET0RFu_I1uQ97CJdwuNlu6G-XWNMb/w448-h336/IMG_20230923_174251_837.jpg" width="448" /></a></div>You can see the "lift" from this angle.</div><div><br /></div><div>Well, that was a job well done. Well, it was done.... I'll keep an eye out for a proper case bottom on eBay, but y'know these machines go for £100-£250 nowdays so getting a "spares" one will be unlikely and probably be expensive. I'm pretty chuffed that I took two devices that were gathering dust and made a working machine - well, a nice "backup" machine.<br /><p><br /></p><p>So, I can now write C code natively on the CPC machines (in both CP/M & AMSDOS), I'm getting more CP/M Z80 experience ( a nice PROPER OS ), I now have the ability to PRINT and now I have a backup machine. That means I now have 2 x 464, 2 x 6128 working machines letting me continue my retro goodness!</p><p><br /></p><p>Time to blow off more C coding dust and potentially see what I can do interacting with external devices to the CPC machines....</p></div></div>Tony Pigramhttp://www.blogger.com/profile/10914169445656718347noreply@blogger.com0