Eolas Legacy

The picture of post-Eolas era has become clearer with Microsoft's Changes to Default Handling of ActiveX Controls by Internet Explorer and it's not pretty.

To avoid violating the disputed Eolas patent, web developers have three options:

  1. Generate <OBJECT> tag using JavaScript.
  2. Add a special (read non-standard) attribute.
  3. Require users to click OK on a dialog.

It's like some jerk patenting bottled beer and forcing everyone to either pour canned beer into a bottle or stop calling it beer.  Otherwise, the bottled beer will ask "Are you sure you want to drink me?".  Sheesh.  By the way, the jerk's name is Mike Doyle.

Here is a beer-belly's salute to Your-Ol'-Ass, er, Eolas.  *Burp*

RSS-Data Clarified

It seems that RSS-Data is confusing to some people (hello Matt ;-p) so I'll attempt to clarify.

RSS-Data is a proposal to create an RSS 2.0 extention that allows arbitrary instances of generic data to be embedded in RSS 2.0 feeds without requiring introducing new elements with their own micro-schema and namespace.

It is just a proposal at this stage meaning there is no concrete format yet.  Examples out there are just sketchs of what it might look like.

It is an RSS 2.0 extension that adds a new way to extend RSS 2.0, an extension extension, if you will.

A typical way to extend RSS 2.0 involves adding a set of new elements belonging to a namespace like this:

<item>
  <link>blah</link>
  <description>blah</link>
<my:element xmlns:my="http://...">value</my:element>
<your:element xmlns:your="http://...">value</your:element>
<Signature xmlns="http://www.w3.org/...">...</Signature>
</item>

Note that 'my:element' has it's own schema and a namespace, knowledge of which leaks to the application layer even if RSS parsers pushed up all unknown elements up to the application layer.  At application level, these new elements and attributes have to be fetched and navigated somehow.  Unfortunately this is cumbersome for most languages.  Think about having to compare URL to distinguish elements and how one could differentiate attributes from child elements.  XPath could be used, but there are performance and readability penalties.

An extension by RSS-Data might look like this:

<item>
  <link>blah</link>
  <description>blah</link>
  <data xmlns="http://rss-data.org/..."
name="signature" type="structure">
<data name="value" type="binary">Akjdfaiwjfqeesdah=</data>
  <data name="cert" type="binary" transform="base64, asn.1">
askjdfa;kljalkjweqasdf
</data>






</data>


</item>

With just one legal RSS 2.0 extension that adds one new element plus a set of attributes, I can add arbitrary data into RSS 2.0 feed.  While this rendition of RSS-Data removes the need to define new elements and associated namespace for each type of data, there are two problems:

  • Language bindings are still problematic.  'Name', value, and 'type' can be mapped fairly well to language specific features, but mapping 'transform' is difficult.  I suppose 'transform' can be removed, but it is nice to have.
     
  • Existing XML standards like XML-Signature are not being used.

Solving the first problem involves turning all attributes into child elements and mapping and pushing child elements down another level.  This is essentially what XML-RPC and SOAP has done.  A nice bonus is that this approach works very well with modern scripting languages (i.e. item.signature.cert[0].name).

The second problem is harder to solve and RSS-Data proposal is silent on the problem.

Obvious use of RSS-Data is shoveling data with dynamic structure (i.e. database query result) out through RSS 2.0 feeds and having the data be displayed in a scrollable grid or a nice chart by RSS clients without them really understanding what the data is.

Given that RSS-Data is ultimately just an extension of RSS 2.0 and does not prevent other extensions, I think RSS-Data is a Good Thing.  Let people vote with their feet.

Hurrah for The Terminator

Despite confusing Tim Oren, I am pro-Terminator and am happy to see Arnold win the election.  It turns out Tim is also a support of Arnold.  Right on, Tim!  Arnold said all the right things in his victory speech and I am looking forward to watch him kick California into shape.  Hurrah!

RSS-Data

What I like about Jeremy Allaire's RSS-Data proposal:

  1. Reduced need to change RSS schema, binding, and parser to support new payloads.
     
  2. Possibility of reusing XML-RPC code and SOAP code.
     
  3. Arguably faster to parse.
     
    In my experience, element-rich XML documents are faster to parse than attribute-rich XML documents.  But this is not important given readily available processing power at the consuming end.

What I dislike:

  1. Ugly and harder to read although not as bad as RDF.
     
  2. Increased need to change RSS application to support new payloads.
     
  3. Contextually inconsistent and verbose.

    <name>
      <name>value</name>  <!– implicit style –>
      <name>
        <name>name</name> <!– explicit style –>
        <value>value</value>
      </name>
    </name>
     

With RSS-Data, developer's attention will shift from RSS parsers to RSS application frameworks capable of supporting new payload types and routing mechanics via plugins.  Despite irksome cosmetic downsides of RSS-Data, I like that.

Only problem is that one can make the same arguments for RDF which makes me a hypocrite.  No news there, but I find it ironic to see RDF folks attacking RSS-Data.

Update #1 – 2003/10/08 10:21AM PST

Text moved to RSS-Data Clarified because it was too long.

Outsourcing in Korea

Yes, it's happening to Korea too.  Kuk-Min, one of the largest banks in Korea, is outsourcing its call center operation to China where there is a large population of Ethnic Koreans willing to work for much less money than those living in Korea.  Cost savings up to 63% is expected.

Red Hat 9 and IBM JVM 1.4.1

For an hour, I tried to install IBM JVM 1.4.1 on my Red Hat 9 server without success.  Uploading 61Meg RPM file took a while via SFTP, hopefully because I haven't tweaked the bandwidth throttling on SFTP daemon and not due to some bandwidth congestion at the server end.

The trouble started when I gave the file to RPM.  It was my first invokation of RPM.  That was fast, I said.  Output said the package was installed but nothing about where it installed to.  After stumbling around the file system and books, I found the command to get information from the package.  Apparently, the file was relocated to /opt/ directory.  That's strange, I said.

I thought maybe I am supposed to run a script there to install for real.  Nope.  I browsed the docs and read the readme file which basically said IBM JVM 1.4.1 is not compatible with Red Hat 9 due to thread library change in Red Hat 9.  Great, isn't it?  I decided to post this info here because I couldn't find it on the web.  I hope it helps someone out later.

Linux is for geeks with very high tolerance level in all things except Microsoft.

Update #1 – 2003/10/06 1:49AM PST

I don't know exactly how it happened, but both IBM and Sun's JVMs runs just fine on my Red Hat 9 server now.  Weird.  I ran Tomcat on all three JVMs (IBM 1.4.1, Sun 1.4.2, Blackdown 1.4.1) without a glitch.

BTW, Tomcat 5.0.12 has been solid so far even though it's a beta.  Cool admin consoles are nice and JSPs are snappy.  Reading through Tomcat developer list and bug database, there are no serious bugs remaining.  In fact, Tomcat team is talking about whether to release 5.0.14 now or wait until JSP 2.0 and Servlet 2.4 API are approved by Sun.  They are not expecting any more changes in the spec and wants more people to bang on Tomcat 5.0.

I recommend that you try it now so the poor team can have some bugs to fix.  Boy, I wish Sun had this sort of problem.

Glut of Workflow Engines

A good measure of hype is the number of open source projects.  Light attracts moths.  Hype attracts open source developers.  From this perspective, it is disturbing to see how many open source workflow projects there are.  According to Carlos Perez's Open Source Workflow Engines Written in Java post, there are at least 14 in Java alone.

While some are just component-level projects, there are some starting to approach commercial level quality by providing user-friendly workflow design tools.  Regardless of their quality, I believe the noise they project into the workflow software market is substantial enough to affect commercial workflow software vendors like the way sea-level affects civilization.

Tough Choice: Stupid or Evil

Recent suckage by Google regarding their AdSense program (see Joi's post for latest set of links to related posts) brings to light an interesting choice in life.  If you had to choose, which would you rather be: Stupid or Evil?

Since Google's #1 rule is "Don't be Evil", I guess they would rather be Stupid than Evil.  Just in case, here is How Google can be Smart and Secretly Evil:

  1. Shut up about the secret monitoring technology that can detect mousy leech with 100% accuracy.  What is the point of bragging about something you can't show?  Besides, if secrecy is one of its secret sauce, it follows that cheats can be found when the details are revealed.  Also, you can't even reveal it to your advertisers to convince them that it works, can you?  Be smart and just shut up about it.
     
  2. Stop sending accusatory letters to well-connected troublemakers.  Yes, that means bloggers.  In your zeal to tap a potentially explosive market, you paid too much attention to the word market and not enough attention to the word explosive.  Keep poking the bear and you are gonna get Evil-branded like Microsoft.
     
  3. Stop listening to lawyers.  They are worse than righteous geeks and angry mothers when it comes to making trouble.  Yes, that means knocking off that stupid addition to the AdSense contract.
     
  4. Do apologize like a sniveling idiot.  Apologies don't show up on the balance sheet so spend it like a maniac.
     
  5. Do introduce account productivity level (percentage of good click-throughs over total click-throughs) which is multiplied to total amount owed.  So if my level is 50% and my AdSense accumulated $200, I get $100.
     
  6. Do introduce probation periods for new accounts.  Accounts on probation period are monitored more closely and may get canceled without pay.
       
  7. Do review AdSense accounts regularly and warn unproductive accounts.  If improvements are not made after initial warnings, account is placed on probation.
     
  8. Do hire someone who can sell ice-cream to Eskimos to write the cancellation letter instead of having some fool write something that falls just short of calling people thieves and liers.

Update #1:

I retracted Do pay in full item and reordered the list in response to fan mail (;-p).

Advancing Command-Line

I spent part of today playing with my dedicated server at ServerMatrix.  Unlike the difficulties I ran into earlier using cPanel at ServInt , I had no trouble at all setting up the server using command-line.  It was ironic considering that cPanel is supposed to help people control Linux using easy to use GUI instead of the command-line.

Command-line interface is pretty tedious to use though and I intend to address that by hacking together my own version of SSH2/SCP/SFTP client that will automate most of the repeated tasks.

For example, I want to be able to get a list of processes with a single mouse click and 'pin' it to the side so it can be updated every few seconds.  I also want each command I give to become a branch node in a tree.  Response back from the server will get inserted under the branch.

Later on, I drag several related branches to a new task branch to create a composite command.  To specificy parameters, I open up the task and 'punch holes' into the commands, assigning them names and specifying acceptable input formats.  Most of the information can be extracted from man pages automatically to automatically document the task, leaving the user to provide a descriptive name and description.

When the task is run, necessary parameters are either asked for using auto-generated forms or extracted from results.  Subclassed tasks and composite tasks should also be possible so one could be build meta-tasks like "Setup Linux Web Server".  Eventually, these tasks can be shared with other people.

Doing everything on the client-side can be slow, so large tasks can be automatically sent to the server-side to be executed there.  While I could keep a stable of hand-written server-side scripts, I believe this is the right way to evolve the administrative tool technology.  Documentation is very important also because I believe good UI should not only be easy to use, but help the user understand how the system works instead of just learning which buttons to press.

Anyway, the web server is configured and awaiting content to be poured in.  Tomcat installation is next.

Update #1:

I forgot to mention that command-line bots will be cool to have also considering how popular IRC bots are.  To remember some tasks to do, just tell the ReminderBot about it and it will remind you later.  Most of these new features should be implemented on the client side so the server is not burdened unnecessarily.  Besides, there are pleandy of CPU cycles to burn on the client-side and connectivity is better so you can add P2P-based features to the command-line.