Monday, November 21, 2016

Research on Javascript Game libraries

My kids are getting to be the age I was when I started programming.

Because one of them has looked in to Javascript programming on Khan Academy in the past, I've decided to do some research on Javascript game libraries.

As a fan of Roguelike games, rot.js needs to be mentioned. It's also pure Javascript and BSD-licensed, so it may be possible to integrate some of it with something else.

So... GitHub makes it really easy to see the popular Javascript Game Frameworks.

There's also a site dedicated to HTML5 game engines, which lists popular frameworks not present on GitHub.

And, lastly, but probably the most generally useful, the Mozilla Developer Network has a considerable section devoted to games, game frameworks/engines, as well as referenced to various tools to support publishing your JS/HTML5 game as an app that can be installed/played on phones/tablets.

It is important to note that in both the two lists of game engines/frameworks the Phaser came out on top or very near the top. Also, the Mozilla page has three game examples: one written in pure Javascript, and the other two written with Phaser.

If I were to pick a framework off-hand, I'd probably pick Phaser.

Since the project is primarily for my kids, I wound up searching for "game creators for kids" and wound up looking at a post on Common Sense Media about game design and kids. That pointed me at Roblox, which -- honestly -- may be about the limits of their interest for now. The MMO with paid membership thing maps directly to what one of my kids has been obsessed with for some time.

Gamefroot looks potentially interesting, but Roblox claims to support Amazon devices, while Gamefroot only supports iPhones. Considering my kids have Amazon devices and not iPhones, that definitely tips things in favor of Roblox. (And Gamefroot, honestly, seems to have some load issues which would be frustrating for them.)

Monday, August 29, 2016

On a Gender-Neutral "Mister"

I don't understand something.

The feminine form of Doctor is Doctress. It's not used anymore and spellcheck in my browser doesn't even recognize it. It's kind of sexist and implies that a female Doctor is somehow different from a male Doctor.

And yet, the feminine form of Mister is Mistress. It is still used, but is so over-sexualized that you don't find it as an option of official forms and such. It is, however, equivalent, as a Mistress is independent and can make her own mind up about anything and everything. She is neither dependent upon her father -- like a Miss -- nor her husband -- like a Mrs.

Why have we not moved toward a gender-neutral Mister? If it were gender-neutral, it would also meet the needs of the folks who would otherwise like a non-gendered title. (A group that is frequently subject to push-back and prejudice.)

Making it gender-neutral also bypasses all the old-farts who would refuse to add a new title to their official forms by using a title they already have.

Friday, May 20, 2016

Ten Years Ago: Where would I like to see myself in 10 years?

It feels like fairly recently that I was complaining that I couldn't clearly see what the future held in store for me. Well, this is something I wrote 10 years ago, thinking about the future and how I could achieve what I wanted.

Where would I like to see myself in 10 years?

I would like to be a contract programmer. I'd work 3 months to a year at various locations in the area. There would be two weeks to a month between contracts in which I didn't need to worry about money or jobs. Most jobs would require a commute of at least 30 minutes, while some would require an hour. There may be some smaller jobs (3 month) requiring a commute of up to 1 hour 30 minutes. I would do some independent work on the side.

[Note: This was written before I got my job at my current employer -- 10 years ago this August.]

Career skills: [redacted]


I would like to continue to be happily married. Within 10 years, I expect to have children, or have decided to either not have children or to adopt. I would like to have the time to spend with my family and wife. I would also like to have time to share some of my projects with my kin.

I would like to reconnect with my spirituality. I would like to find a group of people also interested in my particular varient of polytheism. I would like to comfortably grow in to my spiritual path, and in so doing grow further as a person. 

Option 1.

I can see myself reaching a [redacted] position and then stagnating. My skills will slowly lose value with relationship to what is in demand, and then if I lose my job, I won't be able to find further work in the field. This could happen within 10 years, and if so, I will wind up back as a cashier in a department store. 

Career skills: [redacted] 

Projects: None

I see myself getting stupider and meaner. There is a chance I'll develop a dependency problem on alcohol in an effort to make life more livable. I will hate the person I've become, and that self-hatred will be reflected in my relationships. If I am still married, it will be an unhappy marriage. If I am unmarried I will have so thoroughly lost sight of who I once was, that I will continue to follow in the established downward spiral. If I have children, they will hate me almost as much as I hate myself.

My desire for spiritual growth will have devolved in to a vague loathing of all religions. I will be able to remember that I was once a polytheist, but I will be unable to reconnect spiritually.

Option 2.

I can see myself reaching a [redacted] position and then stagnating. As my skills slowly lose value, my personal relationships continue to deteriorate. Eventually, I can't take living with the person I'm becoming. I pick up some hobbies, and I enhance my skill set. I never reach a point where I telecommute, but I find steady contented employment until I retire.

Career skills: [redacted]

Projects: STEW: Python, X11 UIs, Ncurses

[STEW was my last big project before I switched to writing and music.]


I feel that this is more likely to happen after divorce. It is equally possible that both the divorce and the loss of a job could happen concurrently. This would be a call to re-prioritize my life, to reevaluate where I am headed, and to reconnect with who I am as a person. If I have children, I will be lucky if the divorce happens before my relationship with them is irreparably harmed, as I will be significantly better at being a father afterwards. I will have friends, and spend time with them, though I will explicitly avoid romantic relationships. 

I will fearlessly pursue my spirituality, knowing that it doesn't matter if I become too divergent from the culture at large to find another relationship. It will be primarily a personal path, as I will be uncomfortable with spiritual intimacy with another person. I may write a book and speak at various pagan conferences, either of which would allow my beliefs a wider audience. 

And that's it. No other options listed.

So, ten years ago, I predicted that without personal projects I would wither away in to a shallow husk that hated the world.

I also saw a future with personal projects and happiness post-divorce. 

Sure, my projects have changed, and I'm happily employed full-time (though I have recently re-considered contract work as a way to supplement my income) but there's some real truth in this.

Saturday, August 9, 2014

Politics website idea

I have an idea for a politics-related website. It simplifies the issue of special interests in to one of trust.

Citizens rate special interests in order of trust.
Special interests have opinions on issues. They can either support, oppose or have no opinion on issues.

Issues are defined as legislation or concrete potential legislation. Abstract issues are off the table.

Ideally, the special interests should have web pages specifically targeting legislation, so their opinion on it is clear and well articulated. The site would only support a link to the organization's page on the issue.

Citizens can see the issues they support by proxy, but do not directly have opinions on issues. They can also see how politicians favor their special interests.

Politicians can see the overall trust for special interests and know when they're taking money from a group that's out of favor with their constituency.

A citizen's opinion on an issue is provided for them by their special interests, walking the list of special interests from the most-trusted to the least-trusted until one of them has an opinion on the issue. This proxied opinion on issues is also related to politicians.

It is basically a simplification of the petition-modal. If I support organization A, the only reason I wouldn't sign a petition they send me is because it conflicts with organization B that I favor over them.

Sunday, April 6, 2014

thoughts on a music feed aggregator

I've been toying with some ideas on music aggregation.

The problem: I don't listen to music I can't share with my children without fear of violating copyright. This means I listen to a lot of CC licensed music, a lot of music contest websites, and a lot of very independent one-person bands.

I've been thinking that the music aggregator should support distributed operation, so in addition to consuming media feeds that others produce, it must be able to consume its own output.

With that, a lot of normal product assumptions regarding music consumption are destroyed.

Use-Case: When downloading tracks from a contest website some/all of the metadata embedded in the tracks may be less valid than either the metadata from the feed it is found in or the metadata available in the HTML page it is sourced from.

Use-Case: Artist uploads track for contest and uses same track for their album. The music data is the same, but the metadata is changed.

Use-Case: Artist evolves their name over time without having any clear breaks. (Example: "ADD Music" becomes "ADD" later on.)

Use-Case: Artist uploads the track and changes the name of the album before it is finished and officially released.

I've been looking at playlist formats as the basis the information exchange format. A lot of them are light on the metadata.

Something like the format used by MusicBrainz might seem ideal. It's a self-contained format dedicated to distributing music metadata... the problem, however, is that every entity (be it artist, album, track, etc) has a GUID assigned by MusicBrainz. Moreover, while MusicBrainz reliably gets finished releases (even electronic ones via BandCamp), they don't seem particularly designed for demos and ad hoc music contests... so it becomes a format that should be supported in the future, but not one suitable for the primary interchange format. (Though there do appear to be Python bindings.)

Use-Case: Artist picked a well-established name, not realizing it was already taken. The two bands/artists have the same name, but are wildly different.

Use-Case: There are a lot of duplicated album names with different Album Artists. (The simple "Compilation Flag" of iTunes breaks.) This can be done on purpose as an homage to another artist, or an accident.

Use-Case: The fantastic Song Fight! contest uses the same song title for all contributed songs in the current contest. Anything expecting a song title alone to be meaningful is broken.

I had previously seen the page mentioning Playlists on Wikipedia. It was revisiting this that I saw references to SMIL.

I also ran across a comparison of various playlist formats. The context of this data was specifically remote playlists, so it was the sort of thing I was looking for, but old data. It was missing XSPF. It covered the idea of using a metadata-heavy markup and hijacking it for playlist purposes. I'll get back to that.

It (and links related to it) indicated that SMIL was once considered an attractive format for remote playlists. While tracking down a lead from SMIL research, I found the Playr bookmarklets and references to the service previously supporting SMIL. At this point, I found that perhaps SMIL isn't really a favorite any longer. XSPF, however, is available directly, and is used by the (open-source) Flash player.

Regarding SMIL, the possibilities for doing karaoke with SMIL look really nice. In fact, integrating a video with a presentation sort of thing looks straight-forward. I did a little investigation, and while complete support for SMIL is somewhat rare, there appear to be a ton of applications that support DAISY Talking Books, which is a subset of SMIL. To that end, I've installed Obi, an application to easily create them. (A good test-case for this is Josh Woodard's music, as he makes vocal, instrumental, and lyrics available for all his stuff.) Not a high priority, but it periodically comes up.

The idea of the metadata-heavy markup, led to the Dublin Core Metadata Initiative, the Music Ontology (and Omras2), OWL, and LinkedDataTools. Bonus: Since I'm all about CC licensed music, the license can be encoded in the documents using CC REL.

Of course, I reminded myself why RSS stinks and why Atom 1.0 is the way to go, syndication-wise. I looked at django-planet as a source of ideas for how to get started.

That's basically my brain-dump for now.

Monday, August 27, 2012

Asynchronous Roguelike idea

I was on a Roguelike forum and the topic turned to multiplayer games and whether they would be possible for a Roguelike. I posited that it was possible, and that you would want to retain the turn-based structure as much as possible. (While others talked about real-time games which are, in my opinion, not like Roguelike games at all.)

Anyway, during the discussion, I described an interaction mechanic that would scale out to asynchronous multiplayer while having turn-based combat. (I describe it in my second section below.)

More importantly, it's a mechanic that's testable in a small single-person game -- fit for a 7DRL.

[question about multiplayer roguelike and some initial discussion]

Personally, when I think "multiplayer roguelike" I don't think of an MMO. (Probably because I hate MMOs.)

My first thought is multiplayer like Civalization. It's turn-based. While each unit has few choices, each player controls a lot of units at the end.

So: a small group of friends play together.

Now consider: there is no actual requirement to keep the turns in sync across all players except when they're within line-of-sight. If I can't see you the difference of you going one turn or 10 to my one turn is meaningless.

So, when players are within line-of-sight, they need to wait for the other players to finish their turns. Talking to each other is still a free action, of course.

Next, more squelching of boring things.

If the group is moving as a unit, one player is given control and everybody moves as a single unit until enemies are encountered. This is simply squelching manual follow commands.

If a player is on auto-explore, their next command is handled automatically by the system so there is zero delay. If every one in the party is on auto-explore together, they should fan out, explore the map, then converge on the first monster found. (Given that talking is free and the first thing a person in their party would do is say, "Hey, there's something I need help with over here!")

So, yeah... the only time you should be waiting for other players is when you're near each other and monsters are around -- or you're near each other and playing non-cooperatively.

Then again, I see multiplayer as an extension of single-player multiple-character. We see those sorts of games in RPGs all the time, but they're rare with roguelikes.

[someone commented that it ruined causality]

It only ruins causality if you assume that one turn for player 1 is the same amount of game-time as player 2.

I'm saying that implication is flawed. One turn for me is not the same as one turn for you. Turns != Time.

If I'm not in the room with the other player, they could be in the middle of a Rest 1000 cycle. My character could be in the middle of a Rest 1000 cycle. It shouldn't matter.

Of course, it couldn't just be line-of-sight of other players, it needs to be line-of-sight of players or monsters that can see said player.

What it does do is ruin the possibility of having any concept of "game time" so any mechanic which relies on such a concept should really opt for something else -- like having the concept of time be tied to average player level.

Anyone who thinks you can't do real small-scale turn-based multiplayer has clearly never played Civilization with human opponents. Get yourself a copy of Freeciv (Mac, Linux, Windows) find yourself some friends and give it a go. By default it's true turn-based and if someone goes for tea, you're stuck waiting. (Though current versions of FreeCiv support 126 concurrent players, that is clearly overkill.)

With Civilization each player makes decisions at the same time. If you finish your turns at the same time there is no waiting for the other player. This approach should work for a Roguelike.

However, it's better if you only need to do this with the line-of-sight limitation I originally mentioned. If I'm playing with someone and that person needs to rest for 200 turns to heal and restore mana, I don't want to be on my own for that time. It's better if I just leave the room and when they come out they're all rested. (Though this has so many repercussions that I think the "rest to recover" logic needs dropped.)

As far as NPCs -- both friend and foe -- there would be two types: those that are only awake when in line-of-sight of players, and those that are like the players and can mysteriously know where the player is at and suddenly be within line-of-sight.

Being turn-based (even the variant where players do not take turns) should give you very much the same feel as a traditional Roguelike.

Being line-of-sight+turn-based would be a different sort of game. It requires a different concept of time.

The thing is... it's testable within the confines of a 7DRL. Not even multiplayer, as a simple single-player game. It breaks the simple "player goes" / "computer goes" logic that frequently drives simple Roguelikes. Will it feel all that different, though?

More importantly, will it feel more or less like a Roguelike when compared with a real-time game?

Sunday, August 26, 2012

Blacken Java Library update

So, when I put Blacken to the side, I had posted code, but I was unhappy with it and I was feeling pretty down with the whole thing overall.

Not so anymore. I ran across someone speaking relatively highly about it. It encouraged me to fix it. I have someone developing it with me now. I have other people writing games using it.

Next month we release Blacken 1.1. It stomps all over the 1.0 release.

I'm planning to start writing an in-depth "Developing a Roguelike Game with Blacken" tutorial after the release.

(I'm putting aside NaNoWriMo this year to work on it. I've loved NaNoWriMo, but I need to finish the first pass of big edits to my first book and... well, so far it hasn't happened. I am committed that my next NaNoWriMo related task will be to replan and rewrite my first book. It'll be mostly a rewrite, but the bones are good. I'll be keeping the good things.)

So, yeah... major changes in priorities, but these things happen periodically. As they say, "Life is change."

This actually marks the second year with a Blacken release, as I released it to the community about a year ago next month. I actually expect 2012 to see a second release, as well, as I'm planning 1.2 to be a release to fix the nits that crop up while writing the tutorial.