Harvard CS50: Class 0

105mins of that man talking, and 0 hands on. No context for Scratch.



Used Hack Club's personal site workshop to step through making this thing. The experience felt similar to when I was learning to make a Slack bot: frustration and confusion with the new software and workflows-- often introduced without context or rationale. Is this programming?


god of war ragnorok

Everything you need to know about working with teens ;p


in preparation for what

So much has changed in the years since I used to handcode my personal site. I've been feeling impatient with having to re-learn css and html, but today my desire for this thing to look un-shite won me over. Happy to see how fonts work nowadays (google's, for one). Had a lot of fun with my title: an isometric COLRv1 font called nabla that allows you to really mess around with it in css.


lazy loading

I've been saying aloud (for accountability) that I'm going to do every Hack Club workshop. It's a good idea-- for my own programming journey, so I can appreciate others', and to deepen my understanding of our offerings vs other org's. Tonight, as I started our splatterpaint workshop in earnest, I instead found myself happily tumbling down a rabbithole of discovery: like this and this and this tool.

But happy distraction aside, is this what I want to do? What do I want to do? Because that is what will keep me learning.



Finish my ornery cat-bot is what. So far the cat:

Next I want it to develop 'affinity', as in it tracks the number of times a Slack user does one of the very few things it 'likes' vs all the things that it doesn't

I need a leaderboard aka dbase. Kognise recommends sequelize and SQLite, so for now, again, more software than programming.



For my Slack catbot leaderboard, I want to be logging every time a userID responds with [the things I've listed] + how many points I assigned to each.

It's been a long day at work already, but I'm determined. I tuck in eagerly to the sequelize docs. The first line of the Introduction is jargon I can't map to anything relatable. I laugh at "As you already know, a model is an ES6 class." IS IT? DO I ALREADY KNOW THIS?

To prove that this is not a me problem, I search the doc for 'ES6', find it 3/4 down a "Model Basics" page with a link to MDN documentation, which doesn't even mention ES6 at all. The relief of discovering I am indeed over my head, rather than just stupid is soon overcome by my highly irritable impatience that I have yet to write - hell, TRY TO WRITE - a line of code. I'm feeling hopeless already, but I read, I follow links, I try to understand code templates. I find examples of querying, but can't seem to find how to add data. I need to start something.

I scroll up to the setup section re: how to connect to a database (which doesn't even exist-- another point that is breaking my brain). If I can just get things talking with each other, I can end the evening with the smallest of wins.

Three are 3 options for connecting to your DB. One wants username etc, another its filepath. Off I go to SQlite to dL it or set it up or whatever one does... and..."it" doesn't exist.

I don't have time for this. Who has time for this?

I shut my laptop, blink away tears of frustation. I will laugh about this tomorrow.


storebought lasagne

Somewhere in this process - and without realizing it until now - I decide that my learning is going to be as 'pure' as possible. That is, because this-all is also to help me emphasize with our Hack Clubbers, I can't 'cheat' by just asking the many programmers in my midst for help.

But my colleagues are lovely and smart and helpful. They're curious about my journey. They're encouraging, and amused.

I tell one of the Hack Clubbers about my bad date with sequelize. She offers to sit and watch me try again. I offer dinner in trade. It's been a long day, and we don't have much time. I don't want specific help, I just want guidance as to where to look for help.

I point to the options for setting up sequelize, and she says it's the second. I don't undertand why. I copy and paste the code in the documentation. I personalise it, but make a mistake on the file path. I still don't understand a filepath to something that doesn't exist. I still don't get where the data goes . But we move on.

She leaves after we talk through the logic of what I'm trying to do: a slackId says a 'thing'. We log their slackId and the points assigned to the thing. That's it. It seems very simple.



Between the jargons of sequelize and slack, and my lack of any JS experience, I'm totally stumped.

I know so many beginners end up here. What do they do? How do they unblock themselves? I ask my colleagues for their stories and advice.

None can quite remember, but they all relate to my hurdles. One recommends that I truly need to undestand how things work, so should just start again and learn C. (I'm reminded of the binary lesson in class 0 of CS50). Another doesn't have concrete suggestions but to keep perservering and to document everything here - in detail. Another suggests our own Hack Club project, Sprig

I'm glad to hear this, because one of the reasons we've spent months developing Sprig is it is a tool to help us improve as coders. And, it's in JS, which should help me with functions.

Catbot is once again temporarily abandoned. I've been feeling guiltly for not having set aside the time to make a Sprig game anyway, so this will finally give me the bump to get one done.


You are standing in an open field west of a white house

I'm going to make a choose your own adventure game in Sprig.

It's going to be two simple sprites. You choose one, and then they're replaced by two more. That's it. For now I know that's likely complex enough-- there's no need for me to add a score or inventory or even backtracking. You make choices and move on.


This is what you get for having no pla

I start digging through the current Sprig games to find one that does something similar to what I need (namely swap a sprite on a key input). I lose myself in other people's projects for awhile. It's just so fantastic to see everyone's code. I truly understand maybe 20% of it, though can grok most of it enough to know what it's doing.

None of the curent games quite do I want, so I delve into our toolkit. Most of it I can understand, except the section titles. For example, setBackground(bitmapKey) Tiles a bitmap as the background of the game: setBackground(spriteKey). I don't know what these Keys are.

I do figure out how to create a map, and my first two sprites. I figure out how to replace sprites with others onInput. It doesn't work without clearTile first, so I add that, and I'm thinking that maybe this means there's the ability to layer sprites and then reorder them, which would be another way to create this game.

I get the swap working. These small wins are so addictive, but as I'm progressing just to get this small thing to work, I'm aware that this isn't likely going to be the way forward for consecutive choices in the game.

I really haven't thought the larger logic of my game through at all.