Revue du Web du 12 avril

Les tweets de la semaine

http://twitter.com/rajkaimal/statuses/11681362631 les Threads et ASP.NET, une longue histoire qui ne se finit pas.

http://twitter.com/carlodiban/statuses/11681569277 Enterprise Library 5 est sorti

http://twitter.com/Elsheimy/statuses/11877201716 Marshaling, un livre.

La question Stackoverflow

http://stackoverflow.com/questions/1596158/good-introduction-to-the-net-reactive-framework on parlait la semaine dernière de Reactive Framework pour Javascript mais certains l’aborderont sans doute plus dans le cadre de développement .NET, voici une liste de ressources sur l’API avec un tutorial qui fournit une très bonne vue d’ensemble.

Actualités Microsoft 

Nous en parlions la semaine dernière, le lancement d’office 2010 arrive bientôt et si on connaît déjà bien les produits de base, CNET nous indique que la version gratuite dite “Starter” fera bien partie de l’offre de l’éditeur. Cette version ne contiendra que Word et Excel avec des publicités mais non contextuelles (heureusement, rendez-vous compte si Microsoft commence à lire vos documents, quelle menace sur la vie privée …). Les particuliers font sans doute faire un mélange de cette version et des futures éditions en ligne. Celles-ci sont même installables sur des serveurs privées : il est vrai que certaines entreprises sont réticentes à mettre des documents sensibles en ligne (voir le problème de Twitter) mais pouvoir partager. éditer facilement des documents à travers un simple navigateur est devenu presque une nécessité.

Actualités “Alt.NET”

Une des plus grandes conférence ouverte s’est déroulée ce week-end à Seattle : Alt.Net Seattle Conference 2010. D’une durée de 3 jours, l’évènement commence par une journée classique avec des ateliers sur des sujets connus d’avance comme F#, TDD ou Javascript. Le planning des deux autres jours se décide par un processus de suggestion/vote.

De l’autre côté 

La blogosphère des développeurs est en émoi après la publication de la version beta du SDK de l’íPhone 4.0. Le nouvel accord de licence contient une restriction sur les applications dont le code a été généré. Ceci mets en péril les outils de développement qui permettent de coder dans un autre langage qu’Objective-C et de générer un binaire “iPhone” (MonoTouch avec C#, Titanium avec HTML/JS et Adobe avec Flash). Ars Technica a très bien résumé la situation : Apple est allé trop loin pour contrer Adobe (et fait des dommages collatéraux). Certains invoquent la protection de la plateforme contre des applications médiocres car ciblant plusieurs plates-formes (MonoTouch permet de générer aussi un binaire pour Androïd) mais on sait tous que toutes les applications natives ne sont pas elles-mêmes parfaites.

On espère que Microsoft qui a une plus longue expérience avec des développeurs externes (il faut rappeler qu’Apple a publié un SDK contre son gré presque puisque seule les applications web étaient autorisées pour le premier iPhone) saura tirer parti du comportement presque tyrannique d’Apple avec ses partenaires tout en conservant une plate-forme cohérente (un défaut d’Androïd). Ceci n’est pas un compromis facile.

Un projet

On a déjà évoqué Noda Time, le portage d’une librairie Java en C#. Cette API permet de manipuler des concepts temporels plus facilement qu’avec les classes de base du framework (DateTime, TimeSpan etc.). La librairie n’est pas encore disponible mais on peut déjà accèder au code source sur le site internet dédié.

En regardant le projet on peut voir que les choses avancent vite, heureusement le projet de tests est là pour nous éclairer un peu :

vue d'ensemble de Noda time
vue d'ensemble de Noda time

En regardant les tests sur les fuseaux horaires on peut voir des problèmes non triviaux comme la gestion des changements d’heure d’été/hiver au cours du temps :

// Make sure we deal with the uncached time zone

private static readonly IDateTimeZone Paris = DateTimeZones.ForId(“Europe/Paris”).Uncached();

// Until 1911, Paris was 9 minutes and 21 seconds off UTC.

private static readonly Offset InitialOffset = Offset.Create(0, 9, 21);

[Test]

public void FirstTransitions()

{

// Paris had a name change in 1891, and then moved from +0:09:21 to UTC in 1911

var nameChangeInstant = Instant.FromUtc(1891, 3, 14, 23, 51, 39);

var utcChangeInstant = Instant.FromUtc(1911, 3, 10, 23, 51, 39);

var beforeNameChange = Paris.GetZoneInterval(nameChangeInstant - Duration.One);

var afterNameChange = Paris.GetZoneInterval(nameChangeInstant);

var afterSmallChange = Paris.GetZoneInterval(utcChangeInstant);

Assert.AreEqual("LMT", beforeNameChange.Name);

Assert.AreEqual(InitialOffset, beforeNameChange.Offset);

Assert.AreEqual("PMT", afterNameChange.Name);

Assert.AreEqual(InitialOffset, afterNameChange.Offset);

Assert.AreEqual("WET", afterSmallChange.Name);

Assert.AreEqual(Offset.Zero, afterSmallChange.Offset);

}

Les principaux concepts sont :

Duration test = Duration.FromStandardDays(1);

var eightWeeks = Weeks.From(8);

var twoWeeks = Weeks.Two;

var sixWeeks = eightWeeks - twoWeeks;

Un exemple de calcul avec ses différents concepts

// 2002-06-09

long TestTimeNow =

(Y2002Days + 31L + 28L + 31L + 30L + 31L + 9L - 1L) * NodaConstants.MillisecondsPerDay;

// 2002-04-05

long TestTime1 =

(Y2002Days + 31L + 28L + 31L + 5L - 1L) * NodaConstants.MillisecondsPerDay

+ 12L * NodaConstants.MillisecondsPerHour

+ 24L * NodaConstants.MillisecondsPerMinute;

var debut = new Instant(TestTime1);

var fin = new Instant(TestTimeNow);

var interval = new Interval(debut, fin);

var dureeInterval = interval.Duration;

var period = Period.From(dureeInterval);

Les tests ne sont pas encore très parlants et la documentation non existante mais on suivra ce projet avec intérêt.

Billet publié dans les rubriques Programmation le