Sunday, June 08, 2025

machine learning explained

Below is a summary of an article by Rodney Brooks, Machine Learning Explained (2017).

This inspiried me to take on the development of my own version of hexapawn (referenced below) in python. After reading the Rodney Brooks article I did search around and found a hexapawn version written in Scratch by puttering. The rules are outlined there. The machine improves their play as it plays. I played 30 games with it. For the first 10 I won 6 and the machine 4. For the next 10 I won 4 and the machine 6. For the final 10 I won 2 and the machine 8. I hasten to add that in this game black has the advantage and with perfect play should win 0 to 10.

Anyway Machine Learning is all the rage now so I'll summarise large section of the Brooks article. Of course, you should read the whole thing:

Machine Learning

  • is what has enabled the new assistants in our houses such as the Amazon Echo (Alexa) and Google Home by allowing them to reliably understand as we speak to them.
  • is how Google chooses what advertisements to place, how it saves enormous amounts of electricity at its data centers, and how it labels images so that we can search for them with key words.
  • is how DeepMind (a Google company) was able to build a program called Alpha Go which beat the world Go champion.
  • is how Amazon knows what recommendations to make to you whenever you are at its web site.
  • is how PayPal detects fraudulent transactions.
  • is how Facebook is able to translate between languages. And the list goes on!

Machine Learning is not magic.

Every successful application of ML is hard won by researchers or engineers carefully analyzing the problem that is at hand. They select one or many different ML algorithms, and custom design how to connect them together and to the data. In some cases there is an extensive period of training on very large sets of data before the algorithm can be run on the problem that is being solved. In that case there may be months of work to do in collecting the right sort of data from which ML will actually learn. In other cases the learning algorithm will be integrated in to the application and will learn while doing the task that is desired–it might require some training wheels in the early stages, and they too must be designed. In any case there is always a big design project about how, when the ultimate system is operational, the data that comes in will be organized, processed and mapped before it reaches the ML component of the system.

Alan Turing was assisted by Donald Michie in developing the code breaking Colossus computer Bletchley Park during WW2 which helped shorten the war against fascism

After the war Arthur Samuel developed a machine that could play draughts from 1952-56, the first AI in the USA.

Samuel wondered whether the improvements he was making to the program by hand could be made by the machine itself.

What Samuel had realized, demonstrated, and exploited, was that digital computers were by 1959 fast enough to take over some of the fine tuning that a person might do for a program, as he had been doing since the first version of his program in 1952, and ultimately eliminate the need for much of that effort by human programmers by letting the computer do some Machine Learning on appropriate parts of the problem. This is exactly what has lead, almost 60 years later to the great influence that ML is now having on the world.

Samuel explored two (machine) learning techniques:

  1. Memoization or memoisation is an optimization technique used primarily to speed up computer programs by storing the results of expensive function calls and returning the cached result when the same inputs occur again
  2. The other learning technique that he investigated involved adjusting numerical weights on how much the program should believe each of over thirty measures of how good or bad a particular board position was for the program or its human opponent. This is closer to how ML works today.

Donald Michie himself built a machine that could learn to play the game of tic-tac-toe (Noughts and Crosses in British English) from 304 matchboxes, small rectangular boxes which were the containers for matches, and which had an outer cover and a sliding inner box to hold the matches. He put a label on one end of each of these sliding boxes, and carefully filled them with precise numbers of colored beads. With the help of a human operator, mindlessly following some simple rules, he had a machine that could not only play tic-tac-toe but could learn to get better at it. He called his machine MENACE, for Matchbox Educable Noughts And Crosses Engine, and published⁠5 a report on it in 1961. A matchbox computer is still a computer!

In 1962 Martin Gardner⁠ reported on it in his regular Mathematical Games column in Scientific American, but illustrated it with a slightly simpler version to play hexapawn, three chess pawns against three chess pawns on a three by three chessboard. … Gardner suggested that people try building a matchbox computer to play simplified checkers with two pieces for each player on a four by four board.

Rodney Brooks recounts how he eventually came to realise that this was a wonderful way for explaining how machine learning works.

Today people generally recognize three different classes of Machine Learning, supervised, unsupervised, and reinforcement learning, all three very actively researched, and all being used for real applications. Donald Michie’s MENACE introduced the idea of ML reinforcement learning, and he explicitly refers to reinforcement as a key concept in how it works

Footnote:
I explain in this article, an AI taxonomy, the difference between Machine Learning (ML) and AI. You can have forms of AI that don’t learn over time. Symbolic AI, Traditional robotics and Behaviour based robotics could all fit this category. They are programmed, they do some human like stuff but don’t change or improve over time without human reprogramming. They are still important but sidelined at the moment due to the LLM (Large Language Models) hype.

Wednesday, June 04, 2025

my crystal neopixel lamp

The Concept:

This started from the idea of making a lamp with flashing, coloured LEDs inside. The inspiration here was seeing such a lamp made by Robin at Hackerspace for his grand-daughter. I learnt then about the ESP32 board which enables control of the flashing LEDs, aka Neopixels, from your phone.

Previously, I had made a Sierpinkski sieve a Sierpinski pyramid lamp with transparent PLA filament and lit it up with a couple of Circuit Playgrounds in the base. Up until then that was my favourite make! This background partially determined my direction for this project.

So, I found a crystal lamp on printables, here, which had been partially hollowed out and printed it with transparent filament.

This pic is from Printables: I plan to improve it with changing coloured neopixels that go to the top of the central pillar (see video near the bottom of this article)

Then began a complex process of research and buying of materials. I had to determine what to buy and the voltage and current requirements. Adafruit has a comprehensive uberguide about NeoPixels. Some helpful pointers from the adafruit uberguide were:

  • NeoPixels are usually described as “5 Volt devices” ... (but) ...Lower voltages are always acceptable, with the caveat that the LEDs may be slightly dimmer. There’s a limit below which the LED will fail to light, or will start to show the wrong color.
  • NeoPixels don’t care what end they receive power from. Though data moves in only one direction, electricity can go either way. You can connect power at the head, the tail, in the middle, or ideally distribute it to several points.

I also consulted with Robin at Hackerspace about which strips and ESP32 to purchase.

My plan became something like this:
  • purchase a cuttable RGB+IC 144LEDs/m WS2812B LED Strip. I then cut 3 strips, cutting at the copper dots, each 14 LEDs long and arranged them around a triangular prism so there will be lots of flashing lights from all directions.
  • design and 3D print a hollow triangular prism support for the LED strips after they had been cut
  • design and print a base with a cavity to hold the batteries and the ESP32 board
  • purchase a SuperMini ESP32-S3, 23mmx18mm, keeping it small so as to keep the cavity small
  • power the whole thing with 3xAAA batteries in a cylindrical holder (55mm long x 22mm diameter), amounting to 4.5 volts

In retrospect, this is or was a reasonable plan. Of course there are alternatives, eg. rather than the bulky battery holder run a cable to a 5v power supply. I was muddling through. Doing things for the first time is always hard.

Understanding the circuit and how the LED strip works

Initially I didn’t understand how the Neopixel strips (WS2812) worked. I hadn't grasped the significance of the comment in the adafruit uberguide, that "NeoPixels don’t care what end they receive power from." As it turns out each LED has its own processor. One side is positive, the other side negative and the data flows in one direction marked by an arrow on the strip. My understanding now is that the circuit(s) are made up on the fly as the current flows across through each LED.

Triangular prism designed with SCAD

I wanted to upgrade my 3D design skills so this time I opted to learn SCAD, which has a mathematical approach to design. I found it to be fairly intuitive after looking at a couple of beginner’s tutorials.

SCAD design of triangular prism onto which the LED strips are mounted (I printed this with transparent PLA filament too

Fastening the LED strips, wiring up, soldering and testing

I wanted a transparent hollow triangular prism to fasten the LED strips onto, with small holes at the top and bottom to run wires through to the inside. I designed this with SCAD. It was surprisingly easy and elegant!

I cut three strips, cutting at the copper dots 14 LEDs / strip. I wired up the positives at one one end and the GND and data the other end. The idea here was to avoid clutter at one end.

It took me a while and help from Robin to understand the circuit and data flow

  • the circuit goes through each LED (where is this explained?)
  • the arrows on the strip show the data direction

For stripping the wires I needed the right tool, although the experts can do it by feel. Before soldering I removed one LED from each strip with a heat gun. I did this because the copper dots when cut in half were very small.

I tested the strip using my Sunfounder kit and it was successful!

Design and redesigns of base with SCAD

I had to do a few redesigns along the way after I decided to insert a relatively bulky cylindrical battery holder (55mm long x 22mm diameter) into the base.

SuperMini ESP32-S3

I found helpful information about the SuperMini ESP32-S3 Development Board here.

  • some simple tests to check if the board was working
  • pin layour and which pins were safe to send data through

Then I had to figure out how to flash micropython onto the board. Once again help was there online: Instructions

Coding in micropython

I opted for coding in micropython which I find easier to understand than arduino C++. I bought a Sunfounder ESP32 starters kit, installed Thonny IDE and started working through their online micropython tutorials. They did have a micropython WS2812 tutorial for an 8 LED strip, which gave me a good start for the code.

I thought an effect where the colour grows stronger then fade and then changes to another colour would look good. It took me a while to figure out how to modify the code so it was both elegant and did what I wanted. This involved writing efficient functions and looking up the RGB values for different colours.

The Thonny code tested alright on the LED strips but then I had to figure out how to run it from the ESP32 board. With a Save As... I could download it to the board and then found an article which explained that it had to renamed main.py and then it would run.

There is also the WLED option which provides tremendous variety but you miss out on the joy of coding ;-)

Not the final version, but it does show the neopixels burning brightly!

Trouble shooting / Problem solving: Suitable wire thickness.

You need the right materials. The experts can wing it but mere mortals like me need the right materials.

"For the lack of a nail a kingdom was lost" - Shakespeare
For the lack of 26 AGW wire a crystal neopixel lamp was compromised - Kerr

During my near the end soldering session I suddenly discovered that two out of three LED strips no longer lit up. The problem was that I had used very thin wires and with a little twisting some of them broke. So, I went back to replacing the broken wires with thicker ones (22 AGW) and resoldering. But my problems persisted because now the wires were too thick and it is hard to twist three thick wires on the one side and solder them successfully to one thick wired on the other side. So, what I have planned here is to get some 26 AGW (in between thickness) wires and do the whole thing again!

Also my design lacked an important component given that I'm powering off three AAA batteries. A switch! This will be part of my new model

This experience has taught me to improve my soldering skills (use the third hand, flux and the solder sucker when required) and design skills (the wiring was far from elegant). Such is life. I've learnt a lot.

SUMMING UP: WHAT HAVE I LEARNT
  • Thonny python IDE upgrade and use
  • micropython for loops and functions
  • WS2812 Neopixel strip function (power, data), cutting procedure
  • Supermini ESP32 function and testing
  • OpenSCAD skills (designed and made tri prism and base)
  • Circuit or wiring design
  • Soldering skills (wire to wire, stripping, tinning, third hand, solder sucker, heat shrink)
  • Heat gun, to remove one of the LEDs from each strip
  • Problem solving and receiving help
  • Checking parts carefully before buying (eg. bought momentary switches)
REFERENCE

Sunday, May 25, 2025

Medieval helpdesk in English

Still the funniest video I have seen on YouTube:
Here's the direct link to YouTube:

Thursday, May 22, 2025

Tech evolves continuously, Schools lag behind

I argue that the relevant metaphor to build a successful tech group these days is “low floor, high ceiling, wide walls and open windows”.

This approach, promoted by Mitch Resnick at MIT and Yasmin Kafai (source), led to the tremendous growth of Scratch, from 2007. In April 2024, the Scratch team announced that one billion projects had been developed. See Footnote(1) for more of this history and explanation of the house metaphor.

After thought: I ought to mention too, my favourite article about the design of construction kits, written by Mitch Resnick and Brian Silverman. I wrote a summary of this back in 2019, with a link to the original. Their point 5: Simplicity works; their point 7: You can achieve a lot with a little.

All the technology has continued to evolve rapidly. It becomes cheaper and more user friendly. This applies to coding tools, design tools and making tools. Many of the tools are Free or Open Source (FOSS) which reduces barriers to access and attracts communities.

The 21stC making tools which are not free (eg. 3D printers - although some companies such as Prusa do have Open Hardware; laser cutters and more) continue to reduce in cost. One aspect of this is that 21stC making becomes more accessible to a wider audience. This should mean that a tech group should have no problem growing. School students can be part of this since schools are notorious for not keeping up with new developments.

I argue for a beginner’s courses accessible to Middle School students which then lead into more advanced courses (aka mechatronics, making devices which integrate electrical and mechanical processes).

Coding: With block coding, eg. Scratch, MakeCode, students can make something interesting with the process being transparent within 10 minutes.

Design: With Tinkercad you can quickly make 3D objects. This can lead onto more advanced design tools later (eg. KiCAD, openSCAD, Fusion 360)

Making: You can begin with cardboard and then move onto LEGO, 3D prints and laser cuts to make interesting constructions readily. Free designs are available at thingiverse, Printables and other sites.

Micro-controllers: The microbit or Circuit Playground can control neopixels, servos and communicate with each other. They also have A and B control buttons on the board. This can lead onto more complex controllers such as arduino, bread boarding and circuit construction / printed circuit boards.

Microbit or Arduino? I argue for microbit usage in the middle school (years 5-9) and then move onto arduino in the senior school (years 10-12). Start with the low floor and move onto the high ceiling will engage more students. See Footnote 2 for three articles, microbit versus arduino, which support my viewpoint here.

It should be acknowledged that the arduino was a revolution which began in 2005. Open hardware, low cost and easier to use than what came before. The thesis which kicked off the arduino was titled, “Arduino–La rivoluzione dell’open hardware” (“Arduino – The Revolution of Open Hardware”). Reference

Similarly, the micro:bit was a revolution which began in 2015. The floor was lowered further given more users access to microcontrollers. Reference

Project based learning: Many diverse projects can be made where an interesting or inspirational idea can be designed, made and controlled. This builds skills and whets the appetite for more. Once this pattern is established more complex design, coding and making techniques can be further developed.

This is a well established international educational trend beginning with Seymour Papert 50 years ago. LEGO Mindstorms was named after his book, "Mindstorms", written in 1980. He initiated a learning theory called constructionism. The 21stC Maker Movement kicked off in a big way around 2005 when Neil Gershenfeld built the first FabLab at MIT and offered a course called “How to Make almost Anything”.

Some schools are coming on board in Australia (especially Privates) because there is a recognition that STEM or STEAM is both important and engaging. But it is also true that many schools are locked into an ACARA curriculum tick the box model and so fall well short of utilising the full potential of the 21stC Maker movement.

Some brief additional information about existing groups, international and local:

Constructing Modern Knowledge (CMK). Gary Stager has been actively promoting constructionist learning in Australian schools for decades. His group offers workshops and books.

FabLabs: The Fab Labs grew exponentially around the world after 2005. See the map.

Paulo Blikstein has promoted Fab Learn Labs, a school version of FabLabs. Search this blog for some summaries of his outstanding articles.

Whittlesea Tech School, Melbourne PolyTechnic STEAM engine offer a range of courses to surrounding schools in Melbourne

Tech Explorations: Peter Dalmaris, Australia offers advanced online courses. mmm ... even if you don't go lower floor (eg. with the microbit), you can still go wider walls, as illustrated by the diverse options on Peter's site.

Adelaide groups: I am just listing Adelaide tech groups I have become aware of over the past year. I am not attempting to publicly evaluate their success based on the broad criteria outlined in this article, at this stage:

Maker Space
TechSpace Learning
Hackerspace Adelaide
South Australia Micro Controller group (SAMG)
42 Adelaide
Computer Science Education Research Group at Adelaide Uni run online courses in computing fundamentals and lend out construction kits to schools.

Footnotes:

(1) This tests the memory. The Logo language, which preceded Scratch was popular at educational computing conferences in the late 1980s and early 1990s. The educational rationale back then was, in part, to provide a more interesting and engaging way to teach maths. However, when the www came along that popularity died. Living then in Adelaide, Australia, I knew only one other Logo enthusiast. However, I used to participate in the Usenet comp.lang.logo group. Description by Brian Harvey; archive. I remember it as being down the bottom in the usage statistics of all the Usenet groups. However, with the advent of Scratch, Logo was transformed into a multimedia, story telling fun machine. With the conversion to block code (low floor), diverse project multimedia features (wider walls) and remixing / online comments and Likes (open windows) the Scratch version of Logo flourished again.

(2) Three article which argue that the microbit is better for beginners but that to continue the path to mechatronics, you can do more with the arduino:

https://mp.moonpreneur.com/blog/microbit-vs-arduino/
Extract:
Both micro:bit and Arduino offer unique strengths and benefits for DIY electronics projects. Micro:bit excels in simplicity, accessibility, and educational applications. This makes micro:bit a good choice for beginners and educational settings. 

Conversely, Arduino provides versatility, expandability, and a robust community support system, making it ideal for more complex and ambitious projects.
https://www.instructables.com/Comparison-Between-Microbit-and-Arduino/
https://picobricks.com/blogs/info/microbit-vs-arduino

Sunday, March 16, 2025

building the logo turtle

Seymour Papert started lots of things!

How to build a programmable floor turtle” is on Josh Burker’s (JoshB) site: LogoTurtle

INSPIRATION

Going back roughly 50 years, the inspiration originally came from Seymour Papert’s Logo floor turtle which accompanied the Logo programming language, developed for children.

I was further inspired on reading Neil Gershenfeld’s account in his book, Designing Reality, of a conversation he had with Seymour, back then:

“As fab labs started doubling and the Fab Academy began to grow, Seymour came by to see me to talk about them. I had considered the whole fab-lab thing to be an historical accident, but he made a gesture of poking his side. He said that it had been a thorn in his side that kids could program the motion of the turtle but could not make the turtle itself. This had been his goal all along”
Designing Reality, p. 29

Another goal I have is learning more electronics in a practical way. So, I was on the look out for a meaningful project to help me achieve that.

These factors pushed me over the edge. I decided to build the Logo Turtle!

Following the links in JoshB’s article I bought the materials from adafruit, Core Electronics and some other online and local stores.

There were some mishaps along the way. eg. it’s much better if you can get the 2xAA battery holders with a hole in the middle for the flat head screws. After some searching I found an Adelaide store, Altronics, which had these.

I wrote to Josh and his advice was that I should make a Printed Circuit Board (PCB) since the breadboard approach produced unreliable results. He sent me the Gerber files that I needed for that.

I downloaded a free open source viewer, Gerbv to view the files.

I asked for advice on the Adelaide Maker Space forum about how to get the PCB made and some helpful people suggested a couple of companies. I went with PCBWay and they made the PCB for me.

I have my own 3D printer so I printed the parts in PETG. All the links for that are in the JoshB article.

HELP

I’m an electronics novice so I had trouble finding some of the equivalents between the breadboard design and the PCB design. Fortunately I found Tony Onofrio, a friend in the Adelaide Hackerspace group. He translated the fritzing diagram on JoshB’s article into a PCB diagram for me.

Unfortunately, the link to the LogoTurtle software on JoshB’s article is broken. But I wrote to Josh and he sent me the files. Following his instructions (downloading drivers and Java) I tested the LogoTurtle software on the metro mini board and this was successful.

The software is a Logo implementation in Java. The logo files are text files which you download to the metro board. I didn't understand how it was working but spoke to David, a Java programmer at the Hackerspace group and he explained some of it to me.

The next step was soldering the parts onto the PCB board. This was hard for me since I’m a novice at soldering. Again Tony helped out by giving me some lessons in soldering. The order in which I soldered the parts on was: (1) resistors x 2 (2) Darlington driver, note the notch (3) Metro Mini (4) header pins 2 x 5 then x 3 (5) photocell (6) switch

Having done all this I was ready to attach the PCB to the turtle. I soldered the 4 battery leads, plugged in the stepper motor 5 pin connectors and inserted the 4xAA batteries.

I found some pens with the correct diameter at Office Works and placed one in the pen holder on a sheet of paper. I flicked the switch to turn on the metro power, indicated by a green light and pressed the reset button

Hallelujah, the turtle drew a square! Logo.jar runs the test.txt file by default.

to startup
square
end

to square
pd
wait 1000
repeat 4 [fd 100 rt 90]
pu
alloff
end

But note the angles are not quite 90 degrees. Using trial and error, I changed the angle to 85 degrees and it drew a pretty good square

JoshB’s solution here is to add a shim to alter the angle of the stepper motors reproduce. I tried this but it didn’t make any difference.

I wrote to JoshB again and he suggested I alter the sys.txt file where the logo drawing procedures are stored as text files.

So I altered the rt and lt turn procedures by multiply and angle by 85/90. This then drew a perfect square.

to rt :n
make "n :n * 235 / 100 # (the multiplying factor was altered from * 25 / 10)
repeat :n [rstep- lstep+]
alloff
end

I then tried a pentagon, square and triangle combined:

The more ambitious rotating octagon worked well first up:

Then I made a similar change to the arcrt (arc right) and arclt (arc left) procedures and then I could draw near perfect circles and arcs.

An interesting feature of the design is the photo resistor. When exposed to the light the resistance goes down. This photocell is plugged into A0 on the Metro Mini, so you can introduce this value into the code to achieve variations based on light intensity.

Following JoshB's notes I established the A0 values for a bright flashlight were roughly 960, for normal light 830 and with curtains drawn about 565. So I ran the following procedure in normal mode and flashlight mode which modified the size of a circle:

to startup
wait 1000
let [n a0 / 10]
repeat 10 [
arcrt 50 :n
make "n a0 / 10
]
alloff
end

So far, so good. I could draw closed shapes with the LogoTurtle.

But to draw people's initials, for example, you need to be able to lift the pen (logo command pu) and put it down again (pd) at the right times. This requires fitting a servo to lift the pen. I also added a weight to the pen to ensure it drew firmly on the paper when down.

Here are a couple of initials I drew, using the alphabet file from JoshB's LogoTurtle Curriculum. I presented these to a couple of members of the Hackerspace group who have been helping me:

REFERENCE

Josh Burker's original article: LogoTurtle
LogoTurtle Curriculum (lots of great ideas here)

Saturday, March 08, 2025

dragon and egg 3D print

I printed this one on my Prusa MK4 with multi-colour PLA filament:
inside the egg
outside the egg
on top of the egg

Source files:
threaded dragon egg
Small baby dragon (printed half size)

Friday, February 28, 2025

new laser cuts and engraves

Some new cuts / engraves done by me at the Adelaide Maker Space:
Source of files: 3axis.co
Penrose tile, good explanation here
Penrose chicken, brief elaboration here
Soldering iron bit holder. I will give this to the Hackerspace group to say thank you for their help.
USA jigsaw puzzle. Looking for ways to reduce the burning around the state names and making the small state words more readable.
Cats - laser cut by wolfpaw98 on Thingiverse: https://www.thingiverse.com/thing:2259603. Quite difficult to assembly these. Need a small file to trim the joins.

Wednesday, January 22, 2025

microbit neopixel hat

Hat plus duct tape minus electronics

I've built something similar before (link) using a Circuit Playground Express or CPX. The original idea came from Rob Morrill who has developed a series of excellent project for the CPX, here. Follow the instructions there to fill in the gaps of this account. Alternatively, design your own hat.

I left my neopixel hat behind in Alice so it's time to do it again, but this time using the more popular microbit.

Materials: Cardboard, cardboard cutters, duct tape, clear sticky tape, adafruit neopixel strip 0.5m, battery pack 2*AAA or 3*AA (better, I've ordered some), velcro.

The neopixel strips are advertised at adafruit to work with 3-5 volts DC. However, they can underperform without sufficient voltage as the batteries go flat. The microbit pushes out a max of 3.3 volts, so it's desirable to used a 3*AA battery pack for 4.5 volts which is then regulated down to 3.3 volts by the microbit.

I had to visit a couple of Bunnings stores to get cardboard of a suitable length, since my big head has a circumference of 58 cm. I like duct tape to stick things since they remain stuck. But use clear sticky tape to attach the neopixel strip.

What code to use? I plan to use this hat as a demo for the Adelaide Maker Space / Hacker Space groups so I opted for rainbow colours at the front which activate with sound combined with flashing white / black neopixels at the back and a sound bar graph on the microbit itself. Here's the breakdown:

Initialise the neopixel strip

Flash black and white with 16 pixels around the back of the hat

Rainbow effect on both sides at the front, needs sound to activate

Bar graph on the microbit, responding to sound

Finally, the video:

Monday, January 13, 2025

books and articles I am reading in 2025

The list will include some significant online articles too:

Banks, Iain M. Consider Phlebas (1987)
Blum, Hila. How to Love your Daughter (2023)
Capek, Karel. War with the Newts (2001)
Deutsch, David. The Beginning of Infinity: Explanations that Transform the World (2011)
Dalmaris, Peter. Maker Education Revolution: Learning in a high-tech society(2017)
Gershenfeld, Neil; Gershenfeld, Alan; Joel Cutcher-Gershenfeld. Designing Reality: How to Survive and Thrive in the Third Digital Revolution (2017)
Gibson, William and Sterling, Bruce. The Difference Engine (2014)
Harari, Yuval Noah. Sapiens: A Brief History of Humankind (2011)
Hatch, Mark. The Maker Movement Manifesto: Rules for Innovation in the new world of Crafters, Hackers and Tinkerers (2013)
James, Mike. Programmer's Python: Everything is an Object. Something Completely Different. Second Edition (2022)
James, Mike. Programmer's Python: Everything is Data.Something Completely Different. (2022)
James, Mike. JavaScript Jems: The Amazing Parts (2020)
Noble, David. Forces of Production: A Social History of Industrial Automation (2011)
Pickering, Andrew. The Mangle of Practice: Time, Agency and Science (1995)
Sunfounder ESP32 Learning Kit
SunFounder 3 in 1 IoT/Smart Car/Learning Kit
Hackerspace
Tech Explorations
TechSpace Learning
Weir, Andy. Project Hail Mary (2022)


Previous: books and articles 2024