Notice: Undefined property: stdClass::$theme in /usr/local/src/drupal-5.1/includes/ on line 45
XML | Don Hopkins


warning: Creating default object from empty value in /usr/local/src/drupal-5.1/modules/taxonomy/taxonomy.module on line 1364.

FauxCast on Freedom: SimFaux as Open Source Software

Somebody asked me about SimFaux:

This is pretty funny as it stands, but can it parody things Libs don't like to talk about like Dem politicos that flipflop every other speech, or Lib talking heads that forge news on the fly?

Of course SimFaux can parody liberals as well as conservatives, but the fact of the matter is that it's the conservatives who are fucking up the country right now and sending kids to die. The liberals are powerless and aren't the ones to blame for the horrible calamity that Bush has caused. So it's important to call the people who are causing the death and suffering on their lies.

The conservatives had their chance with Clinton's blow job, and they totally blew it with their self rightious indignation over harmless consentual sex. Talk about flip-flops: Where is the furious anger and relentless calls for impeachment now?

It's high time to impeach Bush for going to war based on lies and deception, sending thousands of Americans to their death, killing hundreds of thousands of Iraqis, leaking classified information about a CIA employee out of revenge for her husband telling the truth, breaking the law and subverting the constitution by spying on American citizens, his miserable failure with Hurricaine Katrina, his deep shameless corruption with Haliburton and Abramoff, etc. If you think none of that is any worse than a blow job, then you're a part of the problem.

I just started programming SimFaux at the beginning of this month, and the HuffingtonPost Contagious Festival has a 15 meg limit on size. But after the festival concludes, I'll host it on my own web site without any size limitations, put up a whole lot more content like characters, sound bites and videos, and release the source code as Open Source Software so you can modify it and put your own stuff in. But right now I have to cut it to the bone to stay within the 15 meg limit.

"FauxCasting" is a cinematic leap beyond podcasting and blogging, because it integrates keyword tagged text, video, sound bites, simulated characters and interactive widgets together in a way that the viewer has control over what they see and hear. You can experienced the joy of telling Bill O'Reilly to Shut Up and Go Away! The keyword tagging enables the characters and videos to interact with each other, and results in surprizing juxtapositionings, like Frank Zappa and Dick Cheney finding common ground by using the same cuss word that begins with F.

I'm inspired by ideas like Will Wright's "Designing for Emergent Behavior" and Chris Trottier's "Tuned Emergence" and "Design by Accretion", where the more content you put in, and the better you tune it, the closer you get to a nuclear reaction.

Sims Designer Chris Trottier on Tuned Emergence and Design by Accretion

"If a game isn't tuned, it's a drag, and you can't stand to play it for an hour. The Sims and SimCity were "designed by accretion": incrementally assembled together out of "a mass of separate components", like a planet forming out of a cloud of dust orbiting around star. They had to reach critical mass first, before they could even start down the road towards "Tuned Emergence", like life finally taking hold on the planet surface. Even then, they weren't fun until they were carefully tuned just before they shipped, like the renaissance of civilization suddenly developing science and technology. Before it was properly tuned, The Sims was called "the toilet game", for the obvious reason that there wasn't much else to do!"

I will soon release the source code and content of SimFaux as Open Source Software, so you can see how it works, create your own characters, sound bites, video clips, talking points, surveys, games, etc. If you want to do that yourself, you should become familiar with XML, and you should start learning OpenLaszlo, which is the free Open Source XML/JavaScript based language it's written in.

Here's another more down-to-earth example of what you can do with OpenLaszlo:

Have fun!

Maximizing Composability and Relax NG Trivia

Here's some interesting stuff about the design and development of Relax NG:

James Clark wrote about maximizing composability:

First, a little digression. In general, I have made it a design principle in TREX to maximize "composability". It's a little bit hard to describe. The idea is that a language provides a number of different kinds of atomic thing, and a number different ways to compose new things out of other things. Maximizing composability means minimizing restrictions on which ways to compose things can be applied to which kinds of thing. Maximizing composability tends to improve the ratio between functionality on the one hand and simplicity/ease of use/ease of learning on the other.

Clark describes the derivative algorithm's lazy approach to automaton construction:

I don't agree that <interleave> makes automation-based implementations impossible; it just means you have to construct automatons lazily. (In fact, you can view the "derivative"-based approach in JTREX as lazily constructing a kind of automaton where states are represented by a canonical representative of the patterns that match the remaining input.)

The Relax NG derivative algorithm is implemented in a few hundred elegent declarative functional lines of Haskel, and also in tens of thousands of lines and hundreds of classes of highly abstract complex Java code.

Clark's Java implementation of Relax NG is called "jing", which is a Thai word meaning truthful, real, serious, no-nonsense, and ending with "ng".

Comparing the Java and Haskell implementations of Relax NG illustrates what a wicked cool and powerful language Haskell really is. The Java code must explicitly model and simulate many Haskel features like first order functions, memoization, pattern matching, partial evaluation, lazy evaluation, declarative programming, and functional programming. That requires many abstract interfaces,, concrete classes and brittle lines of code.

While the Java code is quite brittle and verbose, the Haskell code is extremely flexible and concise. Haskell is an excellent design language, a vehicle for exploring complex problem spaces, designing and testing ingenious solutions, performing practical experiments, weighing trade-offs, and writing succinct, elegant, mathematically rigorous specifications that actually work. Haskell code is useful as a blueprint for implementations in less luxurious languages like Java.

Relax NG: Design-by-Inspired-Individuals vs. Design-by-Committee

In The State of XML, Edd Dumbill explains the secret behind the success of Relax NG:

Incidentally the RELAX NG success can equally well be framed as a case of design-by-inspired-individuals vs. design-by-committee as much as it can be seen as a OASIS vs. W3C thing.

Relax NG Compact Syntax: no to operator precedence, yes to annotations!

James Clark is a fucking genius! He’s the guy who wrote the Expat XML parser, works on Relax NG, and does tons of other important stuff. Relax NG is an ingeniously designed, elegant XML schema language based on regular expressions, which also has a compact, convenient non-xml syntax.

I totally respect the way he throws down the gauntlet on operator precedence (take that you Perl and C++ weenies!):

There is no notion of operator precedence. It is an error for patterns to combine the |, &, , and - operators without using parentheses to make the grouping explicit. For example, foo | bar, baz is not allowed; instead, either (foo | bar), baz or foo | (bar, baz) must be used. A similar restriction applies to name classes and the use of the | and - operators. These restrictions are not expressed in the above EBNF but they are made explicit in the BNF in Section 1.

You can translate back and forth between Relax NG's XML and compact syntaxes with full fidelity, without losing any important information. Relax NG supports annotating the grammar with standard and custom namespaces, so you can add standard extensions and extra user defined meta-data to the grammar. That's useful for many applications like user interface generators, programming tools, editors, compilers, data binding, serialization, documentation, etc.

Here's an interesting example of a complex Relax NG application: OpenLaszlo is an XML/JavaScript based programming language, which the Laszlo compiler translates into SWF files for the Flash player. The Laszlo compiler and programming tools use this lzx.rnc Relax NG schema for the OpenLaszlo XML language. This schema contains annotations used by the Laslzo compiler to define the syntax and semantics of the XML based programming language.

The schema starts out by defining a few namespaces:

default namespace = ""
namespace rng = ""
namespace a = ""
datatypes xsd = ""
namespace lza = ""

The a: namespace defines some standard annotations like a:defaultValue, and the lza: namespace defines some custom annotations private to the Laszlo compiler like lza:visibility and lza:modifiers. Thanks to the ability to annotate the grammar, much of the syntax and semantics of the Laszlo programming language are defined directly in the Relax NG schema in the compact syntax, so any other tool can read the exact same definition the compiler is using!

To show how truly simple and elegant it is, here is the snake eating its tail: The Relax NG XML syntax, written in the Relax NG compact syntax:

Applying XML to Describing User Interface Layouts and Behavior and Constraints.

This is a message I sent to Paul Haberli a several years ago, brainstorming some ideas for an XML based scripting language. More recently, after discovering OpenLaszlo, I ran across this email, and it made me realize why I was so happy to find Laszlo, which embodies many of these ideas!

From: Hopkins, Don [mailto:Hopkins, Don]
Sent: Sunday, November 08, 1998 3:06 AM
Subject: RE:

I think something cool to do, would be to apply XML to describing user interface layouts and behavior and constraints.

It would have to describe the interfaces and connections between the components, as well as the graphical layout and properties.

It should have a general purpose message passing model that is independant of any scripting language, and you could also embed scripts in the xml in different language like is currently done with html.

But you should be able to do a lot without even resorting to scripts, just hooking components together.

And then if course I want to design a visual programming language in XML.

Software Development Magazine: Inside the Stupid Fun Club

Riding around in a remote-controlled car seat while being shot by ping-pong balls. Software Development Magazine wrote an article called "Inside the Stupid Fun Club" (registration required).

The author, Alexandra Weber Morales, unexpectedly encountered the Sad Robot, broken down and crying for help on the streets of Oakland.

We were shooting a couple of hidden camera reality TV "One Minute Movies" for NBC: one of a Sad Robot torn apart into pieces and pleading for help from passers by, and the other of a Robot Waiter taking orders, serving food and bantering for a tip in a barbecue restaurant.

I (Don Hopkins) developed the custom "robot brain" software for Will Wright's Stupid Fun Club, mostly in Python. It involved writing lots of high level Python code and XML data, and integrating all kinds of different software components together with SWIG, C++, ActiveX, Java, IRC, HTTP and WiFi. The robot features 3D facial animation, speech synthesis and recognition, conversational scripting, artificial intelligence, personality simulation, telerobotic remote control via wireless networking, with an interactive web interface for controling its behavior in real time.

For another Stupid Fun Club project, I also used Python to develop expressive synthetic speech authoring tools (audio speech "phonoscoping", like visual animation "rotoscoping"), and talking toy simulations.

Python is ideally suited for brainstorming and prototyping new product ideas, as well as developing custom real-time robotic software for supporting creative Stupid Fun Club projects like reality TV production.

Dave Winer Speaks at Microsoft about Standards versus Open Formats

Dave Winer spoke at Microsoft, and discussed the definition of "blog". An important point he explains is why he makes a distinction between "Standards" and "Open Formats":

[28:00 into the video]

Question from Microsoft: How is that different from having a departmental web page?

Answer from Dave: It's not different. In 2004, a personal web site is a web log. And in 2004 in my opinion, a departmental web site is also a weblog.

We've worked on the user interface, and we've worked on the technology, and it's gotten easier, and there are certain standard practices, and that's all sort of boxed up in this concept called "Weblog".

AIML: Artificial Intelligence Marketing Language

Stanislaw Lem writes wonderful satirical introductions and reviews of imaginary books in his real book Imaginary Magnitude. Here's an actual review of a fictional introduction of an imaginary book that I'd really love to read, A History of Bitic Literature:

Un Valor Imaginario (Imaginary Magnitude) by Stanislaw Lem

The introduction to A History of Bitic Literature brims over with startling ideas. The work introduced is a multi-volume survey of literature written by artificial intelligences, such as an extrapolated work of Dostoevsky's that Dostoevsky never dared to write himself, revolutionary books on physics (in this case the content is, I am afraid, rather less shocking than Lem intended it to be--I've read weirder things in orthodox textbooks--the last chapter of Misner, Thorne, and Wheeler's Gravitation comes to mind), and a mathematical work revealing that "the concept of a natural number is internally contradictory." Mentioned in passing is a procedure that can transform great philosophical systems into graphical representations that ultimately end up sold as mass-produced knickknacks.

Here's is an actual review of Lem's real book, A Perfect Vacuum, which fictionally reviews the imaginary book, Non Serviam:

Vacio Perfecto (A Perfect Vacuum) by Stanislaw Lem

The best two pieces, though, are the last, "Non Serviam", and "The New Cosmogony". "Non Serviam" was reprinted in Hofstadter and Dennett's book "The Mind's I". It is supposed to be a paper by a researcher into "personetics", the science of creating artificial personalities inside worlds inside the computer. The researcher has absolute power over his creations; he can bring them into existence, destroy them, and change their world at will. He is to these creatures as God would be to us. His main interest in them, therefore, is having them argue theology. Most of the paper is a debate among the personoids on what should be their proper attitude towards their creator. Their conclusion: "we shall not serve".

Stanislaw Lem inspired me to write some parodies of web pages promoting XML applications that didn't exist at the time. But now they actually do exist, by one definition or another: AIML and BSML!

At the time, I was just making fun of VRML, and the people who push and hype useless standards for questionable political reasons instead of practical technical reasons. But as I read through the contraversy surrounding RSS, RDF, Atom and other syndication formats, somehow I'm reminded of AIML and BSML...

AIML: Artificial Intelligence Marketing Language

BSML: Bullshit Markup Language

I received this request to take down my BSML web page, but I would rather have my constitutionally protected right to free speech, than the appreciation of a company that would seriously use the name "BSML". Are there a lot of people named "Gene" working in the Biological Sciences industry?

From: Gene Van Slyke
Sent: Monday, November 12, 2001 10:37 AM
Subject: BSML Trademark


While reviewing the internet for uses of BSML, we noted your use of BSML on While we find your use humorous, we have registed the BSML name with the United States Patent and Trademark Office and would appreciate you removing the reference to BSML from your website.

Thanks for your cooperation,

Gene Van Slyke
CFO LabBook

BSML: Bull Shit Markup Language

XML Pie Menus

Chris, a computer science student from who's interested in user interface design, asked me some interesting questions about pie menus:

First, were you happy with The Sims' implementation of pie menus? It seems as though it doesn't necessarily provide all of the great features of an ideal pie. The targets aren't infinitely 'deep' -- the user needs to click directly on the button. Perhaps more importantly, the targets aren't in predictable locations (they items are dynamic based on a very complex set of inputs.) Don't misunderstand; I loved the game and felt the the interface worked well. I am interested in the design decisions that were made.

The other thing I wanted ato ask was, have you any opinions on the game Sacrifice? I was very drawn to its pie system, and am always surprised that there has really never been much mention of it when it comes to discussion of pies, and pies in games. Thank you for your time,


Thanks for your thoughtful questions!

I'm glad to hear fasteroids still works after all those internet explorer patches that have come out since I wrote it. I hope the Eloas patent doesn't force Microsoft to break browser plug-ins like fasteroids and pie menus on purpose.

I'm pretty happy with the way The Sims pie menus turned out, considering the time and design constraints. But of course there are several things about them I would change and extend if I had the time.

Syndicate content