fredag den 10. juli 2020

Moved to Medium.com

I’ve migrated to Medium.com

Find new posts there. Search e.g. by name :-)

fredag den 6. oktober 2017

GOTO Key Takeaways

The GOTO Copenhagen 2017 was in my opinion a great conference. Below are some of my key take-aways.

Even-though Jessica Kerr and Russ Miles did a very confusing presentation on the No slides - just Code track, I would like to try out Atomist's Slack integration tools to automate the tedious tasks in my day-to-day work and to enhance team co-operation. For instance, if you create JIRAs in the team's slack channel everybody can immediately see that you created the JIRA. Jessica Kerr reminded me about the Pragmatic Programmer and automating for acceleration.



I must read "The Why Axis" book. Correlation is not the same as causation. Linda Rising again did a fantastic presentation and I got the book she offered in the end. Linda proposed us to do experiments or trials as a better word for it, since it will never be research-like experiments. Do little trials in your organisation and hope for them to fail because, at least you tried and maybe one of the trials changes your organisation a little bit - bit by bit :-)



It might not be the best solution to use Neural Networks (pseudo-science). Instead you might be better of using probabilistic programming and Bayesian Networks (science). Michael Green taught us that you have to pose a hypothesis, do an experiment and then decide whether the hypothesis holds or not. It is very dangerous to do it the other way around: fitting you model (hypothesis) to the actual data (experiment).


I must get my team to try Mob-programming (team-programming). It made so much sense when Woody Zuill explained why this is such a sane approach to software development. Isn't that immensely ineffective? You might ask. I'm not so sure. Think about how much work you have in progress at any given time. Think about how much knowledge is needed after af unit of work is done. Check this danish blog-post out or take a look at the talk in the GOTO Play App.


We need to aid the customer buying IoT equipment so he can see how secure a given product is. This is not easy since most products are secure until proven otherwise. But Leif Nixon's presentation "Internet of Targets" showed a lot of examples of bad IoT security. I especially liked (spoiler-alert) his presentation trick where he placed a scenario about a damn somewhere in the north, that if IoT enabled could flod a large beautiful country, but this damn is not "IoT enabled"....





torsdag den 24. september 2015

Multiple-choice anti patterns, learning patterns or why I love GOTO

Here are some of the known anti patterns or things to avoid when doing multiple choice questionnaires or tests:
  • Do not mention parts of the question in the answer.
  • Do not have one answer with long explaining text.
  • Design answer combinations to avoid lucky-as-a-monkey winners.
  • Do not use multiple choice tests :-)
The anti patterns above can actually be used to pass poorly designed multiple choice exams!
Unfortunately the ones in tech knows these anti patterns, so they will not do the trick here. I really hate certifications. At best they only give you level 2 (out of 5) level knowledge of a subject. 
So what to do if you want to learn new stuff? It depends on your personal learning strategies. Personally I prefer:
  • Use it to learn it. I cannot learn to program in a new programming language by listening to a teacher or by reading a book alone. I have to get my hands dirty and try new language constructs etc.
  • Teach it to learn it. When you explain stuff using your own words you learn it yourself.
  • Study it hard to learn. I used to be good at that in university. But it seems harder with an older brain, a family and the ability to really deep dive into something is rusting.
Hmm, this was supposed to be a GOTO conference sales speech :-) I would not say, that I haven't learned anything from attending JAOO/GOTO. Here the training sessions have been the best. What I most love about GOTO, is the inspiration and the networking. 

So, the main conference is good at giving you hints when choosing leading edge technologies. Hints to other ways of working. Great stories told by interesting Key Note speakers. It also is a unique opportunity to meet old and possibly future colleagues.

At this years GOTO Cph I'm actually hosting two tracks. The Testing track and the Drones and Robotics track.

But let us get back to the wrong way to do multiple choice tests. Below are some of examples of really bad multiple-choice tests. Can you identify the before-mentioned anti-patterns? Actually I think there are a lot of other bad questionnaire patterns and some of them might be hidden in the examples below (including bad english):

TDD is a known tool in software testing and development but what does it stand for?

a) Tool Driven Development
b) Test Driven Devlopment
c) Totally-awesom Driven Development
d) Debug Driven Development


What is pair programming good for?

a) Getting things done quickly
b) Ensuring team communication
c) Pair programming is actually good for a lot of stuff. If your team does not do pair programming at least 2 hours a day, you have an unhealthy team. //FAIL: long answer = right answer


Quick test: //FAIL: 1) Bi-ased questions, 2) Monkey-answer-machine will win by identifiying an obvious pattern and answer good good good OR bad bad bad

Is test driven development good or bad?
a) good 
b) bad

Is pair-programming good or bad?
a) good
b) bad

Is design-patterns good or bad?
a) good
b) bad

Does the picture below illustrate
a) The meaning of life?
b) Proportions and perspectives?
C) One of the most popular art pieces in Esbjerg?

tirsdag den 7. januar 2014

At lære børn at programmere - og læring generelt

Abstract


Det er vigtigt at den danske ungdom uddannes i hvad IT handler om. Det er vigtigt for alle og jeg vil mene at Datalogi eller noget lignende burde være et fag i den danske folkeskole. Der er efterhånden flere interessante tiltag på området. Allesammen handler om at lege med børnene og om at lære de spirende programmører hvad programmering er for noget. Jeg lister her nogle initiativer, motiverer mit synspunkt og udvider horisonten med nogle overvejelser over design af en god udvikler-konference og om designet at et lærings-emne/konferencetrack/kursus.

Initiativer


Her er nogle af de initiativer jeg kender til:

Devoxx4KidsDK Minecraft Modding underviser i at lave MODS til Minecraft. Et MOD er en modification til et spil således at spillet opfører sig anderledes. Det kunne f.eks. være at gøre alle zombier i stand til at springe i luften. Dette initiativ er startet som et samarbejde imellem Devoxx og Javagruppen.

Kodepiraterne underviser i mange forskellige ting (KODU Game Lab, Raspberry Pi, Kinect til pc, Scratch og LEGO Mindstorms). Aalborg universitet (Sydhavnen, København) har startet dette initiativ hvis mål er "at skabe et bæredygtigt ugentligt fritidstilbud fra januar for børn og en forælder".

GOTO Junior Kan jeg nok næsten ikke stoppe med at snakke om :-) Jeg har fra mange venner og kollegaer, som vel og mærke ikke er ansat i Trifork kun hørt godt om dette initiativ. Der undervises i Visuel programmering (Scratch) og i 3D programmering (Unity).


Motivation


Jeg synes virkelig der er plads til forbedring i Danmark mht. børns læring og IT. Måske står det slet ikke så slemt til og ovenstående og forhåbentlig mange andre initiativer er med til at flytte os i den rigtige retning.

Hvorfor?


Datalogi er et vigtigt fag af mange grunde. Stort set alle danskere kan ikke undgå at få berøring med IT i deres hverdag. Derudover er datalogi og programmering - især visuel programmering - et godt værktøj for børnene til at forstå verden, modellere verden, udtrykke deres ideer.

Læring er jo i det hele taget vildt interessant


For mange år tilbage fik jeg æren af at skrive artiklen til noget IDA halløjsa ny-uddannet civil-ingeniør. Overskriften var "at lære er at leve". Det mener jeg stadigvæk. Jeg er involveret i at arrangere en udvikler-konference i København i juni måned. Den bliver interessant af flere årsager. For det første fordi det er et forsøg på at reboote GOTO i Danmark. For det andet, fordi jeg vil gøre alt for, at den centrerer som omkring læring.

Jeg har stærke aversioner mod mindmaps, men det skyldes mest, at jeg så dem første gang for mange år siden præsenteret af en overordnet i mit første job som flaskedreng. Den overordnede havde fået karakteren 6 og ville gerne lige høre mig hvad jeg gjorde, for at gøre det bedre til eksamen. Det jeg bed mest mærke var det patetiske mindmap, som ikke hjalp ham særlig meget. I virkeligheden er mindmaps ret gode til personligt at skabe et overblik over en brainstorm eller et tema. Så her er mit foreløbige mindmap. Det skal siges,  at jeg ikke har clearet med chefen at lægge dette på nettet, så sig det ikke til nogen :-)


Mindmap - læring og GOTO conference design

lørdag den 23. november 2013

Søvnløse tanker

Det er sgu ikke nemt altid. Man vil gerne alt, men når kun så lidt. Man håber på det bedste, men frygter det værste. <lorteindledning>

I dag var jeg til gymnastikopvisning. Min datter Freja var på eliteholdet. Jeg blev helt orange af stolthed (ja, jeg kender ikke farven, men det er i hvert fald ikke grøn som i grøn af misundelse). Hun lavede et meget flot split. 

Imorgen skal vi holde børnefødselsdag. Det er nok derfor jeg ikke kan sove. Øv. 

Jeg kom til at sige "Giv den gas!" til en meget travl (storløbende) far i regntøj, som jeg både mødte på vej ind og ud af centeret i dag. 

Årets julegymnastikopvisning er ret underholdende på mange måder. Det er jo hele hr og fru Tranbjerg, der er samlet på godt og givtigt ("godt og ondt" udtrykket stemmer ikke overens med den forfærdeligt vigtige management trend for tiden - vist kaldet: "positiv psykologi" ... Jeg ved ikke om det er samme trend der har fundet på at man skal spørge stressede medarbejdere om følgende: "Har du nok at lave?"..."klap i grøntsag!" Er det eneste svar jeg lige kan komme på! ... teksten: "Nu er den her parentes vist ved at tage overhånd!"... .)

Nå så da dada. 

Der er alt for mange udtryk, som er svære at tegne. Jeg nævner i flæng:
*Ben i næsen (Ser to sko hænge ud af næsebor)
*Kamme over (Ser en kam...?)
*Fik ben at gå på (Ser et juletræ med ben at gå på)
*Hvile på Laurbærene (bladene?) (Ser Master Wu hvile på en fin sammenfejet svævende bunke laurblade)
*En skygge af sig selv (rekursivitet?)
*lige til øllet (Øl-krus med afpustet skum?)



lørdag den 19. oktober 2013

Ode to Dave Thomas

Most people will not find this post interesting. In fact, I think about one person, in the whole wide world, will do so. And possibly he won't find the time to actually read it.

I attended speakers dinner at this years GOTO; conference in Aarhus. I did not speak at the conference nor was I part of the crew or an official track host. So you could argue that I shouldn't have. 

Anyway I did (thanks to Liv Beswick Skov). After a nice meal, the rest of the party was held in a kitchen / cantina. It was a very relaxed atmosphere and everyone seemed to talk to anyone. 

At one point I observed that Dave Thomas started talking to a bunch of crew members. I liked the idea, that this Guru kind-of-guy talked to these young people. The party went on and I found a 23 year old (Rum) too good to mix with cola.

Dave is right in the middle of the picture. Crew folks typically in green.
About half an hour (seemed like hours) later, I realised, that it was as if 5 people had been frozen in the same position. Dave Thomas and the same bunch of young computer science students, that is. This stamina from an, how should I put it, grand old man proves to me, that he is more than just big words on a stage. He wants to influence young people and maybe even: he wants to make the world a better place.


Dave Thomas in the same position. At least one crew person repeated compared to picture above :-)

mandag den 30. september 2013

The Smallest Distributed System

I attended the "The Smallest Distributed System" talk by Mathias Meyer at this years GOTO Aarhus, and I quite liked it. The speaker got his message through to the audience and he touched upon a lot of the important points to remember when doing a distributed system. The points were nicely exemplified, by presenting his experiences with the Travis-CI system and the problem this system faced growing from 700 builds per day in 2010 up to currently 70000 builds per day. The main lessons that he advocated for were the following:

Visibility


You need to be able to monitor your system and at real-time be able to tell what is broken. When you get this visibility, it will lead to the need of responsibility because you need to react to the problems you see in production. The visibility obtained in the Travis-CI system led to a bunch of restructuring and refactoring of the system. Time-outs against external APIs (e.g. github api) were changed from 10 minutes to 20 seconds, and a retry mechanisme was introduced enabling the system to fail fast and also to ignore when non-important requests failed.

Uncertainty ... Modularity


You need to deal with the uncertainty associated with running a distributed system in production. There will always be something failing or performing badly somewhere in a complex distributed system. To be able to deal with this, the codebase need to be well-structured with simple and small dependencies between the different modules in the system. In the Travis-CI codebase, they had (and probably still have :-) a big ball of mud, where everything heavily depend on the travis-core module. So in short to deal with complexity and uncertainty you need modularity.

Simplicity


One of the problems in the Travis-CI architecture was the logging module and the need for ordering logs to be able to display and persist them in the correct order. The first implementation had to synchronise log events to ensure the ordering. Changing the solution slightly by having each log entry know its order, within the full list of events in the a build job, simplified this radically. Having the log entries know their order, made it possible to scale-out the logging functionality. So simplicity made it easier to scale. Simplicity also made it easier to reason about what for instance went wrong when having a breakdown i production.

Mathias concluded by mentioning that in the Travis-CI system, they still have a problem with scalability because of the relational Postgres database being a bottle-neck.

Q&A


The most interesting part of the session actually was the Q&A part. Here is my take on the questions and answers:

Q) What book can you recommend on this topic?

A) None that I know of. I read papers instead. You can find reading lists on various blog posts. Leslie Lamport (http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html) has a written numerous papers on the topic which can be found on the Microsoft Research web page. Steve Vinoski (the Track Host) recommended the work published by the Distributed Systems Research Group at MIT and also Michael Nygaards Release IT book was mentioned.

Q) Are you using circuit breakers?

A) No but we are considering it and will probably implement it in the future. Matthias explained the concept, you can read about in Michael Nygaards work. In short it is a pattern that when implemented open and closes the connection to a service based upon a heuristic about how many erroneous responses the service has returned.

Q) Have do you share a temporal clock between the modules in the distributed system?

A) We don't. We have isolated the responsibility of incrementing counters for ordering log events within one module.

Q) (my question so the app actually works :-): Wouldn't it be obvious to use a NoSql database [like for instance Riak] (added by trackhost Steve Vinoski) for persisting the log-events?

A) I'm actually quite fond of Postgres, but yes - it could be a good idea to add a NoSQL database like for 
 instance Riak. Because of the isolation of different services in the current architecture it would be quite easy for us to exchange the current database with a NoSQL variant. But introducing a distributed NoSQL database also introduce an extra distributed system and thereby it also extra complexity a sources for failure.

Q) What is the Gatekeeper doing? (see slides for more details on the architecture)

A) The Gatekeeper transforms a commit into an executable build job

Q) How do you collect metrics?

A) We use Librata metrics with a custom collector. We need to improve it. We have assigned a unique UUID to each build job request and thereby making it possible to track its log entries through the system.

Q) Does all of Travis-CI only run on AWS?

A) No it actually also runs on EC2 and Heroku and we also have dedicated hardware for the system. L