En tant qu’architecte, c’est actuellement ma première expérience de revue d’architecture la plus intéressante mais surtout la plus laborieuse. Mon coup de gueule je dois le dire, ça va me faire du bien. Le dilemme qui est celui de choisir entre ne pas vouloir tout casser pour reconstruire ou revoir la fondation pour gagner à moyen et long terme est celui que je vis actuellement….
Je réalise une refonte d’architecture sur un projet de 3 ans de développement, qui a connu différentes orientations en terme d’architecture et différents développeurs. Le résultat est qu’on obtient un résultat très hétérogène en terme d’architecture et différents styles de développement…
Mon challenge actuel pourrait se définir en quatre points:
- Faire une refonte de l’architecture actuelle en assurant une dépendance stable entre les différents modules existants ou que je rajoute quand le besoin existe.
- Révison des namespaces
- Le socle installé, définir un pattern de développement pour les nouveaux développement. J’ai choisi le MVVM et mis en place les objets nécessaires pour le développement. Le framework Unity m’a fait été d’une grande utilité avec l’interception et le chargement d’instances dynamiques!
- Accompagnement des développeurs vers l’appropriation de la nouvelle plateforme.
- Mise en place des processus de build avec cruisecontrol et svn pour les besoin de release.
Voilà mon coup de gueule est fait, même si je ne le dis pas assez, ça reste que c’est une expérience très enrichissante car on n’a pas toujours l’opportunité et la chance de faire un tel exercice.
De mon coup de gueule vous n’avez rien appris, alors je dois dire au moins une chose d’instructif. J’ai découvert que la limite d’erreurs détectables par Visual studio 2008 par projet est de 102 ! Allez j’y retourne
Je souhaite juste partager un lien que je trouve pas mal. Bien entendu il y en a plein comme celui là qui rassemble les différentes formules rapides de calcul mental en navigation
http://www.aero-training.fr/memo-calculs-mental-en-navigation.html
La justice est malheureusement bien souvent aux côtés des plus forts. La vérité semble donc choisie et décidée. Comme beaucoup d’autres idéalistes de toute origine, j’aimerais continuer de croire en une justice impartiale. Mais que faire quand il subsiste un malaise, celui de ne plus être certain de la neutralité de nos institutions internationales. Continuent elles de servir ou non les intérêts de tous ? ou sont elles devenues des instruments au service des plus forts?
Mon but n’est pas une prise de position mais une envie de partager ma réflexion. Je ne suis pas un féru de la politique, moins encore un engagé de quelque courant politique que ce soit, bien que des idéaux panafricains parfois me galvanisent. Mais bien hélas, cela s’arrête souvent à ces soubresauts. Ce qui a suscité ma réflexion est la situation en Afrique de ces derniers jours et mois et le constat de certains faits.
Il y a peu de temps Kadhafi avait été reçu en grandes pompes par Sarkozy, bien qu’à l’époque l’opinion des français majoritairement n’y semblait pas très favorable. Mais sur ce point, ce n’est pas une chose nouvelle pour Sarkozy qui a l’habitude de suivre fidèlement sa feuille de route envers et contre tous. Son cas ne semble pas isolé car je cite “La Libye fête aujourd’hui les 40 ans de l’arrivée au pouvoir du colonel Kadhafi. Une grande partie de la communauté internationale sera représentée aux festivités données ce soir en l’honneur du «Grand guide de la révolution».” de Paris Match de septembre 2009 (http://www.parismatch.com/Actu-Match/Monde/Actu/Kadhafi-celebre-ses-40-ans-au-pouvoir-124152/) Plus loin dans ce même article il est écrit aussi je cite “personne n’oserait aujourd’hui tourner le dos à un Etat grand comme trois fois la France, dont le sous-sol regorge d’hydrocarbure.” Cependant un an et demi plus tard, aussitôt que la résolution de l’ONU a été votée autorisant le recours à la force, les premiers à animer le théâtre libyen des opérations militaires sont ces grands de la communauté internationale. Pourquoi?
En matière d’animation militaire il y a du choix. Une autre scène tout aussi animée est celle de la Côte d’ivoire où tout s’y passe bien sûr avec la bénédiction de l’ONU, sans qui il est désormais clair que personne n’oserait rien faire, heureusement encore. Sur ce point nous pouvons nous montrer fiers de voir que l’appareil international mis au point pour protéger et défendre les intérêts de tous marche merveilleusement bien. Car c’est au nom de cette volonté et mission première que l’ONU a mis à contribution la force française pour détruire a t’on dit les sites stratégiques. L’objectif étant de détruire tout armement lourd afin de protéger la population de son potentiel usage. Mais je lis que la résidence de Gbagbo a aussi été bombardée, est elle donc classée site stratégique? (http://www.blueteamci.com/depeches.php#).
On compte beaucoup de morts, la capitale est jonchée de cadavres (http://fr.euronews.net/2011/04/07/urgence-humanitaire-a-abidjan-temoignage/). Au nom de ce désastre on demande à Gbagbo de déposer les armes. Ce dernier a répondu dans une interview récente avec LCI qu’ils étaient deux protagonistes et qu’il serait de bon ton de le demander aux deux parties. (http://www.youtube.com/watch?v=20bbEhfagH4&feature=player_embedded)
Il est évident que la prudence s’impose dans l’analyse qu’on peut faire de toutes ces scènes. Il est un constat indéniable que les élections en Côte d’ivoire ont souvent été repoussées. A tort ou à raison je ne saurais le dire. Enfin toujours est il qu’elles se sont finalement tenues. Avant même de poser la question du vainqueur, un autre constat est que les deux protagonistes d’aujourd’hui Ouattara et Gbagbo se partagent en proportion plus ou moins équivalente le résultat des urnes. On parle de fraude, la cour constitutionnelle déclare Gbagbo vainqueur. Ce dernier invite à recompter les voix. Mais il est trop tard, on dit que la communauté internationale a choisi son candidat. C’est Ouattara et il n’en sera pas autrement. Alors que les concernés sont toujours profondément divisés sur la question c’est à dire les ivoiriens eux-mêmes, comment la communauté internationale a t’elle pu choisir son candidat ? Difficile à comprendre.
De plus, le prix à payer pour imposer leur choix en apportant appui au parti ivoirien de leur choix, n’a pas semblé trop lourd pour s’en empêcher. Enfin on se demande, pour qu’il y ait affrontement les deux parties doivent être armées. Gbagbo encore en exercice de pouvoir dispose de l’armée régulière, mais par quels moyens les partisans de Ouattara se sont ils armés?
Aujourd’hui on dit du président sortant qu’il est “capturé”. “Capturé” par qui et comment voici un autre sujet de débat. Mais ce qui me gêne c’est que je n’ai plus l’impression que nous parlons du président d’un état souverain qui avait tout de même obtenu un résultat tout aussi honorable que son opposant aux élections. L’expression ne me paraît ni respectueuse et appropriée (http://prisma.canalblog.com/archives/2011/04/11/20868919.html)
Enfin on peut se targuer d’avoir fait gagner la démocratie une fois de plus comme ce fut le cas en Irak, qui aujourd’hui n’est plus que l’ombre de lui même assombri par les attentats perpétrés au quotidien.
On parle déjà de l’ère d’après Gbagbo, bientôt ce sera le tour de la Libye… peut-être une énième victoire de la démocratie.
Je suis profondément contre la dictature, mais je dois avouer que si les peuples heureux élus de l’avènement de la démocratie dans leur pays doivent y trouver un goût aussi amer que celui que connaissent les irakiens aujourd’hui, je remets totalement en cause la manière et les moyens mis en œuvre pour y parvenir. Je ne suis plus certains que les institutions internationales servent réellement les causes des ces peuples. D’où mon interrogation, sont elles devenues des instruments aux services des grandes puissances de cette communauté internationale ?
La magie de la sérialisation n’est plus à expliquer. Elle donne la possibilité de convertir un objet en flux xml correspondant et vice versa. Voici un exemple de classe (Pour rendre sérializable une classe il suffit de la taguer du mot clé “Serializable” :
Serializable()
Public Class TestSerialize
Public DateSet As DateTime
Public FloatSet As Decimal
Public StringSet As String
Public DoubleSet As Double
Public IntSet As Integer
Public Sub New()
End Sub
End Class
voici un exemple de code pour tester la sérialisation de cette classe:
Using fs As New StringWriter()
Dim xmlDocument As String = String.Empty
Dim serializerAgt As XmlSerializer = New XmlSerializer(GetType(TestSerialize))
Dim obj As TestSerialize = New TestSerialize()
With obj
.DateSet = Date.Now
.DoubleSet = 2
.FloatSet = 2.5D
.IntSet = 2
.StringSet = “kid”
End With
serializerAgt.Serialize(fs, obj)
xmlDocument = fs.ToString()
End Using
La question que l’on pourrait se poser est dans quel format (donc quelle culture) on obtiendrait la sérialisation des décimal ou date de notre classe.
Pour la sérialisation des types primitifs comme Decimal, String ou encore double, le framework .net utilise toujours l’invariant Culture. Par exemple avec Floatset = 2.5, que la culture du thread ou encore celui du stringWriter associé soit fr-FR, le résultat de la sérialisation du Floatset donnerait toujours 2.5 et jamais 2,5. Pourquoi ? parce que la sérialisation utilise toujours l’invariant culture.
Début de solutions :
-
Voici une solution si vous voulez développer une classe qui sera sérializable en s’adaptant à la culture courante:
- Ignorer les attributs de types primitifs lors de la sérialisation avec le mot clé “XmlIgnore”
- Définir des propriétés du type string en lieu et place de chacun des attributs ignorés qui effectue la conversion en string par défaut du type primitif. Cette conversion par défaut se fera toujours selon la culture du thread. Voici l’exemple de code précédent dans sa version adapté à la culture :
Imports System.Xml.Serialization
Serializable()
Public Class TestSerialize
XmlIgnore() _
Public DateSet As DateTime
XmlIgnore() _
Public FloatSet As Decimal
Public StringSet As String
Public DoubleSet As Double
Public IntSet As Integer
XmlElement(ElementName:=”floatSet”) _
Public Property PFloatSet() As String
Get
Return FloatSet.ToString()
End Get
Set(ByVal value As String)
FloatSet = Decimal.Parse(value)
End Set
End Property
XmlElement(ElementName:=”dateSet”) _
Public Property PDateSet() As String
Get
Return DateSet.ToString()
End Get
Set(ByVal value As String)
DateSet = Date.Parse(value)
End Set
End Property
Public Sub New()
End Sub
End Class
- Une autre solution serait d’implémenter l’interface Iserializable. Ceci vous permettrait de contrôler totalement le processus de sérialisation de votre classe avec la méthode GetObjectData. Voici le lien sur msdn
J’espère que ce billet vous éclairera sur les problèmes de culture lors de la sérialisation et que vous y avez trouvé un début de solution.
This issue could be encountered through these next two scenarios.
First: Let’s guess you migrate your development solution into your new environment Visual studio 2008 and your project include test projects. You could be faced to this issue whether you tried to start unit test debugging. The error message which means “unable to load test or tests are disabled” will be displayed.
Second: You tried to add a new test project to your solution which is already available in Visual Studio 2008. The error message which means be “some system packages are required Visual basic, C# …” will be displayed.
Find below steps i found on the net which could avoid you to waste your time like me i did :
- Before to do anything, try to restart visual studio with the option “ResetSkipPkgs” like this “devenv /ResetSkipPkgs”
- In case of not fixed, check tools -> Options -> Environment -> International Settings.
it has not to be set with value “same as Microsoft windows”. If it’s the case, change it.
After that, visual studio restarting is required.
En 4 lignes voici une solution pour les cas où vous faites face à des problèmes de “out of memory” avec votre beau visual studio, ou améliorer les performances. En deux étapes :
* Augmenter la mémoire vive disponible pour l’IDE
* Forcer l’IDE à prendre en compte la nouvelle mémoire disponible
Avec une limitation à 4GB maximum (32-bit = 4,294,967,296 bytes = 4GB) sur une plateforme 32 bits, le maximum à réserver aux applications est 3GB, car 1GB nécessaire à l’OS.
Étape 1
SI ( OS == “XP” ) ALORS
* Démarrer -» Exécuter -» sysdm.cpl
* Onglet “Advanced”
* Paramètres de “Démarrage et récupération”
* “Modifier” (ceci va vous permettre de modifier le fichier boot.ini)
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professionnel” /noexecute=optin /fastdetect /x GB
x est la quantité de mémoire qui sera disponible pour l’utilisation des applications “user”.
Fin SI
SI (OS== “Seven” or OS == “Vista”) ALORS:
* Démarrer -» Exécuter -» cmd
* BCDEDIT /Set IncreaseUserVa 3072 ( pour passer à 3GB)
En cas d’instabilité de votre système, vous pouvez revenir à la valeur initiale par défaut en faisant:
* bcdedit /deletevalue IncreaseUserVa ( pour revenir à 2GB)
Fin SI
Etape 2
* Faire un backup de l’exécutable devenv.exe que nous allons modifier par la suite
Étape 3
* Avec le prompt de visual studio, faire une fois dans le répertoire de l’executable:
editbin /LARGEADDRESSAWARE devenv.exe
Étape 4
La plus difficile
, redémarrer votre ordinateur.
September 3rd,2010
professional |
1 Comment
It’s not a new feature of framework but always interesting to share information about it.
So by definition, an immutable class does not allow its instances to change their state. The two keywords in C# allowing immutability are :”readonly” and “Const”.
Let’s remind the famous principle which all .NET developers know : using StringBuilder instead of String in case of a lot string computation. The most famous immutable class of the framework is “String”. That’s why any string operation which needs to change the value of original string, will create a new string object.
That’s why it’s better to use stringbuilder to manipulate some string mutable values, and by this way the performance will be improved.
the advantage of immutable class is to simplify the comparing operation. despite two string objects (S1,S2 for example) are reference type, there is a way to compare them like value type. For example in a debug test: Debug.assert(S1 == S2)
the last advantage of immutable class i know is : well adapted for being the key of generic complex structure like dictionary or hashtable. as they need a key to store the value and reference it, using immutable class is well adapted as they ‘re constant in the time.
Another famous type available in C#3 is the anonymous type “var”. All fields are private and properties are readonly. I don’t know well VB.NET but it seems not to be the same case in VB.NET.
Je partage avec vous une checklist que j’ai écrite et qui résume ma recherche de solutions d’optimisation, dans le contexte d’un projet SSRS avec une volumétrie significative.
1- Les indexes
- – J’ai rajouté des indexes sur toutes les clés étrangères.
- – Avec SQL profiler, après avoir enregistré les traces du serveur de base de données, j’ai utilisé l’outil “Assistant paramétrage du serveur de base de données” pour analyser la trace afin d’obtenir des suggestions d’indexes en vue d’obtenir de meilleurs performances. Je n’ai malheureusement pas eu le temps de les créer et pousser l’étude un peu plus loin. Il est certainement possible de créer des indexes complémentaires pour améliorer les performances.
- - Il est possible de gagner en performance d’utiliser des vues indexés en lieu et place des vues simples actuellement utilisées. Rajouter des indexes sur les vues pourrait être pertinent. ( A étudier)
Happy new year 2010 / Bonne année 2010.
All best wishes / Tous mes meilleurs voeux.