Here’s another idea for a video game.

The theme of the game is “be consistent”. It's a minimalist-styled 2D platformer. The core mechanic is that whatever you do the first time, the game makes it so that that was the right action. Examples of how this could work:

  • At the start, you're standing at the center of a 2×2 checkerboard of background colors (plus appropriate greebles, not perfect squares). Say the top left and bottom right is darkish and the other quadrants are lightish. If you move left, then the darkish stuff is sky, the lightish stuff is ground, and the level extends to the left. If you move right, the darkish stuff is ground, and the level extends to the right.

  • The first time you need to jump, if you press W or up then that's the jump key, or if you press the space bar then that's the jump key. The other key does something else. (This might interact poorly with an initial “push all the keys to see what they do”, though.)

  • You meet a floaty pointy thing. If you walk into it, it turns out to be a pickup. If you shoot it or jump on it, it turns out to be an enemy.
  • If you jump in the little pool of water, the game has underwater sections or secrets. If you jump over the little pool, water is deadly.

(I could say some meta-commentary about how I haven't been blogging much and I've made a resolution to get back to it and it'll be good for me and so on, but I think I've done that too many times already, so let's get right to the actual thing...)

When I wrote Cubes (a browser-based “Minecraft-like”), one of the components I built was a facility for key-bindings — that is, allowing the user to choose which keys (or mouse buttons, or gamepad buttons) to assign to which functions (move left, fly up, place block, etc.) and then generically handling calling the right functions when the event occurs.

Now, I want to use that in some other programs. But in order for it to exist as a separate library, it needs a name. I have failed to think of any good ones for months. Suggestions wanted.

Preferably, the name should hint at that it supports the gamepad API as well as keyboard and mouse. It should not end in “.js” because cliche. Also for reference, the other library that arose out of Cubes development I named Measviz (which I chose as a portmanteau and for having almost zero existing usage according to web searches).

(The working draft name is web-input-mapper, which is fairly descriptive but also thoroughly clunky.)

I’ve uploaded almost all of my published Git repositories (previously hosted on a git-only server on on, which is down at the moment) to my account on GitHub. Please update your remote URLs if you have any git clones.

The motivation for this change is simply that GitHub offers better visibility — an automatic web presence for each project, including viewing repository contents. I am not intending to depend on GitHub’s continued existence, of course; I still have local copies of each project, and additionally I plan to arrange so automatically mirrors my GitHub repositories.

What I've just uploaded to GitHub also includes a project which I have not previously mentioned, timeline-ui:

A user interface experiment. Multiple types of time-series data, variously static/interactive, historical/future, etc. are displayed in a single view. (This was an idea I had floating around and which I used in 2010 for a class project; there is a lot more that could be done with it.) Written in Java.

I was going to write more about the concept, but I never got around to it; this will have to do.

List of projects just moved to GitHub:

In September, I wrote of my new project Cubes that “unfortunately, it wasn't an idea for either of my course projects this semester.” Since I have completely failed to find motivation for the course-related project I had planned to do, þreader (a thread-emphasizing feed reader; you can read the project introduction), I have decided to make the best of it and somehow make Cubes into the needed project.

I will therefore be using Cubes as my project for the course CS459 Human-Computer Interaction; the main consequence of this is that I need to actually study the potential users of my system.

So. To recap, Cubes is a block game (like Minecraft) where the blocks are made out of blocks; in principle, you should be able to build a complete custom block game from scratch simply by building the appropriate block-set, out of blocks. If you're a potential user of a game like this, and interested in giving me data (surveys, interviews, etc.), let me know. I will have something for you within the next few days.

Also, the live version of Cubes now supports load/save (either to Local Storage or by cut-and-paste of text (!)), so you can save your work! (I don't promise not to change the world format incompatibly, though.)

(no subject)

Friday, June 17th, 2011 09:42

Something I still miss from the ORCA development shell for the Apple IIgs (at least, I think that's where it was) is the option to interpret a command name which is directory as a command to change to that directory; essentially letting you omit “cd ”.

I've found a useful configuration option for if you're using Ubuntu on a Windows-layout keyboard and you're used to Apple's keyboards and ⌘ (Command)-shortcuts:

System → Preferences → Keyboard → Layouts → Options… → Alt/Win key behavior → Control is mapped to Alt keys, Alt is mapped to Win keys

With this option enabled, the Alt keys (in the Mac ⌘ position on the keyboard) function as Control keys, and the Windows keys (in the Mac Alt/Option position) function as Alt.

Having just discovered this, I find it quite handy for the years of muscle memory of ⌘W and other such shortcuts. (No, I haven't switched to Ubuntu; I just frequently find myself using it for software compatibility testing and so on.)

I find Dasher an interesting input method, and after getting my Android phone I thought it would be nice to try Dasher on it. However, at the time there was no Dasher port or any information on the Web about the possibility, so I looked into writing one. I found several dead projects and miscellaneous repositories and eventually found that the main Dasher repository had a Java port of Dasher. I dabbled in getting it to run on Android, but before I got anywhere I found Dasher was now in the Android Market, though there was still no discussion/announcement/public project info.

I shall now dump the links I collected while I was working on this project, so as to make the matter of Dasher and Java better-indexed. Unfortunately, I don't recall the significance of all of them.

The Dasher port that's currently in the Market is pretty solid. It has a variety of options for input (touch, trackball, tilt); the main thing it's missing is independent control of the X/Y sensitivity of the tilt control.

Yesterday I tried the Android Bluetooth keyboard driver “BlueKeyboard JP” (Market link) again, and got it to work with my Palm Bluetooth Keyboard. The catch is/was that it will only connect to the keyboard if it's discoverable, not if the keyboard is just trying to connect. Once connected, though, it works fine for all ASCII input, though the Shift key acts sticky if not pressed in combination with another key.

Special functions: The arrow keys and Enter act like the phone trackball, throughout the phone (not just in text fields) (update: but not in the menu-button menu!). The keyboard's marked [Fn][`] = [Esc] works as Back and the [Cmd] key works as Menu; I haven't found any other hard-button shortcuts (home/search/camera/volume etc). (The driver's web page is all in Japanese, and I haven't found an English manual, though the settings screen on the phone has English.)

Update 2010-08-27:

Unsurprisingly from the name, this driver is also a Japanese input method; after several times accidentally shifting into Japanese mode I have determined that the toggle for this is [Shift][Space].

[Fn]<number> combinations (which are probably this keyboard's emulation of hard F-keys) have the following functions. No other [Fn] combination that I tried, including other numbers, produced noticeable results, but I may not have been in the right context to see an effect.

[Fn][7] Music: Previous track
[Fn][8] Music: Play/pause
[Fn][9] Music: Next track
[Fn][_-] Volume down
[Fn][=+] Volume up

Things that don't work: The Caps Lock key (but the Shift key acts as does the Android soft keyboard's shift (pressing twice locks)). The forward delete (Del) key. Unsurprisingly, the keyboard's onscreen battery level indicator shortcut — it types garbage — but the keyboard does have a hardware low-battery light.

(End update)

When in use, there is an AdMob ad bar at the bottom of the screen (where a soft keyboard would be). There is a paid version on the Market, but one reviewer said that it just displays the company's own ads instead — which seems odd.

I'm tempted to look into writing a keyboard driver myself, for the sake of having proper reconnection behavior and non-ASCII characters, but for now this seems good enough and there are other things to worry about (e.g. notepad software; Fliq Notes syncs with my existing desktop notes but lacks some features compared to the PalmOS app).

  • A remarkable feature: “Settings → About phone → Battery use” claims to give a breakdown of energy use over the last period the phone was unplugged. It distinguishes between “Display”, “Cell standby”, “Android System”, and applications. Don't know how accurate it is.

  • Bluetooth keyboard driver experiences:

    • “BlueInput” by Teksoft does not work correctly for my Palm Bluetooth Keyboard; as others have reported, some punctuation keys do not work at all (and Shift-2 generates ", making me think that it was written for a different keyboard layout and not tested with US QWERTY).
    • “BlueKeyboard JP” failed to connect to my keyboard — or rather, it immediately says “disconnected”. Also, the install permissions info says it reads GPS location, which makes no sense unless this is one of those ad-supported things, but it doesn't say that and I don’t remember whether it did show ads. Update: It works, but the keyboard must be discoverable. And it is ad-supported.

    So I still don't have a keyboard driver. Perhaps I should look into writing one.

  • I need to learn about how file/application associations work so I can figure out who is at fault (file browser or viewer app) in my failing to open PDF and epub documents stashed on the SD card.

  • USB connection is done right: plugging into a computer does not interrupt usage at all, and if you want to mount the SD card then that's an easily-reached option; neither mandatory nor buried. (Well, it didn't; since system updates it now pops up the do-you-want-to-mount screen immediately, which you have to exit to continue with your previous activity.)

  • The force-Google-Account-to-Gmail thing became considerably less annoying once it occurred to me to find out that it let me change the From address of mail sent from the Gmail account. So my external identity is still, except in Google apps.

  • Nice bit of polish: “A system update has been downloaded, but your battery is too low to install it. Connect to charger first.” (phrasing from memory.)

I'm considering writing up a document like the Gadget Coverage List but with an emphasis on features × how to get them on Android rather than features × gadgets — so it would be a recommended apps list, among other things.

Nexus One notes

Monday, June 14th, 2010 22:22

Did buy a Nexus One; have now had it for an hour or so. The following is not a review, but some observations:

  • It will work without a SIM card from the start. So if you want a gratuitously expensive wifi PDA...
  • The Google Account-based functionality (e.g. application Market, contacts sync) requires a Gmail account — and any Google Account with Gmail necessarily has the Gmail address as its primary email address. (Since Gmail lets you forward to another address, this doesn't matter unless you use Google services that send mail on your behalf, such as calendar invites.) I haven't tested whether they will still work if you then remove Gmail (but I would note that if it's possible at all, having a Wave account might help, since that seems to allocate a no-@-sign 'username' in the same way Gmail does).
  • Not perfect, but mighty slick. Need to stop playing around and get some sleep.

My Palm TX is noticeably wearing out (power button dead and worked around, cover hinge fraying, direction pad starting to go) and doesn't have a decent modern web browser. I might have gotten a Palm Pre by now if it weren't for the lack of full-size external (Bluetooth) keyboard support (notetaking is one of the major use cases) — though I hear there might be an SDK coming out which would let third parties build one. (Lesser issues are the cost of a phone contract (though Internet-anywhere makes that have a good bit of value) and the battery life.) I get the impression that I should be looking at the Nokia N900 or one of its relatives, but I haven't gotten around to investigating that.

My additional requirements for a New PDA are that it sync calendars/todos with iCal, sync the abovementioned notes to my Mac (I don't care what software), fit in my shirt pocket, and have mostly-not-locked-down-and-expensive software development/installation (so that customized/open-source/the-obscure-niche-I-happen-to-need software can happen).

(Apple mobile products fail on the openness criterion and either Bluetooth keyboard (iPhone/iPod touch) or fitting in the shirt pocket (iPad).)

Has anyone invented a common protocol for, in a desktop environment, updating status (available/away/do-not-disturb and “what I'm doing” and so on) in social applications? I have 5 different such applications (iChat, Colloquy, Skype, MudWalker, Steam), and I usually don't bother to update all of them since it's too much trouble to do regularly. Is there some protocol that, say, the Linux-on-the-desktop folks have invented for having just one widget to inform everything?

[edit] Clarification: I mention Linux-on-the-desktop just because I don't know much aboutit and there seems to be some innovation from that direction in this kind of area. The desktop in question is Mac OS X; I'm expecting to have to write the software myself; I just want to not reinvent the wheel with regard to protocol.