(You can choose or or both)

Tuesday, October 30, 2007

Teddies in pyjamas ... code (UPDATED)


(L'autre jour, tout d'un coup, Kalia a eu l'idée de mettre tous ces nounours en pyjama...).

Tech blog aujourd'hui.

(UPDATE 2008-09-05: Il y a une meilleure version, je mettrais ici bientôt)
Visual Studio Macros to update file to Project references and vice versa
Si vous avez une solution avec 5 projets, chacun qui référence un dll externe, puis vous voulez ajouter le projet de la référence dans la solution, vous êtes obligé de mettre à jour à la main. Pire, si vous enlevez un projet, les références sont perdues - dommage !

Ces deux macros peuvent être utilisés pour automatiser la mise à jour des deux actions. Il faut les invoquer depuis 'EnvironmentEvents' pour les Solution events ProjectAdded et ProjectRemoved.

(The other day, Kalia suddenly decided she was going to put pyjamas on all her teddies...).

Sorry, programmer's blog today.

(UPDATE 2008-09-05: I have a better version which I will post here shortly)
Automatically update visual studio references from file to projet and vice versa.
If you work with solutions with lots of projects and external dependencies, you often want to swap in or out projects depending on trade offs between load time and debugging. If you have 5 projects in your solution which all reference the same dll, when you add the project in to the solution, you have to update (delete&add) each reference manually. Even worse when you remove the project - all the references are deleted, you don't even know where to add them!

These two macros are designed to automatically detect and update all references in projects (including the included project), when adding and removing projects to a solution. They have to be wired in to the Visual Studio events Solution_ProjectAdded and Solution_ProjectRemoved.

Private Sub SolutionEvents_ProjectAdded(ByVal Project As EnvDTE.Project) Handles SolutionEvents.ProjectAdded
Call HandleAddProject(Project)
End Sub

Private Sub SolutionEvents_ProjectRemoved(ByVal Project As EnvDTE.Project) Handles SolutionEvents.ProjectRemoved
Call HandleRemoveProject(Project)
End Sub

'Called on add project - cycle through other projects, replace references if found
Sub HandleAddProject(ByVal Project As EnvDTE.Project)
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj.VSProject
Dim refItem As VSLangProj.Reference

Call WriteToOutputWindow("---- Handle file references on adding " & Project.Name & " ----")

For Each proj In DTE.Solution.Projects
'Check for this project in new project's references
vsproject = Project.Object
For Each refItem In vsproject.References
If refItem.Name = proj.Name Then
refItem.Remove()
refItem = vsproject.References.AddProject(proj)
refItem.CopyLocal = False
Call WriteToOutputWindow("Changed file reference to project reference for " & refItem.Name & " in project " & Project.Name)
End If
Next

'check for new project in the project references
If Not proj.Object Is Nothing And Not proj Is Project Then
vsproject = proj.Object
For Each refItem In vsproject.References
If refItem.Name = Project.Name Then
refItem.Remove() ' remove file reference
refItem = vsproject.References.AddProject(Project) ' add project reference
refItem.CopyLocal = False
Call WriteToOutputWindow("Changed file reference to project reference for " & Project.Name & " in project " & proj.Name)
Exit For ' go to next project
End If
Next
End If
Next
End Sub

'Called on remove project - attempt to replace project reference with file reference, using project reference paths
Sub HandleRemoveProject(ByVal Project As EnvDTE.Project)
Dim proj As EnvDTE.Project
Dim vsproject As VSLangProj.VSProject
Dim refItem As VSLangProj.Reference
Dim arrRefPath() As String
Dim i As Integer
Dim fileRefPath As String

Call WriteToOutputWindow("---- Handle project references before removing " & Project.Name & " ----")

'Check all references for project we are removing - remove any project references
vsproject = Project.Object
For Each refItem In vsproject.References
If Not refItem.SourceProject Is Nothing Then
Call ChangeProjRefToFileRef(refItem, vsproject)
End If
Next

'Check all other projects in solution
For Each proj In DTE.Solution.Projects
If Not proj.Object Is Nothing And Not proj Is Project Then
vsproject = proj.Object

'Check all the refences in the project
For Each refItem In vsproject.References
' If references the project we are removing
If refItem.Name = Project.Name Then
Call ChangeProjRefToFileRef(refItem, vsproject)
Exit For ' goto next project
End If
Next ' reference
End If
Next 'project
End Sub

'For given project, check all references. If broken project references found, attempt to transform to file references
' This method is not currently used, but could be wired up to a context menu, if I could work out how...

Sub RepairBrokenProjRef(ByVal Project As EnvDTE.Project)
Dim vsproject As VSLangProj.VSProject
Dim refItem As VSLangProj.Reference
Dim arrRefPath() As String
Dim i As Integer
Dim fileRefPath As String
Dim refName As String


vsproject = Project.Object
For Each refItem In vsproject.References
' If path is empty, this reference is broken, we can try to find it in reference path
If refItem.Path = "" Then
Call ChangeProjRefToFileRef(refItem, vsproject)
End If
Next ' reference
End Sub

' Remove reference to ReferencedProjectName from references,
' Attempt to locate corresponding dll in referencePath of ReferencingProject
' If found, add to references
Sub ChangeProjRefToFileRef(ByRef refItem As VSLangProj.Reference, ByRef ReferencingProject As VSLangProj.VSProject)
Dim ReferencedProjectName As String
Dim arrRefPath() As String
Dim i As Integer
Dim fileRefPath As String

' Get project name form reference (just for readability)
ReferencedProjectName = refItem.Name

' On Error Resume Next
'Split reference path (can be multiple, or potentially also empty)
arrRefPath = Microsoft.VisualBasic.Strings.Split(ReferencingProject.Project.Properties.Item("ReferencePath").Value, ";")

For i = 0 To UBound(arrRefPath)
fileRefPath = arrRefPath(i) & ReferencedProjectName & ".dll"
If System.IO.File.Exists(fileRefPath) Then
Call refItem.Remove() 'only remove it if we can find a replacement.
Call ReferencingProject.References.Add(fileRefPath)
Call WriteToOutputWindow("Changed project reference to file reference for " & ReferencedProjectName & " in project " & ReferencingProject.Project.Name)
Exit For ' reference path worked, exit
End If
Next

End Sub

Public Sub WriteToOutputWindow(ByVal Msg As String)
Dim owPane As OutputWindowPane

Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = win.Object
Try
owPane = ow.OutputWindowPanes.Item("General")
owPane.Activate()
owPane.OutputString(Msg & vbCrLf)
Catch
End Try
End Sub

Thursday, October 25, 2007

Talking ... causette


Kalia parle de plus en plus.

Enfin, elle parle depuis longtemps, disons que maintenant on commence à communiquer. Elle veut parler notre langue (nos langues) maintenant. Avant elle ne voulait rien répéter, ne disait que ses mots à elle...

Elle a une tendance très drôle de parler en verlan: à plusieurs reprises je lui ai dit 'cat' et elle m'a ressorti 'tac'. Louis devient Ilou. Je ne sais pas si la dyslexie verbale existe?

Mais c'est sympa de pouvoir comprendre un peu plus ce qu'elle veut et ce qu'elle veut dire. Elle me téléphone tous les jours au bureau pour m'expliquer ses aventures. D'ici peu je devrais y comprendre peut-être quelque chose

Kalia is talking more and more.

Well, she's been talking for ages, but now she's started to get interested in talking our language(s). Before, she never wanted to try any of our words, just talked her own gobbledygook (someone asked me a few weeks ago if she was talking Arabic or Hebrew!).

She does tend to repeat words backwards though, which is quite funny - cat comes out as tac! Is that dyslexia?

But it's nice to be able to understand a bit better what she wants, and what she wants to say. She phones me most days at work to tell me all the interesting things she's up to. There is hope that it the not too distant future I might be able to understand!

Wednesday, October 24, 2007

Knie


Comme tous les mois d'octobre, le cirque Knie a fait son passage à Vevey il y a quelques jours.

C'était l'occasion d'aller voir les éléphants en train de manger dérrière la Coop avec Kalia (j'ai oublié l'appareil photo). Puis on est aussi allé visité la ménagerie. Ce qui l'intéressait le plus pour finir c'était les poney, elle aurait volontiers monté dessus, mais je pense que ce sera pour l'année prochaine.

On a aussi croisé Mia, une copie de la garderie de l'église.

Sympa comment ces évènements annuels rythment la vie. Plus que Noël et les anniversaires. j'apprécie ces traditions! Je deviens suisse, ou vieux (ou les deux!)

Every october the Knie circuses annual tour comes to Vevey.

This time I took Kalia to see the 'feeding of the elephants' behind the local coop - no photos of that, but quite impressive seeing them gobble down whole cases of bread and fruit. I'm sure they do stuff here that would never get past health and safety in the UK or lawyers in the US - handing out bananas to all the children in the audience then bringing round the elephants to pick them out of their hands!

We went to the little travelling zoo that accompanies the circus too. Kalia was really interested in having a ride on the ponys, but I'm saving that for next year.

We met Mia too, a friend from church.

I like the way these annual events create waypoints in life. I'm getting into traditions?! I must be going swiss, or getting old, or both!


Sunday, October 21, 2007

Aosta


J'ai fait un aller-retour ultra rapide en Italie samedi matin pour aller chercher de la 'marchandise' à l'aéroport d'Aoste (rien à voir avec des avions, c'était juste un point de rencontre facile à repérer).

Parti à 7h30 de chez nous, je suis arrivé là-bas vers 09h20. Il faisait un froid de canard.

J'ai eu chaud au retour. Pour dédouaner 100 litres d'huile d'olive, il a fallu débourser 220F! Je m'y attendais, mais ce à quoi je ne m'attendais pas, c'était que ma carte de crédit ne veuille pas fonctionner ! (Merci Supercard de la Coop et sa fameuse limite de 2000F!). Là, même s'il faisait froid, j'ai commencé à transpirer...

Je ne sais pas si ça fait parti de la formation, si c'est un critère de séléction, ou si c'est le fait d'être privé de lumière dans un tunnel à des températures peu élevés, mais les douaniers n'étaient pas franchement cordial...
"Monsieur, vous avez deux solutions - soit vous dites à votre femme de venir ici avec l'argent, soit vous retourner à Aosta pour chercher de l'argent."

Oui, cool. C'est moi qui a la voiture, donc à pied depuis Vevey, ça va faire un peu long. Puis à Aosta je ne connais personnne.

J'ai ressayé la carte dans le bancomat à côté de la douane. J'ai même essayé ma carte de crédit de Lloyds Bank (le compte que je ne touche plus depuis longtemps et qui a 1.86 livres sterling dessus...) que dalle.

Pour finir, j'ai essayé la carte anglaise pour payer à la douane, et là - oh miracle! - ça a passé.

Ouf.

Alors, si ça vous intéresse de l'huile d'olive à 20F le litre... faites signe!

Took a little trip to Italy on Saturday morning - just a little hop, skip and jump across the border to Aosta (les than 2 hours), where I had a rendez-vous at the airport (easiest place to meet up without getting horribly lost).

Took delivery of 100 litres of olive oil.

Getting it back through customs was a little less of a hop and skip...

The tax on 100 litres of olive oil (well, 96 litres actually, as 4 are counted as for 'personal consumption') was 220F - i.e. not cheap at all. I was expecting as much, but I wasn't expecting my credit card to not work. At this point I started sweating, even though it was perishing cold up there (Grand San Bernard).

Of course, customs officers being that typical jovial type, they really helped to make me feel better: "You've got two options, sir. Either you get your wife to come here with the necessary funds, or you go back to Aosta to find some money."

Yeah, great. I've got the car, so walking up here from Vevey is going to take a bit long. And going back to Aosta won't change anything...

I tried going to the hole in the wall, no joy there. Even tried my LloydsTSB card in the hole in the wall (£1.86 on that account), no better.

In the end, on the off chance, I tried paying with the Lloyds card. And it worked (mega-phew!).

Note that this is not a money-making affair (well, not for us). Just us trying to help out some friends in Italy.

Thursday, October 18, 2007

Memory & Music

Hier soir j'étais à l'église où on a eu une discussion sur le style de chants dans nos cultes. C'était intéressant de voir les différents points de vue. Pas forcément toujours clairement démarqué entre 'jeunes' et 'vieux'.

Une chose qui est clairement ressorti est l'effet miraculeux de la musique pour la mémorisation. Plusieurs personnes ont partagé des expériences de paroles de chant qui leur restaient des années plus tard.

C'est drôle, parce que ces jours-ci j'ai des chants de 'Graceland' de Paul Simon qui me trottent dans la tête, alors que je ne l'ai plus écouté depuis que je faisais mes devoirs à l'uni (il y a un certain temps...)

"Poor boys and pilgrims and families and we're all going to graceland"
"As if I didn't know that, as if I didn't know my own bed"
"The bomb in the baby carriage was wired to the radio"
"You don't think you could love me but I think you could".
etc.etc.

Ce n'est donc pas que les chants 'religieux' qui marche bien pour la mémorisation. Ce qui est incroyable c'est que les textes des chants de Paul Simon sont plus ou moins cryptiques, donc on ne retient pas vraiment le sens, juste les paroles.

D'où (à mon sens) l'intérêt d'avoir des chants riches de sens à l'église. Même si sur le coup on ne comprends pas, si on a bien intégré les paroles, elles vont rester avec nous pendant des années, et un jour peut-être on comprendra mieux et on sera enrichi.

(Mieux vaut avoir des chants compréhensibles tout de suite, je suis d'accord!)

Last night we had a discussion at church about the style of songs we use for our services.

It was interesting to see the different points of view, which weren't necessarily along the traditional age boundaries.

One thing that stood out clearly was the 'miraculous' effect music has for memorisation. Several peoples recounted their experiences of remembering words for songs decades after having learnt them.

Funny, because recently I have had Paul Simon's "Graceland" album going round and round in my head - even though I haven't listened to it since I was at university (which is a while ago now).

"Well, that's one way to lose these walking blues"
"She was physically forgotten, then she slipped into my pocket with my car keys"
"Fat Charlie the archangel filed for divorce"
"These are the days of miracles and wonders, and don't cry baby, don't cry"
etc.

It's not just 'religious' songs which get memorised! The funny thing is that Paul Simon's song are often cryptic, so I don't think I really remember the 'meaning', just the words.

So (I think) it's a good thing to have 'meaty' songs at church, even if youngsters don't understand them completely, the words can stay with you for years afterwards, and maybe once you're older you understand better (or differently).

(Of course, having words that are understandable right now is a good idea too!)

Monday, October 08, 2007

Swiss vapeur parc


Cette été, quand nous sommes allé au Swiss Vapeur Parc, il n'y avait pas encore la possibilité de mettre des vidéos sur le blog.

Maintenant si, alors voilà une chouette vidéo de Kalia - c'est une chouette exemple d'enfance insouciante, profitant de l'instant présent sans complexes.

This summer when we went to Swiss Vapeur Parc, Blogger didn't provide the video function.

But now it does, so here's a lovely video of Kalia - a nice example of carefree childhood - making the most of the here and now, and not worrying what other people might think!

Saturday, October 06, 2007

Plan B



La semaine passée, il y a eu des travaux chez nous, la gérance s'étant décidé à changer notre 'double vitrage' presque centenaire pour du double vitrage moderne (mais en plastoche).

En rentrant jeudi soir, j'ai été bien amusé de voir que les ouvriers ont eu recours au 'plan B' pour la fenêtre de la salle de bain. Ils avaient tout découpé l'ancienne fenêtre, puis lors de la pose de la nouvelle ils se sont rendu compte que les mesures avaient été mal prises...

En plus c'était la fin de la journée, et une nouvelle fenêtre, il faut compter presque deux semaines.

Alors ils ont fait un 'hack' (c'est comme ça qu'on l'appelle chez les informaticiens). Bien sûr, la grosse différence entre un 'hack' comme celui-ci et un hack d'informaticien, c'est que celui de l'informaticien, vous ne le voyez pas...

(Ci-dessous, une des nouvelles fenêtres)

Had the workmen in last week, replacing our 80 year old 'double glazing' (actually double windows) with the real thing.

Had a chuckle on Thursday evening when I got back and saw this. It appears that they'd hacked the bathroom window out, only to discover that the new window didn't fit.

They rapidly cobbled the old window back in place (screws straight into the frame, silicon and expanding foam etc.).

Nice to know that it doesn't just happen to programmers.

Of course, the difference with a software 'hack' is that the end user never knows!
(Below, a successfully changed window)

Friday, October 05, 2007

Look back ... souvenirs

Il y a 17 ans et quelques jours, un garçon anglais de 18 ans traversait la Manche pour aller en Bretagne à 'La Maison Blanche' à Dinan...

C'était entre l'école et l'uni, et comme beaucoup de jeunes anglais (à l'époque), j'ai fait une année 'sabbatique' entre deux. C'est le moment ou jamais pour faire une 'folie' - pas de responsabilités, peu de frais. Et la tête encore fraiche et disponible !

J'ai fait une année de bénévolat, et j'ai découvert ce qu'était le plaisir de travailler (chose inconnu à l'école). J'ai fait de tout - maintenance à l'intérieur, construction, cuisine, garder des gamins, tondre la pelouse. J'ai rencontré beaucoup des personnes avec qui j'ai gardé des contacts depuis.

Le couple qui tenait 'La Maison Blanche' (mélange entre église, lieu d'accueil pour paumés, centre de conférences, kibbutz et je ne sais pas quoi encore) savait très bien l'anglais mais ils ont fait exprès de ne parler qu'en français. Ce pourquoi je leur suis infiniment reconnaissant.

Cette année passée en France a complètement changé le cours de ma vie, j'en suis sûr. Sans ça je ne serais pas ici en Suisse, marié avec ma femme (avec qui on communique on français), et avec une petite fille merveilleuse qui sera (on espère) trilingue.

Round about 17 years ago, an 18 year-old british lad sailed across the Channel to spend a year at 'La Maison Blanche' in Brittany...

It was a 'gap' year between end of A-levels and uni. Quite common at that time, but probably a bit less so now that there is student debt and all that stuff. But it is the ideal time to do 'once in a lifetime' stuff - when you've got no mortgage to pay, no job, no responsibility, and your brain is still malleable!

I did a year of voluntary work - the first time I discovered that any kind of work could be enjoyable (that never happened at school!). All kinds of stuff - painting, mowing the grass in the massive garden, gardening, driving the tractor, feeding the chickens, cooking, washing up, looking after kids. I met lots of people with who I'm still in touch with today.

The couple who ran this place (which was a cross between conference center, church, kibbutz, place for socially-disadvantaged persons etc.) spoke very good English, but only ever talked to me in French. For which I'm very grateful.

That one year completely changed the course of my existence. Without it I wouldn't now be living and working in Switzerland, married to my wife (we communicate in French), with a beautiful daughter who we hope will be trilingual.

(However, my English would probably better...)