Welcome to johnbintz.com

Abstractions 2019

Aug 25, 2019

Abstractions is a multidisciplinary tech conference that takes place in Pittsburgh. I went to the first one in 2016 and was blown away with the quality of both talks and attendees. That was also the first time I really got to explore a lot of Pittsburgh, and I really took to the city right away. So when 2019 was announced, I signed up immediately, knowing I was getting into something that was going to be really special.

A photo of the Abstractions stage before a keynote

I’m only highlighting some of the talks, mainly the ones I took a lot of notes on or were particularly inspired from.

Keynotes

Karen Sandler, Finding Our Path to Digital Autonomy

I’m pretty big on software freedom. It’s the reason my entire art pipeline (with the execption of one tool on Android) is free software: I don’t want a commercial vendor to control the access to my artistic data, something very important to me. But what if that vendor access went even farther and to a more important area of your like like, say, medical devices?

A slide showing an implantable, hackable defibrillator

This was the first of several presentations where I wrote down the phrase Delete the Internet and Destroy All Computers because maybe it’s time we just start the whole thing over.

A pinball machine at Abstractions

Aaron Patterson

This was a really shitty talk. No, really, it was about a device he built to weigh his cat, and the cat pooped in the box so it registered more weight after the cat left than before, and there was bunch of functional programming and signal processing stuff? A fun little whirlwind of a talk.

Simone Giertz, Why You Should Make Useless Things

This talk took “Failure is always an option” a step further. As you learn more from failure than success, by intentionally trying to fail, you also learn that it’s OK to fail in those times you’re actually trying to success.

Zed Shaw, That’s Not Parallel Mr. Steve Vai - Guitars, Code, Art, Self-Awareness & The Limits of Instruction

As an old-school out-of-touch Ruby programmer, I didn’t know what to expect here. What I got was some similar lessons on trying and failing within the art world, specifically around painting and playing guitar, and learning to trust your own instincts, especially in a structured learning environment. I even chatted with Zed a bit afterwards about my own adventures in painting in college. A great way to cap off the conference.

Talks that stuck with me

Protecting Yourself Online and In-Person

Another Delete the Internet and Destroy All Computers-worthy talk. The goal of online protection is to reduce the likelihood of someone tracking you down to harrass, injure, or kill you or your family (!), and a lot of the in-person protections were around travel, especially to foreign countries.

My own takeaway todo list for this talk is the following:

Building Accessiblity Together

A lot of the talk was about improving accessibility for all users, and there were two things that stuck out most:

Deeper Understanding & Better Communication Through Visual Arts

Here’s a talk that’s right up my alley. Anna’s talk covered the differences between fine arts & illustration, and how illustrating technical concepts visually can increase understanding and buy-in from others. This is something I’ve always done in my career and it’s pretty powerful.

Also Anna’s own pixel art inspired me to do a little pixel art during the con, so here’s me eating a taco at Condado:

Me eating a taco at Condado

Game Development in 8 Bits

As someone who has started messing with one of the more advanced game engines around, seeing how it was done in the days where total RAM was measured in kilobytes was pretty wild, but the talk eventually came to a great point with regards to development: Embrace the Stupid. If it makes the project work and move forward and it’s good enough, then great job. Constraints within a project force you to find innovative solutions.

The Times They Are a-Changin’: A Data-Driven Portrait of New Trends in How We Build Software, Open Source, & What Even is “Entry-Level” Now

Slide with a Tidelift survey on it

Just showing this slide from the presentation for no reason in particular…

This was the talk that inspired me the most. Not because it literally hit close to home job-wise, but because of the huge change in the demographics of software developers – folks like myself, who have been in the industry for a very long time, are in the vast minority, and over half of developers nowadays have fewer than 5 years of experience in the industry.

This has got me thinking…

Effective Engineering: Step Away from the Keyboard

…oh hello, relevant talk. This one covered an interesting set of talking points from someone else who has been around for a while in tech, with the biggest takeaway being “you’re in tech, of course it’s your job to improve technically all the time.” Improving in the non-tech areas like communication, collaboration, and compromise is where I’ve personally found the real effort takes place. Y’know, the human stuff.

This has got me thinking, too…stay tuned.

Pittsburgh

Bridges and roadways on the south side of Pittsburgh

As I said earlier, I love Pittsburgh, and I’ll now take whatever opportunities I can to get back here and explore.

Food

Oh I ate so much food when I was there. Tacos, burgers, Korean, coffee, coffee, beer, coffee, pizza, coffee:

The information street sign for Pizza Parma
A large Primanti Bros. Sandwich

Walking

Some street art (?) with cats and arrows
Me on the waterfront in a big hat in front of a bridge
A No Hate Any Time sign in Market Square

Socializing

Several attendees and speakers from Abstractions at Smallman Galley
Entirely too much sugar and dairy obtained in Pittsburgh

See you next year, Abstractions!

Escaped Chasm on Linux

Aug 19, 2019

As part of my Undertale stream I want to play Escaped Chasm and, before I drop to one of the old Windows 10 installs on one of my laptops, I want to see what’s involved in getting it running on Linux. Turns out it’s super easy and the answer to running it is not WINE, it’s Node.js:

tl;dr

# install node 10.0.0 or greater, i like nvm for this
nvm install 10
nvm use 10
cd <path to unzipped folder with Escaped Chasm.exe>
# install NW.js globally
npm i -g nw
cd www
# somewhere in the game a capital-F Fonts is used
# but we're on a case sensitive filesystem, so...
ln -sf fonts Fonts
cd ..

# run the game
nw .

(if you use this approach, install nvm.)

It looks like whatever version of RPG Maker Temmie used to export the game uses NW.js to make a cross-platform export (and exports the game code to JavaScript? I don’t know anything about RPG Maker code internals, maybe it’s all JS under the hood). This may even work for other non-Linux released RPG Maker games, though I haven’t tested. But I think if you see a package.json file and an nw.dll file in the root of the game, then it’s likely this method will work.

Godot Learning - Part 8

Aug 17, 2019

YSort!

Success! I got my player to walk behind the rabbit by placing both in a YSort:

But I have to make sure everything map-related goes into the YSort. My Exit Nodes were outside the YSort, so when I warped back into the larger first Map, I ended up in a weird spot. Also, moving all of the input logic to Main and pushing down events to Map and such is the way to go.

Next is making my TileMaps be the kind where the player can walk “behind” them.

Android Export

I got the game to export to Android, as I already had the Android environment installed for React Native and NativeScript-Vue compilation:

I hooked up a USB controller via an OTG cable and got the game to react to inputs, but, as expected, the YAML data didn’t work, so I’ll need to hook up a preflight script to covert YAML to JSON and use the JSON loader on Android, or just use JSON everywhere and run a watcher to convert YAML on-the-fly while I work.

Godot Learning - Part 7

Aug 15, 2019

YSort and 2d RPG games

I made a pixel art in Krita:

Then I put him in my game:

Then I walked behind him:

Oops.

My structure of the game looks like this, because I thought having Player outside of Map and not repeated in all the maps would make things easier:

But it should look like this, and I’ll have to do more management of Player within maps when maps change:

My idea of centralizing all player input to Main and pushing down movement events to Player may be the direction I go for restructuring this…stay tuned.

Godot Learning - Part 6

Aug 12, 2019

Odds and Ends

  class_name Kitten

  static func forCharacter(char):
    var kitten = new()
    kitten.setupCharacter(char)
    return kitten

Instead, load the file from res:// and run new from that. This is to get around multithreading issues it seems:

  class_name Kitten

  static func forCharacter(char):
    var kitten = load('res://classes/Kittens.gd').new()
    kitten.setupCharacter(char)
    return kitten
  const MOVES = [
    ["ui_down", "y", WALK_SPEED],
    ["ui_up", "y", -WALK_SPEED],
    ["ui_left", "x", -WALK_SPEED],
    ["ui_right", "x", +WALK_SPEED],
  ]

  func _process(delta):
    var vector = Vector2(0,0)
    for move in MOVES:
      if Input.is_action_pressed(move[0]):
        vector[move[1]] += move[2]

Making Pixel Art

Krita is my art tool of choice anyway, so let’s see what the Internets have to say about using it for stills and animations: