|
Forum Index : Microcontroller and PC projects : Left behind ?
| Author | Message | ||||
| PhenixRising Guru Joined: 07/11/2023 Location: United KingdomPosts: 2055 |
Never left behind. I won't bore the group with yet another story but I just had the opportunity to compare our Picomite with a high end industrial controller (£2500) The PicoMite smoked it 😂🤣 It's an absolute beast as it stands 👍😎 |
||||
| zeitfest Guru Joined: 31/07/2019 Location: AustraliaPosts: 700 |
The tide is going out I think. I looked for a very specialised, old physics program on the net. Originally it had been painfully written and tweaked over some years by a physics research group and the PhD students, post-docs and academic staff. The source code was only on paper archives, but Gemini (Google) read the academic papers description and logic and recreated the program in a minute or so... and translated it into some other languages as wanted. So you could translate your MMBasic into most other languages and probably vice versa... programming is becoming arbitrary. |
||||
| Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 9080 |
If, as is quite possible based on recent events*, simple access to AI eventually becomes impossible, will the resulting code still be maintainable by humans? Will there still be humans that can program well enough to understand it without AI assistance? *The apparent ease with which AI systems can break out of their sandbox and run amok. "... scientists were so preoccupied with whether or not they could that they didn't stop to think if they should." - Jurassic Park Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
| phil99 Guru Joined: 11/02/2018 Location: AustraliaPosts: 3360 |
Good points Mick. I guess the instructions you give the AI should be to include detailed comments within the program. Then follow that by getting it to write a detailed account of how the program works overall and for each module within it. |
||||
| lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3868 |
All the programs I've had AI write have been amply commented without my asking, and much more helpfully and comprehensively commented than if I had written it all. YMMV. PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on FOTS |
||||
| Martin H. Guru Joined: 04/06/2022 Location: GermanyPosts: 1519 |
That’s a very good point. That’s why I get the AI to explain the procedure or the algorithm to me, so that I understand it. AI doesn’t get annoyed if I ask the same question 20 times. I’ll then write the programme myself. It’s debatable, though, whether I’ll still understand my own source code a year from now. ![]() Edited 2026-08-11 23:10 by Martin H. 'no comment |
||||
| matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 11779 |
Much human written legacy code is unsupportable once the authors are no longer available. An AI has a much better chance of understanding it than we do. I used to work for a bank whose entire back office was written in Dec Basic. It couldn't safely be touched or maintained so 15 years after being written it was still in use. The only solution was a start-from-scratch rewrite at huge expense |
||||
Bryan1![]() Guru Joined: 22/02/2006 Location: AustraliaPosts: 2225 |
One of the best things I thought of with my projects with Claude I simply asked it to make a help page for each page so now got a ? in the top right of the screen with an explanation of the commands on the page. If you guys want an example of this just have a look at my club.py as when someone else uses the code they are not left in the blue so a good understanding can be had from reading the help file. Regards Bryan |
||||
| Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 9080 |
That sounds like an excellent idea. If AI is sorting out the code it's only fair that it should do the documentation as it goes along. :) I know there's a lot of legacy code that is almost impossible to figure out now, but why repeat the same mistake now, when there's no need to? In the past there were sometimes (well, occasionally anyway) times when all comments were omitted or single letter variable names used in interpreters simply to save a bit of speed or some user RAM, but neither of those excuses really works now. Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
| ManiB Senior Member Joined: 12/10/2019 Location: GermanyPosts: 163 |
Hi Martin, I took a look at your AI-generated source code and ported it to my PicoMiteHDMIUSB. Here's what I came up with. If you don't mind, I'd like to include this in my MMBasic tutorial: Mein erstes MMBasic Programm ' Game of Life fuer MMBasic Option Explicit Option Default None Const MAX_X = 50 Const MAX_Y = 30 Const STARTANTEIL = 10 ' Anteil lebender Zellen in Prozent Dim GridA(MAX_X, MAX_Y) As Integer Dim GridB(MAX_X, MAX_Y) As Integer ' ======================== Hauptprogramm ======================== MainLoop End ' ======================== Subs & Functions ======================== Sub MainLoop Local iteration As Integer iteration = 0 InitialisiereGitter GridA() Do ZeigeGitter GridA(), iteration iteration = iteration + 1 ' Optional: Animation verlangsamen ' Pause 500 BerechneNaechstesGitter GridA(), GridB() UebernehmeGitter GridB(), GridA() Loop End Sub ' Setzt alle Zellen eines Gitters auf 0. Sub ClearGrid(Grid() As Integer) Local x As Integer, y As Integer For y = 1 To MAX_Y For x = 1 To MAX_X Grid(x, y) = 0 Next x Next y End Sub ' Erzeugt eine zufaellige Startbelegung. ' Es werden exakt STARTANTEIL Prozent der Zellen gesetzt. Sub InitialisiereGitter(CurrentGrid() As Integer) Local x As Integer, y As Integer Local AnzahlZellen As Integer, GesetzteZellen As Integer ClearGrid CurrentGrid() AnzahlZellen = (MAX_X * MAX_Y * STARTANTEIL) \ 100 GesetzteZellen = 0 Do While GesetzteZellen < AnzahlZellen x = Int(Rnd * MAX_X) + 1 y = Int(Rnd * MAX_Y) + 1 ' Nur neue Zellen zaehlen. Dadurch entstehen exakt ' AnzahlZellen unterschiedliche lebende Startzellen. If CurrentGrid(x, y) = 0 Then CurrentGrid(x, y) = 1 GesetzteZellen = GesetzteZellen + 1 End If Loop End Sub ' Berechnet aus CurrentGrid die naechste Generation in NextGrid. Sub BerechneNaechstesGitter(CurrentGrid() As Integer, NextGrid() As Integer) Local x As Integer, y As Integer Local NachbarnCount As Integer For y = 1 To MAX_Y For x = 1 To MAX_X NachbarnCount = ZaehleLebendeNachbarn(CurrentGrid(), x, y) If CurrentGrid(x, y) = 1 Then ' Lebende Zelle: ' Bei 2 oder 3 lebenden Nachbarn ueberlebt sie. If NachbarnCount = 2 Or NachbarnCount = 3 Then NextGrid(x, y) = 1 Else NextGrid(x, y) = 0 End If Else ' Tote Zelle: ' Bei genau 3 lebenden Nachbarn wird sie geboren. If NachbarnCount = 3 Then NextGrid(x, y) = 1 Else NextGrid(x, y) = 0 End If End If Next x Next y End Sub ' Zaehlt die lebenden Nachbarn einer Zelle. ' Zellen ausserhalb des Spielfelds gelten als tot. Function ZaehleLebendeNachbarn(Grid() As Integer, X_Zelle As Integer, Y_Zelle As Integer) As Integer Local Count As Integer Local dx As Integer, dy As Integer Local NeighX As Integer, NeighY As Integer Count = 0 For dy = -1 To 1 For dx = -1 To 1 ' Die Zelle selbst darf nicht mitgezaehlt werden. If Not (dx = 0 And dy = 0) Then NeighX = X_Zelle + dx NeighY = Y_Zelle + dy If NeighX>=1 And NeighX<=MAX_X And NeighY>=1 And NeighY<=MAX_Y Then If Grid(NeighX, NeighY) = 1 Then Count = Count + 1 End If End If Next dx Next dy ZaehleLebendeNachbarn = Count End Function ' Kopiert das berechnete Gitter in das aktuelle Gitter. Sub UebernehmeGitter(SourceGrid() As Integer, TargetGrid() As Integer) Local x As Integer, y As Integer For y = 1 To MAX_Y For x = 1 To MAX_X TargetGrid(x, y) = SourceGrid(x, y) Next x Next y End Sub ' Gibt das Spielfeld und einige Statusinformationen aus. Sub ZeigeGitter(Grid() As Integer, iteration As Integer) Local x As Integer, y As Integer Local ZeileStr$ As String Local n As Integer, counter As Integer counter = 0 CLS ' Ueberschrift auf MAX_X Zeichen zentrieren. ZeileStr$ = " Game of Life [" + Str$(iteration) + "] " n = MAX_X - Len(ZeileStr$) If n > 0 Then ZeileStr$ = String$(n \ 2, "-") + ZeileStr$ + String$(n - n \ 2, "-") End If Print ZeileStr$ ' Spielfeld ausgeben. For y = 1 To MAX_Y ZeileStr$ = "" For x = 1 To MAX_X If Grid(x, y) = 1 Then ZeileStr$ = ZeileStr$ + Chr$(219) ' voller Block counter = counter + 1 Else ZeileStr$ = ZeileStr$ + "." End If Next x Print ZeileStr$ Next y ' Anzahl lebender Zellen ausgeben. ZeileStr$ = " Living cells [" + Str$(counter) + "] " n = MAX_X - Len(ZeileStr$) If n > 0 Then ZeileStr$ = String$(n \ 2, "-") + ZeileStr$ + String$(n - n \ 2, "-") End If Print ZeileStr$ End Sub |
||||
| Martin H. Guru Joined: 04/06/2022 Location: GermanyPosts: 1519 |
Of course you can use that. What I was really interested in was seeing how a large language model, without an internet connection, was able to recognise the correct game from my phrase ‘Game of Life’ and was also capable of generating a Basic programme. 'no comment |
||||
| The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2026 |