I've just posted a new version of SimFaux, which has a bunch more features, and many more quotes (tagged with keywords), to go with the new characters. Now there are 136 Frank Zappa quotes!
In Washington, they just look out for #1, and #1 ain't you. You ain't even #2.
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.
"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!"
Here's another more down-to-earth example of what you can do with OpenLaszlo:
This version has WebCam support: you can display your webcam in one or more frames, FauxCast yourself on any Faux News TV channel, and interview the simulated characters in person! Don't let Bill O'Reilly tell you to shut up and kick you off!
It also has a new simulated internet "Faux Chat" room, which you'll have to try out because explaining how it works would spoil the surprize!
It's pronounced "Sim Foe". Like the Colbert report: it's french, bitch!
It has an cinematic interactive interface consisting of several different screen layouts, each with a different number of frames, which you can configure to display a variety of simulated characters, streaming videos, interactive surveys, and text talking points. Here's the conference screen layout showing several videos, a couple of characters, a survey and talking points:
I wrote this in 1995, at Kaleida Labs. The web was so new and exciting back then!
ScriptX and the World Wide Web
"Link Globally, Interact Locally"
by Don Hopkins, Kaleida Labs
Benefit of ScriptX to Web BrowsersThe World Wide Web is an excellent way to distribute cross-platform interactive multimedia ScriptX objects. The Kaleida Media Player, running on net-surfing Mac and Windows platforms, can dynamically load in and plug together objects from "title containers" transferred over the web.
ScriptX title containers are portable files containing ScriptX objects, code and media: text, images, animation, sound, MIDI, music, movies, and modular object-oriented programs that plug together dynamically to orchestrate open-ended interactive multimedia experiences.
You can publish self-contained multimedia ScriptX titles (i.e. applications, tools, games, catalogs, presentations, documents), as well as reusable ScriptX objects (i.e. modular components, accessories, characters, places, clip-art, plug-ins, SimProducts), so people can download the ones they want, and compose and interact with them locally, on their own computers.
Web browsers such as NetScape can be configured to use the Kaleida Media Player (KMP) as a "helper application", so it's simple for people with NetScape and the Kaleida Media Player to download and interact with ScriptX objects: just click on a link to a title container, and it's distributed over the network and dynamically loaded into the Kaleida Media Player, where it comes to life!
ScriptX Pizza DemoThe ScriptX Pizza Demo, at "http://www.kaleida.com/official/pizza", lets you construct a pizza by plugging together ScriptX objects from several title containers delivered via the World Wide Web. First you select a pizza crust in one title container, then you can select any number of pizza toppings in separate title containers. They're dynamically loaded into the KMP and locally composed in a window, that you can interact with by dragging the toppings around on the crust. There's even a "big brother" spinning eyeball topping, that animates as you move your cursor around the screen!
This demonstrates network distribution of cross platform code and media, with local interactivity, direct manipulation, animation, dynamic binding, and plugging together objects from different containers.
There is an extension to ScriptX on the Mac that enables it to ask NetScape to open any URL, so ScriptX can cause NetScape to display a web page, load another title container, and even send messages to interactive web services (like submitting an order for a pizza).
ScriptX Web developers will go far beyond mere pizza toppings, publishing innovative interactive experiences on the network, no longer limited to the static text, graphics, and forms of HTML.
Benefits of ScriptX to Web DevelopersAs a general purpose object-oriented multimedia scripting language, ScriptX has many uses for web developers. It can import and export various file formats, index, search and manipulate multimedia databases, automatically generate HTML from macros and templates, draw and composite images and produce corresponding image maps, and serve as an open ended programmable hypermedia synthesizer.
For example, the ARPANet Map, at "http://www.catalog.com/hopkins/arpanet/index-large.html", is a web of html, gif images, and image maps, all synthesized off-line by ScriptX from an abstract topological graph of the network.
Future DirectionsAs described above, there are many interesting things that can be done by distributing files generated off-line by ScriptX, including title containers, HTML pages, images, and image maps. This can be taken much further by using ScriptX as an interactive on-line web server, synthesizing distributed hypermedia on demand!
There is an experimental extension to ScriptX on the Mac that enables it to be used with MacHTTP as a "Common Gateway Interface" server. It's possible to link to a running ScriptX program, that dynamically interprets URLs and forms results, and generates responses on the fly.
ScriptX can produce and respond to web pages with forms and pictures (buttons, scrolling lists, text fields, and clickable images), that most web browsers support. We have developed an experimental framework of classes for generating HTML from ScriptX objects, and programming interactive Web services with forms, macros, and high level HTML widgets with clickable images. It's possible to implement image maps that send events directly back to the ScriptX presentation and model objects that rendered them. Example web services that have been implemented with this framework include class and generic browsers, and a scrolling zooming image browser.
ConclusionScriptX deeply satisfies an important unfilled niche in the World Wide Web: it makes it possible to implement and distribute high quality cross platform interactivity, far beyond the static HTML forms and text formatting capabilities of current Web browsers. In the long term, ScriptX is the ideal framework for developing open-ended, extensible Web servers and browsers, distributed hypermedia authoring tools, multi-user colaborative online services, and compelling online store fronts, games, and educational experiences unlike anything that's been done before!
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.
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.
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.
The schema starts out by defining a few namespaces:
default namespace = "http://www.laszlosystems.com/2003/05/lzx" namespace rng = "http://relaxng.org/ns/structure/1.0" namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" namespace lza = "http://www.laszlosystems.com/annotations/1.0"
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:
Laszlo Mail is a rich web email application that runs in any web browser on any kind of computer with the Flash player. It's written in OpenLaszlo. Earthlink is deploying Laszlo Mail to their customers, and Laszlo Systems has released this demo version for free on their own servers. Give Laszlo Mail a test drive -- be sure to check out the contact details, search interface, the wysiwyg email editor, spelling checker, and how the user interface adapts as you resize the window. You'll see why I'm so excited about OpenLaszlo!
I worked on Laszlo Mail for Laszlo Systems as a contractor, developing the drag-and-drop email folder tree, and also the attachments upload component, so I'm biased of course. I'm applying what I learned by working on Laszlo Mail to developing my own Laszlo applications. I like OpenLaszlo because it's open soure, really fun to program, supports full-blown user-friendly rich graphical interfaces, and scales up well to handle heavy duty tasks like reading email.