Author: CapnPilot

  • Game Dev and Green Dot

    I spent today looking into some small game development engines that might be interesting to play around with. One which caught my attention was Wick, which looks like it’s meant to be an animation software that also has interactive features. I haven’t used it for anything yet, but I was charmed by one of the YouTube tutorials that shows off interactivity (there’s a drawing of a little mouse!)

    Unfortunately, it looks like it’s at its most powerful if you’re familiar with Javascript. The tutorials give a bit of instruction as to what built-in functions are available, and how you might create some new functionality, but knowing code would make it a lot stronger. The interactivity tutorial shows you the basics a beginner might need to make a point-and-click adventure, which is fun but not flashy. Also, there might be options to upload images, but all the art in the tutorial looks hand-drawn in the editor, which will be a barrier for anyone who’s self conscious about their digital art skills.

    I also attended Green Dot training, where we talked about the skills and strategies one can employ to counteract instances of sexual violence or misconduct.

    The training covered two main areas: Reactive Green Dots, or actions one can take when one sees an instance in progress, and Proactive Green Dots, or actions one can take to build a community that is well informed about, equipped to address, and culturally against sexual violence and misconduct. Reactive Green Dots came in three flavors: distract, direct, and delegate, meaning to divert the situation indirectly, to directly address either the perpetrator or the target, and to seek backup or help either through official channels (Campus Security, Community Concern Forms) or unofficial ones.

    Being in stay-at-home mode so far away from campus makes Green Dot and its training feel sort of removed for me. I’m very glad I went, and I feel more equipped to just… respond to situations where I might otherwise freeze up, but it feels like those situations aren’t very likely to come up right now. I hope they don’t.

  • Planning with Omeka S

    Over the course of the next month or so, we’ll be developing an Omeka S site to host translations of medieval documents — which means we need to know how Omeka S works. Today (and over the course of the next week or so) I’m taking a dive into Omeka S’s documentation in order to prep. The documentation is available here, in case you were curious.

    I won’t rehash it, because explaining a lot of the technical stuff will get boring fast, but the main takeaways of the beginning are much more geared towards questions of design and planning than specific fiddly technical bits. So that’s what I’ve been thinking about in the context of our project. They’re good questions to ask of any project, but I’m going to answer them here specifically for what we’re doing, because… yeah.

    Who is our audience? Primary, or secondary? Our primary audience will be historians who want to reference medieval documents; our secondary audience, if we decide to make this part of the project, might be translators looking to share their work. That’ll need to be another conversation.

    What do we want people to be able to do on our site? The site’s primary concept is as a searchable repository: we want people to be able to locate useful documents based on the metadata associated with them. That means we don’t need many pages of context, beyond perhaps a description of the project; the scholarship being done is in the presence of the content. The open-ended issue here relates to the first question: do we want translators to be able to share their work? That’s functionality we can add… but is it functionality we need?

    How are we thinking about what’s on our site? Omeka S operates using items, which have properties (metadata…ish?) associated with them; the items can be grouped into item sets, which also have properties. Items, item sets, and media can be used as properties for other items and item sets.

    This is probably the blurriest part right now. Each translation will almost definitely be its own item, but what will the core theme of each item set be – if we even have item sets? Will we end up making other features of the translations items, in order to create a better network through properties? (IE, if we have multiple translations from the same author, should we make the author also an item, so that we can navigate from the translation to the author to other translations?)

    This would be a question to answer before we get started, since it would inform everything about how we enter the data. It’s not a bad idea, but scope creep is… not something to take lightly, and we need to do some time estimations.

    Goals for planning, then:

    • Plan out our rough stages (given what we need the site to do, what do we build first? When/how do we add the translations, and how do we store them?)
    • Ballpark the amount of time each stage might take
    • Figure out who should be doing what, depending on the amount of time we have, what our deadlines are, and who’s busy when
    • And of course, keep reading the documentation
  • “Creator Kit: Beginner Code”: Day 4

    Not a whole lot to report today — mostly spent today going through documentation, getting set up again, and trying to pseudocode my way through the effect I wanted to write out. Turns out the windup tutorial actually happens in three stages: one stage for consumables, one for equippable items, and one for equippable tools.

    In the end the thing that turned out to help me most was a combination of pseudocode and working backwards: writing out the objectives I had for the program, then taking tiny steps like “Okay, this needs to return a boolean; it’s consumable, so it returns false” and “Once all of the parameters are set up (even though they aren’t yet), I’ll pass them in here, which will perform the main point of this code)”.

    Working backwards was also an interesting way to diagnose problems, because I’ll find out later whether I’ve made a huge mistake about conceptualizing things, but in the meantime I can isolate all of the syntax issues that are happening while I try and set up my parameters, as a result of not knowing C# very well.

  • Thinking Through Progress

    This’ll just be a bit of a ramble to sort of work through my plans. Topics: the Creator Kit: Beginner Code Kit, the VR Beginner kit, designing & planning my own Unity projects.

    Beginner Code Kit

    I’ve left the Beginner Code kit so long that I can’t really remember what I was in the middle of (or where I left my files) when I was last working on them. Teach me to write up my escapades better.

    My last Beginner Code post was about finishing up the core units, not about the day I spent wrestling with writing original code from scratch. The primary reason is because I spent that day reading documentation trying to figure out what I needed to access, so I didn’t feel that I had anything to write up, but I was wrong. Oh, I was wrong.

    Probably the next step would be to go back and restart the write-from-scratch unit, working through the documentation again. It’ll be a pain to start over, but it’s the cleanest way I have of making sure it happens.

    The goal of this write-from-scratch in Beginner Code is not necessarily to mod the game, by the way. It’s to just… have something I came up with and wrote myself work. That’ll be a big win for me.

    VR Beginner Kit

    After the Beginner Code kit I have two VR tutorials on deck: one about an escape room and one that’s just a beginner’s guide. They look about comparable, which means I think I’ll go with the escape room, since it involves puzzles (hopefully).

    It’s not supposed to involve much programming, if any, which means that I’ll mostly be getting oriented in VR and thinking about how to design for it instead of doing the coding principles. Maybe I should look up a more advanced coding tutorial as well…

    Planning Projects

    The line to thread on projects is something that’s a) interesting, b) achievable, and c) relevant. A project I don’t care about is a project that will suffer; a project that I can’t accomplish (even if I have to stretch and grow to do it) is pointless; a project that isn’t useful is doomed.

    As far as Unity goes, we don’t have a lot of call right now that I can see for a project, though thinking about potential AR applications around campus might have legs. In the meantime, it’s possible I’ll try and keep my hand in by programming smaller projects outside of Unity, to keep in the mindset and the habit.

    I do have potential game ideas that would be a good way to practice full-scale development in Unity… hm.

  • Writing Documentation

    The title really says it all: that’s what I’ve been up to recently.

    So, yes — coding, VR and AR development, learning Unity — it’s all taken a bit of a backseat in an attempt to get some more time consuming and generally relevant tasks taken care of. We’ve solved an issue with some web addresses that were bouncing, posts have been migrated from one site to another, but there are still general logistics for the migration going on.

    The first is just… making sure there’s general useful documentation for our sites. Our setup is a bit unique, so the current documentation isn’t really what we need, and in any case it focuses a lot more on the general set up than the day-to-day tasks.

    The second is tracking our sites. We have a lot of sites installed, but some of those sites have subsites (not included in the installation count), and other sites are HTML-based and therefore not installations (and therefore, uncounted). I’ve been going through each subdomain and tallying up each site, trying to figure out who’s responsible for what and why.

    Writing up documentation is a lot more fun than I thought it would be. Thinking through where I’ve run into challenges vs. where others might have issues, and what’s easy to miss but very important… it’s an interesting puzzle. I’m enjoying the process of it. Part of it may also be that I just like writing, and documentation is a good way to keep my hand in. Site tracking is a lot more data entry, so it’s less stimulating, but an audiobook or a podcast in the background keeps my ears going while my brain stays on task.

    I’ve been trying out Instagantt, an organizational tool someone else on my team recommended. So far… extremely mixed results.

    There’s nothing wrong with the tool itself or any of its features. I like what bits of it I get the chance to use. It’s easy to add tasks, I like the way it tracks tasks and subtasks, marking off tasks is satisfying, it keeps track of lots of information, it’s supposed to be very good for team collaboration…

    Except I inevitably cannot keep the page loaded for more than forty-five seconds to a minute without it freezing.

    I tested it in multiple browsers. Firefox catches the issue faster than Chrome, but it’s there in both. My only thought right now is that it might be a Windows compatibility issue, but that would be extremely weird for a team product.

    I want it to work. I really do. It’s much, much better than my Google Sheets Gantt charts — or it would be, if I could use it.

  • “Creator Kit: Beginner Code”: Day 3

    Really, for real, almost nothing to report from today. I fixed the problem in my code, tested it (it worked, because I’m amazing), and finished the last official remaining unit in the project. The unit was to make your own script from scratch, but it was still pretty simple — writing one function which contained one line of code, and then applying it in the Unity editor.

    The main question, as always, is what’s happening next. I think I’m going to work through the last couple units of the game — there are a couple where the time-to-complete is listed as zero, presumably because they’re both optional and pretty free-form. There’s one to customize your game some more, and then a couple which look like they’re about sharing and submitting your mods, which should be quite quick.

    They have two recommended tutorials after this, one for 3D work and one for 2D work, both of which will presumably involve more coding in C#. I’m deciding whether to do them or take a whack at the beginning VR tutorial I found, because one thing this tutorial showed me is that when they say beginner, they really mean it. You didn’t need to have prior coding knowledge or experience to make this tutorial work. Which has left me a little less scared of the VR tutorials, at least the ones that’ll be holding my hand.

    I can’t remember whether I ever linked the Beginner Code tutorial, but here it is. And here’s the Unity documentation/Scripting API.

  • “Creator Kit: Beginner Code”: Day 2

    Today I went through another big chunk of the Creator Kit: Beginner Code tutorial. Yesterday was an introduction to (a review of) variables and functions, plus some syntax for C#. Today was all about classes, and I was both bored and boggled by turns.

    Bored

    It is TBQH not the tutorial’s fault that I already know a lot of the concepts they’re introducing, and that I’m mostly in it for the syntax, but still. I ended up critiquing the lesson structure in my notes halfway through, which isn’t the worst use of my time (learning how to teach is definitely not nothing), but still wasn’t… great.

    The lesson that got me was the unit about writing your own spawner class, which per my notes was structured something like this:

    1. Here’s how to write the syntax for declaring a class (always a good place to start)
    2. Declare your global variables (a good next step, though they didn’t actually call them global variables or explain what the difference would be, which seems important)
    3. Write the most important function, the one you absolutely need your class to be able to perform (a constructor, you say? no, no. just the function which is the primary point of the class. which… i get, but seems backwards)
      1. In writing the most important function, use a class and function which we have written for you elsewhere. This function should be relatively simple to write on your own, even if it would provide redundancy (I assume the function is also needed other places, which means they can’t wait for you to write it in the tutorial. But you won’t write it. We won’t tell you how it works.
      2. Here’s a hint: it’s almost definitely just a modulo operator. That’s it.
    4. Now you get to write the constructor function.
    5. But because we didn’t tell you about what public variables are, your code doesn’t work, and you now have five errors.
    6. That’s it, that’s the end of the unit. See you next time.

    I bet it shows how impressed I was.

    But it was actually good practice for writing code, and I found myself remembering syntax pretty intuitively, which was helpful.

    Boggled

    In order to treat myself and prove what a smart and special programmer I am, I decided to add in a for-loop, using a public int which one could set in Unity. The size of the int would determine how many health potions/how much money spawned at the start of the game.

    Ladies, gentleman, and those of us who know better: I broke everything.

    That’s perhaps a little overdramatic, but essentially, I crashed the Unity editor like six times. You could not change the variable and then run the game without immediately causing the Unity editor to freeze, which in turn forced me to kill the program from the Task Manager.

    If you didn’t change the variable (which by default was 0), everything was fine, by which I mean the game would run without the Unity editor crashing. Everything was not fine, in that zero potions would spawn, with no way to change that.

    Eventually I decided to put my for-loop inside a conditional clause: if the number of potions is less than or equal to zero, don’t bother. If it’s not, try the for-loop.

    This worked, in that the game no longer crashed if you changed the variable. It still left me with absolutely no potions, because the game just did not care what you changed the variable to.

    I gotta figure out how to write to the console in order to speed up my debugging. In the meantime, have a screenshot of my terrible for-loop (with the section it was supposed to replace commented out). That’s all, folks!

    A screenshot of code, consisting of the declaration of two global variables, a function which contains a variable meant to calculate angles and an if-statement containing a for-loop containing a function that is meant to spawn loot. Commented out is the same function outside of the if-statement, but repeated four times.
    Please witness that most important precursor to success: failure.

    UPDATE: I FOUND IT. RIGHT AWAY. ABSOLUTELY CLASSIC.

    (Hint: I asked i to be equal to zero, and also greater than whatever number of objects I wanted to spawn. Oops.)

  • “Creator Kit: Beginner Code”: Day 1

    So, following up from yesterday – today was about the Beginner Code tutorial on Unity. It was, as the name says, very beginner — it did a lot of introducing the concepts of variables and functions, which meant that I skimmed those sections.

    The tutorial started out pretty simple, with a general rundown of how computers, compilers and code all work together, as well as exploring the game to see how different parts of the world work. Then it went into examining scripts, and how to read through C# when written out.

    One thing I really appreciated was that the tutorial made a point of introducing a term that would make no sense without explanation, then immediately linking the documentation and walking you through how to use it. Beginning programmers, like the sort this tutorial is aimed at, may not know what documentation is, or where to find it, or even how to use it; this setup specifically showed how to find it, and then how to interpret what the answers were. This was also nice because Unity uses some specialized terms that are not necessarily present in C# broadly, so when I went to look them up in C#’s documentation, I had a lot of trouble.

    The tutorial walked you first through variables and then through functions by having you edit a script which spawns health potions at the start of the game. The variable you change affects the distance from a central point the potions spawn; the function you change refactors the code to prevent the same function being rewritten four times.

    It has been a while since I wrote code, because I made a pretty silly mistake: I didn’t type my variables when I instantiated them in my function, which led to the same error eight times over, and couldn’t figure out what I’d done wrong. Hopefully I’ll take that lesson forward. It’s been a while since I’ve worked in a strictly typed language.

    I actually worked a little bit ahead, since skimming through the explanations of variables and functions left me with extra time, and managed to get through tomorrow’s agenda and even a little bit of Thursday’s. I’ll be moving things up to compensate.

  • Code, Cactuses, and Kanban

    Not a whole lot to report today, just some floundering as I try and figure out my next steps. There’s two fronts I’ve been talking about, Agile and Unity, so I’ll cover them both.

    Agile

    Simply put: I don’t have a whole lot I can adapt for Agile in my current work. The projects I’m working on sort of suit it — Agile is about incremental deliverables which add functionality, which is a lot of what I’m currently doing in my documentation and policy work.

    But most of Agile’s (well, Scrum’s) tactics really boil down to ways to keep a team motivated, focused and cross-functional. Daily stand-ups? Planning poker games? Those are ways not just of managing information, but engagement.

    I did pick up the Kanban swim lane diagram practice, though. I have a Trello board. It’s very pretty (and it’s easy to keep notes on each card).

    Unity

    Unity today has been a lot about figuring out where I am. The most recent thing on my project chart has been working through a lot of the beginner projects — except I’ve already done most of the Kart build, and I’ve at least touched on the platformer and FPS microgames (this was back in August or early September, before I started writing things down). I didn’t want to work through a list of things I’d already done, or things which were almost the same as what I’d already done (modding out the platformer was mostly just about aesthetics, which we did a bit in the Kart game; modding the FPS game looks almost exactly the same, except that you have to purchase all the modding resources). 0/10, highly demotivating.

    After I’d finished the beginner projects (you know, the thing I didn’t do because I’d already done it), the plan was to plan an original project of my own, then create it. I… don’t think I’m ready for that yet, in part because I don’t know where I’d get assets that have behaviors and functions attached. Maybe I’d have to write my own.

    So instead, I started poking through the other tutorials Unity offers in the ‘Learn’ tab of Unity Hub. I came across one that looked particularly interesting, called “Creator Kit: Beginner Code“. It said it recommended working through one of the other Creator Kits first, so I noodled around with one called “Creator Kit: Puzzle” (I love puzzle games). But in the end, it looked pretty similar to the microgames, so I let that one go.

    This means it’s (sort of) settled: Beginner Code will be my next project. I’ll start working on learning C#, and hey, maybe I’ll even manage to go back to Codecademy for a little extra practice. I haven’t had the chance to dig into the actual tutorial yet beyond getting it just set up and imported, so there’s nothing to report on that front, but from what I’ve seen so far, it has cactuses in it. So, a win on all fronts.

  • What Do I Need (In Order) to Learn?

    Alas, my hopes for the Agile tutorial were for naught: the sections on Scrum, Extreme Programming, and Kanban were all explanations of the mindset and values behind each practice, without much explanation or examples of the actual process. Part of it might have just been that they were too wide in scope, but I came away feeling more like I’d been listening to an extremely redundant sales pitch than a demonstration. There’s some interesting reframing of concepts, but otherwise…

    It does have me thinking, however, about online education, since LinkedIn Learning tutorials have been around since way before the pandemic (though they used to be called Lynda back when I was a freshman). Why have some of the courses I’ve taken been effective, and others haven’t?

    Different courses I’ve taken (that I remember) include: this Agile Foundations tutorial, an introductory course on project management, and a lot of small one-off lessons on video editing for various CAMS classes.

    The Agile tutorial had only two practices which it explained in clear detail, with visual aids: the swim lane diagram (a board with organizational sticky notes which showed up in both a general process explanation, and in the Kanban unit) and a game called Planning Poker, where each person individually estimates the amount of effort it will take for the team to complete a task, reveals their guesses, and then discusses why they thought that. There weren’t any exercises to prompt engagement, and there were a lot of issues with redundancy, repetitively unclear terminology, and overlapping concepts (one phrase that came up all the time was something like “Now, <this term> is a term from Scrum, and I use it because Scrum is one of the most popular Agile frameworks, but you don’t need to use this term, you could say something else”… even though Scrum and its terminology were part of the second-to-last unit in the video, so I had no clue what was going on).

    The introductory PM course had very little to do with mindset or philosophy, and a lot to do with practices. It also asked for engagement in a way I thought was very effective. The broad-strokes outline of the course was to write down everything that had to get done on sticky notes, create a flow-chart with the sticky notes of what had to get done when, estimate times and costs, and turn it all into an actionable chart. The videos made a point of saying “Pick a project you want to do, and then do all the steps with us as we go”, which made it easy to be invested in what you were doing and follow along, but you couldn’t pick up any individual part as a lesson.

    The one-off lessons were extremely hard to be invested in. They were part of larger courses that had exercise files for you to follow along with, so that you could edit stock footage and audio and see clearly what the instructor was doing, but this also meant that you didn’t really care about the project. They worked well for two- or three-minute tutorials, which was all we needed them for, but I don’t think I could see myself willingly sitting through a full course.

    These all seem like pretty obvious statements — actionable information > vagueness, emotional buy-in > boring exercises — but I’m hoping I can use this for self-teaching and for thinking about different disciplines. Some disciplines are very actionable, but hard to personalize; some can appeal to personal goals, causes or interests, but be sort of vague in their application. I need better, different strategies for each.

css.php