I’ve migrated to Medium.com
Find new posts there. Search e.g. by name :-)
CodeAndCoffee
fredag den 10. juli 2020
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"....
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.
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.
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):
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?
Etiketter:
GOTO Conference,
Multiple choice questions
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 |
Etiketter:
børn,
Datalogi,
Devoxx4KidsDK,
folkeskolen,
GOTO Junior,
kodepiraterne,
læring
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.
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.
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. |
Dave Thomas in the same position. At least one crew person repeated compared to picture above :-) |
Etiketter:
Dave Thomas,
GOTO Conference,
influence young students,
Making a difference,
Ode
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:
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.
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.
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.
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
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
Etiketter:
Distributed Systems,
GOTO Aarhus 2013,
Mathias Meyer,
Travis-CI
Abonner på:
Opslag (Atom)