Mobile Note To Self

I should come up with an easier way to post to this blog from my phone. Maybe write a small Shortcut? I haven't done much with Shortcuts, but this strikes me as a good use case. A share extension that pushes a text file onto the server and then invokes the publish script. It's simple and self-contained. Hm.



New Sites

I've added some information on the Projects and Games sites. The only one that's missing is the Photography site, but I need to write some CSS for that first. Soon.



A New Year

The holidays are officially over, the presents have been exchanged, the wrappings torn and thrown out, most of the food has been eaten, and it's January. For the first time in over 6 years I have no idea what my future looks like, professionally speaking, and I couldn't be more excited.

The possibilities are not endless (I'm not 20 and, uh, rich), but everything I want to accomplish is still possible. Actually, more accomplishable, since I now have over 6 years of experience working as a professional software developer (and sys/office admin).

Experience is a weird thing. There is no substitution for it, which sounds both corny and condescending. But it's also true! Experience can teach you a lot about your strengths and weaknesses, if you pay attention. I feel like a lot of people focus on the strength part and forget about the weaknesses. I'm not that person. I relish in the weaknesses. Knowing your weaknesses helps you focus.

I spend the first two years at my old job (still weird calling it that) mostly in sys/office admin land. Back then I thought I would enjoy the admin side of things as much as the coding side. After all, it is computer nerdery, right? Well, yeah. But it's a different kind of nerdery.

I can get by with setting up scripts and cleaning up Windows installs and all that kind of junk, but I'm just not that good at it. And I don't enjoy it. Which now, after a few years, I'm actually fine with. I don't have to like all parts of computers. I don't even have to know all parts of computers. It's way too much. I just need to know what's out there, so I can focus on what I want to do. What I'm good at. Once I had everything up and running and could focus on writing code and designing interfaces I was much happier. Once I figured out that I could work on games and I'm not completely shit at it (your mileage may vary), I was really happy.

Code and Design working hand in hand. The Steve Jobs spiel about the "Intersection of Technology and Liberal Arts". That's what I like. That's what I'm good at. That's what I want to do the next few years.

Anyway, that's a long-winded way of saying that I will die a happy person if I never have to fix a fucking printer again. Fuck printers.



Christmas Let Me Go

Hi.

So, let's do it quick and easy: I was let go from my job two days before Christmas. Yeah, I know. It's the perfect gift for someone like me and you're kicking yourself for not coming up with it. Short version: They just don't feel like they need a full-time software developer/sysadmin anymore, because computers are a fad? Maybe? My last official day is January 31, so I still have some time before I hit panic mode.

Anyway, if you know something, let me know. For the last six years I've been building internal tools for a medium-sized Taxi company (think Uber but, like, legal), first for iOS, and then for the web with Python! Apache! Django! CSS! Other cool buzzwords! I've also been working on a super top-secret website redesign, which will be officially unveiled very soon. ish. (Hi guys. You know who you are. Early January? 😬)



Internet Archive Vinyl Archive

The Internet Archive is a global treasure:

Unfortunately, many of these audio files were never translated into digital formats and are therefore locked in their physical recording. In order to prevent them from disappearing forever when the vinyl is broken, warped, or lost, the Internet Archive is digitizing these at-risk recordings so that they will remain accessible for future listeners.

Full Post.


Mystery Tease 03

cherry_pie_mystery_wip_04.png

It took me longer than expected to implement this. Obviously.

The reason being I wanted to make it somewhat flexible and to test out a few simple ideas without spending too much time overengineering it (I'm aware of the irony). I'm not 100% sure if I managed it, but here's what I came up with:

I have an abstract interface called InventoryProvider. Each Scene (read Level, Room, what have you) has an inventory, and each Player has one. Now, I'm not saying I'm making a game with multiple characters. But if I was, hypothetically, it would be very easy to add new ones with new abilities or change stuff around without disturbing existing ones. The interface looks something like this:

template <typename InvT>
class InventoryProvider {
public:
	virtual ~InventoryProvider() {};

	virtual bool select(Inventory<InvT>&, std::shared_ptr<InvT>&) = 0;
	virtual bool deselect() = 0;
	virtual bool take(Inventory<InvT>&, std::shared_ptr<InvT>) = 0;
	virtual void useSelectedWith(std::shared_ptr<InvT>&) = 0;
};

It outlines the most common tasks you'd want to accomplish in a point-and-click adventure; namely selecting items, picking them up, and using them with other items. The Inventory is essentially a wrapper around a std::array of game objects, with some added info for grid-based inventories:

constexpr uint32_t _slot_size = 10;

template <typename InvT>
class Inventory {
public:
	Inventory();
	void add(std::shared_ptr<InvT>);
	void remove(InvT);
	bool contains(std::shared_ptr<InvT>&);
private:
	struct Slot {
		float posX, posY;
		bool isFilled;
		std::shared_ptr<InvT> item;
	};

	std::array<Slot, _slot_size> slots;
	bool is_grid;
};

The Player or Scene inherits from InventoryProvider, implements the methods, and stores the data in a corresponding Inventory member. I check for clicks in the runloop and react according to the position of the clicked item.

Yes, using std::array this way limits the number of items I can have per scene, but that won't be a problem, since they're very tiny anyway. It make it much easier to work with grids, and that's more important to me than filling a scene with more stuff. Remember, I'm the only person working on this thing. I don't have the capacity to add thousands of items, so I get to make decisions like that.



Parser Update Incoming

When I set up this new site, I decided to do most of it myself, including the Markdown parser. I knew what kind of stuff I wanted to write about, so I took various shortcuts to get it done quickly, because I didn't want to lose interest and add to my pile of unfinished projects. Well, that has come around to bite me in the ass, and hard.

I wanted to post a new update on the mystery game I'm working on, and naturally include some code to illustrate what I was doing. Suffice it to say, that didn't go well. The layout was completely borked and now I have to spend time I could be spending on the game on a new and improved Markdown parser. Yes, I know that there are ready-made offerings, but I would like to do it myself. It's fun. I think.



Dark Mode Icons

I waited to upgrade my devices until 13.1 dropped and it's been fine so far. Nothing crashes, no weird bugs (except for that one thing where keyboard keys randomly appear in Springboard, but I've had that since 12), nothing slows down. I appreciate the small design tweaks. Overall a solid upgrade.

I have one little complaint, though: Developers should be able to set Dark Mode specific icons and Apple should make Dark Mode versions of their own icons. I think it's a glaring oversight that this is not there (yet?), especially since they've been so thoughtful about the implementation overall.



Apple Music Feature Request

I like Apple Music playlists a bunch, so I add them to my library all the time. Problem is, they're stored as a list in the sidebar. Which, uh, is suboptimal if you've added more than ten. What I want is to have a view where I can see the cover art. Basically, the album view, but for playlists. Also, a way to pin favorite lists to the top would be nice. That would be super, thanks.



Mystery Tease 02

Look at that, another mysterious image:

cherry_pie_mystery_wip_02.png

Granted, that doesn't look all that different from the one I posted a while ago, but it does mark progress. While the first tease was generated in code just to get it up and running, this one is generated from data, specifically JSON:

cherry_pie_mystery_wip_03.png

That means I can swap stuff in and out, change color, etc., without having to recompile every time. I'm using the excellent JSON For Modern C++ to parse the files on disk. It's super well documented, simple, and makes it feel as if JSON was a native type in C++. Plumbing, ftw.

I'm adding items next, so an upcoming tease will have grey boxes and probably some text. Exciting!



Thrice Upon A Time

Yes, I promised to write something more substantial about Once Upon a Time… in Hollywood. And I will. I just haven't found the time yet. For now, this will have to do:

  1. There are problems. They are mostly the same problem as with every other Tarantino film.
  2. Brad Pitt!
  3. The Spahn Ranch sequence is just perfect. Could be released as a short.
  4. I liked it so much I will probably see it two more times in the theater before the end of the month.


At The Movies

I'm about to head out to watch the new Quentin Tarantino movie. Two weeks late, because someone decided in their infinite wisdom that staggering a release by country is a thing you do in 2019. 😒

I'm pretty excited. I wanted to make a concerted effort to watch more movies in the theater this year, but I haven't managed to do it for various reasons. So this will be only the second original film I've seen in the theater this year. ( I've seen all the Marvel ones, natch.) The other one was Vox Lux, which I enjoyed.

I couldn't escape some of the negative reactions online. Yes, obviously there are problems with Tarantino movies. I will most likely write something about them tomorrow.

But tonight I'm going to the movies, get some popcorn, maybe a beer, and watch $90 million arthouse trash.

I think that's pretty cool.



Top 5 Moments In History

Okay, I've been thinking about this, and here they are: The Top 5 moments in all of history.

5. The Invention Of The Wheel. A biggie, right off the bat. What a moment. Gave us all kinds of stuff: e-scooters, the hamster wheel, you name it! What a moment. <br> 4. The Big Bang Boom! Bet all y'all had that 1, right? Yeah, it's the all-time first moment, buuuut, it's a bit flashy to be number 1, don't you think? <br> 3. Guttenberg As in Steve. <br> 2. Bacon. <br> 1. That time I found a fiver at 3am, went to Mackie D, got a cheeseburger and they put an extra slice of cheese on there. Fucking A.



Mystery Tease 01

I'm trying to get better at the whole self-promotion thing, so here's the first tease of something that might become a thing some time in the future.

cherry_pie_mystery_wip_01.png


N00Lyn3 Postmortem

I'm honestly not sure how to feel about this game, now that I've had a day or two to think about it.

On the one hand, it's the first game related thing I've finished from top to bottom in a while. It's pretty much the idea I came up with on Friday, which in itself is sort of weird for me. I usually tend to move farther and farther away from the initial concept as I develop games. This time everything just clicked.

On the other hand, it's a total departure from my current creative output. My stuff has become more abstract as time went on, and I'm pleased with that. I am much less interested in plot and mechanics; instead I care about mood and making people feel something (weird). This game has none of that. It's a purely mechanical exercise.

I feel good about the process, though. I've been noodling on an engine these past couple of weeks, and as a result, I felt much more secure in what I was doing. I didn't hit any big roadblocks and my frustration was kept to a minimum. Not that I didn't have any problems, but at no point did I feel that it was impossible to produce the game I wanted to make, which was a first.

That one problem with the Windows High DPI thing was messed up, though. I made a note to work around that in the future. (Honestly, my insistence to use non-standard aspect ratios is partly at fault here.) Also that whole "let's have a different main function just for Windows" is still bonkers.

I wrote in my shorter post that I might port this to the iPhone, and while the idea is still not 100% dead, it won't happen anytime soon. Again, the process felt good, so I think I will actually try to tackle one of my long gestating ideas now. No, not that one. It's something I haven't talked about yet. Or at the very least build some prototypes for it. See how far I can get it in, oh, let's say, six months. Then re-evaluate.

The journey is the destination and all that.