About Me

Hi there! I'm Josh Ward, and you're visiting JoshWardDotCom😊! I enjoy:

My Programming Journey

I started programming a long long time ago, on a calculator. I had gotten ahold of a TI-82 and I was reading through the manual, when it said this:

...getKey: getKey returns a number corresponding to the last key pressed, according to the diagram below. If no key has been pressed, it returns 0. getKey can be used inside loops to transfer control; for example, to create video games....

Video games?!?!

On a calculator?

Now, I don't know why that was in the manual. I don't think I'd heard much about programming at all before, and now here was a calculator, a literal calculator, saying, "Oh yeah, I can run games!". And this was the official manual! Teachers back then were not very fond of students secretly playing games in class, and here was the actual manual saying that you could. What.

So I decided to learn programming. I dutifully read the manual over and over, and eventually was able to get some games running.

Now, I didn't know it at the time, but this calculator was awful in terms of specs. For programming, you had 27 variables, A-Z and θ. And Y was unusable. You had 6 lists, and I believe 6 matrices, which couldn't even store 100*100 without a memory error. And the screen could only display ? lines of code at once, and ? characters across. And when you wanted to edit your program, you had to scroll all the way to the bottom, which began to take ~ 50 seconds+ the larger your program. Every line of code you added also had a very visible impact on the speed of your game. Moving a single dot all the way across the screen takes 3-ish ? seconds with an empty program, but add in functionality, and it'll quickly start taking 20+ seconds.

And you didn't write the code, you picked commands from a menu and wrote in constants, commas, text, yourself. Typing commands became muscle memory for me. PRGM-1-Enter-PRGM-7-Enter-PRGM-right-4-Enter...

And the screen! 95*63 pixels, and the display(at least for using the Pt-On command) is actually a plot of area on an infinite cartesian plane, and so you have to clear your graphs, and... and... It was just fantastic fun.

Then I got the TI-83+, and it was ~about the same speed, but it had a LOT of new features. Like apps, and native assembly (although without the computer program, you have to write assemble IN HEX CODE ON THE CALCULATOR and any mistake freezes it and you have to remove the batteries and thet wipes your RAM.) And RAM! or rather, archive memory. That meant that you could freeze your programs and data in stasis, safe from all errors/deletion, and unfreeze them on command. And it had a lot of archive memory! about 120000! Yeah, no unit! I'm assuming bits?...

Around this time, I was a bit into block coding, first on Tynker (click link to see my projects, Lava Jetpack Whales is my best work), where I had two accounts, me forgetting the password to my first one, and my second available here. Had a lot of fun, and then later found Scratch. Here's my account. The bar was certainly higher here, and I didn't have much motivation for block coding anymore.

Then for Christmas I got the TI-nSpire CX II, what a name. This thing supported TI-BASIC like the others, much much faster, with color, and variable names and Python and Lua if you got a Windows app, which I did, and everything was greatly improved. I'd run Lua on the computer without bothering to port it to the calculator, on account of being faster.

It was about then that I learned about Machine Learning! At first, it was basic genetic algotithms, little swarms of cars on a track. I'd leave that thing running for hours and it would get pretty hot. But it worked, and I was fascinated with how the machine could learn to do things all by itself.

I remember one project where these arms had to grab boxes and hold them up in a green square area onscreen. The arms figured out how to pick up the box, lift it into the area, drop it, spin in a circle, whip around just in time and grab the box and lift it a few inches up again and again. Alignment problem, semi literally!

Then I got Python. Well, actually, I wasn't allowed Python yet, so I found JupyterLite, with its web interface that allowed me a lot of capability. I had tried out other web-Python sites before, but none worked like this!

I decided to start off easy: create a whole Convolutional Autoencoder from scratch to generate kitten images. Didn't get very good results, but you could vaguely tell that the output was meant to be a kitten.

Finally I got Python, along with VSCode. I set up Tensorflow with Keras and in about a minute had a kitten gererator ten times better than my from-scratch one. A bit humiliating!

I got Unity a bit later, making nothing of consequence. I did enter the GMTK 2025, though -- Here's my entry.

That's pretty much it. As of now I'm getting into web dev, just Node and Express for now. So far I know TI-BASIC, Python, Lua, C#, and html-css-js.

Writing

Chances are, you found my site via Medium, where, as of now, I've just started writing, about computers and society mostly. Turns out I enjoy it quite a bit! You can check out my articles here.

Drawing

I love to draw! I hope to post some human-made art here.