Welcome to johnbintz.com
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.
I’m only highlighting some of the talks, mainly the ones I took a lot of notes on or were particularly inspired from.
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?
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.
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
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:
- More webcam covers!
- Improved package delivery options/communication
- Unsubscribing from, like, everything that has my name on it that I don’t need
Building Accessiblity Together
A lot of the talk was about improving accessibility for all users, and there were two things that stuck out most:
- Use the correct HTML tag for the job. As an example,
atags should link to things, not open/close/etc. things. If your tag is the equivalent of
<a onclick="">and clicking it doesn’t take you somewhere else, time to use a different element.
- Give things real big interaction targets, much larger than the image itself (in this talk, it was the Open Search Bar magnifying glass icon), because even when you’re on a non-mobile device, why not make it easier for all your users to click on stuff in your UI?
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:
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
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.
As I said earlier, I love Pittsburgh, and I’ll now take whatever opportunities I can to get back here and explore.
Oh I ate so much food when I was there. Tacos, burgers, Korean, coffee, coffee, beer, coffee, pizza, coffee:
See you next year, Abstractions!
Escaped Chasm on Linux
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:
# 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
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
nw.dll file in the root of the game,
then it’s likely this method will work.
Godot Learning - Part 8
Success! I got my player to walk behind the rabbit by
placing both in a
But I have to make sure everything map-related goes
YSort. My Exit Nodes were outside the
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.
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
YSort and 2d RPG games
I made a pixel art in Krita:
Then I put him in my game:
Then I walked behind him:
My structure of the game looks like this, because I thought
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
Player within maps when maps change:
My idea of centralizing all player input to
pushing down movement events to
Player may be the direction
I go for restructuring this…stay tuned.
Godot Learning - Part 6
Odds and Ends
- If you want to make a factory class method, you can’t use
newin a static method:
class_name Kitten static func forCharacter(char): var kitten = new() kitten.setupCharacter(char) return kitten
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
- I hate making up/down/left/right
ifblocks for movement:
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): vector[move] += move
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:
- The newest video I could find
- Modern Krita comes with a Pixel Art brush to align the pointer with the grid
- Fill Bucket
- Threshold 1, Grow Selection 0, Feathering 0
- Disable Antialiasing on selecton tools
- Subwindows for new views
- Nearest Neighbor
- Use wraparound (
w) for tiling backgrounds
- Use Alpha Lock to make shading easier
- Emulate antialiasing to make transitions between colors smoother
- I need to get better about mirroring the canvas to check symmetry…