Approximating success one failure at a time

Monday, March 30, 2009

Make hideshow behave more like org-mode

I wanted to have hideshow.el work more like org-mode, so I spent a little time to whip up hideshow-org.el. It doesn't integrate hideshow and org-mode. It simply makes TAB do double duty in code, both performing the regular code indentation as normal, and showing and hiding code blocks. If your code needs to be indented, TAB will indent. If no indentation is needed, then TAB will try to toggle the visibility of the block. I put together a screencast to demonstrate what it does. The screencast quickly goes over org-mode, hideshow, and then demonstrates hideshow-org. If you're already familiar with org-mode or hideshow, I'd recommend skipping to the 2:30 mark which shows exactly what hideshow-org does.

The code is available on github here. Here is the agenda to make the links easier to get at. Feedback is most welcome.

Sunday, March 29, 2009

Love Demo at GDC

I went to GDC to see a demo of Love and the tools used to create it. Eskil Steenberg is the one-man team behind the game and the tools. I played with the tools the night before, so I was interested in seeing someone who knew what they were doing use them. The tools are something else. The tools are visually compelling, sparse, and bit foreboding owing to their entirely unique interface. Each tool is dedicated to one task, and they all interact real-time via the verse server. In a sense, they are an extension of the Unix philosophy of development with respect to small tools.

For the tools demo, Eskil brought up his game Love, and brought up Loq Airou, which is the 3D modeling tool. He approached an object in the game, and he found the geometry for it in Loq Airou. He then moved the object up in Loq Airou and the game showed the object move upward to a levitating position. It looked seamless. There wasn't any noticeable latency between the update in Loq Airou and the game. I expected there to be a beat where they were out of sync, but I didn't see that. He could scale, rotate, or twist the geometry and it was all immediately conveyed in the game. Eskil noted that by having this kind of direct access to the objects that are hosted in the world a host of problems become very easy to address.

After talking about the tools, Eskil talked about the game. He created a post in the game, just an upright post like a lamp post. He placed another post some distance and connected the two posts: A white and black stripped rail appeared hung between the posts, and Eskil jumped on and sled to the other post. This is part of the game's infrastructure. Players can create their own fast-access paths through the world.

Eskil then placed a mine on the ground. It had a built-in radio that he configured it to listen to a frequency and a keyword. He changed his chat to the same frequency. When he said the keyword, the mine created an explosion of colors. Then he showed how to convert that chat action into a button, and clicked it quickly and the mine exploded furiously. (This can be done with any chat action, so group coordinating efforts or things like "help" can be made into a button too.) Neat, I thought, but the next part really astounded me and opened my eyes as to what kind of game he was putting together. He placed a new item on the ground. It was a proximity sensor. He configured it to the same frequency as the mine and to emit the same keyword. Now, when he stepped on the sensor, the mine exploded (from a safe distance). He said that doors, gun turrets, and all manner of objects in Love have radios. Just think, one could build Star Trek-like doors in this game (a door with two proximity sensors would do it).

Next thing to show off was the mutable environments. On a small bridge, he grabbed the floor and extended one block of it upward, raising a pillar. He did this across the bridge, effectively making a wall. Then he cut into the wall, leaving a doorway. This reminded me of MUDs which are one of the few games that offered mutable environments, and for MUDs the task was easier because it was all text. Next Eskil walked up to a cliff face. Using the same tool he demoed to create the door, he just started cutting into the mountain. I immediately thought, this is Dwarf Fortress but in 3D with guns! I expect to see a lot of creativity expressed in this game.

I wish I had asked to see what the avatars look like. There is a screenshot that shows what may be a player character, but I am definitely excited by the prospect of getting to try Love. One of the things that Eskil emphasizes a lot is the creation of stories by the players rather than by the game developers, which I think is laudable. I don't know exactly how he intends to create that kind of social storytelling, but he will be limiting the servers to about 200 people, which is I think a good call. It may allow for social norms to be operative, and hopefully it will be small enough that the social circles of people will overlap. Thinking on it, Leeroy Jenkins is a great piece of player storytelling, and it's a rich piece of media. I hope that the players are given some storytelling tools that are richer than a chat client. Maybe a camera or even a video camera would be a welcome edition to multiplayer games (i.e., in game cameras and video cameras that capture what the player sees, not a webcam or anything). Before the raid on an AI's settlement, everybody turns on their video cameras in case there is a good story to share afterward.

Wednesday, March 25, 2009

weblogger.el v2.0

I worked with e-blog for a little bit, but the interface was a little rough around the edges. I had tried using weblogger.el initially, but it didn't work entirely correctly with Blogger. I supposed it was because Blogger had deprecated its XML-RPC interface for its GData interface. So I took some time to try and integrate GData support into weblogger.el. I based most of the XML wrangling off of e-blog's code. And I tried to streamline weblogger.el's configuration step, so that it relied mainly on emacs customization rather than an interactive configuration step.

I am going to spend some time using the code before I announce it on emacswiki, but so far it's looking pretty good. Here's what the interface looks like for the beginning of this entry that I am composing. (Yes, I want more "screenshots" for emacs applications. There are too few!)

Subject: weblogger.el v2.0
Keywords: emacs blog weblogger
Weblog: gnufool
--text follows this line--
I worked with e-blog for...

The code is available on github. I am anointing it version 2.0 because it probably has broken something. I still have a few ideas for what I'd like to see in the future, like Markdown integration, and perhaps a *Buffer List* like mode to look at all your blog entries.