Saturday, October 29, 2005

Important aspects of c#

There are plenty of places to read articles about one tech in .Net Each of them tells you about one different aspect, but how to find which one to really know? This is a repository of what aspect are I thought were important. Can you think of some others?

  • Generics : generics are useful to strong types transversal notions
  • BindindSource behaviour (how the construct a view from the argument) and binding structure like bindinglist
  • Linq : the ultimate tool for projecting out data : If you need smart plumbering, agregating of data structure
  • Reflection : it is useful when you want at runtime to manipulate
  • Continuations : If you need, against conventionnal wisdom, to perform a high level operations within a lower level context, continuation is an elegant way to separate those not be trapped and to express compactly your code
Tag: csharp

Friday, October 21, 2005

The big software merge : a distributed data and metadata namespace (anything left?)

Nowadays peer to peer applications are powerful from the viewpoint of the 90's we. But I guess that the confluence of p2p with a growing trend of the web is going to make this a killer app that will transform the computing world as we know it. Think AJAX. It is a great technique, and you might think it is a slick and handy presentation. or a bad programming concept. Traditionnal apps present data. AJAX through its slick presentation enables to expose not just data but the data model as well. Think of those Gmail pages where you enter a new contact easily. or that dynamic autocompletion feature you like. The point is, you're not just entering strings, you are entering a contact. that is precisely what is a datamodel. You write an email, that field must be a contact. So those nice gmail guy's help you with entering a contact. Now what is the link with p2p? Well, precisely, the datamodel, or its current lack of it. Currently, raw data is exchanged, with an embryonnic, altavista like, search facility. Beside the technical prowess of distributing download, the p1p story from a functionnal perspective sounds like : Some people have stuff stored. You can download them. Which to me sounds like a very static web era story. Now if you add to this story the trend that I discerned in AJAX, you can replace that story with
  • Some people have stuff stored ----> Some namespaces are published, aka "MyNeighbourTom", wich contains stuff "StartrekMovie"
  • stuff ---> this stuff is actually object whose data model is transmitted : MyNeighbour.StartrekMovie.BitRate for instance
  • I download it ---> I can of course still download it, or perform actions on those like MyNeighbour.ThisDocument.Print.
  • Furthermor, as you know the data model of your query, a computer can interpret that itself independantly of the actual action transmitted. for instance building up a common portal between friends exposing all the music we have.
So the notions at play here, that we now see develop, and which will among others radically change p2p and the internet are : .Namespace sharing .Data AND metadata publishing Followup : the powershell published by microsoft gets closer to those notions, where "everything is an object", data and metadata are merged in one envrironment (you can create object on the fl, you can extend an object type on the fly too) but lacks GUI feature and p2p dimension. This is all evolving very fast..

Saturday, October 15, 2005

Organizing information

There is many information available to us, but as we can see in the information age what is important is not information itself, but how do we structure that information, in terms of relevance, of classification etc.. RSS has been useful because it delivers such a projection, which consists of the most recent information, from a selected subset of sources, who decides themselves that such and such information is of value to their reader, hence should be available through this channel. Take another information. For instance bus stop times. yes, they are available for me on after 4 or five hops. Oh and wouldn't it be good if after I checked my bus stop to retrieve the weather for tonight so I know how to dress. And may be during the day I also would like to check if my stocks went up or down, not that it would change anything but I just like it. Would I spend 30 minutes everyday on this? no then I prefer not to. But had their be a simple service which would allow me to suscribe to those information once I sure would go and do that. One of my friend is interested in the dollar rate, which is important for him to send money to his place. Another one wants to build a little app that for a particular functionnality reads various financial analysts reports from different website and synthetize them. Point of this is: The content published is a projection of datas which fits the needs of various publishers. We want to project the datas on our needs. We should be able to define data sources, independently of the data provider, group and categorize those data as we see fit, and consume those datas as we would like to. So I started a 'personnal projection project', which will enable people to define their own set, and publish this set. This is valuable for personnal use, but also for public use, letting people share not the data itself, but the location of the data, its description, its category etc.. Those data will be exported through standard web service, and of course customisable RSS feed, for integration into custom application, web pages, RSS readers etc. Isn't it funny I wrote all that without the expression web2.0 in?

Friday, October 07, 2005

Because finding the correct tool and minimizes impedance mismatch is getting 50% of the work done , this is a great article as far as langage itself is concerned :

Thursday, October 06, 2005

Wrong architecture

I know this is all very basic yet this is a predominant pattern. Shit happens where low level logic guide high level logic. For instance in Excel say you have the following piece of shode: Function doSomething( no arguments ) Volatility100_1Y = cells("A16") Volatility110_1Y = cells("A17") ...etc... ..then some computation .. cells("A18") = result1 cells("B18") = result2 End So here a low level idea (the specific format of the volatility organised in row) is imposing its format on what is an input of this process. A first step would be to have Function doSomething(Range inputVol, Range OutPutResult) Volatility.reads(c1) ...etc... ..then some computation .. result.write(cells("A18")) End Here it is the Volatility object that writes itself to the cells, not the little low level "A16" cell, who does not know shit about what a volatility is, who constraints the process nonetheless. I think this is called inversion of control by computers scientists, and it relates to object orientation. But it also relates to respecting a common sense abstraction hierarchy where high level guides low level, not the other way round. Which in the end of your application is where you want to go anyway.