Jay Ts

I have been programming in C and many other languages since 1981, and am also a super good Unix/Linux/FreeBSD system administrator. I started with Unix and C at a time when it was a new system that was not taken seriously. When I told people I thought Unix would be around for the next 40 years, they thought I was crazy. Since then, Unix technology has grown into the most valuable computing tool in the world, being used in Linux, FreeBSD, Mac OS, and Android, to name a few.

Over the past four decades, I have programmed in more languages than I can easily remember, including a few that few people now involved in computing have ever heard of. I have nearly complete coverage of the technological "stack" that makes up modern computing, everything from understanding analog electronics, solid-state devices, including field-effect transistors, to chip design, CPU architecture and design, operating system design and implementation, programming language design and construction, on up to newer topics like cloud computing and AI. Drawing from my broad knowledge of fundamental technologies, I can quickly start working in about any area in computing or electronics as long as I find the task sufficiently interesting to immerse myself in it.

When left to myself, I am usually working on projects such as programming language design, audio and sound software, crypto and stock market analysis, programming microcontrollers, analog electronics, and theoretical study in electronic consciousness ("machine consciousness").

In the past, I have thought of myself as a programmer, software developer, business owner, system administrator, or consultant. Recently I decided to cut to the heart of things and just present myself as a computer scientist - something that maybe I should have done years ago.

This page is a list and description of my open source code repositories. I was using GitHub (https://github.com/Yaoir), but it became too "corporate" for my tastes, so I am gradually moving my Git repos to my own server. The source code in the repos listed below, hosted at git.jayts.com, are the current ones, but you can find better descriptions in the README.md files that you see when you go to the repos on GitHub, so I include links to those when applicable. I hope you find something interesting or even useful!

Repositories

Repositories

Pico Build Kit

Languages: Bash (shell scripts)

Tools: Raspberry Pi Pico C SDK, Cmake, make, GCC, FreeRTOS

Supported Operating Systems: Debian GNU/Linux 11 and 12 on amd64, Raspberry Pi OS on Raspberry Pi 3, 4, and 5

Download with this command: git clone http://git.jayts.com/repos/PicoBuildKit.git

The Pico Build Kit for the Raspberry Pi Pico series microcontrollers is a collection of Bash shell scripts and configuration files that

Includes directions and shell scripts for installing

Includes configuration files

Includes makefiles for simplifying the development cycle, including the targets

Includes shell scripts for simplifying the development cycle


Microcom (ucom)

Language: C

Platform: Linux

Download with this command: git clone http://git.jayts.com/repos/ucom.git

Microcom is a very simple USB serial port communications program for interacting with microcontrollers through a virtual terminal. It is simpler to use than Minicom, which is often used for this purpose, but was originally developed for use with analog modems over phone lines and can be a little clunky for microcontroller development.

Microcom, by comparison, is quick, simple, and developed specifically for use with USB serial devices.


Pico Projects

Language: C

Platform: Raspberry Pi Pico 1 (RP2040) and Pico 2 (RP2350)

Dependencies: Pico Build Kit

In this section are some of my programs for the Raspberry Pi Pico series microcontrollers that I thought were worth sharing. You can use these with the Pico Build Kit to support multiple Pico models and architectures, or copy the source code to your own project and do whatever you want with it.

Some of the projects use LEDs, which need to be connected to pins GP8 (Pico pin 11) - GP15 (Pico pin 20). The programs all do text I/O through the Pico's USB serial port, and the CMakeLists.txt configuration file can be altered to use the UART and Raspberry Pi Debug Cable instead.

I have more projects waiting to be turned into Git repos and published here as time allows. They include showing how to use the Pico's A-to-D converter (ADC), respond to button presses, monitor the Pico's various on-chip clock circuits, use a 16x2 pixel LCD display, and access a wireless network and query a time server.

Standard I/O

Download with this command: git clone http://git.jayts.com/repos/pico-standard_io.git

This is a really simple program to act as a template for starting new projects. It echoes ASCII characters typed on the host computer's keyboard back to the terminal, so you see the characters you are typing. To use it, start up a communication program (e.g., Minicom or Microcom) in a virtual terminal window.

For some extra fun, the 8-bit ASCII codes of the characters are displayed on the row of LEDs as they are typed.


LED Show

Download with this command: git clone http://git.jayts.com/repos/pico-led_show.git

LED Show is a demonstration of using a row of 8 LEDs to blink and flash various patterns, including counting up and down in binary. I use it to check that I have the LEDs connected correctly. Aside from that, it makes a good "screen saver" for entertainment while doing other things.


Bright

Download with this command: git clone http://git.jayts.com/repos/pico-bright.git

This is FreeRTOS version of LED Show with the addition of a brightness control, which lights up the LEDs with a controllable duty cycle. A potentiometer needs to be connected to Pico pins 39, 38 (wiper), and 37.


Overclock

Download with this command: git clone http://git.jayts.com/repos/pico-overclock.git

Overclock is a FreeRTOS program that demonstrates how to overclock the Pico 1 and Pico 2. FreeRTOS is used to keep both cores busy cointinually multiplying two large matrices together. The idea is to overclock the cores while they and the memory are heavily utilized to learn how far the cores can safely be overclocked for most applications.

This is also an example of how to use the Pico's internal temperature sensor. The microcontroller's temperature is monitored to ensure that the overclocking does not allow the chip temperature to pass a set temperature.


Whetstone

Download with this command: git clone http://git.jayts.com/repos/pico-whetstone.git

This is the famous Whetstone benchmark, used on computers since the 1970s to test floating-point performance of a single processor core.


Dhrystone

Download with this command: git clone http://git.jayts.com/repos/pico-dhrystone.git

This is the Dhrystone benchmark, which tests integer (non-floating-point) performance of a single processor core.


The Claric Programming Language

Language: C, Claric

Download with this command: git clone http://git.jayts.com/repos/claric.git

Claric is a new programming language, very similar to C in syntax, grammar, and semantics. It is simplified and modernized, and has a special use as an embedded programming language. You can embed a Claric interpreter in your C, C++, or Go application, and have startup files and programs written in Claric.

Claric can also be used standalone as a general-purpose interpreted programming language.

This is a very early pre-release, and is intended only for evaluation purposes, not production code. You are welcome to use it for personal use, but please understand that it is incomplete. Full feature implementation and documentation will come later, as I can find time/money to further support the project. For now, see the 'programs' directory for examples of how to write Claric programs.


Mvgp command

Language: Bash

Download with this command: git clone http://git.jayts.com/repos/mvgp.git

mvgp is a Bash shell script that I wrote in 1998 at the request of a friend who wanted a command for renaming batches of files. A simple example is renaming all files in a directory with .jpeg extensions to .jpg extensions. But it is much better than that. You can specify a pattern that occurs at any place in filenames to replace with a given string. mvgp can be used to do 'search and replace' file renaming on filenames that are too long or too complicated to type easily. This command has proven itself to be a lot more useful than I originally expected! I use it on a daily basis.

Documentation (user guide) is available at GitHub: https://github.com/Yaoir/mvgp


Manpage

Language: ROFF

Download with this command: git clone http://git.jayts.com/repos/manpage.git

Manpage is a kit for writing Unix-style manual pages. Many programs do not come with manual pages and need them. This repo contains a template and instructions for how to create a manual page.

I created this because I wanted to encourage and support developers to include manual pages in their projects.


Go Programs

Language: Go

Download with this command: git clone http://git.jayts.com/repos/cip.git

Download with this command: git clone http://git.jayts.com/repos/chronograph.git

Download with this command: git clone http://git.jayts.com/repos/delfy.git

These are Go programs I wrote while learning the language.

Cip (which stands for "convert integer and print") is mainly for working with Unicode. It is good for analyzing and synthesizing Unicode code points (characters) and strings. A more complete description, including a discussion is available here: https://github.com/Yaoir/cip

Chronograph contains clock- and time-related programs, similar to what you find in a chronograph: a clock, timer, stopwatch, and alarm. Among other things, the programs in Chronograph contain examples of using goroutines and channels. Documentation is available here: https://github.com/Yaoir/Chronograph

Delfy is a fun program for divination. It is based on a program called Laroec (the letters in "oracle" rearranged) that was used at the Exploratorium in San Francisco in the 1980s. This is a reimplementation in Go, using the original Laroec data files. For documentation, see https://github.com/Yaoir/delfy


Mars Lander

Language: JavaScript, React.js

Download with this command: git clone http://git.jayts.com/repos/marslander.git

Mars Lander is a spaceship landing game written in React.js. It is based on the "lunar lander" games that were found on computers in the early 1980s, inspired by NASA's Apollo Moon landings.

I was curious to see if you could do something like this with React, and ended up with a fun, playable game.

Documentation is available on GitHub: https://github.com/Yaoir/MarsLander


Video Poker

Languages: C, Go, JavaScript

Platforms: Linux and other Unix (POSIX) systems, Node.js, Go/WebAssembly

Download the C version with this command: git clone http://git.jayts.com/repos/videopoker.git

Download the Go console version with this command: git clone http://git.jayts.com/repos/videopoker-go-console.git

Download the JavaScript console (Node.js) version with this command: git clone http://git.jayts.com/repos/videopoker-javascript.git

Download the Go WebAssembly version with this command: git clone http://git.jayts.com/repos/videopoker-go-webassembly.git

I forget exactly why I wrote video poker. Maybe it was because I missed my old Radio Shack handheld game and could not find anything I liked for Linux. I use video poker for psychokinesis exercises.

I wrote the original version in C, but later I was curious about how difficult it would be to translate it to Go, and I also wanted to make it into a web app. Translating it to a Go console program was easy due to the similarities of Go and C. To make it into a web app, it had to be translated into JavaScript, which was not too hard either, because it is also similar to C. Well, at least for the console version using Node.js!

To make it into a web app, the user interface needed to be changed from using standard I/O to callbacks that run inside the browser. By the time I got to this point, I learned that Go was having WebAssembly support added to it, and I wanted to try it out. The result is that the WebAssembly version is written in Go.

If you want to try it, click on this link: https://jayts.com/vp/

It downloads card images on demand, not at the start, so if you have a slow network connection, wait patiently during the first several hands for all of the card images in the hand to load. It is just a demo, not a polished web app! Have fun, and good luck!

Documentation for the versions is available on these pages at GitHub:

https://github.com/Yaoir/VideoPoker-C

https://github.com/Yaoir/VideoPoker-Go

https://github.com/Yaoir/VideoPoker-JavaScript

https://github.com/Yaoir/VideoPoker-Go-WebAssembly


How to Contact Me