Wednesday, August 31, 2005


Why I think AJAX breaks REST "The Web is a hypermedia application. According to REST, following a link you should be transferred to a state representation which is associated with a particular URI (in the case of the Web, a URL). As it happens, together with that state representation we may also get some code that our hypermedia document viewer (the browser) executes. Depending on the interactions with the end-user, another program, the environment, etc. the executed code may make use of asynchronous calls to change the represented state that our viewer has loaded. It does so by usually fetching more state, possibly in a REST-friendly way (i.e. HTTP requests). However, during the user-application interactions, the URI remains the same even though the state representation that is rendered on our screens has obviously changed. Now, some AJAX applications may force a change in the URI effectively simulating a state transition but most of the ones I have used do not."

REST is a way to expose services and AJAX is a way to write client software - they can't really effect one another.

AJAX can break the ability to save client state, in exactly the same way that frames do (complete with breaking the back button). AJAX applications may or may not update the URI in the browser to represent the current state it is in, but you can certainly write them so that they do (just like frames).

In a RESTful approach the architecture puts restrictions on the server, not how the client represents its current state:"...each request from client to server must contain all the information necessary to understand the request, and cannot take advantage of any stored context on the server."

Also, AJAX - beyond the buzzwords.

Update: Why I think AJAX breaks REST continued "What I did say is that the use of the AJAX approach to building distributed applications, or even just client-side ones, encourages a move away from the REST principles and that those building distributed applications should be aware of that...We just can't call all the good things out there RESTful."

I take REST principles to mean providing URIs to represent the current state they are in. However, I don't see browsers or client side applications as being RESTful or not. Tabs, frames, pop-ups, running code in Flash, Javascript, and applets; all of these things are not represented by the URI in the toolbar.

The only thing that's guaranteed in REST is that a client changes state when it goes to a URI (the representation of the state) on a server. How it represents that state is entirely up to it.

There are good reasons why everything just isn't represented by a URI, but I do think that more things should be. One is space requirements, imagine GMail storing every state that your mail box is in and providing the ability to go back and forward (very Xanadu perhaps).

Never Forget You are the Lowest of the Low

When thinking about French animation or cartoons the first thoughts are Asterix, The Smurfs or Tintin (which is actually Belgian).

Others include:
* Robostory or here.
* Spartakus and the Sun Beneath the Sea or here.
* Le Croc-Note Show.
* Inspector Gadget.
* Ulysses 31.
* Belle and Sebastian.
* Babar the Elephant.
* The Snorks.
* Madeline.

And while not French, Vicky the Viking was a boy.

New Kowari Soon

Kowari v1.1 Pre-release Feature Peek "The v1.1 release of Kowari will include the following features:

o The addition of Paul Gearon's Krule (pronounced "cruel") rules engine. Paul has fast and scalable RDFS support implementated (with the exception of XSD data typing) and is working on implementing more rules for an OWL subset.

o Rewriting of ConstraintExpressions and ModelExpressions to collapse Resolver-specific constraints that should be evaluated together into compound constraints (query rewriting) and permitting Resolvers to advise query engine of the evaluation order of constraints to ensure binding of required variables (query annotation). These features were added by Andrae Muys and Simon Raboczi and will form the basis for a cleaner query language syntax and cleaner integration of external Resolvers, such as GIS systems.

o The removal of Jena support. Kowari v1.0 implemented a Jena storage backend and included an RDQL query language API. This has caused difficulties in maintenance and support as the two projects have gone in different directions. Kowari will remove (not deprecate) support for Jena as of the v1.1 release.

o Support for compiling Kowari under Java 1.5. The Kowari team will be moving to Java version 1.5 as the canonical build version, replacing Java 1.4.2."

Via, Kowari v1.1 Pre-release Feature Peek.

Also, new MindSwap Kowari Library part of PhotoStuff.

Light at any Speed

Stoping light in quantum leap "...researchers have slowed the speed of light down from 300,000 kilometres per second to a few hundred metres per second.

“To store the light in there, we turn the second laser beam off. The signal from the first laser beam is trapped inside the crystal. To get the signal out again, we turn the coupling beam on again. We can now store light for seconds, and potentially quite a bit longer,” Dr Sellars said. "

Euro boffins increase speed of light "Luc Thévenaz and his fellow researchers in the Nanophotonics and Metrology laboratory at EPFL said they were able not only to slow light down by a factor of three from its usual speed of 300 million metres per second in a vacuum, but they have also accomplished the considerable feat of speeding it up – effectively making light go faster than the speed of light."

They have "...demonstrated the first all-optical technique to slow light in off-the-shelf optical fibres."

A previous article explaining how superluminal speeds are achieved: "...a pulse of light can have more than one speed because it is made up of light of different wavelengths. The individual waves travel at their own phase velocity, while the pulse itself travels with the group velocity. In a vacuum all the phase velocities and the group velocity are the same. In a dispersive medium, however, they are different because the refractive index is a function of wavelength, which means that the different wavelengths travel at different speeds. Wang and colleagues report evidence for a negative group velocity of -310c, where c (=300 million metres per second) is the speed of light in vacuum."

Tuesday, August 23, 2005

Firing ESB with Synapse

Apache Launches Open Source Software-Integration Project " Apache Synapse would provide many of the capabilities of an enterprise service bus. An ESB, which is available from many vendors, provides secure interoperability between business systems via extensible markup language, web services interfaces and standardized rules-based routing."

The bulk of the project is from Infravio's X-Broker product.

Monday, August 22, 2005

Things I've Read

* Evangelical Scientists Refute Gravity With New 'Intelligent Falling' Theory related to Boing Boing's $250,000 Intelligent Design challenge (UPDATED: $1 million) and Flying Spaghetti Monster.
* JUnit-Addons and GSBase so at least only two software projects have to reinvent the wheel.
* Non-blocking Data Sharing in Multiprocessor Real-Time Systems "In this paper, we present an efficient non-blocking solution to the general readers/writers inter-task communication problem our solution allows any arbitrary number of readers and writers to perform their respective operations."
* Why I Prefer SOA to REST "The problem is that although it is easy to model resources as services as shown in the example in many cases it is quite difficult to model a service as a resource. For example, a service that validates a credit card number can be modeled as a validateCreditCardNumber(string cardNumber) service. On the other hand it is unintuitive how one would model the service as a resource. For this reason I prefer to think about distributed applications in terms of services as opposed to resources." Now people can just argue about what is intuitive (credit card gateways on the Web existed before SOAP - must have been REST I guess).
* I Need a New Language: Rel? "I want a language for table programming. I think you can write programs in this language that do everything we expect of an application programming language -- building GUIs, reacting to mouse events, listening to sockets -- everything. Don't model your domain as objects. Model it as relations...I can imagine programs that have a relvar (Date's term for a relational variable: essentially a table or a view) for MouseState."
* Package Scoping And Unit Testing "Package scoping particularly shines during unit testing. Some programmers argue that you should only test through the public API. Don't be silly. Limiting your tests to the public API contradicts the spirit of unit testing and subjects you to unnecessary dependency pain. I prefer to isolate and limit the amount of code I test at one time, and test as close to the code as possible." Somewhat related, JSR 277 - Java Module System
* Web as Platform Mash-Ups "There have been a lot of excellent posts and articles this week about APIs, the Web as Platform, web sites as software companies, and so forth..."
* Ruby, Python, "Power" "There are different opinions on the relative power of Ruby and Python. I'm not much more authoritative than other resources (though I'm not less authoritative either; most comparisons between the two languages are flawed). Ultimately I don't believe there are many (any?) places where one language is more "powerful" than the other (and not just in the "they are both Turing complete" sense)"

Nullifying C#?

Nullable Types "Support for nullability across all types, including value types, is essential when interacting with databases, yet general purpose programming languages have historically provided little or no support in this area."

Nulls in a database indicate unknown or some other semantic for the value being missing. Missing Information Withot Nulls: "But NULL isn’t a value of type VARCHAR(20), nor of type DECIMAL(6,0)." The decomposition of the tables shown in this looks very much like RDF (page 15 even talks about triple operations).

An example of the syntax:
int? nFirst = null;
int Second = 2;
nFirst = null; // Valid
Second = nFirst; // Exception, Second is nonnullable.

Nulls not missing anymore "The outcome is that the Nullable type is now a new basic runtime intrinsic. It is still declared as a generic value-type, yet the runtime treats it special. One of the foremost changes is that boxing now honors the null state. A Nullabe int now boxes to become not a boxed Nullable int but a boxed int (or a null reference as the null state may indicate.) Likewise, it is now possible to unbox any kind of boxed value-type into its Nullable type equivalent."

Related: Avoiding Null in C#, Stopping nulls in Java, Null Object Pattern, Null Considered Harmful, Nulls and the Relational Model, Clean design solution for NULLs with Java primitives, Date and Pascal on RDF and Relational Algebra.

While you can argue whether C# should support NULLs in databases, it does seem like a fairly pragmatic decision based on the current state of the industry.

Friday, August 19, 2005

Quick Links

* Songs of the Extremos from the people that brought you The Case Against XP. Maybe in reply someone like Kent Beck will use some Bob Dylan (I wonder who will introduce them). For an interesting view see Bob Dylan: A genius? and The meanings behind the words of the Beatles.
* In trying to find the source of the term "gold plated" in terms of software, I was pointed to "NASA’s Success Checklist": "Implement only what is required. Developers, managers, and customers often think of small, easy changes that seem to make the software better. These changes often have much more far-reaching impacts than anticipated by the specific developer who will implement the change. Do not let additional complexity creep into the project through gold-plating."
* What if VisiCalc had been patented?. Many interesting points, such as: "On the other hand, innovation in VisiCalc-like spreadsheets continued, with Lotus doing things we wouldn't, and then Microsoft moving things further ahead with Excel going in areas Lotus neglected." Also links to, "Patenting VisiCalc".
* Not 2.0? and Web 2.0 or Not?. Such quotes as: "...the key to success in this next stage of the web's evolution is leveraging collective intelligence. And yes, Google's introduction of page rank was absolutely a milestone in this evolution of the web..."

Tuesday, August 16, 2005

Sharper Axe

Sometimes you find some tools that make certain things as easy on Windows as they are on Unix.

StackTrace "Thread dump for Java processes running as a Windows service (like Tomcat, for example), started with javaw.exe or embedded inside another process (Windows and Mac OS X only.)" Also DiffAnywhere.

Two Languages Enter, One Language Leaves

Beyond Java "In Beyond Java, Bruce chronicles the rise of the most successful language of all time, and then lays out, in painstaking detail, the compromises the founders had to make to establish success. Then, he describes the characteristics of likely successors to Java. He builds to a rapid and heady climax, presenting alternative languages and frameworks with productivity and innovation unmatched in Java. He closes with an evaluation of the most popular and important programming languages, and their future role in a world beyond Java."

This is a fairly uninformative description.

In a recent interview he said: "I make the point that conditions are ripe for an alternative to emerge. I don't pick what the alternative will be. I just show some of the productivity problems with Java and I show the types of projects in other languages that are interesting. Frameworks like Ruby-on-Rails, Seaside and continuations servers in Lisp and SmallTalk could well become catalysts for another language."

Some more detail is here. It's probable that it's going to mention Ruby. He does mention that: "When you’re mapping a Java class to a schema, you must often type the name of a property five times...Three in the bean: the getter, the setter, the instance variable. One in the schema: the field. Two in the mapping: the property, and the column. In Ruby, you type it once."

But Ruby on Rails is eight times slower than Java. It'll never take off because it's too slow. Where have you heard that before?

Monday, August 15, 2005

A World Without Locks

Wikipedia defines lock-free and wait-free algorithms as allowing "...multiple threads to read and write shared data concurrently without corrupting it. "Lock-free" refers to the fact that a thread cannot lock up: every step it takes brings progress to the system."

LOCK-FREE LINKED LISTS AND SKIP LISTS "Developing a correct and efficient memory management scheme is important to make a data structure practical. Developing such a scheme for a lock-free data structure is often quite a challenging task. The difficulty lies in determining how and when memory that was once occupied by parts of the data structure (e.g. nodes of a linked list), can be freed and reused, so that the processes that might still be accessing those parts are able to complete their operations correctly...We presented new algorithms implementing a lock-free linked list and a lock-free skip list. We proved their correctness and lock-freedom."

Lock-Free Reference Counting The goal of this work, therefore, is to allow programmers to exploit the advantages of GC in designing their lock-free data structure implementations, while avoiding its drawbacks. To this end, we provide a methodology that allows programmers to first solve the easier problem of designing a GC-dependent implementation, and to then apply our methodology in order to achieve a GC-independent one.

An older article: Lock-free Parallel Garbage Collection by Mark&Sweep.

Related to Lock Free Programming.

Fun in the Sun

* XmlBeansSerializer and Axis 1.3. This looks promising (again). The second in the thread mentions that the XFire project now has server side support. A new startup is now providing support for Axis too. New FLA (four letter acroynm) SASH (Struts, Axis, Spring and Hibernate).
* Introducing AXIOM: The Axis Object Model Introducing AXIOM: The Axis Object Model "AXIOM uses a "builder" that will build the XML object model in memory, according to the events pulled from the underlying StAX parser, but will not create the entire object model at once. Instead, it only builds when the relevant information is absolutely required." Also, OM Tutorial.
* IBM Integrated Ontology Development Toolkit "EODM is the run-time library that allows the application to put in and put out an RDFS/OWL ontology in RDF/XML format; manipulate an ontology using Java objects; call an inference engine and access inference results; and transform between ontology and other models." Also mentions support for SPARQL and OWL DL.
* Encapsulation vs. Inheritance "Inheritance indicates strong encapsulation with other classes, but weak encapsulation between a superclass and its subclasses."

Monday, August 08, 2005

RDF Algebra and Aggregates

* RAL: an Algebra for Querying RDF "RAL is an algebra for RDF defined from a database perspective, some of its operators being inspired by their relational algebra counterparts...Based on the similarities between monads and RAL collections, one can reuse the three monad laws (left unit law, right unit law, and associativity law) as equivalence rules in RAL...RAL operators come in three flavors: extraction operators retrieve the needed resources from the input RDF model, loop operators support repetition, and construction operators build the resulting RDF model." Demonstrates: projection, selection, cartesian product, join, union, difference, intersection, map, Kleene star, create node, create edge, delete node, delete edge, variables and sorting. Part of CognitiveWeb, also has a SPARQL project.
* RDF Aggregate Queries and Views "In this paper, we propose the CAA (Compute Aggregates Algorithm) algorithm to efficiently compute aggregate operations such as COUNT,SUM,AVG,MIN,MAX and so on. CAA can also handle GROUPBY queries. We subsequently define algorithms to maintain aggregate views. These are views involving aggregate queries."

Saturday, August 06, 2005

Speed Racing

* CheckRDFSyntax and Schemarama Revisited "...thinking about our expectations of RDF “validation” can teach us a lot about RDF’s value, about it’s relationship to XML, and about the things we should focus on building next."
* sparql fast as hell "But the real astonishing thing is that SPARQL of this kind is also fast as hell (10-500ms)...In simple words: this is a fulltext scan over all properties of all statements...triplecount: 371994"
* Data First vs. Structure First "Next time you spend energy writing the ontology, or the database schema, or the XML schema, or the software architecture, or the protocol, that 'foresees' problems that you don't have right now think aobut "you ain't gonna need it", "do the simplest thing that can possibly work", "keep it simple stupid", "release early and often", "if ain't broken don't fix it"and all the various other suggestions that tell you not to trust design as the way to solve your problems. But don't forget to think about ways to make further structure emerge from the data, or you'll be lost with a simple system that will fail to grow in complexity without deteriorating." Rifting on a familar theme.
* PlayStation 3 processor could support Mac OS X Tiger ""The operating system has also yet to be clarified. The integrated Cell processor will be able to support a variety of operating systems (such as Linux or Apple's Tiger)."
* CollectionClosureMethod "The each method takes a one argument block (Ruby and Smalltalk both refer to closures as blocks). It then executes the block on each element in the collection. It essentially is the same as the foreach statement you find in many modern languages (and recently arrived in Java with 1.5). With these languages the foreach method is all you get, but with collections and closures the each method is just the start."

Wednesday, August 03, 2005

Duplication is a Mistake

Again, I'm looking at DISTINCT in SPARQL.

In the relational world Date talks about how users don't care about duplicates and it makes optimization difficult and invalidates operations (like JOIN). Preventing duplicates means that optimizers can make logically equivalent transformations. It seems quite valid to made distinct results the only option.

An example he gives is a query to get supplier numbers for suppliers who supply at least one part , "DOUBLE TROUBLE, DOUBLE TROUBLE PART 1": "The obvious first point to make is that the twelve different formulations produce nine different results! -- different, that is, with respect to their degree of duplication...Thus, if the user really cares about duplicates, then he or she needs to be extremely careful in formulating the query appropriately in order to obtain exactly the desired result."

"Here are some implications of this point:
* First, the optimizer code itself is harder to write, harder to maintain, and probably more buggy--all of which combines to make the product simultaneously more expensive and less reliable, as well as late in delivery in the marketplace.
* Second, system performance is likely to be worse than it might otherwise be.
* Third, the user is going to have to get involved in performance issues; for instance, the user might have to spend time and effort on figuring out the best way to express a given query (a state of affairs, incidentally, that the relational model was explicitly designed to avoid)."

"...if I say "the sun is shining here today" and "the sun is shining here today," I'm simply telling you the sun is shining here today! And from this perspective, the notion of duplicate rows--as that notion is usually understood--obviously makes no sense at all."

There's also a part two.

The same point is made here: "I think it would be a mistake for the query language to take a position on whether or not query result sets could contain duplicate rows (or if it did take a position, I'd want it to be that they couldn't!) From a selfish perspective, I worry that we'll have to de-tune RDF Gateway's query evaluation in order to allow duplicate rows to exist in a resultset (after all if a user wants duplicate rows, they can merely select out the variable(s) that make those rows distinguishable). Perhaps the issue of duplicate rows could be implementation specific?"

It seems that Danny is reading the same thing I am.

Monday, August 01, 2005


VFS " Commons VFS provides a single API for accessing various different file systems. It presents a uniform view of the files from various different sources, such as the files on local disk, on an HTTP server, or inside a Zip archive."

Also supports WebDAV and CIFS (Samba). Comes with a file system abstraction that includes junctions (links) and listeners.