Friday, September 23, 2022

Meditation

Meditation kan berige mit liv, både når jeg finder mig i en uønsket tilstand, eller når jeg gerne vil et helt nyt sted hen.

Når jeg dvæler i en uønsket tilstand, så kan meditation dæmpe pulsen, sortere i tankerne, eller give et helt nyt perspektiv på en ubehagelig situation.

Når jeg gerne vil et nyt sted hen, så kan meditation give energi til at drive mig, idéer til eksperimenter, eller en levende og motiverende vision af målet. 

Thursday, July 30, 2020

1st to Die - by James Patterson

“1st to Die” by James Patterson, featuring inspector Lindsay of San Francisco, first book of “Women’s Murder Club” series.


Rating: 3 stars (out of 5). I liked listening to this book as an audiobook, it was good entertainment, not terribly enriching, somehow clichéed. I see it’s got an average rating above 4, which is probably reasonably within it’s genre, and I guess if you’re into fast-paced mysteries/thrillers it will be a perfect fit. I will only give it 3 stars however, since I’m not that fond of the genre, and read it in order to ‘cross-read’ for other genres and also to read James Patterson for the first time. It was a good experience, but I will probably read a lot of other authors and books before reading another James Patterson book.


Plot: Inspector Lindsay investigates a brutal murder of a newly married couple, while juggling health and love challenges.


View point: Apart from the first-person view-point of Inspector Lindsay, we also follow other characters from a third-limited point of view. This works well, I think, as a mystifying device. 


Pros:

  • Inspector Lindsay, the main character, and first-person view-point of most chapters, has a catchy ‘voice’. She is likeable and I got emotionally attached to her, a few passages gave me misty eyes.

  • It’s a real page-turner, with a clever plot, with lots of between-chapter cliff-hangers. 

  • The short chapters, more than a hundred in total, gave it a really high pace.


Cons:

  • There were some cliches in the language of the book, particularly through adverbs and consecutive adjectives, sometimes too much telling instead of showing.

  • There’s not much of a story arc for the third-person view-point characters.

Wednesday, March 11, 2020

Reduction of coronavirus epidemic - a model

DISCLAIMER: I'm not a doctor, not a virologist, not a virus expert whatsoever. I'm just curious, and worried, and like to make models of the world.

Coronavirus (COVID-19) is here, and it is essential to slow the spread.

A very simple model, which is by no means correct, can however still illustrate the importance of reducing number of contacts in order to slow the spread of a virus.

Start input:

  • Number of people in the population (example: Denmark: 5.800.000)
  • Number of initially infected people (example: 1)
Model parameters:
  • Number of people in contact with infected person, on average (example: 5)
  • Probability of infection for a person in contact with infected person (example: 10%)
  • These values for the model parameters fits such that Denmark went from 1 infected on February 27th 2020 to around 400 infected on March 11th 2020. 
And then I created a simple Google Sheet, which calculates the new number of infected persons, one day at a time:


Explanation of the model, and the columns in the spreadsheet:
  • A: Day: The date, one day at a time
  • B: Population: The total population (constant)
  • C: Has or has had virus: People who currently have or have had the virus
  • D: Has not had virus: People who have not had the virus (D = B - C)
  • E: Has virus: I assume that the virus lives for 14 days in each infected, so it's the sum of H for the last 14 days
  • F: Number of people who is in contact with virus (F = E * Contacts per infected)
  • G: Number of people who has not had virus, and who is in contact with virus (G = F * D / B)
  • H: Gets people: Number of people who gets virus that day (H = Infection rate * G)
Very simple. And here is a chart of infected as time goes by:

It is seen that there is a peak in the number of people that has the virus at the same time.

I'm totally aware, that the model is not correct, and lacks things like not all people can get infected. However, I find the model interesting in the fact that, by changing the number of contacts per infected, I can see the impact on how many people get infected in total, and when the infections peak.


So, in this model, by reducing the average number of contacts per infection from 10 to 5, the peak date is delayed by two weeks.

The morale of this model, is just the same as the experts and politicians keep telling us:
  • We need to delay this as much as possible.
  • And we delay it by reducing contacts (low number for contacts per infected in this model).
  • And of course we need to have a good hygiene as well (low number for infection rate in this model).

Friday, February 28, 2020

Driving a car

For me, driving a car has been a learning process that has taken decades. I recently decided to seek inspiration from various articles online about what people think constitutes a good driver, and I took a few things from there, that I have practiced.


Reversing into a parking slot:

I used to drive forwards into a parking slot, and then reverse when leaving, but I read about some advantages and disadvantages, and has practiced reverse parking for some months now, making it my default mode of parking.

Advantages:

  • Safety: When I reverse into a parking slot, I reverse into a known space without any traffic. When I reverse out from a parking slot, I reverse out into an unknown space with other traffic, both cars and pedestrians. So there's less risk of accidents when reversing into a parking slot.
  • Convenience:  I now find it easier to reverse navigate into a tight parking slot than I usually did while driving forward into it.

Following the speed limit:


I have never been driving too fast, I have never received a speeding ticket. On the other hand, I have for many years strived to hold the needle of the car's speedometer right on the allowed number. However, cars are allowed to show up to 10% more than the actual speed, and most cars show at least 5% more. So I have effectively been driving 5-10% slower than the limit. This has both made me arrive later and waste some minutes every day. But it has also made my driving more dangerous, because other drivers who follow the actual speed limit, would find me very slow and maybe tend to take over, which can be risky business on smaller roads. So now I have found a simple speedometer app on my phone, which I can follow when driving. And it turns out that I can now add around 10% to my speed and still follow the speed limit.


Rehearsing catastrophe braking:

... on small roads without traffic, of course.


I believe it has improved my overall driving skills.

Learning phases

Three phases of learning:

Encoding:

  • How I understand the subject and translate it into something comprehensible for me
  • Can be enhanced by using all three major methods of learning: auditive (for example by listening to a podcast or a lecture), visual (for example by looking at a diagram, might also be through reading), and kinetic (for example by doing an exercise, writing, getting your hands into stuff)

Storage:

  • How I store the subject in my memory
  • Can be improved by various techniques, for example visualizing a house with various rooms, where I can put items to remember


Retrieval:

  • How I retrieve the subject from my memory
  • Can be practiced by thinking back after any learning experience, and trying to recall what I have actually learned
  • For example, when reading a book, after each chapter, write down the major things that I remember from that chapter

Wednesday, January 29, 2020

Mirroring

Mirroring: echoing other people's words, emotions, interpretations, intentions, or body language.

Types of mirroring:

  • Mirroring words:
    • Repeating back the last few words, or significant words, from what the other person just said.
    • Shows the other person that I listen, lets other person hear what I take from what they are saying, gives the other person the opportunity to reflect on how their own words sound, and allows the other person the chance to correct or expand on their words, if they feel that I have not understood it well enough.
  • Mirroring emotions: 
    • Internalize the emotion that I perceive from the other person, feel what it does to me, and let that guide me in my responses.
    • To supplement this, I can also put a label on the emotion, for example "It sounds like you are very upset about this". Similar to mirroring words, a label on an emotion, allows the other person to reflect and expand on it.
    • Makes it easier for me to connect with the other person, and through how I act or respond it can also shows the other person that I try to connect and understand on a deeper level than just words.
  • Mirroring interpretations:
    • This requires some more work from me: I have to reflect on how the other person sees the world operate, and try to formulate how the other person interprets the world.
    • For example, I can mirror the other person's words and feelings, and then I can say something like "when your sister says that to you, you get very upset, because you would like her to do X and when she said that you realized that she was not going to".
  • Mirroring intentions:
    • Trying to hear or anticipate the action that the other person would like to take, and simply formulate it, for example "so, you would like to call your sister".
  • Mirroring body language:
    • Show the same degree of energy, use the same kind of movements, sit in the same way. This can show the other person that I have tuned in to where they are, that I am willing to stay with them, that I am walking with them.
Some examples where I have had great success with mirroring:
  • A colleague came up to me and asked me about a problem. I repeated back, and he immediately got an idea about how to proceed.
  • My two-year old son getting to bed, he cried and called for his mother. I repeated what he said, like "mooother" and "oooh", mirroring the sounds and cries. I used labeling to say something like "you sound sad". And when he cried, I focused and listened intensely to the cry, instead of wishing it go away. This made the whole deal less stressful for me and for him, and now we have a nightly routine where there's either no crying at all or a little crying, which is mirrored by me and kind of absorbed and neutralized quickly.
Some challenges I have had with mirroring:
  • If I am too slow to formulate a mirror, especially in group settings, I end up being very passive.
  • I'm very inclined towards just mirroring words, which might be a good first step, but I believe it will be more efficient if it is quickly followed up by some of the other and deeper kinds of mirroring.

Tuesday, January 28, 2020

Multi tasking

Pattern:

  • Multi tasking

Definition:

  • Multi tasking is when one entity performs two or more tasks at the same time.

Anti-pattern:

  • Task switching, where an entity frequently changes back and forth between two or more tasks, but actually does not perform the tasks at the exact same time.

Advantages of multi tasking:

  • When done right: Getting more tasks done in the same amount of time.

Risks of multi tasking:

  • Not doing the things properly.
  • When done wrong: Getting fewer tasks done in the same amount of time, due to a drastically lower focus or concentration.
  • If not really multi tasking, but task switching instead, then the focus or concentration can also be very low.

Scenarios where I believe that I have benefited from multi tasking:

  • While walking: Listening to podcasts
  • While driving car: Doing peptalk to myself. Doing breathing exercises. Doing voice exercises. Eating an apple
  • While eating (alone): Checking emails
  • While writing or coding (alone at home): Listening to music (occasionally, for a limited period of time)
  • While watching video or movie: Practicing guitar
Scenarios where I do not enjoy or benefit from multi tasking:
  • When doing fitness
  • When running
  • When coding in my company's office

Thursday, January 23, 2020

Children tips

Some techniques that have worked well with my children:

  • Non-violent communication, mirroring and labeling: When they appear sad or angry: Mirror or label their state by saying something like "you are sad" or "you are angry" or "it sounds like you are angry" or "it looks like you are tired". Then they typically connect and might say something like "yes" or actually speak out the reason for their mood. If there's a conflict, I have had some success with NVC statements like "When your brother took your toy, you got angry, because you'd like to use it". Sometimes the tension has just disappeared by saying it. Both in them and in me.
  • Even when there's no drama, mirroring and labeling are gold, making them feel alive and heard, connecting and sharing life.
  • Games at the dinner table: In order to activate and do something fun together. It can be "guess what I'm thinking", or guessing a riddle, or telling dad jokes, or 'knock knock' jokes.
  • Doing other things while they're activating themselves. Actually getting a lot of housework done, while the children are around. And meanwhile encouraging them to play with toys, play with each other, watch a movie, read, practice, play a game, or maybe even help doing something practical.
  • Following up on a conflict or a drama, by speaking about it maybe five minutes after they (and I) have calmed down.
  • Yin: Directing any negative energy towards something creative. Instead of resisting and fighting against negative energy, then speak to or show possible creative directions. 
Some things that have not worked with my children:
  • Rewards for behaviour. Keeping track is just too tedious. And I think it teaches the wrong kind of attitude
  • Time-outs for 'bad' behavior
  • Getting angry. It just makes me feel worse, and it definitely does not solve anything

Friday, January 17, 2020

The Drive of a Lazy Developer

When I think of the term "Lazy Developer", I think of cliches such as:
  • If it ain't broke, don't fix it
  • You ain't gonna need it (YAGNI)
  • Code monkeys
And the last one, "Code monkeys", contains an important point for me, but in reverse:

A Lazy Developer is not a code monkey.

A Lazy Developer is not happy to just code.

A Lazy Developer wants to achieve something, and write as little code as possible in the process.

To a Lazy Developer, a backlog of tasks is a horrible sight. Tasks here meaning "things to do".

A backlog of ideas, however, makes more sense. Ideas here meaning "ideas of how to achieve some goal".

A Lazy Developer is driven towards achieving a goal, not towards implementing some feature.

Do business owners and product owners want to hand over a backlog of tasks, things to do, to developers?

Maybe, but they risk shooting themselves in the foot.

Especially if the developers, just do it, and don't understand the value from doing it.

If developers don't understand the value, don't understand the goal, don't share the goal, then they might not be able to make the right solution, that actually gives the desired value. Or they might not take responsibility for making the right solution, because they don't feel ownership for the goal.

Wednesday, January 8, 2020

Git vs Subversion

A version control system makes it possible to keep track of changes and go back and look at the history of changes.

It can be used for keeping track of your source code if you are a software developer.

Ten years ago Subversion was probably the most popular.

Today Git is probably the most popular, in part due to github where you can share your stuff with other people.

Here are the main differences:

Subversion:

  • Is a centralized version control system, where the repository is located on a server, and you pull down a working copy to your machine
  • All operations, like commit, branch, merge, happens on the server and require network operations
  • You have to pull the latest changes from the server before you can commit
  • The history on a given branch is linear
Git:
  • Is a distributed version control system, where the entire repository is both on the server as well as on the computers of all the users that are working on that repository
  • Many operations run locally on the computer of the user, for example commit, branch, and merge
  • You can commit locally a lot, even though other users on other computers have made commits on the same branch and pushed those commits to the server
  • The history on a given branch can become, well, branched, when multiple users are working on the same branch, or when merging changes from other branches
These differences mean that there are some benefits in using Git over Subversion:
  • Branching and merging and working on the same branch as other people is usually painless in Git, whereas simple branch and merge scenarios on Subversion could give a lot of trouble (well, even git is not idiot-proof: if you have been working on a branch for a long time without integrating your changes with other people, and if other people have made significant changes to the same files, then you might be in for a big surprise, and potentially a lot of rework, when you merge)
  • Git is just faster than Subversion (since many operations are local in Git)
  • You have the entire history locally, which can give you faster access
  • With Git you have several copies of the entire repository, making you less vulnerable to the server crashing
Here's a little example of how the history can look on a branch in git, after merging in changes from the master branch:

Monday, January 6, 2020

A personal journal and goal tracker - almost out of the iPhone box

I have created a micro journal/goal setup on my iPhone, built with stuff already on my iPhone, on my Google account, and connecting them through a site called IFTTT (If This Then That).

Here's the work flow for keeping track of different activities in my journal:
  • On my iPhone I click on a "Journal" icon on my homescreen
  • I select a topic from a list, for example "Run", add a count (for example of how many kilometers) and can also enter some notes if I like
  • Every early morning I get an email, either of celebration if I have achieved a goal, or of encouragement if I'm still not quite there


How this journal/goal setup works:
  • Go to IFTTT, sign up and create a webhook that triggers a google sheet
  • It is very well described in this article how to do that: iOS Shortcuts for Data Capture (go down to the section called "Via IFTTT")
  • So, by following that guide you'll now have a shortcut icon on your iPhone that adds a row to a Google sheet
  • To create an email notification with some stats, open that spreadsheet
  • I have named the first tab where the rows are added "Hændelser" (Danish for "events")
  • I have created a second tab called "Mål" which contains my weekly or monthly goals

  • In your spreadsheet, go to the menu bar and select Tools and then Script Editor
  • Enter the following script, which will aggregate your data and send you an email:
  • Google app script that creates status mail from journal
  • Remember to change the names of your sheets, if you have named them differently than I have
  • In the script, go to Edit and then Triggers For The Current Project
  • Add a new trigger that calls the top level function "sendGoalStatus"
  • I have set it to run every morning
Every morning when I wake up, I have a fresh status of what I've done, and how far I am towards reaching my goals.

Saturday, January 4, 2020

Rewriting git history

Git makes it possible to edit documents (typically code files) in a number of ways.

(I will use the following terminology: A git repository contains commits, where each commit contains changes to one or more documents. A commit is a container for changes, and has a unique ID and an associated commit message with a description of what/why changes were made.)

Scenarios where I modify commits, and particularly where I modify the history of commits:
  • Undo a particular commit, but leave the history of that the commit has been there and that the commit was undone later.
  • Undo a commit, and remove the history that the commit was ever there.
  • Reorder commits, in order to push selected commits to other people, but leave some commits for me to continue working on and refining.
  • Reorder commits, in order to make the sequence of commits more logical.
  • Split a commit into two or more commits.
  • Collect two or more commits into one commit.
  • Move a commit from one branch to another, if I would like to use it for coming release or on some other feature work.
  • Apply my commits on top of new commits from other people, such that I can base my commits on a version that is known to work.
  • If I started committing on top of a version that is later shown to have errors, I would like to change and instead put my commits on top of a version that I know has no errors.

Sunday, December 29, 2019

Practicing with five-minute exercises

When I got a guitar as a gift and decided to practice playing it, I found a course online on Justin Sandercoes website. It is structured in small steps, and the corner-stone of the method is small five-minute exercises, with focus on different aspects, like chords, chord changes, and rhythm. This is beneficial for learning something which is difficult compared to existing habits for the hand and finger muscles (for guitar). In these five-minute exercises you’re using what Daniel Kahneman calls System 2, the slow thought system that is active when handling something new and unknown. And you’re building up a skill, such that it can be used by System 1 which is instinctive, rapid and automatic. There’s also a fine book in Danish on this subject: Bliv bedre med fokuseret træning by Susanne Bargmann and Ulrik Elholm.

I followed the guitar course, and found good progress. Especially satisfying was to measure my speed and capabilities, and see how it quickly improved.

I have used five-minute exercises for improving different skills, for example:
  • Guitar (as detailed above)
  • Voice training (strength and tone)
  • Communication (non-violent communication and negotiation)
  • Coaching (different principles and techniques)


How to do it:
  • Set goals, for guitar for example to change between two specific chords 60 times per minute
  • Break into five-minute exercises
  • Create a schedule of 30-60 minutes of different exercises
  • Do the schedule 4-5 times per week
  • Log how well you do each exercise, for example number of chord changes, or a subjective evaluation on a scale from 1 to 5

When I see the measurable progress in a specific area, I get a great sense of satisfaction, and I believe that the method outlined here has helped me achieve this.
References:

Sunday, November 15, 2015

Sabbatical - English version

I got a present from eBay this year: sabbatical; four weeks off work, in which I would recharge and get new energy, new ideas and new insights.


Calendar

I considered to go on sabbatical either as an extension of the summer holidays or in the autumn.

If sabbatical was in the summer, it would have given me a summer holiday during the entire school holidays.

If sabbatical was later, it could be in the middle of the period extending from summer holidays in early August and until the Christmas holidays in late December. Sabbatical could be combined with school holiday in week 42. We would also have the opportunity to visit more southerly latitudes in a cooler time of year, with temperatures well below 30 degrees.

The final choice was sabbatical from late September to late October.



Blank

What would I do in sabbatical?

It ​​would be different than the summer holidays.

I would like a few weeks in Italy with the family.

I wanted to be alone for a while. I had an idea to go alone somewhere here in Denmark.


Weekend

I drove home by train. I turned off mail, calendar and messages.

We bought a car; the old had been rejected at inspection. We went for a drive and celebrated sabbatical and having a car again.

We went to the swimming pools and swam in the warm water, and Karoline jumped from tilting out in the deep water.

We played Mancala and "guess who you are."



Bathing bridge

I went to Funen and lived in a lonely house. There were trees and birds and sun and water. There was no television, no wifi, no stereo and no computer. I turned off the phone.

I went down to the beach. I sat on a bench on a bathing bridge. I looked out over the bay.

I walked along the coast, inland, through forests, through fields, past pigs and cows and horses and deer, up to a listed hilltop overlooking the forests and the fields and the sea.

I ran to the eternity trees. Water trickled out of the forest. A squirrel crossed the brook.

I closed my eyes and breathed a hundred times.

I saw past and future flowing together in this moment.

The summer continued into October.

Unrest appeared. I drew a map of the turmoil, and looked at the different areas.

I meditated. Meditation dissolves the world's hustle and bustle, and pulls the veil away from the eternal peace and harmony.

Here I am. Thoughts and turmoil I place in boxes all around me. I'm looking at a box and see it sticking out in several directions. I put the box a little to the side. Here I am, and there are thoughts and unrest.

I visualized. Visualizations heals, and gives answers to my questions, like the oracle who directs my gaze inward into myself to find the answer.

One day it was calm, no wind or water or animal or human was heard. The water was blank, and crabs and starfish slipped silently under me.

I do not worry about what happens.



Italy

We flew to Italy. Karoline and William cheered on their first flight. We rode in a taxi with Joe. We sang "We'll never see Joe again, he is driven to Barcelona."

We lived in Firenze. We saw the city and the bridge and the dome. Karoline and William drove the carousel on the square. We saw the city from the small buses in the narrow streets. We found the ice cream shops. We laughed at the street performer in the square and at people he joked with.

We played on all playgrounds. We ate pizza and pasta. Janne baked Italian buns. We said "Ciao Bella" and "Buon journo Bambini". We jumped with surprise when we saw the lizards on the wall.

Later, we lived on a small mountain. We swam in the outdoor swimming pool. We woke up when thunder rolled over the mountain. We caressed the affectionate cat. We gave water to the hungry dog.

We visited Lucca and Pisa and Fosdinovo. We cycled on the city wall. We saw the leaning tower. We saw the sea from the castle on the mountain. We buried sticks in the sea and rescued them again. We lurched up the tower. Karoline and William went up and down the stairs we walked past.

William had 30 Lego bricks in his suitcase. William and Karoline built stairs and houses and people and animals and airplanes and cars.



Odder

We flew home.

We packed sandals and sunglasses away. We took scarves and hats on.

Karoline and William threw themselves into the Lego bricks. Now there were many bricks, not just 30, and the creativity that had been challenged and ransacked with 30 bricks, now had no limits.

We were catching a cold. The cold disappeared again.

Karoline went to school. William went to kindergarten.

One morning before school Karoline woke up and said, "Dad, we shall play chess." We played chess and Nine Men's Morris.

I cut the last grass before winter.

Eternity rests in every moment. The children play in the living room, are born and grow.

I gathered my notes. I went for a walk in the woods. I went for a walk on the beach. Jeg er bølgerne der vugger.

bølger mod kysten
smil og åndedrag
i himlen



Now

I hear music in the car. I see the sun rising above the horse in the fog. I work, I create, I learn. I see the moon above the harbor.

Karoline says "Good morning, Dad. Bye Dad. See you at dinner."


Gallery

Tourists in Firenze

Firenze seen from Piazzale Michelangelo

Ponte Vecchio

Duomo Firenze

The ocean seen from Fosdinovo


The castle in Fosdinovo

View from the castle in Fosdinovo

The leaning tower in Pisa

Duomo Pisa

Emaa

Piazza Anfiteatro

Olive grove

At Lucca

Tourists in Lucca

Tuesday, November 10, 2015

Sabbatical

Jeg fik en gave af eBay i år: sabbatical; fire uger fri, hvori jeg ville lade op og få ny energi, ny inspiration og ny indsigt.


Kalender

Jeg overvejede at holde sabbatical enten i forlængelse af sommerferien eller om efteråret.

Hvis sabbatical blev i forlængelse af sommerferien, ville det have givet mig fri i hele skoleferien.

Hvis sabbatical blev senere, kunne den lægges midt i perioden som strækker sig fra sommerferien i starten af august og indtil juleferien i slutningen af december. Sabbatical kunne lægges i kombination med skolernes efterårsferie. Vi ville desuden have mulighed for at besøge sydligere breddegradder på en køligere årstid med temperaturer et godt stykke under 30 grader.

Det endelige valg blev sabbatical fra slutningen af september til slutningen af oktober.



Blank

Hvad ville jeg lave i sabbatical?

Det ville blive anderledes end sommerferierne.

Jeg ville gerne et par uger sydpå sammen med familien, til Italien.

Jeg ville være alene i en periode. Jeg havde en idé om at tage alene et sted hen i Danmark.


Weekend

Jeg kørte hjem med toget. Jeg slukkede for mails, kalender og meddelelser.

Vi købte en bil; den gamle var blevet afvist ved syn. Vi kørte en tur og fejrede sabbatical og at have en bil igen.

Vi tog i svømmehallen og svømmede i det varme vand, og Karoline sprang fra vippen ud i det dybe vand.

Vi spillede kalaha og "gæt hvem du er".



Badebroen

Jeg tog til Fyn og boede i et ødehus. Der var træ og fugle og sol og vand. Der var intet tv, intet wifi, intet stereoanlæg og ingen computer. Jeg slukkede for telefonen.

Jeg gik ned til stranden. Jeg satte mig på en bænk på en badebro. Jeg så ud over bugten.

Jeg gik langs kysten, ind i landet, gennem skovene, gennem marker, forbi grise og køer og heste og hjorte, op til en fredet bakketop med udsigt over skovene og markerne og havet.

Jeg løb hen til evighedstræerne. Vandet strømmede ud af skoven. Et egern krydsede bækken.

Jeg lukkede øjnene og trak vejret hundrede gange.

Jeg så fortid og fremtid flyde sammen i dette øjeblik.

Sommeren fortsatte ind i oktober.

Uro dukkede op. Jeg tegnede et kort over uroen, og så på de forskellige områder.

Jeg mediterede. Meditation opløser verdens larm og uro, og trækker sløret bort fra evighedens fred og harmoni.

Her er jeg. Tanker og uro placerer jeg i kasser rundt omkring mig. Jeg kigger på en kasse og ser det stikke ud i flere retninger. Jeg sætter kassen lidt til siden. Her er jeg, og dér er tanker og uro.

Jeg visualiserede. Visualiseringer helbreder, og giver svar på mine spørgsmål, som oraklet der retter mit blik indad i mig selv for at finde svaret.

En dag blev det blikstille, hverken vind eller vand eller dyr eller menneske hørtes. Vandet var blankt, og krabber og søstjerner gled lydløst under mig.

Jeg bekymrer mig ikke om hvad der sker.



Italien

Vi fløj til Italien. Karoline og William jublede over deres første flyvetur. Vi kørte i taxi med Joe. Vi sang "Vi ser aldrig Joe igen, han er kørt til Barcelona".

Vi boede i Firenze. Vi så byen og broen og kuplen. Karoline og William kørte i karrusellen på torvet. Vi så byen fra de små busser i de smalle gader. Vi fandt isboderne. Vi lo ad gøgleren på pladsen og ad dem han lavede sjov med.

Vi legede på alle legepladserne. Vi spiste pizza og pasta. Janne bagte italienske boller. Vi sagde "Ciao Bella" og "Buon Journo Bambini". Vi hoppede af overraskelse over firbenene på muren.

Senere boede vi på et lille bjerg. Vi svømmede i "svømmingpoolen". Vi vågnede da tordenen rullede over bjerget. Vi kælede for den kælne kat. Vi gav vand til den sultne hund.

Vi besøgte Lucca og Pisa og Fosdinovo. Vi cyklede på bymuren. Vi så det skæve tårn. Vi så havet fra borgen på bjerget. Vi begravede pinde i havet og reddede dem igen. Vi slingrede op i tårnet. Karoline og William gik op og ned ad de trappetrin vi gik forbi.

William havde 30 legoklodser med i sin kuffert. William og Karoline byggede trapper og huse og mennesker og dyr og flyvemaskiner og biler.



Odder

Vi fløj hjem.

Vi pakkede sandaler og solbriller væk. Vi tog halstørklæde og hue på.

Karoline og William kastede sig over legoklodserne. Nu var der mange klodser, ikke bare 30, og den kreativitet, der var blevet udfordret og endevendt med 30 klodser, havde nu ingen grænser.

Vi blev forkølede. Forkølelsen forsvandt igen.

Karoline tog i skole. William tog i børnehave.

En morgen før skole stod Karoline op og sagde "Far, skal vi spille skak". Vi spillede skak og mølle.

Jeg slog det sidste græs inden vinter.

Evigheden hviler i hvert øjeblik. Børnene leger i stuen, bliver født og vokser.

Jeg samlede mine noter. Jeg gik en tur i skoven. Jeg gik en tur ved stranden. Jeg er bølgerne der vugger.

bølger mod kysten
smil og åndedrag
i himlen



Nu

Jeg hører musik i bilen. Jeg ser solen stige op over hesten i tågen. Jeg arbejder, jeg skaber, jeg lærer. Jeg ser månen over havnen.

Karoline siger "Godmorgen Far. Farvel Far. Vi ses til aftensmaden."


Galleri

Turister i Firenze

Firenze set fra Piazzale Michelangelo


Ponte Vecchio


Duomo Firenze


Havet set fra Fosdinovo


Borgen i Fosdinovo

Udsigt fra borgen i Fosdinovo

Det skæve tårn i Pisa

Duomo Pisa

Emaa

Piazza Anfiteatro

Olivenlund

Ved Lucca

Turister i Lucca

Monday, November 19, 2012

git local


The following alias sets up a command that displays branches where the newest commit is only in the local repository and not yet pushed to a remote:
git config --global --add alias.local "log --simplify-by-decoration --all --not --remotes --decorate --oneline"
It can subsequently be used simply like:
git local

Saturday, October 6, 2012

Continuous Delivery Wishes


Dear colleague, 

Please implement the following at your nearest software development company:

Product owner:
- make stories sequentially deployable

Architecture:
- architect for continous delivery
- create small units
- let each component access only its own data and otherwise call other components' APIs
- share services/infrastructure (leads to low impact deployments)

Design:
- design for continous delivery
- make it easy to release
- make it easy to change
- make it easy to deploy
- reduce risk of deployment
- leave the system always runnable
- manage 'traffic':
-- fast lane for weekly releases
-- slow lane for less frequent releases, using feature switches and dark launches
- use feature switches
- branch by abstraction = branch in code (not in version control)

Tests:
- test for continous delivery
- create predictable tests
- run system on development environment
- acceptance-test in non-integrated environment

Development:
- integrate with main line every day

Infrastructure:
- keep short build times
- script to rebuild environment from scratch (phoenix environments)
- parallelize builds
- split builds from deployments
- use a configuration server
- use a package repository

Deployment (of code changes):
- deploy in small steps
- make non-breaking database expansions
- separate deployment from release
- use blue-green deployment
- run smoke tests
- use canary releases

Release (of a feature):
- flip a feature flag
- launch in the dark
- split test

Production feedback:
- let developers follow product into production
- monitor and study usage in production
- data mine and analyse feedback
- get real user feedback
- allow everyone fast feedback on effect of change

Process:
- deploy daily
- release when features are done
- create a 'devops' mentality
- keep the software releasable on-demand

Continuous improvement:
- remember that the delivery process is never perfect
- measure improvements
- create intermediate goals
- take small steps towards continous delivery
- automate what you're doing manually
- get measurable change fast, even if goal takes years

Possible measurements:
- how many lines of code gets deployed per week?
- how long does it take from feature development is 'dev done' to it reaches production?
- how long after deployment does it take to discover new errors?
- how many man-hours does it take to quality-assure before each deployment?
- how many man-hours does it take to sign-off each deployment?
- how many man-hours does it take to deploy per week?
- how many manual steps are involved in a deployment?

Thanks to Sam Newman, Josh Graham, Michael Nygard, Mike Brittain and Jez Humble at GOTO Århus 2012.

Wednesday, April 4, 2012

TortoiseGit and ssh keys

If you use TortoiseGit to access via ssh, then follow these steps to setup the 'putty key':
- Start putty key generator: C:\Program Files\TortoiseGit\bin\puttygen.exe
- Choose Load (Load an existing private key file)
- Navigate to C:\Users\\[your user name\]\.ssh
- In 'filnavn' choose id_rsa (NB! *not* id_rsa.pub)
- Choose 'Åbn' or 'Open'
- You should get a message box like 'Successfully imported foreign key (OpenSSH SSH-2 private key)...'. Press 'OK'.
- Then choose 'Save private key'
- Are you sure you want to save this key without a passphrase to protect it? Yes or No at your own decision...
- Save the file as 'C:\Users\\[your user name\]\.ssh\tortoisegit-putty.ppk'
- In tortoisegit choose Git clone
- In Url write an ssh url
- Choose load putty key and select the file you just generated 'C:\Users\\[your user name\]\.ssh\tortoisegit-putty.ppk'

Monday, February 27, 2012

Setting up NuGet for a new project

When setting up a solution to fetch from NuGet automatically:
1) Install-Package NuGetPowerTools
2) Enable-PackageRestore
4) Ignore packages folder from version control
3) Include .nuget folder in version control

More tips here:
http://blog.davidebbo.com/2011/08/easy-way-to-set-up-nuget-to-restore.html

Saturday, July 2, 2011

CA1024: Use properties where appropriate

For a long time I had no understanding of the code analysis rule CA1024: "Use properties where appropriate."

I have often violated this rules with methods named Get*, without parameters, that returns a list of items, like

public interface IBlogRepository
{
IEnumerable GetBlogPosts();
}


I have now realized that this is probably an error, since there should always be some kind of paging (see also Ayendes comments on this).

So the correct solution is something like

public interface IBlogRepository
{
IEnumerable GetBlogPosts(int pageSize, int pageNumber);
}