Showing posts with label Creativity. Show all posts
Showing posts with label Creativity. Show all posts

Friday, March 01, 2024

Project 21 - Code Doodle - Swarm Doodle (Introduction)

It’s been a while since I’ve built anything interesting in the Artificial Intelligence field and with all of the neural network / transformer / LLM nonsense going on right now, I wanted to go back to one of the parts of AI I love, swarm systems.

If you haven’t heard the term before, boids are a generic model for the way organisms swarm together. Think fish in a school or birds in a flock. Each animal has a pretty simple set of things its trying to do but sometimes the overall effect can be breath taking; think of a huge murmuration of starlings at twilight. Boids -- think they fly like a boid -- are a way to model how bunch of simple agents can create a very complex behaviour, and how small tweaks to an agents behaviour can change the way a whole system performs (think starlings compared to geese). They're a very old addition to the world of artificial intelligence, and they've also been extreamly important to the world of film making.

Walter Baxter / A murmuration of starlings at Gretna / 

That being said, it’s been a very long time since since I’ve messed around with swarms (or boids) and I’m quite rusty and -- as I think is a theme here -- my vector math always seems to be just a touch insufficient. So, I’m going to write a short series as I go about putting my swarm system together.

I’m not going to go into all of the details right now, but I’m going to roughly follow Craig Reynolds Boid model. A lot of the details aren’t in the original paper and the content in the Wikipedia article is slightly out of line with my memory, so I’m going to bushwack from what I have to a hopefully working swarm system (rather than do more reading right now).

For this doodle, I’m taking my pre-existing moving agent code -- which I always wrote with an eye to doing a swarm system and expanding on it. To start I have little circles that try to balance being between the mouse and the middle of the screen. To build boids we’re going to have to expand that a little and add in a few more things to do.

I’m trying to stay close to Reynolds model for now, although there’s lots of fun to play with later on. I’m going to set up three “urges” for the boids, a separation urge -- “I’d like to not crash”, a heading (or alignment) urge -- “I want to go where everyone else is going” and a cohesion urge -- “I don’t want to be the only one out where I can get eaten”.

I’ve been working on this for a while -- and then not working on it for a while, so I’m starting to write with the intention of kicking myself into finishing the project. I’m about halfway done putting everything together -- which you'll notice when you look at the code in the repository, and I think I’ll write this up in four or five posts over the next few weeks. Once I get the basics done, I’m looking forward to all the other things I can play with.

Saturday, April 08, 2023

A General Update on Code Doodling

Doodle Code is my “knitting” project, where I dabble in programming while watching TV or during family gatherings (hey, it works for my family), and I haven’t had any really goals, so I haven’t had a point to stop and update. It also turns out I’ve been a bit forgetful and messy, but oh well. Now seems like time to dust it off and share it with anyone who’s interested, even if it's not the repository of useful teaching code I'd thought it might be originally.

Graph of Languages for the Github repository, showing Java at 77.1%, Processing at 18.8% and Python at 4.1%.
Can you tell I'm a programmer who did most of his learning in the late 90s and early 2000s?

There are about 15 doodles, in various states of completion. Dunking on the dumb mathematical things sports casters say has been a bit of a theme and beyond that playing with colours. Everything else is things I thought would be interesting or just stuff I’ve been meaning to do (like the Coding Train Challenges).

I’d drifted away from doodling for a while, so back in February I thought it was time to start again. Then I came to the realisation that basically nothing was organised, documented or finished. I’ve started poking at that, but as it turns out it’s more fun to do new things than it is to go and clean up my own mess.

Graph of GitHub Commits showing tjkendon with 251 commits from January 2022, to April 2023, 6739 lines of code added and 1464 lines of code removed.
Github is always good for that endorphin rush of numbers go up.

Each doodle now has at least a description and a Readme, some are better documented than others, but that’s a starting point. I’m trying to strike a balance between working on new stuff and cleaning up what’s there so that it might be useful for someone else at some point. It may not be good for my existing habit of not getting stuff done, but I’m honestly feeling quite happy doodling around with stuff and I’m not feeling that compelled to “finish” anything. I am slowly learning to unlink my feelings of self-worth and happiness from productivity and I must say it’s quite refreshing and the project is leaving me feeling pretty good even if it may not be that actually useful.

Tuesday, January 18, 2022

Project 21 - Code Doodle - Introduction

 As I've mentioned in my last few updates I'm starting to get a little bit more done on some of my *other* projects. Despite my best efforts though, some of those projects are big, and hard to finish and they need me to learn things, even when I think I've kept them small. 


The solution to that is *clearly* to start doing something else as well. Because spreading myself thinly has really been a key to my success. 


Oh.


Right.


No, it's definitely the other thing where I'm not great at finishing things and it's easier to play with the new shiny thing than it is to get shit done.


That being said, I am starting a new project and I have a bunch of ideas whey I think it's a good idea.


Ok Fine. I'll bite, what are you doing?

I'm writing a bunch of tiny programs. They may help me do other jobs or they may just be things that seem cool to play with. Basically, I want them to be simple, easily completed, code doodles.

A cartoonish drawing of the word Code surrounded my some doodles of squares, lines and toast.



You Mentioned You Had Ideas as to Why This Wasn't a Bad Idea

Aha. Actually I said I have ideas as to why this is a *good* idea. Take that, Scalziesque interlocutor!

Still.

The biggest reason I want to write tiny programs is that I want to write tiny programs. I don't write that many programs and programming is fun.Sometimes your brain is a little bit on automatic and you want to engage it just enough to to have done something. It's knitting basically. Programming, fun times.

The second reason is that I'm working on *another* project, related to teaching people to code and I think one of the things we do very poorly when programming is teaching new programmers to read other peoples' programs. I've never had time when I'm teaching to get beyond the bare basics of what I need written for the students to work with, and so this seems like a great time to just build up a repository of interesting programs so that people can *look* at them at some point. In fact, at some point, I hope to have other people contribute interesting tiny programs too. (I don't know what that point is, so if you're interested in publicly sharing the code for a tiny program, drop me a line.)

The third reason is that there's a ton of things I still need to learn. Also there's a not insignificant list of things I've forgotten to a greater or lesser extent. And much as I hope Game Tracker will be great for teaching me, it's *already* too big and complicated for what I'd hoped to do for a lot of things and I need some places to play before I build those things.

The fourth reason is just to give myself practice finishing things. I'm bad at it. I've been bad at it for most of my life and so keeping the programs tiny seems like a good way to finish them.

The fifth (and for now final) reason is that it's a fun way to run into more interesting things I haven't had a chance to think about before. For example, how similar *are* the sets of {1, 2, 3, 4} and {3, 4, 5, 6}. So the fifth reason really ties the other together a bunch of the others in a way that should hopefully keep my brain moving.

So What Are You Doing?

I've made a GitHub repository and I'm uploading stuff there. No guarantees any of it's good or interesting (and if I've solved any of your intro to programming assignments by accident, (Sorry!) I'm not doing it on purpose. - Hit me up and we'll chat assessments in programming.) Feel free to keep an eye on it if that's the kind of thing that interests you.

So far I have 2 programs in the repo.
  • List Difference - takes a look at two lists and lets you see how similar they are. It's intended to help statistically mock sports casters. This one's pretty finished.
  • Food-o-rac-o-cycle - named for the food machine on the Jetsons (I think). This will tell me what to make for breakfast. This one's off to a good start.
I'm also planning to add a couple of other programs that I'm working on to help with the Chrono Sprites. I started them separately, but they fit the model for Code Doodling, so I'm going to drop them in too.

I'll update from time to time, but if you're interested in what I'm up to looking at the repository is probably the best place to see the latest.





Friday, November 12, 2021

November 2021 Project Update

I recently watched Cathy Hey interview Jeff Walker about building a creative career. While I'm not planning to leave my day job any time soon, I've been sitting on a lot of creative projects without making much progress and this really inspired me to get moving on a lot of these things.


I decided as a starting point I wanted to dedicate a little bit of time each week to working on projects. I set an initial goal of 5 hours a week and I really haven't nailed it yet, but I've actually started to get a little bit of stuff done. 


As apparently has become my wont I set up a spreadsheet to track my time, and so now my life outside of work is filled with colourful bar charts. 




My focus for now has been on reviving some actual posts in the blog. Inspired by Julia Evans (@b0rk), I wanted to start including more about the things I know and the things I'm learning. The first of those is using Java's Preferences. I'm using preferences in the Game Tracker so thought I'd use it as an example and then I realized that a) it's a horrible mess and b) it's not available to the public. Now I'm updating that and my next post will be about that.

So, generally, you can expect to see a few more posts outside of me tracking books and games here. I've made some progress on Chrono Trigger Sprites and I have a backlog to post there. Plus you can also expect more posts about technology, learning and teaching. I'm not committing to any set rates, but "more".

I feel pretty happy approaching my projects this way, so I really appreciate that video. I think I've started on a good productivity groove right now and I'll take it.

A sketch of a bunny-thing in a bunny-hat.
I've been sketching more too!


Sunday, January 31, 2021

Projects Update: January 2021

I'm finding this particular project update a bit of a struggle. On the one hand I feel that I've been much more productive on my own projects than I've been in the past, but on the other hand I'm feeling a bit lost overall and like there's still a lot of things I'd like to do. 


At the beginning of January I started a new job and I'm finding balancing my energy difficult. I appreciate having my time better structured with a 9-5 position and the position itself has a lot of breadth for creativity, but I do find myself pretty tired at the end of a day. 


All in all I'm finding it a bit of a challenge to hit a balance that works for me. I probably need to relax and take to heart that I've only been working on this for a month. One thing I am trying to do is to reduce the number of things I'm trying to do at any point in time. For the first time in most of a decade I've reduced my daily to-do list down to just the absolutely must do things. Then I allow myself to decide what the best next thing for me to do is. 


As an AI researcher this gives me a real fear at getting stuck in a local-optima, but honestly I find that the landscape shifts and I'm able to get things moved forward here and there. Not as much as I'd *like*, but that's how life works. Beyond that, I'm trying to decouple my feeling of self-worth and happiness from productivity and completing projects, but that's a long journey to undertake.


At the moment, I've got 6 projects I'm providing updates for:

  • The Blog, as ever, is ticking along. I actually wrote my first editorial piece in ages earlier in the month. I may write more, but my primary focus is to have fun keeping track of my reading and game playing.
  • I left the Chrono Trigger Sprites without a deadline and I'm enjoying that. I've done a bit more and so there will be project updates about those eventually, but I'm not rushing and I'm kinda happy to have a hobby that just a hobby. 
  • I haven't been writing  outside of the blog, so my project on The Roofs has been slow. I think if I do decide to carve out a little more time this will be the project I go to first. I'm definitely sitting on those first four thousand words I wrote and finding it a bit hard to accept the permission to write terribly, while pushing forward. If I don't carve that time out, then I'll let this go dormant for a bit.
  • I want to put together a Google Drive backend the Game Tracker, but this has been complicated, because the documentation from Google is all built around accessing drive through a Gradle build. In my mind I'd just like a library I can link against, but that's not the way the (fairly limited) documentation works. This throws me off making any progress and even though I have other avenues I could work on, I keep getting stuck. I haven't put in a huge amount of time, but this is definitely a project I'm focusing on. 
  • One of the ways I was able to justify taking the non-teaching job is to myself that I want to work on Code Click, building teaching resources and building up my experience for teaching. Code Click is a huge part of that, but for now it's also a project that can wait. I'll come back to this (I've spent quite a while thinking about what I would like Code Click to be like), but for now I'm not going to focus on it too much.
  • My time on Infinite Acorn Adventure has mostly been spent trying to remember all of the linear algebra that I took (poorly) two decades ago. That's been fun in itself, especially with Daniel Shiffman's videos.

I'm not going to share any deadlines for things right now. None of these projects need to go anywhere in particular, so I'm going to work on them when I feel like working on them. Later if something needs a push to get *actually finished* then I might bring back the idea.

A sprite of Robo from Chrono Trigger, punching. Made out of perler beads sitting on a pegboard.
This was a lot of fun to build and definitely easier than some.










Wednesday, September 30, 2020

Projects Update: September 2020

My last general project update was in May and I was a bit surprised by how fast May went by. Now, it's September...

Honestly I struggled a bit with productivity over the summer and eventually gave myself permission to just take some time off. I also hit a bit of a complicated patch with finding post PhD employment and figuring out what I want to be when I "grow up".  

In short I'm finding myself myself drawn to a creative career as well as (or in favour of) an academic one. So I'm trying to balance both of those for the next while to see what's possible. I've set myself some goals for the next year to give myself some firmer deadlines and so that I can see what's possible with what I can create for myself.

I am finding it a bit rough teaching this semester. I had hoped to be able to take the semester to increase my creative output but ended up with more teaching duties than I'd expected. This is making it a bit rough to get things done, but I'm doing my best to plug along where I can. Remembering I can take the time for myself has been tough, but I think I'm learning.


Where I am right now:

The Blog (Project 1)

I did give an update as usual at the beginning of August. This trucks along and the reading and games updates are a fun task to take a break and do.


The Roofs (Project 11)

I didn't write nearly as much as I might have, but I did start writing and it felt pretty good. 

I finished around 4000 words in May/June, before getting distracted and wandering away from the project. I managed to get my focus back in August and started a rolling edit to revisit what I had and to tighten it up. I'm trying to avoid doing that again, since I need to keep moving forward, but I'm still feeling like I'm accomplishing something.  


Chrono Trigger Sprites (Project 12)

I finished the Robo sprite a while back. I was able to do it really quickly, but I've been slow to write the project post about it. I have it on my plate to get done in the next few days.

I'm enjoying working on these, but I'm thinking they're a lower priority than some of the other things I want to work on right now. I have 3 main characters left to do from the playable characters, but I think I'm going to tackle them when I have a quiet Sunday.


Robo In Action!




Game Tracker (Project 18)

I didn't get to work much on the Game Tracker at all. I'm feeling a bit conflicted about this because on the one hand it's not a priority for me. I want to focus on writing, making games, Code Click. On the other hand, it's beneficial to teaching and it's been the motivation for me to learn more about developing modern real world software. 


Infinite Acorn Adventure - Bubble Puzzler (Project 13)

As I said, I've spent a lot of the summer thinking about what I want to do and how I want it to sustain me (and also putting food on the table might be nice). One of the things that really came to the fore for me was that making games was a place I wanted to focus. I've also been thinking a lot about how I want to be able to tell stories through games and use games as a mechanism for supporting a good life.

As such, I've been a bit frustrated with myself about the fact that I'm not working on making games and I'm not learning about making games. So I think the solution to that is to make a game.

Code Click (Project 20)

I think one of the roles I fit very well is computer science communicator. I'm interested in making things easily understood and I think generally there's a problem in communicating about computer science. Given that I'm in a state of looking for full time work in some combination of technology and teaching, spending a bit of time working on my computer science communication skills seems worth while. 

For my classes this semester, I've obviously had to move my teaching on-line, so I'm already developing those skills in a university context. I think pushing the science communication skills makes sense, and I think trying to capitalize on Code Click is a good place to start.


Where to next?

My thinking for the next bit of projects is:
  • Infinite Acorn Adventure - A prototype in Processing by October 31.
  • Code Click - One post by October 31.
  • Game Tracker - I'd like to have a google docs back end, working by November 31.
  • The Roofs - I'd like to get a finished (but bad) draft by August 1, 2021.
  • Chrono Trigger Sprites - If I get to them I get to them, I'm not going to give myself a deadline.
  • The Blog - will keep travelling along.





Thursday, August 14, 2014

Project 6: 100 (days of) Sketches: Wrap-Up

Well, this is another project that's fallen off the face of the earth. It's been more than a year since I was supposed to update it and I haven't done that. I also didn't at the end of the day actually sketch on anything like a hundred days for those six months.

For now I'm going to let this project lapse, but I may revisit it when I feel like that's the direction I'd like to push my creative actions!

Tuesday, August 06, 2013

Blog: Favourite YouTube Videos (Volume 36) - ZeFrank Special

This volume of my favourite YouTube videos is a bit special, first of all it marks the point in time where ZeFrank had just started doing a show. This is special in and of itself, and caused me to have several of his videos in my favourites in a row, but somehow I managed not to favourite "An Invocation for Beginnings" which is possibly my favourite ZeFrank video of all time. So I decided to slip that one in and add in one extra to give us a totally ZeFrank focused volume.

I'm going to let each of these stand alone.

  • "An Invocation for Beginnings"
  • "Thinks Like Me"
  • "Make. Beleive."
  • "TMMTO :: Comfort"
  • "2601 People Wrote This Song"

Tuesday, January 01, 2013

Project 6 : 100 Sketches

Over the years I've taken a few drawing classes and other kinds of art class. I've reached the point of being not terrible, but I'm never going to get better without practicing regularly which I haven't found the time and motivation to do. To give myself a kick to practicing more I'm starting a new project. My goal for this project is to practice sketching for at lest 15 minutes a day for 100 days in the next six months.

A sketching of things, using Paper on the iPad.

I'm not going to share all my sketches, since most of them probably won't be that good and I don't want to stress myself out about quality. If there are some I feel like showing off then you might see them in an update here.

The deadline for this project will be July 1, 2013 and I'm going to try to have 100 days of sketching between then and now.

Reading

I’m not sure that anyone, myself included, really needs this post. On the other hand, I read a thing about re-reading and I want to write ab...