Sunday, May 28, 2006

websites as graph

An interesting website : "Everyday, we look at dozens of websites. The structure of these websites is defined in HTML, the lingua franca for publishing information on the web. Your browser's job is to render the HTML according to the specs (most of the time, at least). You can look at the code behind any website by selecting the "View source" tab somewhere in your browser's menu HTML consists of so-called tags, like the A tag for links, IMG tag for images and so on. Since tags are nested in other tags, they are arranged in a hierarchical manner, and that hierarchy can be represented as a graph. I've written a little app that visualizes such a graph, and here are some screenshots of websites that I often look at." cnn.com website:

Saturday, May 27, 2006

The right tools to blog

If you want to set up a blog, I highly recommend you to get : Software
  • Firefox This browser has the particularity of allowing some "extensions" to be added. As it is a browser of choice for many bloggers, there is a very useful ecosystem of handy tools for it that makes it a real pleasure to use. Remember the first time you used Google, you felt that "wow" effect ? That what you'll get with those nice extensions.
  • Performancing : this is a add on to Firefox which helps you post to Blogger, Livejournal, and many other blog services. Very well done. It automates other aspects like postings tags on del.icio.us, technorati, ping services, and other feature
Services
  • For pictures, you can use if you need Allyoucanupload, a straightforward image upload with no registration
  • del.icio.us, used in combination with a display system on your blog, helps you publish specific content on your blog
Categories content on your blog

Friday, May 26, 2006

JSON : the web 2.0 esperanto ?

JSON is probably a technology you never heard of unless you are a javascript or web designer expert. But this piece of tech does have potential for glueing the web together. In some way, this is the javascript counterpart of a webservice And just like its couterpart, this is a multiplatform, call anywhere lightweight object, which you can easily manipulate from within a javascript. Today many websites have public API's (yahoo, google, del.icio.us, technorati, etc..) so integrating all those creates some real added value, and JSON can help you deliver it. For instance, do you want to integrate your cel.icio.us categories (dynamically) in a web site like blogger? JSON is your friend then. What JSON does is that it takes a string which can comes from a 3rd party website and transform it into a javascript object. References: JSON an exemple with yahoo : http://developer.yahoo.com/common/json.html the json website : http://www.json.org the json parser : http://www.json.org/json.js JSONP : this proposition aims at handling the relation of JSON results and your scripts http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp http://ajaxian.com/archives/jsonp-json-with-padding JSONT : This is to transform an external JSON object into your own javascript datamodel easily http://goessner.net/articles/jsont http://www.xsltblog.com/archives/2006/02/jsont_transform.html

Wednesday, May 10, 2006

Le Mur de la modelisation

Nous ne pouvons pas, malgré les sommes faramineuses mobilisées, plusieurs centaines de millions d'euros pour des banques en internes, plusieurs milliards d'euros chez des fournisseurs specialisés de logiciels, aboutir à un systeme de gestion integré.

La richesse fonctionnelle à couvrir est enorme. Pour gerer la vie d'un produit que vous achetez dans un reseau bancaire par exemple: "vous beneficiez de 25% de la performance du cac40, plus un rendement garanti de 5% par an"

Il aura d'abord fallu .une demarche commerciale pour ce produit (gestion commerciale avant vente) .donner un prix (manipulation de données historiques, et de modeles), avec eventuellement des allers retours. Une fois les caracteristiques determinées .verrouiller les parametres du prix (hedger) .l'emeteur devra en interne emettre un ensemble de titres representant chacun une composante du produit. ce split est necessaire pour obtenir pour chaque produit les meilleures conditions de prix, ou satisfaire à des obligations juridiques. .Ce produit genere pour l'emetteur des expositions en change, en taux, en volatilité, et d'autres parametres .Pour couvrir ces parametres, il faut placer des ordres à des heures precises, correspondant au produit vendu .Les evolutions des parametres financiers genere des gains ou des pertes au niveau de l'emetteur, qui doit rapporter celles ci au niveau de sa hierarchie, à intervalles reguliers, puis au niveau comptable au comissaire aux comptes. .Les cellules de controle de risque internes monitorent aussi en permanence les evolutions des engagements pris, et surtout potentiels....

Etc, etc...

Pourquoi cet exemple est interessant? Parce que derriere ces problemes, il existe des enjeux financiers importants. Par ailleurs, ces enjeux existent de maniere concentrés chez plusieurs acteurs qui ont des moyens importants à mettre en face. Les conditions sont donc ideales.

Or il y a echec.

Le mur de la modelisation est atteint.

A fortiori, d'autres domaines qui sont confrontés à une complexité fonctionnelle aussi riche, mais dont les interets à mettre en place une solution sont dispersés, ou qui n'ont tout simplement pas ces moyens n'ont aucune chance de voir une solution informatique gerer leur domaine fonctionnel.

Revenons aux organisations qui ont donc le plus d'atouts de leur coté dans le cadre actuel : D'une part le mur de la modelisation est atteint. D'autre part, cette meme modelisation est à l'heure actuelle requise pour lancer des projets, car il y a des couts d'agence. un service sous traite à un autre la realisation d'un logiciel, il faut donc valider la facture generée, et pour ce faire, avoir prevu au prealable, et donc modelisé...

Nous sommes confrontés à un deadlock organisationnel.

Il faut donc changer d'organisation. Ce ne sont pas les autorisation pour engager des depenses en externe au nom d'un groupe d'interet qui vont disparaitre. Il va donc falloir trouver des moyens plus souples de developper des solutions, de les mettre en oeuvre, de les scaler, etc..

Il n'y a pas d'autres options que celle ci si l'on souhaite aller au dela du cycle logiciel actuel qui reste excessivement faible en dehors des grands systemes comme windows, chez les "vrais" utilisateurs d'informatique.

C'est pour cela qu'à travers toute les technologies mises en place, je vois celle qui favorisent et structurent l'emergence de la modelisation comme celles qui sont importantes.

La realisation est bien plus facile. Individuellement, les differents elements mis en oeuvre dans le modele complexe presenté de gestion d'un produit financier sont presque triviaux. collectivement ils deviennent tres compliqués. Architecturer ceux-ci pour integrer les changements sans bureaucratie excessive est impossible.

ps: Concernant les tags, ceux ci sont utilisés depuis fort longtemps par Reuters, qui classe ses depeches ainsi, par langue, pays, theme, etc.. Un article sur une emission d'emprunt en pologne interesse aussi bien le marché du credit que celui des taux d'interets, que les banquiers conseils etc.. A contrario, une news sur le president polonais qui se rend en allemagne limite l'interet des recherche par mots clefs..

Le probleme est que si Reuters utilise tres bien ces tags, les categories, le meta modele, est defini... par reuters! C'est la que se situe l'innovation des tags version web : la possiblité de se rassembler dans des categories communes, mais aussi la possiblité de se disperser pour discuter avec d'autres experts de choses qui n'existent pas dans l'esprit d'autres contemporains.

Monday, May 08, 2006

Emergence

Les tags ne sont qu'une premiere etape. Quel est l'interet des tags en realité? A mon point de vue, ils sont interessants car ils sont l'outil d'une organisation emergente. A contempler mon terminal Reuters et son interface des années 90, je me dis que le systeme des "topic" n'est pas si novateur qu'il y parait sur le web ! L'innovation est que tout un chacun a la possibilité de se construire son propre dictionnaire, et d'y contribuer. L'innovation n'est pas dans l'information, mais dans la plateforme qui permet l'emergence. Les tags constitue une plateforme (perfectible) pour faire emerger des ontologies. Le futur consiste à extraire les conditions de l'emergence et à s'appliquer à les reproduire dans d'autres domaines, fonctionnellement plus riches que de simples topics. Etendons ce concept et nous permettrons par exemple un jour de faire emerger des applications. Travaillant en salle de marché, domaine friand de technologie de l'information, on ne peut que constater l'incapacité des processus de formalisation traditionnel. Plutot que de se battre contre cela, fabriquer un pont entre l'informel (spreadsheet excel, mail...) et le formel (worflow, BPM...) semble une solution. Quelles sont donc les conditions de l'emergence? A mon sens, il faut que les interlocuteurs partagent un modele de donnée. Dans le cas des tags, il s'agit d'un "topic", objet simple s'il en est, et canoniquement interpretable... Il est par ailleurs structurellement logique que derriere l'emergence se niche tout une richesse applicative puisque le modele precedent de developpement logiciel suppose la delegation entre l'utilisateur final et le realisateur. Et le cout d'agence associé (pas forcement que monetaire) a forcement occulté tout un pan applicatif jugé non critique pour les business lines mais radicalement novateur collectivement... Si ces sujet vous interessent, n'hesitez pas à reagir/me contacter pour que l'on en discute online ou de vive voix.

Sunday, May 07, 2006

Compilation reloaded

If you are thinking about expressions, abstract syntax tree, dynamic langages... here is an interesting representation to guide your thoughts. It does to performance what you can do for other properties. (From F# presentation)
Tags:

Top challenges

My list of the top open challenges in IT... 1. Metadata Correctly handling metadata on a large scale and distributed basis is the fundation for giving a semantic web. This would enable a richer exchange network. 2. Awareness environment "awareness" means the relation of one object to its context. For instance .the security context under which a program runs .the available network ressources .The degree of optimizations available for a query .The links between this entry, for instance, and you, reader Having a consistent set of environmental service, and a built in "awareness" in common langage enables is crucial. This basically means that you are able to have separation of concerns, yet benefit of rich default functionalities. 3. Data mapping Being able to seamlessly create live between datasources is crucial, and maintain that (hopefully "aware") link is also a basic functionnality which has no obvious standard answer. It has huge impact on basically every domain you can think of. 4. Distributed computing There are tons of critical applications which require huge computing ressources : proteins folding, dna statistics Good news : There is a lot of it around the world.... Bad news : it is not available !! So finding a consistent way to perform distributed computation is a tremendous challenge. Let's abstract from the vision of the many computers and consider that you have a thousand-core processor. Now without a consistant way to perform distributed compuations, your apps don't go faster with it, only you can launch if you want a thousand apps... Now consider that this app that you want to go fast will make it possible - or not - to save millions of life every year... I guess now you can get an idea of the frustration the current situation generates. 5. Data and metadata merge Being able to merge data and metadata will make it possible for everyone to enrich the typing system, while consuming some other's data. This merge would basically enable to have distributedd modeling, for all those numerous domain where having a thousand consultants for a thousand years would not be enough. If you consider the workflow of creating software, it is very unsatisfactory today. The delegation issue between the requirer, the manager, the programme is very, very complex. This is a huge bottleneck for hig bandwidth software where you don't want to want for the next 3year release. Merging data and metadata enables knowledgeable end user to extend the built objects to their need. Hopefully with "awareness", some statistical computations would prevent the resulting mess and offer model consistency across user. 6. ObjectNet Being able to natively exchange object would definitely foster the web to a higher level. The promised land of Corba and the like might become a reality if the performant infrastructure make it usable.

Managing metadata

Metadata have very interesting feature to organize information: .They enables a many-hierarchies classification : For instance the tags on this blogs enable as many a one level hierarchy per tag, aka a grouping. If I add one hierarchy underwhich to file entries, I would have to file each message under ONE node. Without it you end uup with the nightmare of having t choose weather a car's bill should be filled under the car node or the bill node, and you have all the chances that part of those items will be there, another part there : your information will be scattered, disorganised. .They provide with an extensible type system : You dont have to own the object to add some comments to it, or other datas. Metadata natively enable distribution wich is the underlying character of the internet... and of information itself ! So having a correct system to handle metadata is an essential piece of work in IT. Actually, regarding the first aspect, the french secret service, back in the time where everything was paper based, were famous at some point for having a cross-reference system which would emulate physically the tag system. Isn't it interesting to see how non-linear history can be?

Categories for Blogger

If you want to add some topics to your blogger blogs, you'll have to use some tagging provider, like delicious, and then connect your blogger template to it. Don't run away, it's not that hard, and to now it's the only way. There are basically 2 or 3 steps required :
  1. At every post, feed your tagger with the your chosen tags for the entry
  2. potentially including those tags in the entry as well
  3. At Blogger display level, have the tags and the tagged entry to be displayed
The basic concept is that from your tag provider, each blog entry will be tagged with the name of your blog. Then from a blog perspective, we can ask your tag provider to retrieve those entries and display them in blogger.
  • For step 1 and 2 if you use Firefox and Greasemonkey extension, the following script makes it easy to have tags at posting time : Script 2182: Deluxe Script by Johan Sundstrom w/ additional features
  • For step 3, you can use freshtags, which is a bit of javascript code to interrogates delicious and adds the navigation html to your page.
But I wanted more control than just a tag navigation system. I wanted to be able to tags some posts as "sticky", and have a permaent sections to display those. Or may be have some other sections where I collect my "interesting links" items. So I modified the freshtags javascript. If you want to do this, just replace the freshtag javascript file with this one. (Adapt to your delicious user name and your blog tag - the 'anchor') <
<script type="text/javascript">
//FreshTags v0.5 http://www.greg-hill.id.au
del_user = "nrolland";
anchor = "Structurallyyours";
archive = "";
defs = "";
maxposts = 20;
writeScript( "http://del.icio.us/feeds/json/tags/nrolland/structurallyyours?sort=freq&count=100" );
//writeScript( "http://ghill.customer.netspace.net.au/freshtags/freshtags.js" );
writeScript("http://www.esnips.com/doc/4cc7f4ba-bdee-4810-8d66-b5dc8a008856/deliciousv1.js");

function writeScript( src ) { document.write( '<script type="text/javascript" src=" '+ src +' "><\/script>')  }

window.onload = function() {
  displayinelement("list", 20, "catemergence", "emergence+permanent");
  displayinelement("list", 20, "catlearning", "learning+permanent");
  displayinelement("list", 20, "catdiffusion", "diffusion+permanent");
  displayinelement("list", 20, "catproducts", "products+permanent");
  displayinelement("list", 20, "catentrepreneurship", "entrepreneurship+permanent");
  displayinelement("list", 20, "catsoftware", "software+permanent");
}
</script>
This last code tells your browser to fill the HTML element called "catemergence" with the entries tagged "emergence" and "permanent" in delicious. So there need to be somewhere in your template an element called as such, which will be the placeholder of your dynamic content :
<div id="catemergence"             class="permanent">
So now you can easily have many sections which are automatically feed by the tags you provide.

Saturday, May 06, 2006

Powershell : more than just a shell

Microsoft has been working for some time now on a shell named Powershell (previously called Monad), which brings the tremendous power of dotnet at your fingertips. A technical presentation is here, download is here It all look like a shell you'd know like a DOS command prompt or for those of you who used unix like a bash or korn shell. But this usual seamingly innocuous tool's mission is actually to connect you, the user, with an easy acces to all those structures defined in your computer : COM object written by some painful C++ programmers, small admin script written by a colleague, VB type written by your intern yesterday. All those elements have a vocation to be accessible through a uniform way from monad, who lives in between those elements and the user, and make it easy for a simple element to be available for consumption. Monad contribution on bringing a programmed elements ready to industrial strength use on 3 aspects User interaction
  • it automatically makes sure the necessary arguments are filled, and take necessary corrective steps. the original programmed object does not have to do anything to inherit this behaviour
  • it automatically provides parsing functionnality for the arguments provided, and again the programmed component needs not to know about any of this stuff.
  • it handles error in a clean way, and reports them as such without breaking eventual function composition
  • it will load the necessary dll and other components on the fly
  • it provides with standard output formatting, be it text or other component (excel graphics)
  • you can group object's properties through sets, which corresponds to one particular point of view of an object (mind you I dont care most of the time of the pid of a process....)
A rich native environment
  • your objects will natively have a common space to live and cohabitate in..
  • and they can alos collaborate through piping object from one command to another, composing functions easily
An extendable type system
  • The ability to dynamically enrich the type system of an object on the fly
This last functionnality is for me the best thing, as it blurs the distinction between data and metadata, which is where the crux of programming is. As a forecasted development is the GUIfication of these commands, which should be a piece of cake now that the mmode of interactions of object with one another is frozen and that the behaviour of each object with respect to it is explicit The bigger picture Now apart from the obvious much desired cool functionalities I described, the REAL stuff provided here is all about 2 things :
  1. object pipelines
  2. runtime typesystem extension
Those are the two properties you can create a goldmine on. Look : what if we enable different users to interact with each other and exchange objects...... ? Oh, and by the way those objects exchanged, mind you, it's not some guy who decides what they are every 5year releases. Na, you just inherit those, and then you can tweak them at will.. One more question : What would you think if we replaced the Internet by the ObjectNet.. ?