tag:blogger.com,1999:blog-24457948990328556802024-03-13T14:35:08.381+01:00The Sanity ResortSanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-2445794899032855680.post-71981143591110935622023-04-18T22:09:00.001+02:002023-04-18T22:23:24.019+02:00Beyondtellerrand 2023 Düssldorf<h2 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">WACOM Warm-Up</span></span></h2><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">As last year we start off with the lovely people at WACOM who indulge us with tasty food and refreshing drinks. Toying around with their awesome products gives you a good impression why they are so well renowned in the graphics ecosystem. It was a bit sad we did not have a talk there like last time but still a great way to get into btconf mindset.</span></span></div><h2 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Day 1</span></span></h2><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Back at Capitol Theater once again. Even though I am only here once a year it feels strangely familiar. Tobi Lessnow aka Baldower is back at the turntables with his unique sound. We have our transcription service as well (even transcribing song lyrics) and the fabled Twitter wall. Or wait.. This time the wall also shows Mastodon messages! Same, same.. but different :-)</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Little anecdote: Two of our little group of four only realized on Sunday evening that they did not actually buy tickets. But the great staff around Marc did check and were able to squeeze them in (door price of course, but still). This resembles the special effort made at the conference series that makes it feel simply special. Thanks a lot!!</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">This Website Is under Construction – a Love Letter to the Personal Website - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/sophie-koonin" target="_blank">Sophie Koonin</a></span></span></h3><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The title here is pretty descriptive. Sophie make a lovely plea for the revival of individual websites. Nowadays most websites look the same, built by the same tools and often for the same purpose: to make BU B6money.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Social media allows you to meet people and to generate content for them. But it comes at the cost of creativity (facebook pages e.g. all look the same) and also loss of control over your content.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">But why do we not make fun/individual sites for ourselves anymore? Sophie takes us on a trip down memory lane starting with the first websites displaying static data evolving to hosted services like geocities and the changes brought on by web 2.0 and social media like myspace. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In the end the web has become more about the consumers and how to please them than about the creators and why they build things. Sophie tries to encourage us to build things that we care about, that might be pointless or only concern a small group of people as long as we fun making it. Be yourselves, be creative, be you!</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Once again a great starting talk setting the spirit of <span style="white-space: pre;"> </span>btconf. Thank you Marc but most of all thank you Sophie!!</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Mapping Typography - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/scott-kellum" target="_blank">Scott Kellum</a> </span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Often a webpage is regarded like a 2 dimensional sheet of paper and for a specific viewport this is indeed true. But a website is much more than this, the viewport can have different heights or widths or is affected by other settings like color modes. All of this make a website a mutli-dimensional object and as a result stylings need to take this into account making the task of a consistent style for all variations and permutations a complex and challenging effort.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">To tackle it one requires a system, a design system. But how do we start with that, what is important to consider and what tools can we use. These are some aspects that Scott tries to cover in this talk.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">We start out by how a font is usually designed. Common practice is to start with the letters H O D n o p which give a good impression how a font will look overall as they cover general balance, roundings, straights and the combinations of those. Also for each letter you need to create different weights and styles (like italic or boldness) resulting in a multidimensional set of letter variants. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Unfortunately it is not enough to create a set of nice looking letters, in the end all the letters in a font need to go together, for which font designers use words like Handgloves or similar to make sure the overall fit works well.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Once we have a well defined font the next challenge is to apply it properly in the actual contexts. As an example Scott shows how newspapers use heavier fonts for shorter headlines and lighter for shorter ones. It is also important to adjust other properties like line height depending on certain attributes like width of the enclosing container.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">It can become very complex and confusing to define rules or media queries for all these combinations and sometimes it is even impossible with todays tools to achieve a concise design. This is where a new shiny toy comes in: CQI</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">It gives you the ability to react on the inline size of a container and use this in formulas and animations. With that you can implement various behaviors of font properties to provide consistent and sensible styling throughout all of your website's dimensions.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Since this is not supported in browsers yet Scott showed us some rather hacky workarounds using e.g. css animations to achieve similar effects.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The actual code details were glossed over a bit too quickly for my taste so I had a hard time following but I am sure if you watch the video it will all make sense to you.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">ET TU, AI? - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/mario-klingemann" target="_blank">Mario Klingemann</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Mario is a recognized and award winning artist who uses AI and other generative techniques. Throughout his talk he presented various of his projects that use different algorithms and ways to combine data achieving impressive and interesting results. One example being music used as input to dynamically morph different portions of a set of images. </span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">For Mario, AI provides new ways to view and combine existing data but on the other hand he enjoys getting inspiration from the real world. As an example, whenever he is in London he tries to find his way to the Thames on low tide and go mudlarking. Which is strolling through the muddy river bed to see what can be found there giving him new impulses.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The new and upcoming AI tools enable everyone to become a generative artist but it takes the creative mind of people like Mario to come up with new and unique ideas using these tools.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Describing all the projects Mario presented would not do them justice so I recommend simply watching the talk or at least looking up some of his projects like Archive Speed Dating, the Uncanny Mirror or Botto.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The latter being an AI creating digital art and selling it to sustain its own infrastructure costs and so becoming a self-sufficient artificial entity (or at least almost). Up until now Botto generated about $2.5 Million of which nothing goes to Mario but is solely used for Botto's expenses. </span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">瞑想と書: Meditation with Calligraphy - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/aoi-yamaguchi" target="_blank">Aoi Yamaguchi</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Aoi is the daughter of a calligraphy master craftswoman and got enrolled into a calligraphy school at the age of 6. Later on she incidentally mentions she also started learning the piano at the age of 5 (let that sink in for a moment...). At the age of 14 she achieved the rank of master student. As much as we are aware of the disciplined upbringing common in Japanese culture, it still impresses me everytime I hear of such examples.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Throughout her whole talk Aoi keeps coming back to the values instilled in her during her education. Qualities like discipline, perseverance and patience being some of the most important ones. </span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">On the other hand she explains what meditation means to her and where meditation and calligraphy either complete or overlap with each other. Mediation helps her to calm down, clear her mind and focus on the drawing she is about to perform. Also the process of preparing her ink is a small mediation in itself and the list goes on and on.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Aoi also showed us videos of some of her performances emphasizing the traditional aspect of calligraphy and importance of those related traits.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">I found it very interesting to see what kind of passion and determination goes into traditional calligraphy art while from the outside this is hardly noticeable. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h3 style="text-align: left;"><span style="font-family: Arial; font-size: 14.6667px; white-space: pre-wrap;">How to be an Ultra Artist - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/gemma-o-brien" target="_blank">Gemma O’Brien</a></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">This talk started with a nice touch as Gemma added pictures from her morning run to the beginning of her presentation. During her whole talk she managed to radiate energy and positivity which gave off a lovely vibe.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Already in her early years Gemma loved to paint and always embraced new tools or technologies to create content be it a camcorder or her first computer. Being a successful student she first enrolled into law school but soon decided to drop out and study graphic design instead. It was then when she fell in love with printing and lettering leading her to typography. During her studies she created a video in which she covered her body in different letters that somehow found it's way into a German magazine and eventually led to her being invited to speak at a conference despite never having actually worked in the field. But it all worked out fine and somehow got her to work for global companies and become rather successful.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">After a while she found herself drawn back to her roots, working with letters. The talk featured many examples of her work and those alone make the video worth watching. Being driven to find new ways on how to work with lettering she discovered calligraphy and experimented with the basics. At one point she got hired to create several hand painted, large scale billboards and simply loved working on such a big scale.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial; font-size: 14.6667px; white-space: pre-wrap;">She was downright possessed with drawing and so started drawing on the sick bags on her many flights she had to go on. This got worse with the uprise of tablets, because now she could work anywhere anytime. Over time Gemma was spiraling into a burnout and to get out if she had to return to her initial, analog work process.</span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">To help her, Gemma created a visual diary, a huge physical book where she keeps all of her sketches and even print outs of her drafts. This allowed her to focus again and slow down. Then the pandemic hit and she found herself more or less locked up in her studio for a year. So she finally got into running, first a few kilometers increasing more and more over time until she ran half and even full marathons. But not enough with that, she set her mind on running an ultra marathon and bought a book about it to help her prepare.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Though for some reason the event got canceled and Gemma today realizes that this was a very good thing. But the contents of her ultra marathon book helped her to understand some of the issues she was facing in life and so she retargeted her goal from becoming an ultra runner to becoming an ultra artist. Someone who keeps on creating and being creative over and over again. Only time will tell if she will achieve this...</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In my opinion, an inspirational and energizing talk, worth watching!</span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Goats and cars: beyond failure - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/thomas-thwaites" target="_blank">Thomas Thwaites</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Last talk of the day, everyone being pretty knackered already and a title that leaves you a bit confused. Sounds about right, doesn't it?</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">I have to be honest, at the start I had absolutely no clue where this was headed or what Thomas actually does ;-)</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">From what I understood so far he is a maker, a creator who tries to make weird or even seemingly impossible things become reality.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">At the start we saw a few of his past projects which were interesting and amusing. Then he kind of switched pace, describing how he felt that as a maker he should at least once make something from scratch and his decision was to make… a toaster.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">But not like one would think as in getting like a metal case and the fitting plastic frames etc. No he started out to make steel. So we watched a video where he called a mine to get some ore and for the other components he was equally strict. Very funny to watch.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The next part was rather weird and I can't really say why Thomas made this project but he did..</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The idea was how he could transform himself into a goat. We are not talking Halloween costume or cosplaying. He really investigated how his brain could be changed to become more goat like, what prosthetics he would need to walk like a goat and even how to enhance his digestive system to be able to live of grass and other plants.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">He consulted legit scientists all over the world and put in a huge amount of effort. In the end he spent several days living among a herd in the Swiss alps.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">I know this sounds super weird and it is. Just watch the video. It is a mix of funny, disturbing and fascinating.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">After this he started to build a harmless car. So far he built a chassis out of a certain kind of wicker like wood </span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">I can't really explain.. just watch the talk.</span></span></div><h2 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Day 2</span></span></h2><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">The 7 Traits of an Emotionally Fit Leader - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/emily-anhalt" target="_blank">Emily Anhalt</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Before I start: This is THE must see talk of the conference. If you are going to watch only one talk (even though I would not know why) then this is the one to go for. It is funny, insightful, useful and simply awesome! </span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Also when you watch (not “if” “when”!!!) make sure to watch it together with someone else (or in pairs if you are more people). Over the course of the talk there are short exercises for the audience that need to be done in pairs and they are worth it.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Emily has a doctorate in psychology and extensive experience in therapy. We start off with some basic concepts about mental health and how basically everyone has the one or other issue to work through in their lives. It is also important to realize that “not sick” does not necessarily mean “healthy” or even “fit”, that goes for physical and emotional fitness.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Emily did conduct a survey among 100 psychiatrists and 100 leaders in which she asked them how they recognize if the person opposite of them is “emotionally fit” and summarized the results as well as techniques on how to ascertain, ensure and achieve such a fitness.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">I will only give short summaries of the 7 topics because if I try an extensive report I am bound to get things wrong, so once again: Watch the talk!</span></span></div><div><br /></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">1. Self Awareness</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">One has to understand their own triggers and biases in order to be able to cope with them. Going into therapy can be a very useful tool here regardless if you are working through an issue at that moment. It is even better to train your emotional muscles as long as you are healthy just in the same way as it is with your physical muscles.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Keeping a journal and explicitly asking for feedback are also good ways to increase your self awareness</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">2. Empathy</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Empathy means to not only understand others but to also relate to their feelings, otherwise it is “just” sympathy.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Here she introduces the tool of an Emotional Fitness Survey in which people can give hints to their friends/coworkers how to react in certain situations.</span></span></div><div><br /></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">3. Mindfulness</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In order to grow we sometimes need to accept discomfort instead of avoiding it. Otherwise we risk getting stuck and then ending up in even worse situations than the ones we tried to avoid in the first place.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">4. Curiosity</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In case of criticism we should learn to accept it and be curious on how to improve instead of getting defensive. To help with that it is necessary to build up a certain self confidence. Here she suggests the tool of a self-esteem (team) file.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">5. Playfulness</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">If someone approaches you with an idea, say “yes, and” instead of “yes, but”. Dare to play around with ideas, ignore constraints, think big e.g. start meetings with ice-breaker questions. </span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In Emily’s slides is a link to 30 of her favorite ice-breaker questions and one is used in one of the aforementioned exercises, so try it :-) </span></span></div><div><br /></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">6. Resilience</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In order to become more resilient in the face of critical issues it can help to learn not to worry about things that have not happened yet and/or things that you have no control over if that will be an issue one day. Be confident in your future self to handle these things when they happen.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Share with others what your warning signs of becoming burned out are, so that they can give you feedback on that and help you react before it hits you.</span></span></div><div><br /></div><h4 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">7. Communication</span></span></h4><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">It is better to communicate things clearly instead of suppressing issues and then being even more upset if the other person does not notice that something is wrong. In her company and even her relationship they established the use of remojis. If you do not know what they are, watch the talk.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">This talk was the perfect start for the second day and the slot was the perfect fit for such a talk. Brilliant matching by Marc!</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Typography for Everyone - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/tobias-kunisch" target="_blank">Tobias Kunisch</a> </span></span></h3><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Tobias has been involved with fonts for a very long time and took us on short time travel on the evolution of digital fonts. In 2010 IKEA changed their font on the yearly catalog to Verdana for the sole reason to the same font for their online and offline presence. At that time there was only about a dozen web fonts available that could be used reliably so that is why the print version had to be adjusted.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">In the early days of the web there were not many options, some people used js hacks like sIFR to replace fonts dynamically. But then HTML5/CSS3 came along and introduced the font-face directive. Finally fonts could be embedded in websites just like images. So all's well that ends well, right?</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Not quite: Even though now from a tech perspective fonts could be used easily there was still the issue of licensing. After all, even font designers need to eat, or so they claim. And so the issue was now to find a font that you were actually allowed to use.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">This bothered Tobias pretty much and he was dreaming of a world where there were free fonts for everyone easy to use. At that time he started his job at Google and met 2 colleagues who were working on that exact issue as part of their 20% project. Tobias joined them and this project is now known as Google Fonts!!</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">But still, there are some issues with fonts. For one there are many many many glyphs out there and most fonts only contain a small subset of those, e.g. the Latin glyphs (just like the ones you are reading right now). But there are so much more, to be more precise all those that are part of the unicode standard. So in order for a font to be truly useful to everyone it should contain all these glyphs. Noto is such a font that is meant to address this issue and is kept up to date with all additions to unicode.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Even though there are a lot of fonts out there catering for various different needs, e.g. fonts helping people that suffer from dyslexia or have very bad eyesight or fonts that need to render a certain letter differently depending on where in a word that letter appears.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">As if that was not already a lot to take in, lastly we Tobias covered the topic of Variable Fonts and Color Fonts. These fonts can be defined in a highly flexible way with arbitrary values for things like weight, width, length of ascending or descending glyph parts and even have decorations depending on their context or different coloring in single parts of a glyph. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Modern CSS Layout is Awesome! - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/michelle-barker" target="_blank">Michelle Barker</a></span></span></h3><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Oh yeah, fasten your seatbelts, the techie train is about to shift into the next gear.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Where Tobias left us with a nice push down the tech path Michelle took over and off we went.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">She showed us not just what nice and shiny tools modern CSS has in store for us but also how to use them with some lovely demo coding. At first we took a short glance into the past about floating divs, flexbox and the arrival of grid just to then dive into new and more advanced tools.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">There is no use to describe it all you need to have a look at the talk but as a teaser: You will learn about aspect ratio, object fit, gap, small/large/dynamic viewport units, overlaying, inset, grid, subgrid, intrinsic sizing, feature queries, has(), animated grid tracks, container queries and more!</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">You just gotta love this!</span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Animating the Impossible - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/cassie-evans" target="_blank">Cassie Evans</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Well, I might sound like a broken record here but again we get into deep technical waters this time about UI animations with Cassie.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">She showed us what cool things can be done using tools provided by gsap when animating objects on websites and what issues of traditional approaches are solved by them. One issue is that in order to use an animation you need to define the boundaries in the same unit, so e.g. combining a px value with the ‘auto’ keyword just ain’t gonna cut it. Or when you have to deal with objects using different positioning directives.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">She even threw in some biology explaining to us, why in the peripheral view we mostly just recognize motion and how that should be factored in when creating user interactions.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Another funny and insightful talk that should go on your watch list as once again a transcript just is not enough.</span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Side Quests: Satisfy Your Distracted Self - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/hugh-elliott" target="_blank">Hugh Elliott</a></span></span></h3><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Oh boy, everyone’s head is dizzy from all the tech input before and we are already for a new topic. But Hugh gave us a nice change of pace, telling us the story of his early professional life and how he became a tinkerer and a creator. What motivated him and how that impacted his life.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">If you want the bare facts then it could be summarized like this: Hugh created a rainbow colored led rod and used that with long term photography to create pictures of rainbow curves in lovely sceneries and even got to work on the pride campaign of WWE. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Sounds rather drab, doesn’t it? But it wasn't! This guy is a great speaker, funny, a bit ironic, sometimes a bit below the belt, everyone had a blast. And if that was not enough he even managed to raise money for LGBTQIA2S+ charities on the way.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Start the video, kick back and enjoy!</span></span></div><div><br /></div><h3 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Past Present Future - <a href="https://beyondtellerrand.com/events/dusseldorf-2023/speakers/eike-konig" target="_blank">Eike König</a></span></span></h3><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Okay, last talk of the conference. Expectations are high and the previous talk might be hard to follow. As a heads up due to the schedule being delayed and our train leaving earlier than we would have liked (was unfortunately the last option to bring us back to Munich at a sensible time) we had to leave the talk early after about 30 minutes. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">We start with a somewhat artsy music performance which, I must honestly say, I did not get. Followed by a rather dark reminder that creativity can also be used to create destructive things like the atomic bomb. Very true and very discomforting. I braced myself for some deep and meaningful content.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">But after that the presentation was more like a stoic stringing together of Eike’s work in advertising and his art studio presented without much passion or joy, glossing over most things, skipping many slides over and over with comments like “that doesn’t matter anymore because it is in the past” but still emphasizing all the things he and his team did just to diminish them again immediately.</span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">At this point we had to go and I really hope this talk will be uploaded so I can check the end and see if there is some iconic twist that explains everything and proves that I am just to stupid to understand what Eike was setting up.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">One thing I feel the need to point out though is that during the pandemic when there were not many jobs for him and his employees he started his 50/50 project. Meaning that he sold his work for half the price with the requirement that his customers spend the other half (or maybe just some of it, I can’t remember at the moment) on charity or buy things from other artists so that everyone gets a share and can make a living. This I consider a great idea and a nice touch.</span></span></div><div><br /></div><h2 style="text-align: left;"><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Summary:</span></span></h2><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Again another great conference with the lovely Marc being his charming self and setting a great atmosphere once more. Apart from the last talk the second day blew my mind, the first day was good too, but just not quite at that level overall.</span></span></div><div><br /></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">One thing you have to keep in mind if you consider going next year (which you should) there will be delays. Not one talk started on time, so it might be a good idea to travel back on Wednesday if possible. </span></span></div><div><span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div><div><span style="font-family: Arial; font-size: 14.6667px; white-space: pre-wrap;">I really hope all talks will be available online (<a href="https://www.youtube.com/@btconf/videos" target="_blank">youtube</a>) as there are many that I would like to share with colleagues and friends. Until next time!</span></div><div><br /></div>SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com2tag:blogger.com,1999:blog-2445794899032855680.post-75185563762140770682022-05-04T17:35:00.004+02:002022-05-12T14:43:40.839+02:00Beyondtellerrand 2022 Düsseldorf<p>After the involuntary hiatus of the last years, it was once again time to join <a href="https://twitter.com/btconf" target="_blank">btconf</a> in Düsseldorf!!<br /><br />The tireless <a href="https://marcthiele.com/" target="_blank">Marc Thiele</a> once again put together a very promising line up and considering the last times <br />I expected this one to be a blast as well (no pressure (™)).<br /></p><p>At the time of writing the videos are not online yet, once they are uploaded I will add links to them. In the meantime you can check out earlier talks on their <a href="https://www.youtube.com/c/Beyondtellerrand/featured" target="_blank">youtube channel</a>.<br /></p><p><br /></p><h2 style="text-align: left;">Warm-Up at Wacom</h2><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp-kT6oL22JgPi-j_mIYauZD4AMJOkodigBwkOjZEkFUZ_NisJS2wRAmVwxRMP50bq_4_pC0Wo8yXg97YIKyHwXBI8N7p2t6_S_U-kMyvqumSKjLV96pvTW1cioIoWFf4BR9l0WPw8BGuEp00C8BfA8_WYx1q7f7CB9y07hrzMTuOuK1HLw6Ho2PT6zA/s4640/IMG_20220501_161632039.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp-kT6oL22JgPi-j_mIYauZD4AMJOkodigBwkOjZEkFUZ_NisJS2wRAmVwxRMP50bq_4_pC0Wo8yXg97YIKyHwXBI8N7p2t6_S_U-kMyvqumSKjLV96pvTW1cioIoWFf4BR9l0WPw8BGuEp00C8BfA8_WYx1q7f7CB9y07hrzMTuOuK1HLw6Ho2PT6zA/s320/IMG_20220501_161632039.jpg" width="320" /></a></div><p></p><p>Like, I think the last time in 2019, the lovely people at Wacom did host the traditional Sunday evening Warm-Up. This time though in their new fancy gallery. Apart from free drinks and tapas we got to enjoy the first talk of the conference.</p><p><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZlFDc6EaIHkYpweGmE0wqu4zbjz6wpE4I_OXCiLC75vN9mF2tYJuZbUhel7Q6puLW1uzHyyxNrASAvmLxmu1KzIQIMxtUEaMH5MFeKFOYzTy0pFND8CGd0DnnzxI3KcaimUxjOP-rqm9aku0OS67IoG7M0JwPMbvUKUDaGXWMRGXfPmG3d3nTYs-Edw/s4640/IMG_20220501_161622164.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="4640" data-original-width="3472" height="342" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZlFDc6EaIHkYpweGmE0wqu4zbjz6wpE4I_OXCiLC75vN9mF2tYJuZbUhel7Q6puLW1uzHyyxNrASAvmLxmu1KzIQIMxtUEaMH5MFeKFOYzTy0pFND8CGd0DnnzxI3KcaimUxjOP-rqm9aku0OS67IoG7M0JwPMbvUKUDaGXWMRGXfPmG3d3nTYs-Edw/w255-h342/IMG_20220501_161622164.jpg" width="255" /></a></p><h3 style="text-align: left;">Chicken Sexers, Plane Spotters, and the Art of Sketching - Mike Jelinek</h3><p><br />The title seems a bit odd at first but soon enough Mike did enlighten us. The term "Chicken Sexers'' describes people that are able to tell the difference between male and female chicklets. That is something that seems impossible at a first glance after all all chicklets look awfully alike. Nevertheless there exists a special zen school in Japan where a master teaches you to distinguish them by simply letting you make a decision and then telling you if it was correct.<br /><br />This is a concept called unconscious learning where you do learn to perform a certain task but without actually knowing how you do it. Yes this sounds very weird but it seems to be a thing. In the same way "Plane Spotters" did learn to recognize if an approaching plane did carry bombs or not. Seemingly slight variations in how a plane did change direction or react to maneuvers do allow for this distinction but without a chance to put a finger on it.<br /><br />After this Mike did elaborate a bit more on the neuro-scientific background of this phenomenon touching on cognitive maps, convergent and divergent thinking as well as externalization of thinking which I will try to summarize.<br /><br />During our day we receive a lot of unstructured chaotic data which our brain subconsciously processes and somehow structures resulting in cognitive maps. These maps allow us to approach tasks in a new way but we cannot access them willingly.<br /><br />What we are used to is convergent thinking which means we focus on a certain task and try to tackle it in a logical and structured way. Basically how we learn to perform our day to day tasks throughout our whole lives.<br /><br />Divergent thinking on the other hand uses cognitive maps to give us new and creative insights on a task or a situation. To tap into this it helps to do something else like going for a walk, start to cook or let your mind wander in some other way e.g. sketching which brings us back on topic.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9mxsYSJyfngcr5mNwQVdtIyBLf9ZY03Djvlxv1ILPW0VDuqzkh0ZvXN-6ahQDfvCGj7R4oILcaZq3-dE_KUuo68uq3s6zcur8x4DIq3zzhvNzp7U9ltem1qCt9JBo_aETH8bVP67MbI21YGxVFA1ppU555-4gAz4J5se8sTsbU_3-FjiiJwhhyd7Ykg/s4640/IMG_20220501_171907655.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9mxsYSJyfngcr5mNwQVdtIyBLf9ZY03Djvlxv1ILPW0VDuqzkh0ZvXN-6ahQDfvCGj7R4oILcaZq3-dE_KUuo68uq3s6zcur8x4DIq3zzhvNzp7U9ltem1qCt9JBo_aETH8bVP67MbI21YGxVFA1ppU555-4gAz4J5se8sTsbU_3-FjiiJwhhyd7Ykg/s320/IMG_20220501_171907655.jpg" width="320" /></a>Actually this is nothing completely new, we all know the effect when we are stuck with something, put it on the side and suddenly when doing something completely unrelated we get a new idea because we let our mind take advantage of cognitive maps. This also shows that our cerebral regions are not as separated as we thought for a long time, instead all areas of the brain are connected to each other which explains that motoric stimulation can help with intellectual tasks.<br /><br />The term of externalization of thinking on the other hand describes how it helps us to visualize the things we work on. A simple example here is when we write down a complicated calculation or when we think about furnishing an apartment how we draw a plan, cut out pieces of cardboard to move around.<br /><br />To sum it up, Mike took us on a short excursion into neuro scientific discoveries of the last years and how these can help us to actively work and improve on our creative skills. After all creativity is not something that is merely gifted to one by genetics but a skill that can be honed and crafted.<br /><br />As a last topic we discussed how already available tools like AI or VR can help us with this. VR can be a highly efficient tool to visualize things and this helps us to externalize our thoughts or where AI can be used to assist us with unconscious learning. An example he brought in was art in general. It is very hard to decide why some art is good while others are not. It is very similar to the "Chicken Sexers", some authority decides if your decision is right or wrong but without telling you why. So you could train an AI on some forms of established are which then in turn can categorize other art and thus educate you on this aspect.<br /><br />I would say this was a good start for this year's btconf. An interesting topic presented in a refreshing way by someone who not only clearly knows what he is talking about but also shows his passion for the topic at hand.<br /></p><h2 style="text-align: left;">Monday (Day 1) </h2><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqoD3skEt7GRGm9rj32WyOCN__6SsaBaWwGTSD9MHWZL69TUYCuI-aO5lxgZtLR6UqEtOfEL_eR7BvTSEkYLdjpWaLGBhKUNyBANMAaSSjPB8ejyYd_I12YCMat2hL4Zr5MBPjAIR6u4zOuE_A_mAPVlVkDivXNVsBoa3z4h5TSx7HhHKqR4NmGI0dFw/s4640/IMG_20220502_100632845_HDR.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqoD3skEt7GRGm9rj32WyOCN__6SsaBaWwGTSD9MHWZL69TUYCuI-aO5lxgZtLR6UqEtOfEL_eR7BvTSEkYLdjpWaLGBhKUNyBANMAaSSjPB8ejyYd_I12YCMat2hL4Zr5MBPjAIR6u4zOuE_A_mAPVlVkDivXNVsBoa3z4h5TSx7HhHKqR4NmGI0dFw/s320/IMG_20220502_100632845_HDR.jpg" width="320" /></a></div><p></p><p></p><p>Back at the capitol! Things again start to feel as they used to. Nerds bustling around the slightly surreal lighting and <a href="https://twitter.com/baldower" target="_blank">Tobi Lessnow</a> already in action on his turntables. For those not aware Tobi is THE btconf dj being at every event and famous not only for his unstoppable enthusiasm but also for incorporating snippets of the talks into his music.</p><p> </p><p> </p><p> </p><p> </p><h3 style="text-align: left;">Programming Playgrounds - Linda Liukas [<a href="https://www.youtube.com/watch?v=4F5UpsEcYhU" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/linda-liukas" target="_blank">Profile</a> <a href="http://lindaliukas.com/" target="_blank">Web</a> <a href="https://twitter.com/lindaliukas" target="_blank">Twitter</a> <a href="https://instagram.com/lindaliukas" target="_blank">Insta</a>]</h3><p><br />Linda is a children's books author who tries to teach not only the basics of computers but also IT and the internet in general in a new and creative way suitable for younger children.<br /><br />But she doesn't stop there, she teaches children using all kinds of new and interesting ways and tools so children can learn what algorithms and boolean logic are but in a much more intuitive way.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCJMvYEJx-Jg8qp0vhLUTEYG4I3DZMlDcW5f3Xh7cWkecQrCM1bkEVUg9RpZO1AxrmdZ_X_QwYtwH4f6HZ1436awHVNmWP0YFh-cFEhKRKtSiDr1TsPm_MR9ZqTyo8NTYd2nQfg_3VGcBEau0yOwDmlHDNzR8M_JqIECqyWFuL1YuUnRVp-6vm7DWcwg/s4640/IMG_20220502_111837829.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCJMvYEJx-Jg8qp0vhLUTEYG4I3DZMlDcW5f3Xh7cWkecQrCM1bkEVUg9RpZO1AxrmdZ_X_QwYtwH4f6HZ1436awHVNmWP0YFh-cFEhKRKtSiDr1TsPm_MR9ZqTyo8NTYd2nQfg_3VGcBEau0yOwDmlHDNzR8M_JqIECqyWFuL1YuUnRVp-6vm7DWcwg/s320/IMG_20220502_111837829.jpg" width="320" /></a> A basic premise in her work is the attempt to reconnect creative thinking and imagination with logic and scientific analysis. For this it is important to have what we call poetry in spoken languages also in the world of programming languages. Also she explains how important it is for children to learn things with all their senses and not just from a textbook. Examples were a play where she was playing the computer processor that was commandeering the children who "were" the ram or hard drive or other things. Or simply using candies to teach a simple bubble sort. That way the understanding gets ingrained into the children much better and they memorize it very strongly.</p><p></p><p>A more advanced example was to let them create a youtube video, including planning it, creating tags and subtitles. So they learned each step and also what it is for and then could recognize e.g. where on youtube different algorithms were used (recommendations or typing predictions). All this is also meant to help children not to adopt our views and especially fears of technology but let them experience it without bias sso they can enjoy and utilize as good as they can.<br /><br />There were many more stories in this talk which I can't all mention here but one was very fascinating as it emphasized a different aspect of creativity and computers. Mushrooms can act like a kind of semiconductor, so there are people trying to programm fields of mushrooms and utilize their natural sensors e.g. reacting to the behavior of animals around them. So it might be able to use programmed mushroom networks to monitor the state of forests. BAAMM!!!<br /><br />If I was to summarize a main take away from this talk then it would be: Do not be afraid to be creative, think outside the box and see the world with the eyes of children. <br /><br />All this is very hard to describe in such a summary and I am afraid I will not be able to do justice to her. So once the video of the talk is up, I recommend watching it. <br /><br /></p><h3 style="text-align: left;">The Big Picture - Tim Kadlec [<a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/tim-kadlec" target="_blank">Profile</a> <a href="https://timkadlec.com/" target="_blank">Web</a> <a href="https://twitter.com/tkadlec" target="_blank">Twitter</a>]</h3><p>Websites use images to convey emotions to the users and create a kind of connection with them. This means they are an important part of any online presence.Tim took us on a tour about image loading and performance implications in modern web design.<br /><br />To determine the performance of a website you can use various kinds of metrics. One that was new to me is LCP (Largest Contentful Paint) which determines how long the largest (in this context meaning “most important”) part of the content takes to be painted. Usually these are images, either as background or as content e.g. showing a catalog item..</p><p><br />Having a short load time on such assets is important but often they are among the last items to be rendered.<br /><br />Tim explained a few techniques to increase this performance and also gotchas and caveats of each which I am trying to sum up here.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdpFrdS6cjaQWu2FLRtzx7mnSmGriXBZTCzJ2cL_ssTtirBazFWUuA1bxtoM-Kb4b_2d7QiXvopky57S18vN1h0aq2RaoHPm6hE7Kc84J4MMoAyP0Ta3__KUv2TRyMVS9xVFQuzaX3v7tIOUCvbkZUJNJS6-3fITEm7ZuxsCRZHWBj4lyI_FeHEVb8oA/s4640/IMG_20220502_125426224.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdpFrdS6cjaQWu2FLRtzx7mnSmGriXBZTCzJ2cL_ssTtirBazFWUuA1bxtoM-Kb4b_2d7QiXvopky57S18vN1h0aq2RaoHPm6hE7Kc84J4MMoAyP0Ta3__KUv2TRyMVS9xVFQuzaX3v7tIOUCvbkZUJNJS6-3fITEm7ZuxsCRZHWBj4lyI_FeHEVb8oA/s320/IMG_20220502_125426224.jpg" width="320" /></a></div><p></p><p><br />Due to the fact how browsers work (loading js, css, html, executing js, parsing css etc) images defined as background images only in css the information that an image has to be fetch is only available very late to the browser and it is even later that the browser can know the image needs to be rendered.<br /><br />A way to work around this is to tell the browser that we know this image exists and is important. A first start is to use the preload tag inside a site’s header section. That way the url is known to the browser way sooner and it can be loaded sooner, or rather could. But because there are lots of other resources like css/js and maybe other images the browser can’t decide which one is more important.<br /><br />This is because the tag does not convey any information regarding priority. You can try to move the tag up in the header section but this is causing all sorts of other issues without helping much.<br /><br />So in come priority hints, a rather new feature available in Chrome based browsers that allow to indicate to the browser that this resource should be considered a bit more important than it normally would.<br /><br />For regular images there is a different common issue for delayed loading. Many js libs use a lazy loading mechanism which usually involves setting the src attribute of an image at runtime. So the browser has no chance of preloading anything until the corresponding js code is fully downloaded and executed.<br /><br />Here the new loading attribute can be used to define eager or lazy loading on markup level and let the browser handle it: Markup is your friend!</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RIecUfbCD9dHIyKk4LKkW08yIy5FMVsVacXd3HSjIaRewHDMhrtvG7fVA5Y-C78KzWQOWAb3FpjsRf4LiotsoQwD_wcTodO4OssN-t6zvndKpewzX1XnPPrqw7KUNGN7PewcMobKPTFqMyhtTsBwZeuCr5ecoo_DUXcNkL-dfdyIGaxXOJB1KeykDA/s4640/IMG_20220502_131656889.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-RIecUfbCD9dHIyKk4LKkW08yIy5FMVsVacXd3HSjIaRewHDMhrtvG7fVA5Y-C78KzWQOWAb3FpjsRf4LiotsoQwD_wcTodO4OssN-t6zvndKpewzX1XnPPrqw7KUNGN7PewcMobKPTFqMyhtTsBwZeuCr5ecoo_DUXcNkL-dfdyIGaxXOJB1KeykDA/s320/IMG_20220502_131656889.jpg" width="320" /></a></p><p></p><p></p><p></p><p>After this Tim gave a comprehensive overview over the different default loading priorities applied by the various browsers and how things like viewport or connection speed can affect these.<br /><br />But we were not done yet. There are still examples where all the above still does not give you the speed boost for your LCP that you would expect. This can stem from using a different domain to host your images than the one your website is hosted on, e.g. when you are using a hosted image service.</p><p></p><p><br />In this case the browser opens a new connection to that domain once it has decided it has to load that image which again takes up quite some time. To avoid that you can use a rewrite mechanism to use urls relative to your domain in the markup and have that path then being redirected to your external service. For the browser this is transparent and can use the same connection.<br /><br />In traditional on premise setups this happens with something like an nginx performing the rewrite. When you want to be more cloud based this is usually not an option. Edge Computing to the rescue!!!<br /><br />What is Edge Computing? In a nutshell (and probably highly over simplified) Edge Computing allows you to run js code on CDN hosts, meaning you can rewrite the urls directly on the CDN node closest to your customer that also handles the delivery which sounds very neat.<br /><br />On a closing note Tim examined the issue of performance measurement in general. Most tools are built on tools made by Google satisfying metrics created by and for Google. And also LCP is a metric only available in Google based browsers.<br /><br />In order to have similar performance measurements in other browsers you can employ javascript techniques which Tim showed us a few examples of. More important is the realization that you need to verify your performance measurements in all browsers and not only in Chrome.<br /><br />To paraphrase Tim: It is WEB performance, not Chrome performance.<br /><br />As you can see from this wall of text, it was a rather detailed talk touching on a lot of topics and at least to me was not only very informative but also made the tech nerd in me smile.</p><h3 style="text-align: left;">(Lunch-Time Session) What We Can Learn from Hacking Multiplayer Games: Understanding and Cheating in Distributed Systems - AOE Group [<a href="https://aoe.com/" target="_blank">Web</a> <a href="https://twitter.com/aoepeople" target="_blank">Twitter</a> <a href="https://instagram.com/aoepeople" target="_blank">Insta</a>]</h3>This was a short but very nerdy talk about what kind of attacks you can or at least in the past could use to change the behavior of a computer game beyond the expected boundaries. It started out by changing files of an old solo rpg game to change the attributes of your character and then moved over to scanning the network traffic of a server based multiplayer game to understand how that can be modified to actually inject data.<br /><br />Afterwards he explained how some people created explicit cheat challenges for people to find a way to complete specific tasks in a game and later on he even created one himself.<br />Apart from learning new and creative ways to analyze systems this has also more “serious” benefits. All these techniques can and actually are used when targeting commercial websites and other large scale applications. So it is important to always look at your architecture, your protocols, your apis not only considering use cases, performance or maintainability but also security. Always ask yourself “How could this be abused?” and make sure to never blindly trust user input.<br /><br /><h3 style="text-align: left;">Bag of Spanners - Léonie Watson [<a href="https://www.youtube.com/watch?v=ixdTM8UGoIo" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/leonie-watson" target="_blank">Profile</a> <a href="https://tink.uk/" target="_blank">Web</a> <a href="https://twitter.com/LeonieWatson" target="_blank">Twitter</a>]</h3><p>Léonie Watson is a remarkable woman. I heard her speak at a UIConf a few years ago, also about the topic of accessibility, and it was a great talk. So I was kinda hyped about this one and I was not disappointed.<br /><br />It was a bit of a pity though that she could not be at the conference in person but instead dialed in from home. Which in turn shows her dedication.<br /><br />As it turns out this was not so much a regular talk but rather an excursion on how different levels of accessibility on websites impact the experience for screen reader users.<br /><br />At the start she emphasized the importance of accessibility tools and how every developer and ideally also designer should know about and how to use them. An interesting tool in this context is the accessibility tree created as a logical structure by your browser analog to the DOM as it can help you understand how your website is represented towards screen reader users.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikd17v2eZnqG3Ys12TMImR92XWwaIcygIp_8-I5GCpg40C3sRTc5jj9WXLnLGegxJnIl_7rMTeEgqj_-NR4rCO65qkrXLOoSh8S44mtGiB-K7fjQkwExoAtHlFXzuZe9FeQlCf8Us2asbhArXfjvYMB6CMSdM8sV81Acef2JXcZFjRjQt0oTCYajoa9A/s4640/IMG_20220502_154649121_HDR.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikd17v2eZnqG3Ys12TMImR92XWwaIcygIp_8-I5GCpg40C3sRTc5jj9WXLnLGegxJnIl_7rMTeEgqj_-NR4rCO65qkrXLOoSh8S44mtGiB-K7fjQkwExoAtHlFXzuZe9FeQlCf8Us2asbhArXfjvYMB6CMSdM8sV81Acef2JXcZFjRjQt0oTCYajoa9A/s320/IMG_20220502_154649121_HDR.jpg" width="320" /></a></div><p></p><p></p><p>After this she showed us various examples of button or navigation mark ups at first in a minimalistic version rather unusable for screen reader users which then were refined more and more into complete working and accessible markups. It was really interesting for me to actually hear how the audio presentation did differ from the visual one, something that is very hard to anticipate when your perception is already biased by what you see.<br /><br />Very much worth watching.<br /></p><p> </p><p> </p><h3 style="text-align: left;">Graphic Storytelling - Noma Bar [<a href="https://www.youtube.com/watch?v=MTFofxcIVwU" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/noma-bar" target="_blank">Profile</a> <a href="http://nomabar.com/" target="_blank">Web</a> <a href="https://twitter.com/noma_bar" target="_blank">Twitter</a> <a href="https://instagram.com/noma_bar" target="_blank">Insta</a>]</h3><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim0LPrlkRuYTCadP3XGffvsljdOKaDACocZod7liFl72Bd35ZyVeDw8lAEG_nAKja9kFipDBU1lJvhnGtreKo-sUCLaakW2pwB6lGIIsHSDoXXD2QUlDNRW8Xp_-3mVvDsBO16vD7unKiAKKcDYI0Lvxw9TvOyVf63ntJlPcxOd8LbCvRVRl1qUnCu-A/s4640/IMG_20220502_163629405.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim0LPrlkRuYTCadP3XGffvsljdOKaDACocZod7liFl72Bd35ZyVeDw8lAEG_nAKja9kFipDBU1lJvhnGtreKo-sUCLaakW2pwB6lGIIsHSDoXXD2QUlDNRW8Xp_-3mVvDsBO16vD7unKiAKKcDYI0Lvxw9TvOyVf63ntJlPcxOd8LbCvRVRl1qUnCu-A/s320/IMG_20220502_163629405.jpg" width="320" /></a> <br /></p><p>I seriously can’t describe the content of this talk. Noma “simply” gave us a looong tour through all his work of the last 40 years as a graphical illustrator and story teller. His images usually have two, three or even more twists in it that you only recognize over time.<br /><br />Just watch the talk and be swept away or check out one of his many books. <br /></p><p><br /></p><h3 style="text-align: left;"> </h3><h3 style="text-align: left;">Everything Breaks at Scale - Sacha Judd [<a href="https://www.youtube.com/watch?v=N69kslnja0Q" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/sacha-judd" target="_blank">Profile</a> <a href="https://sachajudd.com/" target="_blank">Web</a> <a href="https://twitter.com/sachajudd" target="_blank">Twitter</a>]</h3><p>Now what could this talk be about? Our guesses were from resilience in highly distributed web architectures to layout paradigms for overly complex website content. Boy, did we go off base there.<br /><br />A quick summary would be: “Why do people get into conspiracy theories and why do they stick with them?”<br /><br />Disclaimer: I am not totally sure I was able to follow all her reasoning but will try to repeat them here to the best of my ability. Should anyone notice something wrong or objectionable, please let me know.<br /><br />For starters there are different kinds of conspiracy theories. From people who believe the government is out to get them to those who indulge in RPF (Real Person Fiction) meaning they make up or believe in made up stories about e.g. actors. A popular example seems to be the rumor that the cast from Lord of the Rings did actually have more than just a good time making the movies but also that secret affairs did start which are still ongoing and kept hidden for all those years.<br /><br />What is it that makes such groups attractive to people? For one thing, it gives a sense of community, people with a common interest that over time become more and more your friends.<br /><br />Another appeal of these groups seems to be a common nostalgia for earlier and simpler times where everything was at a smaller scale.<br /><br />What comes with that is also common purpose. It is your “mission” to unveil whatever the subject of your specific theory is and maybe even save the world. And as a result the positive feedback and encouragement lets our body create dopamine which can turn into some kind of addiction.<br /><br />So people need to create ever more and new content which receives more and more positive feedback the more far fetched the claims and proofs seem to be. <br /><br />Conspiracy theorists may seem like harmless idiots at times, but ever since the march to the capitol of the US it is evident that they are dangerous.<br /><br />But what should be done? What can be done? Here Sacha, in my opinion, made a bold move by asking for regulations and law enforcements. This seems contradictory to the usual plea for a free and accessible internet but her argument is that like with all forms of media, like newspapers, radio, television, there was a need for regulation.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn44k6hq2yGTsPK0Rk3aNsh7vOtxk02J5Goy7LJ3mMEoxG1Kg90F1Zf4lfwg2AkZzNxxCuygOb9XXH1h91RjglNugR7Z7IIcMMICyAZetiBU5AOaTouppyMGapf0WuN9-yK8ggkLuDey3v-KlKuBqgNHJdIwvffoHKN6Mu9htIex9VjooNzMa0_z3OKQ/s4640/IMG_20220502_195221119.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn44k6hq2yGTsPK0Rk3aNsh7vOtxk02J5Goy7LJ3mMEoxG1Kg90F1Zf4lfwg2AkZzNxxCuygOb9XXH1h91RjglNugR7Z7IIcMMICyAZetiBU5AOaTouppyMGapf0WuN9-yK8ggkLuDey3v-KlKuBqgNHJdIwvffoHKN6Mu9htIex9VjooNzMa0_z3OKQ/s320/IMG_20220502_195221119.jpg" width="320" /></a><br />But not only governments are required to take action. The large companies providing platforms for people to connect must accept their responsibility and not simply claim that they are just providing a platform and can’t be held accountable for the content. She calls this the “Illusion of Neutrality”. Something companies like Facebook, Telegramm, Google and so on have been clinging to since the dawn of time. Partly because their only metric of success is to grow and grow without taking into account what effects their ecosystems have on society.<br /><br />Would that be enough? Clearly, no! We have to educate ourselves but especially our children to defy misinformation and manipulation. <br /><br />The more often you hear/see/notice a claim or statement the more real it becomes for you. To counter that one should not just accept claims they hear but fact check them to make sure it is actually true the very first time you come across them. Also make sure it comes from a reliable source and to top it off, do your own research, challenge things. So in the end you can make informed decisions and have a solid base for your opinions.<br /><br />If we manage to teach that to the generations to come we have a change to make this world a better place.<br /><br /></p><h3 style="text-align: left;">The Positives of Saying No - Cabeza Patata [<a href="https://www.youtube.com/watch?v=H-_-7kvM4aA" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/cabeza-patata" target="_blank">Profile</a> <a href="https://cabezapatata.com/" target="_blank">Web</a> <a href="https://twitter.com/cabeza_patata" target="_blank">Twitter</a> <a href="https://instagram.com/cabeza_patata" target="_blank">Insta</a>]</h3><p>Cabeza Patata is a 3D modeling studio consisting of the married couple of Katie and Abel, who despite being a rather small company did work with several global players as their clients.<br /><br />In their talk they took us on a tour about the ups and downs of their career, especially about the things they found saying “no” to did indeed help them regain not only control of their company but also their lives.</p><p style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_kYV4OjnvSIBAKfzwnKQIdVUMZyI51Vm5wqOt1NReQhdkqGS7D9jljqtCjgdbTIUxY-cwyNxzcP3fz-tk6KRx9y05OWrobqdcyueYQ6Aa73zWuIRewfMAI5R_YKueIaYG_bh8wGc5rrqBGHwUKapE5Dpxp2dwJyJEaoSuAWQoZrW-sHtv_hZEA2LXOA/s4640/IMG_20220502_201304933.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_kYV4OjnvSIBAKfzwnKQIdVUMZyI51Vm5wqOt1NReQhdkqGS7D9jljqtCjgdbTIUxY-cwyNxzcP3fz-tk6KRx9y05OWrobqdcyueYQ6Aa73zWuIRewfMAI5R_YKueIaYG_bh8wGc5rrqBGHwUKapE5Dpxp2dwJyJEaoSuAWQoZrW-sHtv_hZEA2LXOA/s320/IMG_20220502_201304933.jpg" width="320" /></a><br /></p><p><br />What is important to mention here and what they also did stress is that these were things that did work for _them_ in their current situation. It is not meant as an entrepreneur blueprint.<br /><br /></p><h4 style="text-align: left;">No to Representation Agencies</h4><br />A representation agency is a company negotiating with potential clients on behalf of an artist and of course that company takes a chunk of money from the budget as their fee. Depending on the percentage that might actually not sound too bad considering they protect you from a certain hassle. But it does not stop there. There are also Advertising Agencies and Production Companies that might work together or approach you on their own. <br /><br />So with each further company/person in between the actual percentage of the budget the artist gets becomes smaller and smaller. To make it worse in many cases it is not even transparent to the artist who is taking how much or how big the initial budget even was.<br /><br />At a certain point Cabeza Patata decided to not buy into this system anymore and terminated the cooperation with their agencies. This meant going out on a limb for them as it was not clear how they will get in touch with new customers.<br /><br />As it turned out their presence on social media was helping with that and shortly after separating from the agencies they did land a large scale project with Google.<br /><br /><h4 style="text-align: left;">No to being a traditional production company</h4><br />The usual course of action after completing your first large projects is to grow and try to get even larger projects so you can grow more and so on and so on.<br /><br />Abel and Katie found that this whole situation once the first big paycheck arrived did cause them quite some mental stress and distress. So they took a step back and realized that by staying small they were able to work more efficiently and have more direct and better communication with their clients.<br /><br /><h4 style="text-align: left;">No to the pressure of a permanent location</h4><br />It is a common perception that having your own office means you made it as compared to a start up in a shared office space. So they did rent an office space trying to be accessible to the neighborhood in order to connect with them.<br /><br />What did happen though was that the felt either like acting as tour guide when people came in or when they tried to focus on a project and thus closed their doors felt like shutting people out.<br /><br />So there was no option that made them happy until they took a trip to the canaries and realized how much happier they were and that they could work from there. Living in a small rented apartment they started to work wherever they felt like it.<br /><br /><h4 style="text-align: left;">No hiding behind screen</h4><br />As 3D modelers they spent most of the time working on digital projects but what actually got them into the field was the fun in making real things.<br /><br />So they returned to their original values and started making real things again, learning new crafts. Allowing them make new art in other forms like stop motion movies or have their 3D models printed to then paint them which then in turn can be digitized again.<br /><br />Basically do not get too comfortable with what you are doing, take a step back and/or learn something new and you might be able to enrich your business.<br /><br /><h4 style="text-align: left;">No to ponzi schemes</h4><br />When the idea of crypto art took off Capeza Patata was approached to also auction their art over the various platforms.<br /><br />As they did not really understand the concept in the first place they decided to first learn more about the system. It turns out that in contrast to the regular fine arts market the crypto art scene is purely based on speculation, lacking the cool down phases of the traditional market (a collector buying something to actually have it so the artwork is not available anymore). Those who participate actively brag a lot about how much money they make to make the concept appealing to others to join in.<br /><br />It resembles a pyramid scheme where it is very likely that only the first few to enter will actually make money while the majority will lose their investments. So joining in would mean they would be making money on the back of others which just was not acceptable for them. <br /><br />This combined with the inherent fluctuation of crypto currencies made this a highly unattractive idea. Adding in the fact that they had been insulted for not wanting to use said platforms sheds a very bad light on crypto art in general.<br /><br /><h4 style="text-align: left;">No to being secretive</h4><br />There is no use in keeping your knowledge and experience to yourself. So they started to hold workshops, teach at various occasions and finally opened their own school where people can learn from them by using their own libraries for textures etc.<br /><br />All of this did help the two to be not only happier but also more successful with their business.<br /><h2 style="text-align: left;">Tuesday (Day 2)</h2><h3 style="text-align: left;">Scaling CSS Layout Beyond Pixels - Stephanie Eckles [<a href="https://www.youtube.com/watch?v=8slZJrTK3nE" target="_blank">Talk</a><a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/stephanie-eckles" target="_blank"> Profile</a> <a href="https://thinkdobecreate.com/" target="_blank">Web</a> <a href="https://twitter.com/5t3ph" target="_blank">Twitter</a> <a href="https://instagram.com/5t3ph" target="_blank">Insta</a>]</h3><p>Nothing to start a day like good ole nerd talk!!<br /><br />In the early days of web design (or rather in the times when that hardly existed), fixed pixel sizes were fine as we had only a very limited set of screen resolutions and ratios and no mobile devices to support. Compared to today it was a very finite set of possible client settings.<br /><br />Nowadays the opposite is the case and there is an almost infinite number of combinations out there defining the context in which our content is engaged with.<br /><br />Steph’s topic revolved around intrinsic and adaptive design or rather how this can be achieved using modern css techniques.<br /><br />To illustrate the differences she presented examples with old and new css directives in place illustrating how modern techniques can improve the layout of a website.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOA92FCSU9strZvoSncW89XNDkQNigv4mZ7p2Mi9zGEPQ2CRNC-4I2E3N65UPFvn62R1-aNNYsXCnudHACP8goNG4VKr5gN4K_mfCPTOgUEZ2a0pVbB7LRnZSEnmLv-o_huB8w0nWUWIhot6A7sKyZrfQflNYlVloFuZvAfHDhDQ4cq0NREyD24yK4MA/s4640/IMG_20220503_101744227.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOA92FCSU9strZvoSncW89XNDkQNigv4mZ7p2Mi9zGEPQ2CRNC-4I2E3N65UPFvn62R1-aNNYsXCnudHACP8goNG4VKr5gN4K_mfCPTOgUEZ2a0pVbB7LRnZSEnmLv-o_huB8w0nWUWIhot6A7sKyZrfQflNYlVloFuZvAfHDhDQ4cq0NREyD24yK4MA/s320/IMG_20220503_101744227.jpg" width="320" /></a></div><br /><p><br /></p><p></p><p></p><p><br />Since it does not make much sense to describe the different examples here I can just recommend watching the video. Maybe at 80% speed ;-) The talk covered the usage of functions like clamp, min, max, fit-, min-, max-content, grid, gap padding and margin as well as various types of units like viewport-height, frame ratio or character.<br /><br />All of these allow for use with design token to further improve maintainability. If your day job or hobby requires you to do any kind of css, I highly recommend this talk.<br /><br /><br /></p><h3 style="text-align: left;">Lost in Translation - Manuel Matuzovic [<a href="https://www.youtube.com/watch?v=Wno1IhEBTxc&t=4s" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/manuel-matuzovic" target="_blank">Profile</a> <a href="https://matuzo.at/" target="_blank">Web</a> <a href="https://twitter.com/mmatuzo" target="_blank">Twitter</a>]</h3><p><br />Hands down my favorite talk of the conference. Don’t get me wrong, the others were all great too, but this one was awesome! Funny, insightful, meaningful and it made you contemplate.<br /><br />Manuel is working as an accessibility consultant so his job requires him to check websites and how accessibility can be improved which results in him reading a lot of awful code.<br /><br />What he realized over the years is that most issues do not stem from complex frameworks like react but from simply bad html. One of his standard examples is a button that is not created using the semantic button element but instead a div that is styled to look like a button.<br /><br />This omits semantics which are important for screen readers like Léonie Watson pointed out in her talk on the previous day.</p><p style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVl6wBL27YGWyKtBhaxQi7HUCZFuONhwUNzfJATDbEfPSAQZb1pUQ7-b5YBBbOoPm2N7cQvaR9nFbbEWR847pSBPcW1CVe1zzImrnAYAHZxaA45MOhb0U6cyyHdfvNIcjcHF1U3L9LlIag8Mqt8rS4QBK6BgFkg8KfdxKj-yITKxIXtcdlt91XYoiTJA/s4640/IMG_20220503_112824632.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVl6wBL27YGWyKtBhaxQi7HUCZFuONhwUNzfJATDbEfPSAQZb1pUQ7-b5YBBbOoPm2N7cQvaR9nFbbEWR847pSBPcW1CVe1zzImrnAYAHZxaA45MOhb0U6cyyHdfvNIcjcHF1U3L9LlIag8Mqt8rS4QBK6BgFkg8KfdxKj-yITKxIXtcdlt91XYoiTJA/s320/IMG_20220503_112824632.jpg" width="320" /></a><br /></p><p><br />In a lot of cases websites only consist of a few very basic tags instead of taking advantage of the full set of available semantically meaningful tags which often is also caused by designers not being familiar with how html works and the developers not being able to properly translate the design into a meaningful document structure..<br /><br />What is even sadder though is that also websites of professional developers sometimes do not use proper tags despite the fact that these people HAVE to know about them which can only lead to the conclusion that they simply do not care about accessibility.<br /><br />But with ARIA everything is fine again, right? I mean, what could go wrong with ARIA? Maybe, apart from slapping it on like gravy on dry turkey roast.<br /><br />ARIA tags are often used incorrectly removing semantics or resulting in re-adding existing behavior of the proper html tag. So it is important to understand html and only resort to ARIA tags if there no native equivalent.<br /><br />But why is it that html is often used in such a bad way? Isn’t html simple? Isn’t that what everybody is saying? Yes they are and no it is not!<br /><br />Html has a simple syntax, opening and closing tags, maybe text in between and then optional attributes. BAAM, done!<br /><br />The thing that is not simple is adding the proper semantics to a document for which you first need to understand the structure. This means not only the structure of what is visible in the design but also the logical structure behind it, that what a screen reader should use to navigate in an efficient way.<br /><br />There are actually not a few more aspects covered in this talk but once again I have to tell you: Go and watch the video! You will have not only a few laughs but you will learn even more. If you can only watch one of the talks (which would be a shame and I would urge you to change that) then it should be this one!<br /><br /></p><br /><h3 style="text-align: left;">Exclusive Design - Vasilis van Gemert [<a href="https://www.youtube.com/watch?v=TkKkAgjsfgQ" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/vasilis-van-gemert" target="_blank">Profile</a> <a href="https://vasilis.nl/" target="_blank">Web</a> <a href="https://twitter.com/vasilis" target="_blank">Twitter</a>]</h3><p>Despite the title we are of course talking about inclusion here. Though Vasilis follows a kind of different school of thought here.<br /><br />Originally he tried to follow four simple principles. Consider all contexts your content is viewed, be consistent, prioritize content and add value instead of nonsense. All of which sounds pretty reasonable. But upon further tinkering with it he started to question those principles.<br /><br />In order to consider all contexts, should not first know all contexts? So that principal should be something like “further studying”. And if we do not know all contexts then maybe the other principals are not set in stone as well, so he wondered what happens when you do the opposite. Break with conventions, prioritize individuality over content and add nonsense?<br /><br />To be quite honest I do not exactly recall all the reasoning on this part so I might have gotten some things here and you better double check the talk. But I am fairly sure I got the outcome correct.<br /><br />To start investigating what contexts there are, Vasilis did work with blind people and watched them using websites to see what works for them and what doesn’t. His examples were a bit devastating. In one case a website was using ARIA tags all over the place and semantic tags to represent hierarchies which resulted in about 80 headline elements and 150 links. Making the site so complex that it was unusable for someone with a screen reader, especially people that do not use them on a daily basis, like artists.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCP74Aia2VZv8YodTzwHCGX10MIr3LJCf5qExMU1jqZ905YTTd4WW45dzGd2ixqMqEQcNSJdPTxXCxY82IV6naTaStX0QLdatq_SiZHDQsCC3JyNd-OOoiuUOT5qqvnCR-6wUaeIGwMSBSdUN7OOonmx1uwMXDjCJK2lAxHf4uqZxghd1eY0ChKJ8E-A/s4640/IMG_20220503_123356379.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCP74Aia2VZv8YodTzwHCGX10MIr3LJCf5qExMU1jqZ905YTTd4WW45dzGd2ixqMqEQcNSJdPTxXCxY82IV6naTaStX0QLdatq_SiZHDQsCC3JyNd-OOoiuUOT5qqvnCR-6wUaeIGwMSBSdUN7OOonmx1uwMXDjCJK2lAxHf4uqZxghd1eY0ChKJ8E-A/s320/IMG_20220503_123356379.jpg" width="320" /></a><br />What he did was the opposite of the things we heard so far during this conference. Creating a very very limited version of the websites without any semantic information but only very limited elements and structure. And this did help the users as many of them did not even understand why information like “navigation” or “headline 2” were read out to them.<br /><br />This illustrates a different kind of problem. A lot of people invested in accessibility have a strong technical inclination, those of them who are blind use screen readers extensively and they know very well how to use them and what the information presented to them means. Many other blind people do not have that background and/or the desire to get acquainted with it. So maybe we have to adjust yet again to also include these people and break with conventions.<br /><br />Something very cool that he made in the progress of this research are animations with audio descriptions. Turns out you can make the screen reader make something like sounds or even giggle. Which makes it more entertaining for the users.<br /><br />Another thing Vasilis did talk about is how his students were creating devices or mechanisms to help people with specific disabilities performing certain tasks. One example concerns a friend of his who can only use one hand and has very limited control over it. So typing on the keyboard is very very hard for him and takes a long time because every time he has to move his hand it shakes uncontrollably and he needs a while to get it stabilized. A pretty smart solution was a different way to input letters. Instead of typing each single letter as usual a letter can be created by typing 2 letters that then get combined.<br /><br />It sounds counterintuitive at first but is rather smart. There is only a block of 6 adjacent characters that is used. So he can keep his hand in a stable position and just use his fingers to type the different combinations which in turn is pretty quick. So by prioritizing individuality and adding (seemingly) nonsense. The situation has improved.<br /><br />There were a few more examples illustrating his mind set so if this sounds interesting, have a look.<br /><br /></p><h3 style="text-align: left;">(Lunch-Time Session) A Blueprint to Working Happily in a Creative Team - awork [<a href="https://awork.io/" target="_blank">Web</a> <a href="https://twitter.com/awork_io" target="_blank">Twitter</a>]</h3><p><br />Unfortunately I did not get all of this talk as it was not clear when exactly it was supposed to start, so I was a bit late.<br /><br />What I took from it, is that currently the work market is strongly in favor of knowledge workers, so people like us.<br /><br />Creative people are a limited resource in the market and companies are searching and hiring more and more. On the other hand, about ⅔ of knowledge workers consider quitting their jobs in order to find more happiness.<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLRXh3jnKpioC9VWrvI-7VsFxjt9_7I9Pi26LKMGScJnbuTqEPg2rm4Q_z0Y2DrgxS4w6IedueBFzglScTS4SY5NuK7QNAF1QjJmGfoNJVLupvuKs4pbiQ6kRmGMLLEHO_kZmqnBmg4HIkY8x1WWu5TUDllH5nk159IyR_1eonTYP0I_jsdyB-kd76UA/s4640/IMG_20220503_132949018_HDR.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLRXh3jnKpioC9VWrvI-7VsFxjt9_7I9Pi26LKMGScJnbuTqEPg2rm4Q_z0Y2DrgxS4w6IedueBFzglScTS4SY5NuK7QNAF1QjJmGfoNJVLupvuKs4pbiQ6kRmGMLLEHO_kZmqnBmg4HIkY8x1WWu5TUDllH5nk159IyR_1eonTYP0I_jsdyB-kd76UA/s320/IMG_20220503_132949018_HDR.jpg" width="320" /></a></div><p><br />All numbers here rely on a survey of 1000+ people from the German speaking countries conducted by awork.<br /><br />So the question at hand is “What makes people happy?”. Also according to afore mentioned survey the things mentioned the most are:<br /></p><ul style="text-align: left;"><li>reconciliation of private and professional live</li><li>attractive salary</li><li>trust within the team</li><li>clear structures and goals</li><li>freedom to make decisions and take responsibility<br /></li></ul><br />This means that companies need to take these points into consideration in order to be considered a good place to work and keep talented people. On the other hand, we knowledge workers are in a position of power to push towards a shift in how we want to work in the future and should not ignore this opportunity.<br /><br /><h3 style="text-align: left;">Returning to Your Maker Roots - Aarron Walter [<a href="https://www.youtube.com/watch?v=_hjL82Z1Fc8" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/aarron-walter" target="_blank">Profile</a> <a href="https://aarronwalter.com/" target="_blank">Web</a> <a href="https://twitter.com/aarron" target="_blank">Twitter</a> <a href="https://instagram.com/aarronwalter" target="_blank">Insta</a>]</h3>Without the intention to sound mean or condescending, this was a talk about coping with midlife crisis. <br /><br />The more one’s career progresses, the more time you spend doing things other than what brought you into the field in the first place. You end up being more in meetings and organizing things instead of actually “making” things. Which is not necessarily a bad thing but sometimes it can be good to get back to what you initially had a passion for.<br /><br />During the pandemic Aarron had a few realizations. One was exactly the points mentioned above. He was highly invested in his job and at a point noticed that a lot of his time was spent on overhead.<br /><br />At one point he decided to step away from his job to “reduce bullshit” and focus on more substantial things. It was then when he realized that he had pretty much nothing outside his job, no hobbies, no interests and this turned out to not be a great place to be in.<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpm3sePDJoflMybic2vSED8DETYRIGvLTPVCD-uytkA3hb8I1BJsYSRddY7CPLNboE0-3s-foJ2ldoTbM-sYldCqKdpFbtlreJKlcGb8dPn_ZKYzLMkzao5r6LasQ0A6DB3wKKAKlQqya7ipfR8ZwywTktOLEEumBsAEFyq8sGLqIk3HSGRfmeLWRdQ/s4640/IMG_20220503_153813277.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpm3sePDJoflMybic2vSED8DETYRIGvLTPVCD-uytkA3hb8I1BJsYSRddY7CPLNboE0-3s-foJ2ldoTbM-sYldCqKdpFbtlreJKlcGb8dPn_ZKYzLMkzao5r6LasQ0A6DB3wKKAKlQqya7ipfR8ZwywTktOLEEumBsAEFyq8sGLqIk3HSGRfmeLWRdQ/s320/IMG_20220503_153813277.jpg" width="320" /></a></div><br /><br />What did help him was to remember the things that motivated him in the first place and reignite his ambitions to learn things, to make things.<br /><br />Also due to the restrictions being in place during the pandemic he learned to cherish fewer but deeper relationships, e.g. with his family, over shallow ones that he used to have with all kinds of people. So again focusing on the basis the essentials did help him come to terms with himself.<br /><br />After a while he got to talk with a friend about all these things and in the end they started hosting their own podcast “re:considering”. Together with a third friend they interview all kinds of people and talk about changes in life and how to cope with them.<br /><br /><h3 style="text-align: left;">If Not Now, When? Turning Your Passion Project into a Reality - Geri Coady [<a href="https://www.youtube.com/watch?v=WIKWwWHrznE" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/geri-coady" target="_blank">Profile</a> <a href="https://geridrawsjapan.com/" target="_blank">Web</a> <a href="https://twitter.com/hellogeri" target="_blank">Twitter</a> <a href="https://instagram.com/hellogeri" target="_blank">Insta</a>]</h3><p><br />During her childhood Geri got to know two sisters from Japan who were her first contact with Japanese culture. They became friends and Geri became fascinated with Japan. Unfortunately after a year the girls had to move back to Japan but Geri’s fascination remained and even grew.<br /><br />It took her 20 years to finally be able to travel to Japan and even though it was a great experience once the trip was over she felt a deep void as she had now achieved what she was working on for so long.<br /><br />It was then when she stumbled across an internet challenge: “What could you do with 100 days of making”<br /><br />The idea was to make something every day for 100 consecutive days. For Geri this ignited a new spark and so she started to make Japanese themed illustrations, one each day for 100 days, which she published online calling it “100 days of Japan”.<br /><br />The feedback she got was very positive and many were asking if she would release these illustrations as print so they could buy them. After contemplating this for a while Geri decided to take this opportunity and open a side business.<br /><br />Along her way she had a lot to learn in order to make her business successful or even survive and her main learnings are what she shared with us during this talk.</p><p></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO-mvoqTgW9-CjUf-4PjU0jcGr0jsTFBEAW56cV_2zZ8L-l-J6KN40ULqHVYxrQPcm9sOoveHr-eZsDEQCz8gVtd0WFIxQmD0vvhECwRosXdeMx2IJFEoJB7hbtvpz2kvn34D5UNWtSsz72ooR5kCUHId8nLOG5V7EvyDqdvyY7zvoM_9H4hI2nFXCLg/s4640/IMG_20220503_164652810.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO-mvoqTgW9-CjUf-4PjU0jcGr0jsTFBEAW56cV_2zZ8L-l-J6KN40ULqHVYxrQPcm9sOoveHr-eZsDEQCz8gVtd0WFIxQmD0vvhECwRosXdeMx2IJFEoJB7hbtvpz2kvn34D5UNWtSsz72ooR5kCUHId8nLOG5V7EvyDqdvyY7zvoM_9H4hI2nFXCLg/s320/IMG_20220503_164652810.jpg" width="320" /></a>The first issue she identified was that it is important to keep your passion alive. Once your hobby becomes a business there is the danger of losing the joy of what you are doing. So you need to be able to take a step back and refocus on why you are doing this in the first place.<br /><br />From the financial side she did lay some ground rules for herself. She would define a strict budget of what she would spend on materials, storage and so on while playing it safe so she would not risk losing more money than she could afford.<br /><br />As a web designer she was able to use her own skills in creating her website but had to learn quite a few new skills, some related to business, some more to logistics. Being a business owner you need to expand your skill set so you cope with day to day tasks.<br /><br />When the time came where she was able to finally open her business she decided to go for a double release day: Taking her website live and having her own stand at a Japanese themed convention nearby. It did sound like a great idea but became one of the most crushing experiences in her life.<br /><br />First of all she had no experience of what a good location for a stand was so ended up in a bad spot where not many potential customers showed up, also she was not really prepared what such a stand should look like or simply how everything was supposed to work. But the biggest issue was that this was simply the wrong audience. Almost everyone was looking for mangas or animes and respectively branded goodies of these. Everything Geri had to offer was based on Japan and Japanese culture in general and so had no affiliation with what the customers were looking for.</p><p><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEJzut5YhJQKhjHH-25HWpWWcYF6irozEe1GOXkcL0Tak6XCI6aXF2MZWiHnpIE8pwHV5mfEOnzQZvxmTxePHSMBgPB1naXmH0bTnoZ4RNMzc7n3ksZMv5WRRkPLd2Vgx5XMDyTcXXss8nDx8QlzS0wzlaoXvLLaoTGkjR9auqJYyQuHddFaSw1u1Dlw/s4640/IMG_20220503_165114166.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEJzut5YhJQKhjHH-25HWpWWcYF6irozEe1GOXkcL0Tak6XCI6aXF2MZWiHnpIE8pwHV5mfEOnzQZvxmTxePHSMBgPB1naXmH0bTnoZ4RNMzc7n3ksZMv5WRRkPLd2Vgx5XMDyTcXXss8nDx8QlzS0wzlaoXvLLaoTGkjR9auqJYyQuHddFaSw1u1Dlw/s320/IMG_20220503_165114166.jpg" width="320" /></a><br />So sales were way way lower than she ever anticipated and of course the feedback was devastating for her. After this she turned to a friend running their own business for advice on how to deal with this. After a while she realized that it is okay if not everyone out there is totally sold on your idea from the start. It is completely normal that it takes a while until you know your audience and also until your audience gets to know you.You have to believe in yourself and your product and eventually others will as well.<br /><br />This did help her keep on going and finally <a href="https://www.geridrawsjapan.com/" target="_blank">Geri Draws Japan</a> took off becoming a successful side business.<br /><br />During the course of this she did learn a few other valuable lessons. Competitors are not necessarily enemies even though they are selling to the same audience they can be some of your biggest fans. Don’t be afraid to reach out to people you admire as that can result in great collaborations. <br /><br />Don’t be afraid to go out of your comfort zone, explore new ideas and keep learning. If you want to start (either the business itself or something new related to it) then don’t overthink it. Just do it but start small and once you grow so much that you can’t handle it alone do not be afraid to outsource or delegate tasks. <br />But most importantly make yourself aware that you are running a real business.<br /><br />Being someone who does not really fancy the idea of becoming a business owner I can’t really relate to the topic but I felt that Geri has had a lot of experience there and think that should you consider starting your own business or maybe are already in the process this talk should be on your watchlist.<br /></p><br /><h3 style="text-align: left;">More Than Answers – Designing for Questions and Provocations - Jude Pullen [<a href="https://www.youtube.com/watch?v=PBJo3HyGPkw" target="_blank">Talk</a> <a href="https://beyondtellerrand.com/events/dusseldorf-2022/speakers/jude-pullen" target="_blank">Profile</a> <a href="http://judepullen.com/" target="_blank">Web</a> <a href="https://twitter.com/jude_pullen" target="_blank">Twitter</a> <a href="https://instagram.com/judepullen" target="_blank">Insta</a>]</h3><p><br />Being a creative designer who did work for various companies Jude has a lot of experience building creative solutions to improve people’s lives. Some of which he shared with us during this talk.<br /><br />I will try to summarize the basic concepts but you should really watch the video as I don’t think I can capture the whole spectrum properly.<br /><br />His first story was indeed very touching as it was about Kyle, a young man who wanted to be a hairdresser but since he was born with a deformed hand this dream was just not meant to happen.<br /><br />Jude started to work with him to understand what the limitations were and what Kyle would have to be able to do in order to work in his dream job. It took a while and several iterations but finally Jude presented Kyle with a kind of prosthetic that basically had two mounted combs which could be aligned differently to either let the hair flow through them or to lock it in. That way it was possible for Kyle to hold up the hair and cut it properly.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRXfcSRd1ydhrGrq7KUBUD9A1YRggn22jI52TJKhGHep6RMqopZBgRyqo8-LQ1p9Azt9oDjyPo-BL-_F2jTy8lV7ih1woPoB1t6MEU2g1yxmKJaBfQaMhb4qDSpwVzXr3qprgufdrITAcQqXCGVoBOlUGzbxd3HUFML8bQfSQ5uIyDYk9h8M2bdyZqaw/s4640/IMG_20220503_175157725.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3472" data-original-width="4640" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRXfcSRd1ydhrGrq7KUBUD9A1YRggn22jI52TJKhGHep6RMqopZBgRyqo8-LQ1p9Azt9oDjyPo-BL-_F2jTy8lV7ih1woPoB1t6MEU2g1yxmKJaBfQaMhb4qDSpwVzXr3qprgufdrITAcQqXCGVoBOlUGzbxd3HUFML8bQfSQ5uIyDYk9h8M2bdyZqaw/s320/IMG_20220503_175157725.jpg" width="320" /></a></div><p></p><p><br />It was very moving when Jude asked Kyle to be his first customer to get a haircut. <br /><br />Another project was a radio globe. A small plastic globe mounted on a speaker and with a small sight that could be moved up and down over the globe. When you turned the globe and put a country into the sight the speaker started to play a radio program from that country. The whole kit was 3D-printable and so everyone around the world could build one.<br /><br />The last project was the Good Air Canary. Based on the method of the first miners to carry a canary bird with them to see if the air is still breathable Jude created a sensor device linked to mechanical canary that gave feedback once the CO2-level rose too high.<br /><br />As written above, best watch the video as that will explain things so much better than I can.<br /><br /></p><h2>Fazit</h2><br />So this was the end of the first post(?)-pandemic beyond tellerrand conference and I have to say it still feels like it did before. Great spirit, awesome speakers and Marc as usual makes everyone feel welcome. He even includes his family giving the whole event a personal touch.<br /><br />It was great to be back and I can only recommend this conference to everyone. <br /><br />SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-49812940020600558452019-06-06T01:23:00.000+02:002019-06-06T10:35:17.063+02:00UIKonf 2019<span style="font-family: "arial";"><span style="font-size: 14.6667px;">A mere two weeks after my last <a href="http://sanityresort.blogspot.com/2019/05/beyondtellerrand-dusseldorf-2019.html" target="_blank">conference</a> I find myself at yet another one. One I have not been to before and also with a different focus than my usual ones. <a href="https://uikonf.com/" target="_blank">UIKonf</a> in the history-charged German capital Berlin. UIKonf is an iOS-only conference, so this is new territory for me in terms of technology (Swift, Apple ecosystem) and also mindset (mobile, Apple ecosystem ;-)). </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So you might wonder “Why?” especially since I am more of an Android guy. The reason why I decided to visit a mobile conference is that a few months ago I transferred to a different team inside my department at “<a href="https://www.sueddeutsche.de/" target="_blank">Süddeutsche Zeitung</a>” which is responsible for building the SZ News Apps for <a href="https://itunes.apple.com/de/app/sz-de-nachrichten/id338711072" target="_blank">iOS</a> and <a href="https://play.google.com/store/apps/details?id=de.sde.mobile&hl=de" target="_blank">Android</a>. So I am now officially an app developer, even though I do not have much of a clue yet (shush… don’t tell my boss).</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The reason why I chose this particular conference was that it was among those recommended to me by my new colleagues. UIKonf was recommended to me by my lovely colleague and iOS expert <a href="https://twitter.com/liBlubb" target="_blank">Lisa Berle</a> as one with a good reputation in the iOS community. Even though she has not been there yet herself she decided to tag along meaning that I would not be alone among the Apple disciples ;-)</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The conference features quite a range of side events. While Monday and Tuesday are the main conference days where all the talks are taking place there are additional workshops on Saturday and Wednesday (some are free, some require extra payment). Also happening on Wednesday is the unconference with lab coding sessions and more. Sunday has a variety of socialising events in the early afternoon ranging from a bike tour over a boat ride to museum visits and the kick-off party in the evening where it is also possible to register for the conference days.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">For time and budget reasons we decided to skip both workshop days and only attend Sunday to Tuesday. Lisa chose the 3.5 hrs walking tour while my lazy self settled for a boat ride on the Spree. The boat tour took us up and down the river past different government buildings and other sights like the museum island for a good 1.5 hrs. As there was still quite some time left until the kick-off party I decided to visit the Brandenburg Gate and Alexanderplatz on my own.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Fgcp6JZXq8k/XPhAfq-z4JI/AAAAAAAAB_s/QS3NRuxb_p8BIyFxjsNisxHA5DTggbCCgCEwYBhgL/s1600/IMG_20190526_141549.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="200" src="https://1.bp.blogspot.com/-Fgcp6JZXq8k/XPhAfq-z4JI/AAAAAAAAB_s/QS3NRuxb_p8BIyFxjsNisxHA5DTggbCCgCEwYBhgL/s200/IMG_20190526_141549.jpg" width="150" /></a><a href="https://1.bp.blogspot.com/-xQGZvVAHsY8/XPhD-9xBD1I/AAAAAAAACBw/koADmqTsgiYCYWaK5UDZO79LVuKdKKyTQCEwYBhgL/s1600/MVIMG_20190526_140623.jpg" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-xQGZvVAHsY8/XPhD-9xBD1I/AAAAAAAACBw/koADmqTsgiYCYWaK5UDZO79LVuKdKKyTQCEwYBhgL/s200/MVIMG_20190526_140623.jpg" width="200" /> </a><a href="https://1.bp.blogspot.com/-wIuJ5d3mhxA/XPhEUQAr8VI/AAAAAAAACBg/uNsxkh_0C8kIjuuOySRtfYOJJCoBlA9uwCEwYBhgL/s1600/MVIMG_20190526_141525.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-wIuJ5d3mhxA/XPhEUQAr8VI/AAAAAAAACBg/uNsxkh_0C8kIjuuOySRtfYOJJCoBlA9uwCEwYBhgL/s200/MVIMG_20190526_141525.jpg" width="200" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-H80jNh-vXog/XPhA4l7QexI/AAAAAAAAB_4/3msjWIaOFQ4pVcDP6_N1cpfICgDCHH8gACEwYBhgL/s1600/IMG_20190526_174910.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-H80jNh-vXog/XPhA4l7QexI/AAAAAAAAB_4/3msjWIaOFQ4pVcDP6_N1cpfICgDCHH8gACEwYBhgL/s200/IMG_20190526_174910.jpg" width="200" /></a></div>
<a href="https://1.bp.blogspot.com/-HVQ5LA4U6WQ/XPhA86kS1xI/AAAAAAAACAA/q_DqIe-DkD0KHZdcAMIa8EcNcGa6OIwlgCEwYBhgL/s1600/IMG_20190526_180815.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-HVQ5LA4U6WQ/XPhA86kS1xI/AAAAAAAACAA/q_DqIe-DkD0KHZdcAMIa8EcNcGa6OIwlgCEwYBhgL/s200/IMG_20190526_180815.jpg" width="200" /></a><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The kick-off party took place in the wonderful beergarden of <a href="http://www.jamesjune.de/" target="_blank">James June</a> where we met up with three nice chaps from Dresden who Lisa met at the walking tour. We enjoyed our evening with good food and a few drinks.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-zgPT1fzsaxM/XPhF1Z-8EhI/AAAAAAAACCM/pXU7-SRxKow4KrJ2eudWufAiblrjBlB0wCEwYBhgL/s1600/VID_20190526_205431.mp4" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://1.bp.blogspot.com/-zgPT1fzsaxM/XPhF1Z-8EhI/AAAAAAAACCM/pXU7-SRxKow4KrJ2eudWufAiblrjBlB0wCEwYBhgL/s320/VID_20190526_205431.mp4" width="320" /></a></div>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <br />
<h2>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Day 1</span></span></h2>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Before moving on to the talk themselves I wanna give a short overview over all the big and little things I noticed in the run-up. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The first and foremost fact to mention is the speaker lineup. The organizers decided to have an all female speaker list for this year. I am aware that this is a polarizing topic but I appreciate the effort made by the organization as to make a statement and hopefully incent more women to speak at other conferences. Important fact here: The conference was fully booked and it seemed to me that there was a higher percentage of women than at other conferences (though it could be that all iOS conferences are like this).</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">What struck me as a bit odd was that even though some speakers had been posted on the website for quite a while the topics of the talks had not been published until shortly before the conference and there were no abstracts at all. So buying the ticket was very much like the proverbial pig in the poke.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Two screens on both sides of the stage showing the text “Live transcription” reminded me about btconf two weeks before where all talks received a live transcriptions as well. At btconf the service was provided by <a href="https://whitecoatcaptioning.com/" target="_blank">White Coat Captioning</a>. I asked in a tweet if it could be Andrew doing the captioning again and got a very quick reply that it was indeed the same company but a colleague of Andrew as he was already booked for another event. Funny how an intended joke can hit that close to home ;-)</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The greeting by the organizers focused mainly on things regarding the schedule and facilities, making sure everyone had all the necessary information but had also enough room for a heartfelt welcome. Germafficiency for the win :-D</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">There was one thing though that annoyed me immensely. It was the first time at a conference where I noticed people using their coats, caps, bike helmets etc. to reserve seats during the whole day. Very classy guys.. next time why not bring towels.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">We had lots of breaks, only coffee in the morning but lunch breaks were pretty long but that way everyone had time to eat without haste and in the afternoon we got ice cream sandwiches!!</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The sponsors brought lots of goodies. MyTaxi even had 3 talks/workshops hosted on a boat just next to the location each day as a semi parallel track. The swag bag did contain not only the UIKong shirt and stickers but also a reusable coffee mug, a webcam cover, a mytaxi discount coupon and a notebook.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-VyRX3g8MAdc/XPhBMGGwxQI/AAAAAAAACAI/7a3Pl9UUcB8ff5aPDvyhxmUefMYQsiyPwCEwYBhgL/s1600/IMG_20190527_094346.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 0.5em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-VyRX3g8MAdc/XPhBMGGwxQI/AAAAAAAACAI/7a3Pl9UUcB8ff5aPDvyhxmUefMYQsiyPwCEwYBhgL/s200/IMG_20190527_094346.jpg" width="200" /></a><a href="https://1.bp.blogspot.com/-m_VVVYxEexs/XPhKqxSjwLI/AAAAAAAACCU/2dm1OU_KzNsfTBgbbcomHbgCd_qL3TCYQCEwYBhgL/s1600/IMG_20190529_204907.jpg" imageanchor="1" style="float: left; margin-left: 0.5em; margin-right: 0.5em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-m_VVVYxEexs/XPhKqxSjwLI/AAAAAAAACCU/2dm1OU_KzNsfTBgbbcomHbgCd_qL3TCYQCEwYBhgL/s200/IMG_20190529_204907.jpg" width="200" /></a><a href="https://1.bp.blogspot.com/-Z1MlVJzBFjw/XPhMRSGcjbI/AAAAAAAACCc/rUTkbngO2Yg3B-Un302jzP7aSsB9JRqjACLcBGAs/s1600/IMG_20190527_094355.jpg" imageanchor="1" style="margin-left: 0.5em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-Z1MlVJzBFjw/XPhMRSGcjbI/AAAAAAAACCc/rUTkbngO2Yg3B-Un302jzP7aSsB9JRqjACLcBGAs/s200/IMG_20190527_094355.jpg" width="200" /></a></div>
<br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">But now let’s cut to the chase...</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Kaya Thomas - Inclusive and Accessible App Development [@<a href="https://twitter.com/kthomas901" target="_blank">kthomas901</a>, <a href="https://kayathomas.info/" target="_blank">kayathomas.info</a>] <<a href="https://youtu.be/9onK2xjY31g?t=2970" target="_blank">video</a>></span></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">A11y is an ever present topic at almost all conferences nowadays. But still too many sites and apps are lacking it. An aspect that other talks usually brush over though is the difference between a11y and inclusion. A11y features help to not exclude people but actual inclusion usually needs something more. Kaye used a good example: If a gym installs a ramp it uses a11y to allow wheelchair access but it is not automatically inclusive as there are likely still some issues when actually using the equipment.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Kaya also gave an exhaustive overview of available a11y tools and elements that can be used with examples. She also mentions that there are more things to consider than “just” ui elements but also that also users with a slow connection can be excluded if you rely on a huge bandwidth. A lot of those points reminded my about the talk of Charlie Owen at btconf, like including your users or some external QA authority to get more input on where your app might not be inclusive enough yet.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">All in all a good talk covering the basics of a11y considerations plus a bit extra.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Shannon Hughes - Detangling Gesture Recognizers [<a href="https://twitter.com/whattherestime4" target="_blank">@whattherestime4</a>, <a href="https://github.com/whattherestimefor" target="_blank">github.com/whattherestimefor</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=4769" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">This talk described the issues Shannon and her colleagues had when porting an application from MacOS to iOS using a rich set of gestures as shortcuts for a lot of operations.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">As an introduction Shannon illustrated how different gestures are recognized using state machines. Debugging such gesture recognizers can be very tricky though especially when several recognizers are involved. Usual mechanisms like breakpoints do not work as they derail the timing setup.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Shannon describes their efforts and learnings in an extremely seasoned and also entertaining way. I highly recommend watching the video. The way she explains what bugs they encountered, what fixes they tried and why they failed is very diverting.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">In the end the found out that too many gesture recognizers were active at the same time and had to reduce the amount in some way. In the end they created their own state machine, to define what gestures are recognizable at what time. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">This is a good example how a few seemingly small bugs can lead down a rabbit hole and force your hand into overhauling your architecture. Really good talk, interesting topic and a great speaker.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Glenna Buford - Rolling your own Network Stack [<a href="https://twitter.com/glennersboofy" target="_blank">@glennersboofy</a>, <a href="https://github.com/glenna" target="_blank">github.com/glenna</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=9130" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">From the topic of the talk I was not sure what to expect. In a nutshell Glenna presented her approach to a lean and reusable networking layer inside an app without using 3rd party libraries.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The first approach simply an UrlRequest created from a string, classic network session etc. This got refined more and more by adding encapsulation and abstraction techniques. In the end she had different classes containing all the required data to access a specific endpoint and operation classes to be used with those. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">If you are into Swift programming techniques you might wanna check this one out.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Nataliya Patsovska - Declarative Presentations [<a href="https://twitter.com/nataliya_bg" target="_blank">@nataliya_bg</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=10547" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Another topic that can mean almost anything ;-) and TBH</span></span><span style="font-family: "arial"; font-size: 14.6667px;"> I am not quite sure I totally got the point.</span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Nataliya took us on a refactoring tour where she started from a completely synchronous program flow and turned it more and more into an asynchronous one using futures. As far as I understood the idea was to have rather generic classes that take futures and completion handlers as declarative arguments instead of having the traditional code flow.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">This resulted in a code structure where the developer does not need to know when to check for what conditions or how to react to them but simply can define it by using an appropriately named handler/future parameter. This was emphasised by making use of Swift’s type system to make sure the classes are used in the intended way.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">To me it felt like this was more suitable for designing SDKs or libraries so provide the developer with clearer interface. When you do that in the actual business logic there seems to be not too much benefit unless you have a lot of similar structured code portions that can be abstracted more easily that way. It might also benefit you during refactorings but I am not sure reworking existing code into such a structure in the first place is worth it. If you create a new application though it could be interesting to try this route.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">But I gotta say, whoever does live coding that even just remotely involves XCode is either very brave or a madman ;-)</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Kristina Fox - Internationalizing your App [<a href="https://twitter.com/krstnfx" target="_blank">@krstnfx</a>, <a href="https://kristina.io/" target="_blank">kristina.io</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=18669" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">When you say i18n people immediately go for translations. Which is in a way correct but there is more to it.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Different regions can also mean having a different currency or regional differences like what an icon can mean or what associations are triggered by certain colors, screen orientation or units of measurement.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">To find out about these differences user research is the main information source. If you gather that information yourself it is often useful to interview people at their workplace or even at home, places they feel comfortable at. Otherwise they tend to overthink their answers and the result is less authentic/natural. Another option are cultural consultants that can assist you with their expertise.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The second part of the talk focused on implementation aspects of i18n, like how to extract strings into a localizable and parameterizable format. How to use formatters to accommodate currency or time zone differences or the usage of start/end as opposed to left/right.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Ellie Shin - Mockolo: Efficient Mock Generator for Swift [<a href="https://twitter.com/ellsk1" target="_blank">@ellsk1</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=20577" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Here we have a highly technical talk. At Uber Ellie’s team was challenged with the task to generate a vast number of mocks at build time. Existing frameworks/libraries like OCMock, Sourcery or Cuckoo all had some drawbacks like need to subclass NSObject, use objc annotations or were simply too slow for the use case.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So what do we do in such a case? Correct, we build a new one from scratch ;-) Ellie explains the different steps they took to create Mockolo and what problems they encountered during this.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The topic was rather interesting but for me it did not contain much information to be used in daily work life. I mean, when will you need to write a code generator? Alas I have to say the talk itself was very hard to follow as it was very uninflected and a lot of complex information kept pouring in at a steady pace. But if you are into the technical details of Swift code generation this might just be what you are looking for. </span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Julie Yaunches - Consistency Principle [<a href="https://twitter.com/julieyaunches" target="_blank">@julieyaunches</a>, <a href="http://yaunch.io/" target="_blank">yaunch.io</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=22976" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Never heard of that, no clue what it could mean. So I was curious what was coming down the pike.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">During the life time of any application we all face the same challenges. The team maintaining the app changes, technology evolves and libraries get abandoned. So over the time you decide to swap certain parts of your application out for other things. But that hardly ever goes down smoothly or even atomically. So suddenly you end up having different libraries in your network layer essentially doing the same thing but you do not have the time to complete the transition. The same thing then happens maybe at the UI layer or somewhere in your business logic.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">This kind of vertical duplications and inconsistencies is always a pain and of course we do not want them but in reality we often end up stuck in such a limbo due to non technical restrictions like time or budget.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So here Julie introduces the term of the Consistency Principle stemming from the accounting world into the IT landscape. In accounting you have several ways you can do your bookkeeping and the consistency principle tells you to stick to one method throughout a book and not mix bookkeeping styles. That sounds very sensible and plausible. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">But what does that mean in regard to the aforementioned examples? I think here is where she lost me and also other people I spoke to afterwards. Because if you apply this logic par for par it would mean NOT to change to a new library or abstraction pattern. Or maybe it means, if you do it, then only if you can finish the swap?</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">What came then instead were things like, make sure you encapsulate your application layers so that the business logic only has minimal knowledge of your network layer etc. But that is software architecture 101. So I fail to see the correlation between the initial problem description and the proposed solution. Maybe someone can enlighten me about it.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Lisa Dziuba - How to Market Your Mobile App [<a href="https://twitter.com/lisadziuba" target="_blank">@lisadziuba</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=27582" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">I gotta be honest, for me the term “marketing” is just.. well.. it just gives me the heebie-jeebies. But it is a very important aspect of a successful app and so we all should have at least a basic understanding about it, so we know where to start and what to ask people about if we need to get involved with it.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">As a start Lisa defines the basics of user research, the term of a persona and what it is used for. Once you understand what your potential audience looks like you can start to think about what the USP (unique selling point) of your app would be to the different groups.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Subsequently Lisa gave a detailed overview of the different marketing methods one can use to promote and sell an app. It starts by communicating your app launch on all relevant channels like social media, publications or platforms like <a href="https://whitecoatcaptioning.com/" target="_blank">Product Hunt</a>. Then we have direct sales mechanics, free marketing like influencers or viral marketing and then of course paid marketing.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Sally Shepard - Swift to Hack Hardware [<a href="https://twitter.com/mostgood" target="_blank">@mostgood</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/9onK2xjY31g?t=29899" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Final talk of day 1. Hardware hacking talks are usually very interesting as they show you how you can break out of the usual confines we all get so comfortable in way too quickly.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Sally drew my interest right out of the gate by structuring the talk such as if we were new employees at a fictional cat bank :-D To really get the joke behind this, better watch the video. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The project at hand was having money box to report what coin was deposited and what the total balance is. For this she setup a RaspberryPI with <a href="https://swift-arm.com/" target="_blank">Swift-Arm</a> and <a href="https://github.com/uraimo/SwiftyGPIO" target="_blank">SwiftyGPIO</a> to allow using weight sensors to determine the actual coin size. This also involved having analogue to digital signal converters and lots of other nerd stuff! </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Then on the server side she went for <a href="https://www.kitura.io/" target="_blank">Kitura</a> as a Swift cloud platform to provide data to the apps.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">And here the talk took an unexpected turn (at least for me it was). After talking about all the different parts involved in the project, I was expecting to see the final result. But instead Sally switched her focus to something different but also important: the future of Swift</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">In summary it was an appeal to all of us to help the community grow and improve. Special mention was given to the Swift Evolution Process and its importance to the community and how we all can contribute to it (spoiler alert, it was not the last time we heard about that :-O)</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So this somewhat left me in an emotional limbo. I appreciate the significance of the Swift community and its processes but I also wanted to see the kitty money bank do its job ;-)</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Day 1 roundup</span></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Pewh.. 9 talks in one day. Quite a lot to take in. Overall I must say that first day did not impress me that much. There were some really good and interesting talks and in total it was okay just not that great. But we have another whole day to hopefully blow our socks off!!</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Monday evening at UIKonf features the so called Ambassador’s Dinner. Here an ambassador organizes a table at a restaurant so that nonlocals can just tag along without the hassle of finding a place for dinner on their own. This time there were like 6 different ambassadors where people could sign up. Lisa and I decided to go rogue though and had a nice stroll along some remnants of the Berlin Wall and the famous district of Kreuzberg to find some food along the way.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-2U6Hgftgz5E/XPhOZs9oQhI/AAAAAAAACCo/0xmq5DXprXEyL4DzjptpcM2RWR5o0Ox3wCLcBGAs/s1600/IMG_20190527_194028.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-2U6Hgftgz5E/XPhOZs9oQhI/AAAAAAAACCo/0xmq5DXprXEyL4DzjptpcM2RWR5o0Ox3wCLcBGAs/s200/IMG_20190527_194028.jpg" width="200" /></a><a href="https://1.bp.blogspot.com/-wyadJtI6OAU/XPhOiYZJAaI/AAAAAAAACCs/8DFVDq8kVWg-LQQGAdZGlRrpeI8NAtecwCLcBGAs/s1600/IMG_20190527_195639.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="200" src="https://1.bp.blogspot.com/-wyadJtI6OAU/XPhOiYZJAaI/AAAAAAAACCs/8DFVDq8kVWg-LQQGAdZGlRrpeI8NAtecwCLcBGAs/s200/IMG_20190527_195639.jpg" width="150" /></a></div>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br /></span></span>
<br />
<h2>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Day 2</span></span></h2>
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Füsun Wehrmann - From Heroic Leaders To High Performing Teams [<a href="https://twitter.com/fuesunw" target="_blank">@fuesunw</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/jdDq5wNkqZ8?t=2187" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Starting talk of the second day usually features a tough and slow crowd. But <span style="font-size: 14.6667px;">Füsun</span> was definitely not impressed. We did get to enjoy an invigorating and entertaining talk that softened the start of the day.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">We started off with a short travel to IT past, about things like how companies were structured or what the expected behavior at work was. She drew comparisons between now and then, how things changed in our working environment and technologies.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">What happened when a project went haywire? Some expert got tossed into the maelstrom to save the day. Pretty often that approach just hit a brick wall and everything went south. Especially with changes like agile processes and self organized teams this approach is a recipe for disaster.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">From here on <span style="font-size: 14.6667px;">Füsun</span> outlined an alternative approach on what modern teams can do to increase their chances of success. This covers topics like customer and people centricity, shared leadership or collaborative mastery. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">All of this is already rather well-known but <span style="font-size: 14.6667px;">Füsun</span> manages to illustrate the benefits and synergies in a fascinating way which IMO makes watching this talk worthwhile.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Erica Sadun - Swift 5 Strings [<a href="https://twitter.com/ericasadun" target="_blank">@ericasadun</a>]</span></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Erica Sadun, a name I never heard before, which probably shows how little I now about the Swift ecosystem. She is highly involved in the Swift Evolution Process and worked on several language proposals. But more importantly: She.. is.. a blast!!!</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Seriously, this was one of the most entertaining talks I had the pleasure to listen to in a long while. She is very enthusiastic and funny and manage to carry me along for the full distance. So even if you do not care too much about Swift or programming at all, I recommend watching this talk simply for the entertainment value.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;"><i>Edit: It seems this is the ONLY talk not available as video. This sucks BIG time!!!</i></span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Okay, back on topic. As the title says, this is about strings. Exciting, isn’t it? No? Well, give it some time. With a simple but effective C example Erica shows why using strings as control structures is a bad idea. There is hardly anything the compiler can do to spot errors and so the results are often undesirable. She substantiates this with the example of a date format string that yields several issues from wrong casing to i18n deficits. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">ExpressibleByStringInterpolation to the rescue!!! Or if you want it a bit more nerdy: <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0228-fix-expressiblebystringinterpolation.md" target="_blank">SE-0228</a>. This feature in Swift5 allows you to create extension to the existing string interpolation mechanism. The really great thing about this is, that those extensions can have typed parameters. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">This gives an immense boost in regard to compile time safety and abstraction. Since this are regular extensions you can add all kinds of logic into the interpolation code which is really powerful. Erica shows a lot of different examples of varying complexity. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">For me this was hands down the best talk of the conference, even though Erica labeled herself as the opening act for Ellen Shapiro ;-)</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Ellen Shapiro - Kotlin/Native [<a href="https://twitter.com/designatednerd" target="_blank">@designatednerd</a>, <a href="https://bakkenbaeck.com/" target="_blank">bakkenbaeck.no</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=1829" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Wait.. what?? Kotlin on iOS?? Yeah baby!!!!</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">But let’s start at the beginning and an hint for everyone going to watch the talk: Play it at like 80% speed otherwise your ears might fall off because, boy, she <i>does</i> talk fast.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">There have been different approaches to try to have only one implementation for the different app platforms, like Xamarin or have Swift code run on Android. All of these attempts have severe drawbacks and turned out to be impractical. Many of these issues are unlikely to be resolved anytime soon as the parties that could do so usually have no incentives for it (e.g. lack of Java bindings for Swift).</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Kotlin on the other hand was created by Jetbrains which has a strong interest in Kotlin being in as many places as possible.So it is also possible to compile Kotlin into LLVM code to be run on iOS devices. WOOOOOOOTT!!!!</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The main part of this talk is Ellen talking about how she created a multi-platform project with Kotlin. I can’t give an adequate summary here, so better watch the talk and be ready for a verbal overkill ;-)</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Alaina Kafkes - A11y-oop - Adding new Accessibility Features to not-so-new Apps [<a href="https://twitter.com/alainakafkes" target="_blank">@alainakafkes</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=4229" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Another a11y talk but this time about how to add a11y features to an existing app. More specifically how Alaina und her colleagues added night mode to the Medium app.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">I found it rather unfortunate that the talk consisted solely of slides explaining in prose what classes were added/modified for what purpose but not a single line of code. This made the whole talk very hard to follow and so I did not pick up on anything in this one.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Neha Kulkarni - Advanced Colors in iOS [<a href="https://twitter.com/nehapundlik" target="_blank">@nehapundlik</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=11244" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Before this talk I was wondering what exactly could be advanced in colors ;-)</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">With P3 the IPhoneX supports a wider color space than its predecessors that use the standard RGB color space (ok, this sounds advanced ;-)) Sadly this is about the only thing related to P3, apart from how to use it in a color picker, in this talk. I would have liked to hear something more about P3 and the implications of its usage.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">In the second part, Neha described how you can use semantic names and proper name spacing to improve maintainability of your apps. She also points out the importance of proper communication between e.g. design and development by using the correct names consistently and sticking to agreed names and naming schemes.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Lastly she emphasized that when choosing colors for your app or website you should try to have good contrasting, avoid color combinations that are hard to distinguish or simply painful to look at and that not only colors alone but also the combination with symbols can help to improve your app (kind of cycling back to a11y).</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Anne Cahalan - Promises in iOS [<a href="https://twitter.com/northofnormal" target="_blank">@northofnormal</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=13136" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Swift has a variety of promise libraries. Anne gives an introduction to promises using PromiseKit with basic operations and elaborates on the implications to coding and mindset that come with switching to asynchronous programming.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">At the end stands a short comparison of various promise libraries like Google Promises, BrightFutures or Hydra and a lookout regarding Async/Await.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">If you are familiar with Promises you can probably skip this one, for others this can be a good starting point.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Julia Roggatz - Muse Prototype Challenges</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=15070" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">And yet again I was at a complete loss regarding this talk title. Will she be musing about challenges in prototyping. Are there challenges when prototyping a muse? I guess so, cause I would not have a clue how that should work.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Of course none of that. Muse is a prototyping tool Julia helped to developed at a research facility [@inkandswitch]. The whole presentation was held using Muse, which I thought was a nice touch.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">At the start this seemed like a mundane product presentation and to some extend it was definitely a kind of advertisement. But once you look beyond that you see a new concept for creative working.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">The tool allows you to nest so called boards infinitely. A board can contain various kinds of elements as well as free hand sketches and texts. It only work when using the Stylus which is a kind of exclusion (interesting counterpoint to all the a11y focused talks) but the idea was to see what a Stylus driven interface can look like and what you can do with it.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So I think this more an attempt in a kind of paradigm shift towards a new way of working which sounds interesting, even though I am definitely not the target audience. Another twist is that there are no menus or working modes (e.g. you select a drawing or eraser tool so define what the next click will do) instead you use additional touch gestures to change the behaviour of the pen or even the angle at which you hold it. </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">So this could be interesting for designers or other creative people that would like to create something like a graphical mind map where you can include all kinds of documents or media.</span></span><br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Kate Castellano - What to expect when you are templating? Clue’s approach to Backend Driven UIs [<a href="https://twitter.com/katecastellano" target="_blank">@katecastellano</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=20448" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">This was actually the only backend focused talk of the two days. The problem at hand is something every app has to solve if it does get data from a server.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">How to create a reusable and maintainable architecture to send data about entities to display to your apps. The idea shown here is to define building blocks of your elements that can be reused to create new layout elements. Each block is described as a json element with a type. The apps know how to display each element and so you can control from the backend what the UI of your apps looks like.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">That way it is easy or even mandatory to have the same names and definitions on all platforms, allowing more consistent experiences for users and developers. Also you can add new elements without breaking old apps but need to be aware that those might lack data then.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">This is very similar to the way we built our apps at Süddeutsche Zeitung, so it was interesting to see, that others came to basically the same solution.</span></span><br />
<br />
<h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Lea Marolt - Mobile && Me == It's Complicated [<a href="https://twitter.com/hellosunschein" target="_blank">@hellosunschein</a>]</span></span> <span style="font-family: "arial"; font-size: 14.6667px;"><</span><a href="https://youtu.be/IKRkSbkS0zg?t=21957" style="font-family: arial; font-size: 14.6667px;" target="_blank">video</a><span style="font-family: "arial"; font-size: 14.6667px;">></span></h3>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">I spent quite some time thinking about how to describe this talk. The best I could think of is some kind of “Coming of Age” for software developers.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">Lea talks about her first experiences in software development and how she became more and more practised. Then after a while she felt a lack of meaning in her job and decided to build things in the real world. During that time she realized what aspects are easier when building software and found a new appreciation for the profession.</span></span><br />
<h2>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Summary</span></span></h2>
<span style="font-family: "arial";"><span style="font-size: 14.6667px;">Looking back at the whole event I do have a rather positive impression. A good location, logistics worked out well and the organizers made you feel welcome. Some of the talks were a bit of a let down though but a few really stuck out. But 539€ for two days might be a bit steep for some.</span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px;"><br />
</span></span> <span style="font-family: "arial";"><span style="font-size: 14.6667px;">If you are looking for a place for an exchange with other iOS enthusiasts UIKonf is definitely worth considering.</span></span><br />
<div>
<br /></div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-46487278316313777232019-05-21T20:18:00.000+02:002019-05-23T15:04:48.425+02:00BeyondTellerrand Dusseldorf 2019<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">So we are once again back at the famous <a href="https://beyondtellerrand.com/" target="_blank">BeyondTellerrand</a> conference in Dusseldorf, for it's 9th!!!! incarnation here. For me this is only the 2nd time I am <a href="http://sanityresort.blogspot.com/2016/05/front-end-excursion-2-beyondtellerrand.html" target="_blank">here</a> (3rd if you count the one last year in <a href="http://sanityresort.blogspot.com/2018/01/beyondtellerrand-2018-munich.html" target="_blank">Munich</a>, but I don’t) and it would not have come to that if it was not for my old/new colleague (long story there, ask me in person/comments if you really are that bored) and frontend wizard <a href="https://francescoschwarz.com/" target="_blank">Francesco Schwarz</a> [<a href="https://twitter.com/isellsoap" target="_blank">@isellsoap</a>].</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">He was the reason I was here the first time, that one in Munich (the one that doesn’t count) and this year by nagging me to tag along. Even though my development focus HAS shifted a bit from purely backend to app development and also some dabbling in frontend technologies it still feels a bit odd being at such a place. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In my experience most talks concern mostly design principles, working methodologies and creative processes. Of course there are always a few more techy talks around but those, as to be expected, concern web frameworks, browser developments and other flashy and shiny and sparkling thingies.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Don’t get me wrong, this is not a bad thing. Otherwise I would not be here. It is just a very different setting for me. Which is exactly WHY I keep coming back. Seeing what people can do with their creativity, how new ideas try to shift our perception of the world or what is even possible is quite refreshing. For me, this conference really embodies what it’s name promises: an opportunity to take a step back, broaden your horizon, see beyond your known territory and finding the courage to step out of your comfort zone (and maybe one day I will manage that).</span></span><br />
<a href="https://3.bp.blogspot.com/-EraX1g7Mhuw/XOQ2hoM2YjI/AAAAAAAAB8s/r3oWseQhUH0xK0QZww05wHdUMd9QSTn8wCLcBGAs/s1600/Twitter_20190512_163404.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="200" src="https://3.bp.blogspot.com/-EraX1g7Mhuw/XOQ2hoM2YjI/AAAAAAAAB8s/r3oWseQhUH0xK0QZww05wHdUMd9QSTn8wCLcBGAs/s200/Twitter_20190512_163404.jpg" width="112" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Ok, enough huffing and puffing. Let’s get down to business. Francesco and I departed Munich on a shitty and rainy Sunday noon just to arrive to a lovely spring day in Dusseldorf a good hour later. Perfectly smooth journey from soup to nuts. Since we had a few hours to kill we had a stroll to a nearby park where we found a small restaurant and decided to stop for a snack and some refreshments.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">After that we set off by foot again to the traditional Warm-Up event, this time hosted by the lovely people at <a href="https://wacom.com/en-us/" target="_blank">wacom</a>. Apart from chatting with other attendees and lots of free drinks and food we also got the opportunity to try some of their graphic tablets and see what can be done with digital ink. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://2.bp.blogspot.com/-j_pmtyp21b4/XOQ3vKM6spI/AAAAAAAAB84/8Cl343TbW3ksC5IESmGEx2NXWB5kaow8wCLcBGAs/s1600/MVIMG_20190512_183850.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://2.bp.blogspot.com/-j_pmtyp21b4/XOQ3vKM6spI/AAAAAAAAB84/8Cl343TbW3ksC5IESmGEx2NXWB5kaow8wCLcBGAs/s200/MVIMG_20190512_183850.jpg" width="200" /></a></span></span></div>
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxO_wnyUiSvaEgRrCsHzfH4-TWtsQDqrs0cKcvpzP7_FqYK6ATAi6AkKIhdkxq45oh4aiRBYSzcYk8Z-gbgmA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br />
<br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">General Notes</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">BeyondTellerrand is a special kind of conference not only aiming for technical talks or focusing on a single profession. It is always about people. The speakers, the attendants and the community. Marc takes great pride in finding special speakers with unique backgrounds and maintaining a familial atmosphere throughout the whole event. This also includes promoting charity events on the stage and their own booth.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Something else that is different than at other conferences is the musical accompaniment by <a href="https://twitter.com/tobilessnow">Tobi Lessnow</a>. I am not a huge fan of electronic music but the way Tobi incorporates talks into his interludes and especially the show he puts in while thoroughly enjoying his music adds a special kind of flavor to the ambience.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The videos to the talks can be found on the <a href="https://beyondtellerrand.com/events/duesseldorf-2019/speakers">coverage page</a>. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">A new addition was the screen with live captioning. Both Francesco and I were surprised by the speed and accuracy of the captioning as it was also able to apply quotation marks correctly and were wondering what software was behind this. Then we found out how it worked. The audio went into a skype call to some place in Scotland where a guy called Andrew simply typed what he heard which was then sent back ;-) </span></span><br />
<h2>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Day 1</span></span></h2>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In addition to the regular talks the first day also featured 3 side events hosted by some of the sponsors in a side room with a max of 100 attendees. First one was the…</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Shopify Breakfast Session - Liam Griffin [<a href="https://twitter.com/liam_at_shopify" target="_blank">@liam_at_shopify</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">If you already know what shopify is all about, this talk is not for you. For everyone else, go have look. Liam is giving an overview of what shopify does, how you can use and integrate it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">He is giving a quick summary about how other companies are working with shopify and what advantages they gain. You can also see what options you have in theming shopify and what kind of services are available.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">You can also create development accounts to have test orders processed and toy around with different settings before migrating them to the production accounts.</span></span><br />
<a href="https://1.bp.blogspot.com/-xFsSG-VlHIQ/XOQ9Yq01YMI/AAAAAAAAB9I/-gykSiT9J-0rBZN-1Jj2-YzLrBSljwsnQCLcBGAs/s1600/1557732306401.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-xFsSG-VlHIQ/XOQ9Yq01YMI/AAAAAAAAB9I/-gykSiT9J-0rBZN-1Jj2-YzLrBSljwsnQCLcBGAs/s1600/1557732306401.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The “techy” part of the talk was a short intro to the Liquid Objects templating language with some basics. IMO not much different than other templating mechanisms, it allows you to put data into your layout ;-)</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Liam also gave a quick overview over different ways to edit and manage your themes with tools like slate.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In the end this was more or less a little pr gig for shopify but it was done in a nice way and you can’t blame a sponsor for trying to get more attentíon for their product. And there were free subs ;-)</span></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 14.6667px;">All Constraints are Beautiful - Charlie Owen [<a href="https://twitter.com/sonniesedge" target="_blank">@sonniesedge</a>, <a href="https://www.sonniesedge.net/" target="_blank">sonniesedge.net</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Official opening talk. Always a tough job to get the crowd started. But Charlie did just that without breaking a sweat. The talk was not only very funny but also fascinating. Check out the video.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">We face constraints in almost every situation of our lives, be it professional or personal. Charlie illustrates this with the fitting analogue of baking a cake for some friends. Some maybe be vegan or cannot have gluten or might even have a life threatening allergy. So baking a cake for all of them is really really hard. So why not just go to a bar instead?</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Funny as that is, it has also a lot of truth in it. Usually we perceive constraints as something that is hindering us, something that restricts us in our choices and we therefore regard them as something bad and assume that our work will not be as good as it could be due to these evil constraints.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">And here is where Charlie proposes a different approach. Do not fight the constraints, accept and embrace them, let them be a contribution to your work. Some of the examples she lists are haikus or other forms of poetry that attain at least some, if not all, of their beauty because of the adherence to constraints.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Another very moving example is a quote that allegedly stems from Ernest Hemingway. It is said that he made a bet he could write a story containing only 6 words. It sounds rather unlikely but what he, allegedly, came up with was this:</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-7NxsUmVL41A/XOQ9YmkPWuI/AAAAAAAAB9Q/pXvSk4-s83onZ7kioXSh2n5xP9Tg7JHSwCEwYBhgL/s1600/1557735728391.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-7NxsUmVL41A/XOQ9YmkPWuI/AAAAAAAAB9Q/pXvSk4-s83onZ7kioXSh2n5xP9Tg7JHSwCEwYBhgL/s1600/1557735728391.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">“For sale: baby shoes, never worn”</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">You might wanna let that sink in for a while. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The main point is: Constraints are not inherently bad, some can be good but most of them are at least necessary. So do not ignore them when you create content, applications or other resources.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">But this is actually not the first step. Before you can acknowledge a constraint you must be aware of its existence. Try to remember that there are people with all kinds of needs, preferences and disabilities as well as all kinds of devices out there. Not everyone in the world has a current device or even a moderately common one. Charlie tried to summarize this with this:</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">“There is infinite technology and infinite humanity”</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Ultimately if everyone only builds apps that need the newest hardware we are encouraging people to buy that hardware which causes not only a lot of resources being used to produce said hardware but also will result in more and more older devices being thrown away and polluting the planet even more.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">You might find that last conclusion a bit extreme and I agree that relying on a new tech will not cause immediate death of the planet but it is a small part of the bigger problem and even baby steps matter.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Humanising Your Documentation - Carolyn Stransky [<a href="https://twitter.com/carolstran" target="_blank">@carolstran</a>, <a href="https://carolstran.github.io/cv/" target="_blank">carolstran.github.io</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">“Oh yeah, writing documentation!! Awesome!!!!” That’s what we are all thinking when that task comes up, right? Uhm.. ok.. maybe not quite as enthusiastic.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">That might be a part of the problem. Carolyn tries to point out what a good documentation can and should look like. Consider an app or api you have created, how good is the documentation for it? Did not bother to write one? Or maybe just covered the basics because it is mostly self explanatory? Sure about that?</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Carolyn’s background as a technical writer has given her an insight into what usually goes wrong when we write documentation. I will just try to sum up the IMO most important points, if you are interested in more, I recommend watching the video.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-j1FELN6y2Gk/XOQ9dztJ2fI/AAAAAAAAB9s/ETU__dr0EaAiIaL_nQX66pCHRbAeBZjyACEwYBhgL/s1600/Twitter_20190513_114356.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://2.bp.blogspot.com/-j1FELN6y2Gk/XOQ9dztJ2fI/AAAAAAAAB9s/ETU__dr0EaAiIaL_nQX66pCHRbAeBZjyACEwYBhgL/s320/Twitter_20190513_114356.jpg" width="320" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What should we take into account when writing documentation:</span></span><br />
<ul>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Do not start with the documentation when you are in the implementation phase or even later. Embed the documentation into you design process when you specify the use case you are going to implement. Make sure it gets updated as the specification evolves and use it as acceptance criteria to see if everything behaves as you specified</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Do not only describe what a buttons does or how an api endpoint can be used (reference doc) but also create documentation telling the user how to achieve something with it (use case documentation) e.g. how several api calls can be combined to complete a workflow</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Consider when people are usually reading docs, like at the same times when you are reading docs: </span></span></li>
<ul>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">When you failed to do what you wanted on your own</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">When something is not working as expected</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">When people are frustrated or confused…</span></span></li>
</ul>
</ul>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">She also gave a long list on how you should write docs, with an extensive list of tools and guidelines, here are only a few:</span></span><br />
<ul>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">do not use words like "easy", "simply" etc.</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">it is better to show than tell (examples, videos)</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">take a step back and consider that readers do not have your knowledge about the product</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">use tools like hemingway, write-good or alex.js</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">use a clear structure</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">a11y!!!</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">….</span></span></li>
</ul>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 14.6667px;">The Power of Metaphor - Mike Hill [<a href="https://instagram.com/mikehill.design">mikehill.design</a>, <a href="http://www.mikehill.design/" target="_blank">mikehill.design</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Here comes deluxe nerd stuff. A talk including super heros, magic, sci fi, dinosaurs and much much more. So buckle up!</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Mike’s résumé reads quite impressive. He worked in different positions like production design, concept design, etc. on various high profile projects in the filming and gaming industries:</span></span><br />
<ul>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Horizon Zero Dawn</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Call Of Duty: Infinite Warfare</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Blade Runner 2049</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Love, Death + Robots</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">...</span></span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-7F9WHIsH6hs/XOQ9YnzAAVI/AAAAAAAAB94/3ozkzMKTWIQzn16S1KezC6iwuzLMdvNCQCEwYBhgL/s1600/1557743715521.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-7F9WHIsH6hs/XOQ9YnzAAVI/AAAAAAAAB94/3ozkzMKTWIQzn16S1KezC6iwuzLMdvNCQCEwYBhgL/s1600/1557743715521.jpg" /></a></div>
<br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">During his illustrious carrier Mike did learn a lot about what a story and the world it takes place in need to captivate the audience and more importantly what kind of mistakes killed high budget fails.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The core concept of Mike’s talk is a construct called the <a href="https://en.wikipedia.org/wiki/Hero%27s_journey">Monomyth</a>. This is an abstract concept that describes the typical journey of a hero in a detailed sequence of phases. This is nothing new but was developed in the 1940s and is based on an analysis of narratives from ancient mythology until modern stories. Almost all great heroic stories can be ascribed to the Monomyth.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I’m trying to give a rough description of the Monomyth but I highly recommend to watch the video as Mike shares a lot of fascinating insights, plus a huge amount of blockbuster material. Depending on the granularity the Monomyth can have a lot of different phases. The most basic one consists of four.</span></span><br />
<br />
<ul>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The known and the old self: This is where a story begins. Mike used Star Wars as an example here. At the start Luke is at home living his live, then comes a call to adventure in form the message from Lea. Luke meets his Mentor Obi-Wan but at first refuses to follow the call until some tragic events force him to go.</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The unknown and the old self: Here the hero finds allies, here Han and Chewie, has to pass tests make friends etc. until he has some kind of traumatic experience that leads a form rebirth (the dumpster scene)</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The unknown and the new self: The hero finds some kind of reward for his struggles and fully transforms into his new self.</span></span></li>
<li><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The known and the new self: Our hero returns home usually triumphant etc.</span></span></li>
</ul>
<br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As I said, this is a very condensed version. Watch the talk for a better understanding.</span></span><br />
<br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The second concept Mike introduced is the reciprocity of Shadow and Persona. Persona describes a person’s outward behaviour. Our manners we learned by aspiring to meet expectations by our society, family or even jurisdiction. Where as the Shadow resembles our instincts and subconscious desires that we learned to suppress because they are not appropriate. In comics these two are usually represented by an angel and a devil sitting on the shoulders of a character trying to persuade him what he should do.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Furthermore Mike explained the terms the archetypes Chaos, Control, Animus and Anima using Jurassic Park.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Animus describe the attributes traditionally associated with males, like sternness, protection or strength. While Anima describes the traditionally female attributes like nurturing and loving. In Jurassic Park those two archetypes are represented by Grant and Ellie who during the evolution of the story both must learn to also develop the qualities of the complement archetype.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The Control archetype is usually assigned to some god like creator, someone who is in charge and wants to make the world better. In this example this archetype is taken by the role of Hammond, the director. He is creating live, a whole world. All with good intentions and is sympathetic to everyone, even towards Malcolm the representative of the Chaos archetype. He is stirring things up, questions the Control archetype and is generally a huge pain. As the story develops these two need to understand each other’s positions and learn to work together to save everyone from disaster.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Again, this is only scratch on the surface of this talk. Go watch it now!</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Trivago Lunch Break Session: Lessons Learned From Running a Design System - Christoph Reinartz [<a href="https://twitter.com/pistenprinz" target="_blank">@PistenPrinz</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Christoph shared his experiences when he joined the folk at Trivago about the status quo he found, his aspirations to improve on the situation and the learnings he took from this.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">When he joined Trivago the website, despite just having undergone a rewrite, was in a chaotic state. There were no style guides or processes to design changes. Sometimes there were just screenshots in a JIRA ticket and the developers used a color picker to determine what color to use. That resulted in about 40+ different tones of grey and similar multitudes of green or orange. CSS and HTML were in a desolate state.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Christoph and his team set out to change this and started to implement a design system as a pattern library to unify the diversities. Over the years they put in more and more effort but struggled along the way as there were a lot of problems to correct. At one point they analysed the usage of their lib was hardly used in the main Trivago website but mainly in side applications.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-F2DwZ8MyXeM/XOQ9ZSa6oiI/AAAAAAAAB9w/V03OflQuq6wV6Lf8GjStTorZJ-4Bu6BXACEwYBhgL/s1600/1557748087901.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://3.bp.blogspot.com/-F2DwZ8MyXeM/XOQ9ZSa6oiI/AAAAAAAAB9w/V03OflQuq6wV6Lf8GjStTorZJ-4Bu6BXACEwYBhgL/s1600/1557748087901.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Several other issues finally lead to the abandonment of the library even though a lot of time and effort went into it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I found it very courageous to hold this kind of talk and openly speak about a failed project of these proportions. After all usually people only talk about their successes but our failures is where we and others can learn the most from.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">His main learnings where that if you want to talk a problem like this you need to start small. Do not approach all problems at once but limit yourself to the most pressing ones. On the other hand you should aim high, meaning that you should try to build a good and well thought through solution, because a lukewarm approach will raise other issues later on. And finally try not to underestimate the difficulty and complexity ahead, do not approach it light-hearted or it will come around to bite you in the arse.</span></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 14.6667px;">Making Art With Familiar Objects - Red Hong Yi [<a href="https://twitter.com/redhongyi" target="_blank">@redhongyi</a>, <a href="https://www.instagram.com/redhongyi/" target="_blank">redhongyi</a>, <a href="http://redhongyi.com/" target="_blank">redhongyi.com</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I will say this for a lot of talks in this post but seriously: Watch that video!!!!</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">With most talks about creative work a simple description here does not do justice. Red takes us on journey through her creative and personal life which are both intertwined closely. I will only give a few short examples of her work but, I gotta say it again, watch the video.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">She started of by showing how she painted a portrait of a Chinese NBA player but instead of using a brush, she dipped a basket ball into the paint and dribbled it on the canvas. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Another one was where she used socks connected with clips as a kind of pixels to create a huge picture.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Or bundling chopsticks in packages of different sizes to also create a pixel style portrait of Jackie Chan (and I apologize for not memorizing the names of the other people portrayed).</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Throughout the talk Red inspires with her authentic and honest love for art. So go and click that video link!</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Never Snap to Guides - David Carson [<a href="https://twitter.com/d_carson_design" target="_blank">@d_carson_design</a>, <a href="http://davidcarsondesign.com/" target="_blank">davidcarsondesign.com</a>, <a href="https://instagram.com/davidcarson" target="_blank">davidcarson</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">If there is one thing to say about Dave Carson, he is a special kind of snowflake ;-) which I say with a lot of respect. His carrier is characterized by his strive to challenge conformity.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This was less like a regular talk but more like a fast forward slide show through his life and work showing an immense amount if diverse designs, logos and layouts, as well as some design fails he encountered on the way. All accompanied by funny anecdotes. We had a lot of laughs in this one.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<a href="https://2.bp.blogspot.com/-Qem5WskM2aA/XOQ9Zmi3WnI/AAAAAAAAB90/UKhJZKNgHxsXUqRvKloDUFD1j0dbSKGGACEwYBhgL/s1600/1557759079637.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://2.bp.blogspot.com/-Qem5WskM2aA/XOQ9Zmi3WnI/AAAAAAAAB90/UKhJZKNgHxsXUqRvKloDUFD1j0dbSKGGACEwYBhgL/s1600/1557759079637.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What I took away from this talk can be boiled down to this: Tools are there to assist you but not to make decisions for you. You have to decide what a design should look like not the tools and not templates that “everyone uses”. Also if you have different ideas, let your customer choose from them, do not withhold alternatives from them. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">But apart from that, you guessed it, watch that video ;-) But when it gets close to the end, make sure to sit down. You will know what I mean when you see it.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Hard Work, Relentless Dreams and WiFi - Rob Draper [<a href="https://twitter.com/RobDraper1" target="_blank">@robdraper1</a>, <a href="https://instagram.com/robdraper1" target="_blank">robdraper1</a>, <a href="http://robdraper.co.uk/" target="_blank">robdraper.co.uk</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This was hands down the most personal talk of this conference. Rob shared his life’s story with us through all the ups and downs and how he kept on pushing to get back up.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In school he started doing graffiti which got him interested in art. He then worked at a fashion store building props from all kinds of things always struggling with a tight budget. Then the shop was bought by another company and was closed down to move north of England.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">So he was out of work and had to find day to day jobs to survive. At one point he started drawing on cups in coffee shops just for himself. He kept drawing and drawing and at one point a newspaper found out about his great drawings and published an article about him. From there on he got more and more publicity and job offers.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">He had a house, a family, his office at home, life was good. But then the downward spiral hit again. A Burglary where people stole a lot of stuff from his shed, his dog dies unexpectedly and then his wife wanted a divorce.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Rob had to move in with his sister and had a deal with his wife, that he could use the office at the house during the day, so he was driving back and forth and figured he would soon be able to move out of his sisters living room. Then he got pulled over by the police because his car insurance ran out and the car got confiscated plus he suffered from a bad case of sciatica. Due to his housing and financial situation no bank would loan him money.</span></span><br />
<a href="https://1.bp.blogspot.com/-dgiWVQSN-Z4/XOQ9Zsz4yBI/AAAAAAAAB94/j0mGHpT6Bt8-Bs1w3vPNKof_UVUaclhTwCEwYBhgL/s1600/1557763441938.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-dgiWVQSN-Z4/XOQ9Zsz4yBI/AAAAAAAAB94/j0mGHpT6Bt8-Bs1w3vPNKof_UVUaclhTwCEwYBhgL/s1600/1557763441938.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What helped him to keep moving instead of giving up, was his son. He wanted to be able to provide him with all the things a kid should have. After some time he realized, he did not need an office, he could work anywhere where wifi was. So he got the cheapest possible tripod he could find and set out to do more of his “play work”. Uploaded it and kept pushing to find new clients.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Thanks to his persistence he succeeded. He kept pushing against all odds and came out ahead. This story in itself was already inspiring but add in his really amazing drawing skills and you have a great talk.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This talk is worth to watch as well in my opinion.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Mozilla Evening Break Session: VR and AR in the browser, how Mozilla is pushing the boundaries of reality - Fabien Benetou [<a href="https://twitter.com/utopiah" target="_blank">@utopiah</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Fabien is very passionate about not only VR/AR but also about the open source culture and helping others. He is working with UNICEF to help bring education to people in developing countries.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Mozilla is investing into web based VR development for several reasons. They want it accessible to as many people as possible. Companies like Facebook or Google also develop VR devices but they keep it proprietary enclosing their users in their ecosystem. This is a development Mozilla considers not only undesirable but also dangerous and thus they want to help providing a standardised and open alternative.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-4-Neo4Sn4aM/XOQ9Z9UeGBI/AAAAAAAAB98/efQzQzzhk0cdkBr-U4SO4189utg7zfEGQCEwYBhgL/s1600/1557767012995.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-4-Neo4Sn4aM/XOQ9Z9UeGBI/AAAAAAAAB98/efQzQzzhk0cdkBr-U4SO4189utg7zfEGQCEwYBhgL/s1600/1557767012995.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">With WebGL 2.0 exists a way to have performant VR applications in the browser. It is still not perfect but the evolution is a long way from done so they expect to improve the experience more and more.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Imagination, Desire and the Call of the Future - David Delgado [<a href="http://davidjdelgado.com/" target="_blank">davidjdelgado.com</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Okay, last talk of the day. Everyone is a bit exhausted and I am afraid I might drift off soon. But that was washed away after a few minutes.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I mean, how can you get bored when someone tells you he is designing stuff for NASA at JPL? Admittedly nothing that goes to space. Instead David created projects to either raise people’s interest in certain missions or to visualize data.</span></span><br />
<a href="https://3.bp.blogspot.com/-FkA-ZxCYPo8/XOQ9aHmUFUI/AAAAAAAAB98/qpyqmSvTrlM6UCzVC5Vi9iCz8FIxVoIawCEwYBhgL/s1600/1557770940345.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://3.bp.blogspot.com/-FkA-ZxCYPo8/XOQ9aHmUFUI/AAAAAAAAB98/qpyqmSvTrlM6UCzVC5Vi9iCz8FIxVoIawCEwYBhgL/s1600/1557770940345.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">E.g. when the Rosetta mission was about to land he created an artificial comet in a pool with fog to see how people would react to it, yielding unexpected and interesting results.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Or when he was shown Goldstone areal (big antennas to communicate with the different spacecrafts in orbit) he create a waterfall of light that shows in real time when data is transmitted from or to a spacecraft.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Once again words are not enough to describe his cool projects especially a music video he made with school kids about traveling to mars. Just check it out!</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">But if I had to deduct a moral from this it would be: Curiosity can outgrow fear.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Humans just need a small glimpse of hope to overcome fears and dare to leap into the unknown. Embrace your curiosity.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Get-together and evening beer</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As usual the end of the first day has the obligatory get-together to discuss the events of the day with free drinks from the bar.</span></span><br />
<h2>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Day 2</span></span></h2>
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I Don't Care What Airbnb is Doing - Stephen Hay [<a href="https://twitter.com/stephenhay" target="_blank">@stephenhay</a>, <a href="http://the-haystack.com/" target="_blank">the-haystack.com</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Kicking off day 2 is probably the hardest challenge a speaker can be confronted with. You have to deal with the audience’s expectation after the first day plus the fact that most are probably quite hung over.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">So Marc gave this task to a veteran and only a few minutes in he had gotten everyone on their toes. Stephen started by cycling back to day 1 incorporating parts of the talks as references into his own.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Like Dave Carson he stressed the point that if you want to be different then be different but not in the same way that everyone else is different. He reenforced this statement with a lot of fitting examples how most of the “hip” websites just look the same.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8piLyLEBmx8/XOQ-9yI7-aI/AAAAAAAAB-E/V60S5_xQXQAgfJCr5DNe0-LilFzRR61lQCEwYBhgL/s1600/1557822156775.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-8piLyLEBmx8/XOQ-9yI7-aI/AAAAAAAAB-E/V60S5_xQXQAgfJCr5DNe0-LilFzRR61lQCEwYBhgL/s1600/1557822156775.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As I already touched on in the prelude, nothing exciting happens in the comfort zone. You need to push the boundaries in order to create something special. An example for this was the design of Tesla. It still is a car, it has wheels, a body, headlights and windows. But it’s inside feels different, not so different that you can’t relate to it, but different enough that it changes the way you interact with it and perceive it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">We are prone to try grasping the low hanging fruits of creativity but instead we should try new things. Learn from what we find out be it failure or success and then start over again. But most of all we should be critical thinkers. Do not accept what “everyone knows” make your own experiences. And with regard to that you should not take my word for granted but see for yourself ;-) Again a video well worth watching.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Data, Design, Code - Shirley Wu [<a href="https://twitter.com/sxywu" target="_blank">@sxywu</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">It is always impressive when you see what a skilled visualiser can do with simple data.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Shirley gives us an overview of her previous works, what different aspects of data can be used to group and finally display it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Actually what I remember most of this talk is something rather sad or even upsetting about the data of one of her projects. It seems that it is common in the US for cities to have their homeless stuffed into busses or even planes to bring them to other cities or maybe even other countries!! TBH that made me sick!!!</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">But back to the matter at hand. One part of the talk was a live coding session to recreate one of her visualizations. It was interesting to see how the different tools can work together to create great animations. Unfortunately the live coding was maybe a bit too well rehearsed as it was really quick and therefore a bit hard to follow.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What impressed me though was that Shirley combined D3, VUE and Greensock in a tool stack by replacing mechanisms in one with equivalents of the other in order to make the code more lean.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The Scoville Scale of Web Font Loading Opinions - Zach Leatherman [<a href="https://twitter.com/zachleat" target="_blank">@zachleat</a>, <a href="https://zachleat.com/" target="_blank">zachleat.com</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Zach is a Web Fonts enthusiast through and through. As it seems he is also into spicy food as his talk is divided into different steps referring the Scoville Scale. So brace your brain and taste buds for Web Fonts hotness!</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The main reason why Zach advocates the use Web Fonts is that you should give your reader the best reading experience you can. Of course saving bytes is an important aspect of a website but in his opinion the extra bytes needed by Web Fonts as opposed to system fonts is worth it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The different heat levels in Zach’s talk related to different things you should consider in regard to fonts on your website.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Often font declarations can be simplified especially when they refer to default fonts. The so called bulletproof font face declaration can also be shortened. Mixing local and url font-face declaration is discouraged.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">If you want to find out more about the fonts used on a site you can use the fonts tab in the firefox dev tools. Also fonts are a kind of software so they also need maintenance and updates.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As with every talk about Web Fonts there was also the well known Romney example for a FOIT. Here the new directive “font-display: swap” is useful as it will cause the fallback font to be used immediately and then being swapped out once the desired font is loaded.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Two more sections that I found interesting was the overview of different licencing models available for Web Fonts as well as hosting options.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-KyOxXs7Yisw/XOQ-938vsEI/AAAAAAAAB-I/8IijYu8DDTAURQ9CPTiO_-wtstMZz--pwCEwYBhgL/s1600/1557832635889.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://4.bp.blogspot.com/-KyOxXs7Yisw/XOQ-938vsEI/AAAAAAAAB-I/8IijYu8DDTAURQ9CPTiO_-wtstMZz--pwCEwYBhgL/s1600/1557832635889.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As with all talks before this is only an excerpt and I once again recommend the video (again a lot of laughs) at least if you are interested in Web Fonts at all.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Microsoft Lunch Time Session: “Edge on Chromium” Ask me anything - Chris Heilmann [<a href="https://twitter.com/codepo8" target="_blank">@codepo8</a>], Working Draft Podcast [<a href="https://twitter.com/workingdraft" target="_blank">@workingdraft</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This was designed as an Q&A session for the attendants but in order to get things started the guys from Working Draft podcast kicked it off with some questions.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The whole session was recorded by Working Draft and will be up on their podcast within the next weeks.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What concerned people the most was why the team decided to take this step and if that does not give too much power to Chromium or on the other hand makes life too hard for Gecko.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In the start the Edge team set out to create a browser that is as standard conform as possible. But soon they encountered problems as many many sites on the web did not conform to those standards and so did not work in Edge. Breaking the web was not an option for them, so they tried to cope with those sites but in the end it was just too complicated.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">So they decided to contribute to the Chromium project instead. In their view this gives them the advantage of a browser engine that works well also with non standard sites and on the other hand has the benefit that there are now two big players in the Chromium project so not all the power is in one hand. Also this allows them to release Edge independent of Windows so they can have shorter release cycles.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-4rfKNa41Prw/XOQ--lQoImI/AAAAAAAAB-o/uaKYebuM8248VQJ_360kFs3Z5gzITovsQCEwYBhgL/s1600/1557834525141.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-4rfKNa41Prw/XOQ--lQoImI/AAAAAAAAB-o/uaKYebuM8248VQJ_360kFs3Z5gzITovsQCEwYBhgL/s1600/1557834525141.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">On the other hand they hope the Gecko engine will continue to be around to have more diversity and not only one engine for all browsers. IMO this sounds a bit hypocritical as the Gecko guys could use the same arguments to switch to Chromium, but it is their (Edge) call.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Having two big companies with a say in the Chromium project also gives rise to the question, what happens if there is a disagreement? The only answer there was basically “We expect that not to be a problem as everyone in the project wants a pragmatic solution.” This view is underpinned by the fact that the real distinction among browsers does not stem from the engine but from what the browser does with it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Other news were that the old Edge will be replaced once the new version comes out but Internet Explorer will still be installable in parallel. Also Edge will have a list of sites only working with Internet Explorer and open all these sites in a tab using the Trident engine. Plus links opened in the Trident tab that do not require the engine will be opened in tab with Chromium engine.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Also a lot of the features from the existing Edge engine are ported to the Chromium project. Edge will come to Mac and Linux system and a release will use most current Chromium version.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Napworking - Dorobot [<a href="https://twitter.com/dorobot" target="_blank">@dorobot</a>, <a href="https://instagram.com/dorobot" target="_blank">dorobot</a>, <a href="https://dorobot.de/" target="_blank">dorobot.de</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Who doesn’t like a good nap? So does Doro and she now even found how this helps her creativity. In the minutes when she is having a lie down on the couch letting the thoughts drift off shortly before falling asleep the best of ideas arise.</span></span><br />
<a href="https://1.bp.blogspot.com/-Tv5owOAZHtM/XOQ--yMM_DI/AAAAAAAAB-s/VmzN-ZJDf2kVh-3yCUvdyT-Gn_xRNp2lQCEwYBhgL/s1600/1557839847879.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://1.bp.blogspot.com/-Tv5owOAZHtM/XOQ--yMM_DI/AAAAAAAAB-s/VmzN-ZJDf2kVh-3yCUvdyT-Gn_xRNp2lQCEwYBhgL/s1600/1557839847879.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Unfortunately this does not work for all of us, as having a nap at the office might cause issues with the boss ;-)</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In her amusing and wonderful talk Doro takes us on a tour through her world of lovely weirdness. If this talk was not worth watching for the animations on themselves she gives us delightful insights into her way of thinking. From “boring your brain” over “lateral thinking” to the “right to be inefficient”.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">There should be something to take away from this talk for everyone.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Flexbox Holy Albatross - Heydon Pickering [<a href="https://twitter.com/heydonworks" target="_blank">@heydonworks</a>, <a href="http://heydonworks.com/" target="_blank">heydonworks.com</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As much as I appreciate the creative talks on BeyondTellerrand I was really happy to see a pure technical talk. </span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The problem at hand: Flexbox allows you to have items placed in a single row on a wide screen. In a very narrow layout the same flexbox puts all elements in one column. In between these two edge scenarios elements are placed in a kind of grid where the elements in the lowest row get stretched out to align with the other rows. This middle step is sometimes undesirable so Heydon wanted to find a solution to skip it.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This introduction was followed up by another funny and very informative talk. So again, watch the video as I can yet again only give a brief summary.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Whenever Heydon started discussing this idea some people suggested media queries. The issue with this approach is, that media queries take the dimensions of the device/viewport into account and not that of the containing element. So this is not a viable solution.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What would be suitable are container queries but according to Heydon using those caused severe browser issues. What works is a javascript based solution using observables to react to the parent element’s width but what we want is a pure css solution.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/--sxK11wdzHI/XOQ-_G1PRSI/AAAAAAAAB-w/GH8q57Q5gTI77L-PZn6GqShwIcBm-H6-gCEwYBhgL/s1600/1557844971538.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://3.bp.blogspot.com/--sxK11wdzHI/XOQ-_G1PRSI/AAAAAAAAB-w/GH8q57Q5gTI77L-PZn6GqShwIcBm-H6-gCEwYBhgL/s1600/1557844971538.jpg" /></a></div>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">What follows is a description on how to combine different css properties and functions (calc, width, ..) in more and more complex steps leading to something called the Fab Four technique that was already developed before Heydon got to this point. But Heydon keeps on improving and refining the solution into a more elegant version of algorithmic layout in pure css.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Even if you are familiar with the final result, the talk is still worth to watch, if only for the entertainment value.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Take Back Your Web - Tantek Çelik [<a href="https://twitter.com/t" target="_blank">@t</a>, <a href="http://tantek.com/" target="_blank">tantek.com</a>, <a href="https://instagram.com/tantek" target="_blank">tantek</a>]</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">In the previous instances of BeyondTellerrand I attended the last talk was always something light and breezy. An entertaining talk to release the audience with a smile.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">This time it was different. Tantek is an advocate for the <a href="https://indieweb.org/">IndieWeb</a> movement and highly involved with the W3C. He is one of the driving forces behind the developments for an independent web for everyone.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Using strong pictures and videos Tantek shows us, what the web should and could be about. How we should shape it to what we want it to be instead of relying on platforms like Facebook or Google to tell us what to watch and read.</span></span><br />
<a href="https://3.bp.blogspot.com/-LtMeer9yeQU/XOQ-_nyQSDI/AAAAAAAAB-0/TMsZPx4BslsOCKJrdeL9Rd0TbI6kDzhPwCEwYBhgL/s1600/1557848933463.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="189" data-original-width="252" src="https://3.bp.blogspot.com/-LtMeer9yeQU/XOQ-_nyQSDI/AAAAAAAAB-0/TMsZPx4BslsOCKJrdeL9Rd0TbI6kDzhPwCEwYBhgL/s1600/1557848933463.jpg" /></a><span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">“Take Back Your Web” is the perfect title for this talk and something we all not only should but have to pursue. Apart from preaching of what not to do, Tantek also shows what can be done to have unique and independent presence on the web. He introduces tools from a starter kit for your own github web site (<a href="https://github.com/indieweb/blank-gh-site">indieweb/blank-gh-site</a>) to <a href="https://webmention.net/">WebMentions</a> and <a href="http://microformats.org/">MicroFormats2</a>.</span></span><br />
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br />
</span></span> <span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">It was a very seizing presentation for the IndieWeb movement and if you are not yet familiar with it you need to watch this talk.</span></span><br />
<h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Summary</span></span></h3>
<span style="font-size: 14.6667px;"><span style="font-family: "arial" , "helvetica" , sans-serif;">As with the previous editions I attended this was a very worthwhile experience. This is not just another average conference, something about the way Marc is running the event and talks to and about other people on and off stage makes it very special. It is actually hard to describe but it just feels different than all the other conferences I experienced. If you are up for a conference that does not solely focus on technical topics and feels somehow warmer and cosier, then you should sign up for the next edition. </span></span><br />
<div>
<br /></div>
</div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-11862281401598879882018-05-12T02:10:00.001+02:002018-05-12T02:12:39.376+02:00DevoxxUK 2018It is May, it is Devoxx Time!!!!<br />
<br />
After missing out last year I made it back to the <a href="https://www.devoxx.co.uk/" target="_blank">UK incarnation of Devoxx</a>. For all of you who are not yet aware what Devoxx is: Low cost conferences, lots of talks, quite a lot of good speakers and all centered around developers. Main focus is still Java and Java based technologies but other technologies are on the uprising :-)<br />
<h2>
Day 1</h2>
<div>
<h3>
Welcome to Devoxx Uk - <a href="https://twitter.com/holly_cummins" target="_blank">Holly Cummins</a>, <a href="https://twitter.com/mrhazell" target="_blank">Mark Hazel</a></h3>
<div>
The opening keynote was of course held by Mark Hazel himself and Holly Cummins, one of the program leads of this year. Mark goes over the usual but still important topics: </div>
<div>
<ul>
<li>What is Devoxx?</li>
<li>Why do they do it?</li>
<li>What kind of talks will be held? (Special mentioning of the Ignite talks in the evening, 5 mins 20 slides and GO!)</li>
<li><a href="https://www.devoxx.co.uk/buddiesprogram/" target="_blank">The Buddy program</a></li>
<li>and of course Devroxx the Thursday evening event with Devoxx beer!</li>
<li>All videos being uploaded to <a href="https://www.youtube.com/channel/UCxIamwHotqAAdmecaKT9WpA" target="_blank">Youtube</a></li>
</ul>
<div>
Holly focused on what she like about conferences and why she considers them important. Conferences allow to look beyond your usual scope, to interact with others and hear about new technologies. Even if those things happen in a completely different field you can adapt some of the techniques for your own work. </div>
</div>
<div>
<br /></div>
<div>
She drew an interesting analogy to book from the 17th century, "The Compleat Angler". A book telling people how to become a better fisher, which is the second most printed book in the English language (tells you something about the English, uh?). It taught people important virtues like patience and composure. And likewise all those things we here about at conferences can help us to become better, more well rounded as developers by not only focusing at the actual development skills but on us as a whole.</div>
<div>
<br /></div>
<div>
A good starting talk with the right mix of information and philosophical depth.</div>
</div>
<div>
<br /></div>
<div>
<h3>
Java 2018: Change is the only Constant - <a href="https://twitter.com/mreinhold" target="_blank">Mark Reinhold</a></h3>
<div>
Being the JDK chief architect Mark has a lot of insights to give on the current and past state of the JDK as well as future plans.</div>
<div>
<br /></div>
<div>
Since the ecosystems around Java (node, go, swift.. ) are evolving with an impressive velocity Java has to adopt in order to keep up with this change and remain competitive. </div>
<div>
<br /></div>
<div>
The first step into this direction was to refactor the JDK to allow faster and more flexible development in the future. To achieve this a lot of untangling had to be done. Make sure you at least check the slides in the video to get an impression how bad it really was *shudder*.</div>
<div>
<br /></div>
<div>
Now the JDK is scheduled for releases every 6 months and having an LTS release every 2 years. This is a significant improvement compared to the past. I am looking forward to see how this works out.</div>
<div>
<br /></div>
<div>
Another interesting aspect is that Oracle made several commercial tools available as open source and also provides JDKs licensed under GPL available.</div>
<div>
<br /></div>
</div>
<div>
For me this looks like Java will still be going strong for a long time and it will be interesting to see how those innovations will be received by the developer community.</div>
<div>
<br /></div>
<div>
<h3>
A Future without Servers - <a href="https://twitter.com/danilop" target="_blank">Danilo Poccia</a></h3>
<div>
In Danilo's talk we got s short overview of the history of development. Starting with Ada LoveLace over monolithic application and micro services to lambdas and serverless architectures.</div>
<div>
<br /></div>
<div>
In the future Danilo envisions for us developers we can all focus solely on our business logic. All platform maintenance, logging, monitoring but also stuff like validating input is done for us by the infrastructure.</div>
<div>
<br /></div>
</div>
<div>
<h3>
The Mindful Developer: The Neuroscience of Stress Management - <a href="https://twitter.com/matthewrenze" target="_blank">Matthew Renze</a></h3>
<div>
In my opinion this qualifies as a brave talk. Being a an IT consultant, which is a profession in which you definitely have to deal with a lot of stressful situations, and admitting that you suffer from stress related impairments could have negative consequences for you.</div>
<div>
<br /></div>
<div>
It is great that Matthew has the courage to speak about his experiences and how he learned to deal with them. The main technique he focused on in the talk was meditation. How it helped him but also how research underpins his subjective experiences. He even took it as far as to document his own vital signs over an extended period of time to make his progress visible.</div>
<div>
<br /></div>
<div>
Stress related conditions are a real threat to every one in modern society and have to be taken serious. Even though it takes courage to openly talk about it if you are the one affected.</div>
<div>
<br /></div>
<div>
<h3>
Are you ready for Cloud-Native Java? - <a href="https://twitter.com/gcharters" target="_blank">Graham Charters</a>, <a href="https://twitter.com/spoole167" target="_blank">Steve Poole</a></h3>
<div>
A classic two fold talk. Steve starts by talking about how moving to the cloud shifts the requirements and measurements applied to software engineering.</div>
<div>
<br /></div>
<div>
The main point is, once you are on platform where you only pay what you need, those needs are directly coupled to the costs. So controlling will be asking more questions about why e.g. cpu has to be increased. </div>
<div>
<br /></div>
<div>
Also the behavior of your application has more direct impact on it's cost. When you scale up and the new node needs a long time to be fully up and serving it creates back pressure which then results in higher starting load. And depending on your payment plan that might take you into a very costly billing range.</div>
<div>
<br /></div>
<div>
Focusing on these questions Steve gives a comparison of different JDK versions hosted at <a href="https://adoptopenjdk.net/" target="_blank">adoptopenjdk</a>, like Hotspot or OpenJ9 and how those perform during scale up periods.</div>
<div>
<br /></div>
<div>
The second part, covered by Graham, was more or less an exhaustive introduction and demo of the <a href="https://projects.eclipse.org/proposals/eclipse-microprofile" target="_blank">eclipse microprofile project</a>. The goal of this project is to allow developers to have enterprise features for their applications but with the least possible overhead by choosing only those components that you actually want. So if you live on the enterprise world, this is certainly worth a look.</div>
<div>
<br /></div>
<div>
<h3>
Exploring Space: Challenges, Innovation, Management: Lessons For All - Mark Sims</h3>
<div>
Oh boy, oh boy. Space ships! Rockets!!! Awweeeesooooommmee! Man was I looking forward to this, someone who really built a space craft and launched it, telling us about who cool but also how difficult that is etc.</div>
<div>
<br /></div>
<div>
I am really trying not to be mean here, but somehow I have to break it to you. That was the downer of the conference. Don't get me wrong, space is still ace and yes we heard about a lot of the things that are hard and unexpected difficulties. But the talk itself was actually one of the worst I have heard on a conference. It was the typical old school university lecture held by someone who's sole interest is research. Slides cramped with bullet points, hard to read fluently. And Prof. Sims gave the impression of being rather annoyed having to give a talk, everything was more or less just read from the slides with almost no distinction between important and minor aspects.</div>
<div>
<br /></div>
<div>
Here is what I could take from this talk before my brain kicked into tilt mode:</div>
<div>
<br /></div>
<div>
There are a lot of challenges for your hardware, different levels of gravity, high amount of different radiation, huge ranges of temperature levels, massive shocks and vibrations on starting and landing.</div>
<div>
<br /></div>
<div>
You have to run tests, a lot of them, very very often. You definitely have to make sure your system works. You have to try to think about every possible corner case. The software needs to be redundant, built on different systems, maybe by different teams so that one error cannot crash both systems. The system has to reduce resource usage to a minimum as those are always low in space. And most importantly the system has to be flexible and adaptable. I was very impressed that the team was able to patch the software from earth while the mission was already underway. </div>
<div>
<br /></div>
<div>
I am sorry if I am doing injustice to Prof. Sims, but imo there was so much more that could have been done with this topic to motivate and inspire people. </div>
<div>
<br /></div>
<div>
<h3>
Springing into Kotlin: How To Make The Magic Even More Magical - <a href="https://twitter.com/mkheck" target="_blank">Mark Heckler</a></h3>
<div>
Spring AND Kotlin two really fancy things combined in one talk? Bring on the magic!! </div>
<div>
<br /></div>
<div>
Good, solid talk by Mark, definitely knows his stuff. But for me there was nothing new to take away actually, apart from that Spring 5 now supports Kotlin. Mark showed the basics of Spring Boot and the basics of Kotlin and how to use Spring Boot in a Kotlin application by migrating a mini app from Java to Kotlin.</div>
<div>
<br /></div>
<div>
I was hoping for some more in depth stuff, something the every day developer usually does not think of to leverage the powers of two powerful tools like those we have at hand here.</div>
<div>
<br /></div>
<div>
For those who do not know much about any of the two technologies that talk is absolutely worth a look. If, like me ,you know how to work with Spring and have at least done some basic Kotlin coding, this is probably a bit boring.</div>
<div>
<br /></div>
<div>
<h3>
Spring Framework 5: Feature Highlights & Hidden Gems - <a href="https://twitter.com/springjuergen" target="_blank">Jürgen Höller</a></h3>
<div>
Ooookay, more Spring. This time by Mr. Spring Jürgen Höller himself. </div>
<div>
<br /></div>
<div>
Again solid talk, good to follow. Basic things I took away from this one:</div>
<div>
<br /></div>
<div>
<ul>
<li>Kotlin support (hear hear ;-))</li>
<li>Webflux: Reactive alternative to the standard mvc module</li>
<li>Functional Web Endpoints: Instead annotations you can define routing/request mappings in a functional programming style. I don't really see why yet tbh, but there are probably people out there that go nuts about this. So if you are one of them, let me know why this is great :-)</li>
<li>Can now also handle immutable classes</li>
<li>Usage of NIO2</li>
<li>Build-time components indexer and annotation processor: Now this got me drooling. Find errors in your bean annotations at compile time and speedup the application start as the scanning has already been done during the compile. ACE!!!</li>
</ul>
</div>
<div>
<br /></div>
</div>
<div>
<h3>
Conways Law and Microservices: A perfect match, or not? - <a href="https://twitter.com/andyhedges" target="_blank">Andy Hedges</a> and <a href="https://twitter.com/aspender" target="_blank">Adrian Spender</a></h3>
<div>
Andy and Adrian have been working at the transformation of Tesco's software department for the last 8/5 years. In this talk they explained what steps they had to take on this long and rocky road and what their challenges and insights were.</div>
<div>
<br /></div>
<div>
In the beginning Tesco's software development process was the typical old school waterfall model: Conception -> Design -> Architecture -> Implementation -> Deployment </div>
<div>
<br /></div>
<div>
As usual the process was slow, heavy weight and had very limited flexibility. Likewise the system architecture was a big mash up with little cohesion and lots and lots of fine grained dependencies between almost all components. </div>
<div>
<br /></div>
<div>
The first hard task was to actually define what should be a cohesive unit, so what methods should go into a service. This did reveal some interesting and unexpected aspects. E.g. one assumption was that when ever you handle a product you also always need the product's price. But there are use cases in which a product may already be designed and is already promoted but has no price yet. So taking this into account you can defined different, smaller and maybe better service boundaries.</div>
<div>
<br /></div>
<div>
Another good example was how an application can contact a customer. There is a contacts service that hold e.g. an email address of a customer. There is als an email service that you can use to send an email. Now you could create an application that uses the contact service to retrieve the email and then use the email service to actually send the email to the given address. OR you could structure your services in a way that you can simply tell the contacts service to send a message to a certain customer. Then the contacts service could even use the contacts preferred messaging method (email, sms, whatsapp..).</div>
<div>
<br /></div>
<div>
Along with the services you also have to structure your development teams. So you have different teams maintaining the services, in Tesco's case grouped by common domains, like "customer" or "warehousing". Now all those teams are dealing with tasks that are needed in a common way across all services. So there are some guidelines all teams have to follow:</div>
<div>
<br /></div>
<div>
<ul>
<li>Logs: All services/applications have to use the same log format</li>
<li>Tracing Id: All services have to retain the tracing id for a transaction</li>
<li>...</li>
</ul>
<div>
Now this did sort out the regular development issues for most cases. But sometimes a project comes up that requires expertise from different departments. After trying a few approaches they ended up with a concept the call "Pop-Up Teams", which means that for such a project they are pulling members from each affected team to form a new temporary team that then takes care of the project.</div>
<div>
<br /></div>
<div>
All of this was of course explained in much more detail, so I recommend you check out the video, as I really enjoyed the talk. But before you do so, it might help to brush up on <a href="https://en.wikipedia.org/wiki/Conway%27s_law" target="_blank">Conway's Law</a> and <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number" target="_blank">Dunbar's Number</a> even though both are explained in a few words.</div>
<div>
<br /></div>
<div>
The last thing I want to mention though are so called "Run Teams". As stated above teams are grouped in a common domain. So all have roughly similar knowledge and build similar services. Apart from that, the teams are also responsible for running them. To allow for more flexibility and knowledge transfer they came up with Run Teams. Each domain has it's own Run Team that consists of members from each team. On a regular schedule those team members are swapped back into their Home Teams and replace by other colleagues from that team. So every few weeks everyone takes care of running all services of the domain. I think this is great idea to make sure teams are still connected to each other and knowledge is shared among them. But like everything in this talk, this is was works for Tesco and you should look carefully if it really fits for you as well before adopting it.</div>
</div>
<div>
<br /></div>
<div>
<h3>
Security In The Serverless World - <a href="https://twitter.com/theburningmonk" target="_blank">Yan Cui</a></h3>
<div>
Most of this talk actually revolved around webapp security in general. Especially the well known OWASP list was mentioned a few times. TBH that is something I would assume everyone should know before focusing on security for Serverless applications, so I am skipping the summary here.</div>
<div>
<br /></div>
<div>
One big advantage when running Serverless but also in general in the Cloud is, that you do not have to patch your hardware. That is done by the service provider (e.g. AWS). So one less thing to worry about. But the software itself is still your problem. Here OWASP comes into play again and also the general advice that security vulnerabilities often lie within your dependencies and so you should update them regularly. </div>
<div>
<br /></div>
<div>
To illustrate this Yan showed the results of an experiment he ran. He created a malicious node module called "do-not-download-me" which got downloaded 200+ times in one month. With that he was in theory able to collect data from depending applications. Of course he did not do that in the end, but it shows how easy it is to inject dangerous code into the eco system.</div>
<div>
<br /></div>
<div>
Since functions/lambdas/services in the Cloud are basically accessible by anyone, you have to make sure your endpoints are secured, the privileges of each function are as restrictive as possible and transport between your functions and the client is secured. For most of these topics Yan provided examples on how to achieve them on AWS.</div>
<div>
<br /></div>
<div>
Something that many are not aware, providers might reuse container instances, so it is a bad idea to store sensitive data e.g. in /tmp of your EC2 instance as that might be accessible by some other application later on.</div>
<div>
<br /></div>
<div>
Another interesting fact that is actually obvious but you do not always think about it: When your Cloud services are attacked with a DDoS attack then the stability of your application is not your only concern. You also have to realize that each attack has direct effect on your budget, so you might be forced to take the service offline to avoid losing a lot more money than you already are.</div>
<div>
<br /></div>
<h3>
Ignites</h3>
<div>
At my last Devoxx the Ignite talks were rather regular talks but only 5 minutes long to spark interest, pitch an idea or generate attention for something. This year this was quite different. One talk was actually prepared in the usual way, which I will cover in a minute. The others were basically impro stand ups as the speakers did not know what slides they had to present and the slides seemed to have been generated pretty randomly ;-) There were a few laughs in it but I am not totally convinced tbh, others though had a brilliant time and were laughing and giggling almost constantly.</div>
<div>
<br /></div>
<h4>
Zero Bugs - James McGivern</h4>
<div>
Basically Zero Bugs means, either fix a bug right away, close it or declare it (or rather the fix of the bug) a feature to put in the backlog. The reasoning is that otherwise bugs just sit in your backlog and will not be fixed. In my experience this might be true in some cases, but not as often as the speaker claims. Of course this might be different in other places but so far I am not entirely sold to this idea.</div>
<h2>
Day 2</h2>
<div>
<h3>
To JAR Hell And Back: A Live Migration To Java 11 - <a href="https://twitter.com/nipafx" target="_blank">Nicolai Parlog</a></h3>
<div>
We have heard about JDK 9+ and the module system quite a bit on the day before, so the basics covered here were not too shocking. But it was a nice summary on why the module system was introduced, what the benefits are (encapsulation, dependencies known to the JVM...)</div>
<div>
<br /></div>
<div>
The main part was the actual live coding to see what kind of code might/will break if you move towards JDK9 or higher. I really recommend you check out the video as it does not make sense to describe this here.</div>
<div>
<br /></div>
<div>
The talk was great and a really good start in day 2.</div>
<div>
<br /></div>
<div>
Two things stuck in my mind though, first of the hint that you can create a maven profile that activate based on the JDK version used, which is really neat as you can just switch your java environment to toggle from between upgrade tests and regular development.</div>
<div>
<br /></div>
<div>
The other is the usage of jdeps to find dependencies of your jar modules, with the --summary flag you only get the dependent jar files and not all packages. That looks like a really helpful tool.</div>
<div>
<br /></div>
</div>
</div>
<div>
<h3>
Stop reinventing the wheel with Istio - <a href="https://twitter.com/meteatamel" target="_blank">Mete Atamel</a></h3>
<div>
From the title it was clear that this would be a product demo, which is totally fine. Long story short, <a href="https://istio.io/" target="_blank">Istio </a>sits on top of tools like kubernetes or mesos to help with stuff like service discovery, logging etc.</div>
<div>
<br /></div>
<div>
In this demo Mete was using Kubernetes as underlying container management tool. I also recommend you watch the video if you want to know about the details. The basic architecture looks like this: Istios uses Ingress as an API gateway to route to the different pods. In each pod is a proxy module as side car deployment that handles all incoming requests and takes care of load balancing etc. </div>
<div>
<br /></div>
<div>
Everything was done on then command line, first you install Istios on your system and then you add certain commands to your scripts so that the pods get enhanced with the side car proxy.</div>
<div>
<br /></div>
<div>
On a first glance it seemed a bit clunky compared to <a href="https://rancher.com/" target="_blank">Rancher </a>or <a href="https://www.openshift.com/" target="_blank">Open Shift</a>, but I don't have any hands on experience with any tool so could be wrong there.</div>
<div>
<br /></div>
<div>
<h3>
Is Boilerplate Code Really So Bad - <a href="https://twitter.com/trisha_gee" target="_blank">Trisha Gee</a> </h3>
<div>
I must admit it, I am a fan. When ever Trisha holds a talk at conference I attend I go there. She could probably even make stamp collecting sound fascinating. So yes, I am biased but I encourage everyone to watch her talks.</div>
<div>
<br /></div>
<div>
Ok, back to business. The title of this talk was particularly interesting for me, as I am one of those developers who is not really bothered by boilerplate. In some cases I even consider it useful to have a more verbose code if it is more understandable then. So my hope was that Trisha would tell off all those who whine about every additional character in their code.</div>
<div>
<br /></div>
<div>
Weeell.. that was not totally the case ;-) Instead we saw a syntax comparison between different Java version up to Java 10 and also Kotlin. Trisha used several example, including collection instantiation, object construction and Generics.</div>
<div>
<br /></div>
<div>
In one case she even demonstrated how something that looked like a mere reduction of boilerplate in Kotlin was indeed a change of behavior (lazy eval of lists). </div>
<div>
<br /></div>
<div>
The summary about boilerplate was something like this: Reduction of boilerplate can improve readability of your code, unless you lose meaningful information or even introduce behavioral change. Both should be avoided. Writing boilerplate should not be an issue, as your IDE should take care of most of that. Not everyone has the same understanding of readability, so make sure your team is on the same page of that, if possible. And Java is not as bad as it used to be, for short tests you can even use the Java repl in JDK 10 (seems cool btw).</div>
<div>
<br /></div>
<div>
And if the video is not enough or you just do not like watching videos, you can check out <a href="https://trishagee.github.io/presentation/boilerplate/" target="_blank">Trisha's blog</a>.</div>
<div>
<br /></div>
<div>
<h3>
Avoid Noodling Through an Architecture's Foundations - <a href="https://twitter.com/fjmenezes2007" target="_blank">Francisco Menezes</a></h3>
<div>
I don't know what to say here, really. I must have gotten it all wrong, because I just can't understand it.</div>
<div>
<br /></div>
<div>
In general this talk was about the architecture used at Francisco's company. Basically it was about proper encapsulation, lose coupling and other well known things you should consider when creating your service landscape.</div>
<div>
<br /></div>
<div>
One thing that I just can't get my head around is the concept of each module/domain/service/what ever you cal it to not only expose a service API but also a so called query model. From what I understood the idea is that other services can access the data of a service via the query model without having to have a dependency on the service API. But somehow you also have to expose that query model and then there is a dependency on that query model. Maybe you can abstract that model so far that for every domain it offers the same operations. But then I still don't see why you can't just add that to the service API. Maybe someone can explain that to me? Gotta watch the talk again, I guess...</div>
<div>
<br /></div>
<div>
<h3>
Automated testing on steroids: Trick for managing test data using Docker snapshots - <a href="https://twitter.com/lucasjellema" target="_blank">Lucas Jellema</a></h3>
<div>
Okay, time for a lunch quickie (15 minute talks during the lunch break). At first I thought this talk was going nowhere but then Lucas started the live demo. Using dockerode to programmatically start and stop containers is nice, but you can do that with many tools. What was really cool though was the leverage of the criu linux package that allows you to create a snapshot of your running machine, including RAM.</div>
<div>
<br /></div>
<div>
Docker supports creating those snapshots and then even restarting a container from such a snapshot. That means you could create a test database even in memory in your container, create the snapshot and then run every test against a fresh container instance created from that snapshot. The startup was almost instantly. Looks like a promising approach. Really cool! :-)</div>
<div>
<br /></div>
</div>
<div>
<h3>
Apps are Making Us Dumber - <a href="https://twitter.com/heathriel" target="_blank">Heather Wilde</a> </h3>
<div>
The hardest thing about building good mobile apps is the design. If your design is too cumbersome or clunky then people will not use it, no matter how good it actually is.</div>
<div>
<br /></div>
<div>
In this talk Heather gave a great overview of the core design principles we should consider when building apps. I will try to sum them up briefly but I suggest you refer back to the video for a complete impression.</div>
<div>
<br /></div>
<div>
A good app needs easy user interactions, like the Tinder Swipe, something that is intuitive and easy to use. The layout needs to be clear, without clutter. Clear and readable fonts, pretty is not always easy to read. Colors should give good contracts.</div>
<div>
<br /></div>
<div>
Also very important: The app needs to be responsive, react fast to user interaction, if you need to do expensive operations use busy indicators. Try to preload data when possible, priorities requests on server side properly.</div>
<div>
<br /></div>
<div>
The most common tasks of the app should be the easiest to do. Rare tasks can require more clicks. Don't implement feature noone will use. Be consistent in your design, e.g. use the same icons for the same actions.</div>
<br />
Remember that your users do not know the app like you do, always try to imagine how it feels to open the app for the first time.<br />
<br />
There was of coure much more and it was also explained in a much better way ;-)<br />
<br />
<h3>
Summary</h3>
Due to an early flight back I could not go to more talks. But as always it was a great experience at Devoxx and I encourage everyone to go when you have the chance.<br />
<br />
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-32212903361390286502018-01-18T22:56:00.000+01:002019-05-21T14:45:24.127+02:00beyondtellerrand 2018 MunichFor the first time ever beyondtellerrand (<a href="https://beyondtellerrand.com/" target="_blank">https://beyondtellerrand.com</a> / <a href="https://twitter.com/btconf" target="_blank">@btconf</a>) came to Munich. Munich is the third location after Düsseldorf and Berlin where Marc Thiele (<a href="https://twitter.com/marcthiele" target="_blank">@marcthiele</a>) holds his famous event.<br />
<br />
The only reason I was aware of that was that my former colleague and friend Francesco Schwarz (<a href="https://twitter.com/isellsoap" target="_blank">@isellsoap</a> a.k.a. the creator of the <a href="https://isellsoap.github.io/specificity-visualizer/" target="_blank">Specificity Visualizer</a>), who I already joined for beyondtellerrand 2016 in Düsseldorf, pointed it out to me. So we both decided to go there.<br />
<br />
The venue was located in the <a href="https://www.kuenstlerhaus-muc.de/" target="_blank">Künstlerhaus</a> directly in the center of Munich next to the famous <a href="https://en.wikipedia.org/wiki/Karlsplatz_(Stachus)" target="_blank">Karlsplatz</a>. A lovely location with an inspiring atmosphere.<br />
<br />
As always the event was comped by beyondtellerrand's DJ Tobi Lessnow (<a href="http://www.tobi-lessnow.com/" target="_blank">http://www.tobi-lessnow.com</a> / <a href="https://twitter.com/tobilessnow" target="_blank">@tobilessnow</a>). For those who have not been at the conference yet: Tobi captures text portions during the talks and then arranges them in his DJ mix during the following break. Really a great experience especially with the passion and dedication Tobi is showing during his performance.<br />
<br />
The conference videos are published on <a href="https://vimeo.com/beyondtellerrand" target="_blank">Vimeo</a> and <a href="https://www.youtube.com/user/btconf/" target="_blank">Youtube</a>, currently (Jan 18th) only six of the Tuesday talks are online on Vimeo, but I am sure the rest will be posted soon.<br />
<h2>
Day 1</h2>
<h3>
Sacrificing the Golden Calf of Coding - Chris Heilman (<a href="https://twitter.com/codepo8" target="_blank">@codepo8</a>)</h3>
This was an entertaining opening talk about not only the past but also the future of coding. Using his own life as an example he illustrated how people evolved from hobby coder to professional programmers and how this was reflected in their code. Hobby coders just try to get things working and make the code fast but very very clunky and hard to maintain. But the more people code or a living they have to start worrying about reuse, modularity and maintainability and usually the absolute maximum performance is not the primary concern anymore.<br />
<br />
But there is also another kind of evolution going on. In the beginning people wrote code in crappy editors like Notepad, no IDE or anything, installations where done manually etc. Over the years tool support became better and better and now we have systems that can do simple tasks, generate code from templates and handle boring day to day work. Chris emphasizes that people should use the tools we have to their full extend, let the computers and algorithms do the boring and repetitive tasks. We should be creative and innovative, create new things by leveraging what the technology provides us with now.<br />
<br />
Just because things where hard in the past, the don't have to be hard forever.<br />
<h3>
SVG Filters: The Crash Course - Sara Soueidan (<a href="https://twitter.com/sarasoueidan" target="_blank">@sarasoueidan</a>)</h3>
<div>
Seriously if you ever need an analogy for drinking from the fire hose, this talk is what you are looking for. Marc Thiele's introduction was more than fitting: "She talks fast and knows a lot" ;-)</div>
<div>
<br /></div>
<div>
Sara gave us an impressive overview over what you can do with <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter" target="_blank">SVG filters</a>, from rather easy things like creating drop down shadows to creating your own textures using simple effects like feFlood or complex ones like feComposite or feTurbulance. I was really impressed with what the browser can do without the need for imaging tools like Photoshop. </div>
<div>
<br /></div>
<div>
All examples where explained by looking at the actual code that Sara walked us through step by step.</div>
<div>
<br /></div>
<div>
Was very interesting but when you watch the video, maybe try to play it at 80% speed :-)</div>
<h3>
Interactive Email - Mark Robbins (<a href="https://twitter.com/m_j_robbins" target="_blank">@m_j_robbins</a>)</h3>
<div>
When I read that topic I was like "Ugh". There are few things I despise more than flashy html emails. And tbh, that is more or less what Mark is building but to be fair, the use cases he described seem sensible and obviously help his customers.</div>
<div>
<br /></div>
<div>
One example is something that a lot of us can surely relate to. You are on a shopping site, add stuff to your cart but then get distracted and forget about it. Now the site can send you an email, listing your cart and also adding the option to complete your purchase and even adjust the amount of items in your cart before doing so. All of that without ever leaving your email client.</div>
<div>
<br /></div>
<div>
There are a few challenges when you do something like this. For one email clients are incredibly diverse and testing for all combinations of email client, operating system and device is impossible. Also you can't use javascript in those emails so instead everything has to be done using css.</div>
<div>
<br /></div>
<div>
This results in really creepy css selectors, e.g. selections are always implemented as radio buttons so you can use the "checked" attribute in your selectors and multiple radio button elements can be joined in selectors to then style other elements as desired.</div>
<div>
<br /></div>
<div>
The results are indeed impressive considering how limited the available options are and even more impressive was the demonstration of the "Wolfenstein 3D" shooter within an email using only css for the application logic. Okay, it was pretty buggy and by far not a real shooter but it is still an accomplishment.</div>
<h3>
From AI to Robots, From Apps to Wearables - Let's Design for Everyone, ok? - Robin Christopherson (<a href="https://twitter.com/USA2DAY" target="_blank">@USA2DAY</a>)</h3>
<div>
This talk was composed of rather large amount of videos that Robin strung together explaining certain aspects concerning accessibility of technology in general. What I liked was that he did not focus solely on the accessibility in regard to people with disabilities but also other impairments both permanent and temporary.</div>
<h3>
Robotics in our Everyday Lives: A Product Designer's Perspective - Carla Diana (<a href="https://twitter.com/carladiana_" target="_blank">@carladiana_</a>)</h3>
<div>
Carla introduced us to the topic of social robotics, meaning research and projects on how robots can not only assist us in our everyday lives but also provide an interface to interact with them like a social or even human being.</div>
<div>
<br /></div>
<div>
A really cool example was the robot Poli that assists nurses in a hospital thus giving them more time for their patients. This robot is designed to vaguely resemble a human with a head and a torso, reacts to voice commands and replies to them. I think this is a great example of how cool tech can directly improve quality of life.</div>
<div>
<br /></div>
<div>
Another project of hers was the design of the robot Simon that is able to express emotions using basic mimics and is also able to react to his surrounding.</div>
<div>
<br /></div>
<div>
The talk was filled with short clips showing different robotic and interface design projects and I highly recommend to check out the video once it is available. </div>
<h3>
The Internet of Natural Things - Simon Collison (<a href="https://twitter.com/colly" target="_blank">@colly</a>)</h3>
<div>
I must admit, I have a hard time summing up this talk since Simon touched various aspects of how nature and technology can be combined. On one side we have the research aspect where animals are tracked using e.g. chips so that researches can track the movement of birds, whales or other animals. Highly related to that is also how data mining techniques are used to analyze data gathered from those animals that is usually not limited to their GPS coordinates but can contain vital signs, environmental influences and many more.</div>
<div>
<br /></div>
<div>
On the other side you have apps or other pieces of technology that allow you to improve your experience when you are outside in "the wild". One example are nature guides that allow you to easily determine what animal you have just seen or even what bird you just heard by just sampling it's song.</div>
<div>
<br /></div>
<div>
But for me his basic message was that we should take a step back and try to appreciate nature more, to enjoy it fully and to take the time necessary. He underlined his message with stunning images and personal stories.</div>
<div>
<br /></div>
<div>
His last aspect to this topic was that we should also try to design our applications and even operating systems so that the allow for a more natural or intuitiv usage. For example a mobile device could sense where you are (home/work/gym/park) and give you simple access to apps appropriate to the current environment.</div>
<div>
<br /></div>
<div>
Even though the topic itself feels a bit esoteric to me, I still think there is a lot in it that we should think of more. It sure does not hurt to appreciate and actively experience nature more.</div>
<h3>
Sho Ha Hito Nari: Brushes, Strikes and Reflection of Self - Aoi Yamaguchi (<a href="https://twitter.com/aoi_gm" target="_blank">@aoi_gm</a>)</h3>
<div>
Calligraphy is, like most forms of art, something that I never really understood. And it would be a sham if I would claim that now this is totally different. I guess I am just a bit too ignorant to really appreciate art. </div>
<div>
<br /></div>
<div>
But what I am able to appreciate and be truly humbled by is the incredible amount of dedication, practice and discipline that Aoi conveyed to us during her talk. I had no idea on the countless hours of not only practice but also preparation someone has to go through to become a grand master in this form of art.</div>
<div>
<br /></div>
<div>
Let alone how much patience is required to properly choose and prepare the ink for a painting, the incredible amount of different brushes and their uses. I also had no idea that ink blocks (I did not even think of ink as blocks until then) age over time and thus develop a unique character that also influences the paintings.</div>
<h3>
Evening Get Together</h3>
<div>
As usual the first conference day was closed by the traditional get together with free drinks. We had a few nice chats with different people including Marc Thiele (<a href="https://twitter.com/marcthiele" target="_blank">@marcthiele</a> the boss himself) and a friend of his, Björn Odendahl (<a href="https://twitter.com/nail7" target="_blank">@nail7</a>), who incidentally was the designer for the beyondtellerand shirt of 2016. </div>
<h2>
Day 2</h2>
<h3>
New Adventures in Responsive Web Design - Vitaly Friedman (<a href="https://twitter.com/smashingmag" target="_blank">@smashingmag</a>)</h3>
<div>
First talk after drinking night, so we should be of to an easy start, right? Yeaahh... not on Vitaly's watch ;-)</div>
<div>
<br /></div>
<div>
This talk covered most of the topics on what you should consider if you want your website to be fast and responsive. It started of with the usage of compressions like gzip, zopfli or brotli. Then went to images and how you can speed up your website by using smart features or tricks, like responsive images, progressive jpegs. An interesting side note is, that it can be sometimes better to use a large image with low resolution and then have your browser to display it at a smaller size rather than using a small images with regular quality in order to safe bandwidths.</div>
<div>
<br /></div>
<div>
The second big section were, of course, webfonts and how they should be used and what dangers lie within when fonts can't be downloaded (browser timeouts etc.) Vitaly illustrated the different strategy options for webfont loading including fallback fonts and the optional attribute for the font-face annotation.</div>
<div>
<br /></div>
<div>
The last part covered the dreaded third party scripts. It is important that you understand what scripts your site is using, where they are hosted and most importantly how your site reacts if those scripts are unavailable. To find out more about that you can create request maps and use blackhole testing. It is also good to encapsulate those scripts in e.g. an iframe (even though most people hate it) or you can try to use <a href="https://github.com/InteractiveAdvertisingBureau/safeframe" target="_blank">SafeFrame</a>.</div>
<h3>
Radically Accessible Internet Applications - Marcy Sutton (<a href="https://twitter.com/marcysutton" target="_blank">@marcysutton</a>)</h3>
<div>
Another talk concerning accessibility in web applications but this time with focus on how you can a) find out where your app lacks accessibility and b) how to implement it.</div>
<div>
<br /></div>
<div>
Implementation is usually done using the various aria attributes and proper focus handling with the help of the inert attribute.</div>
<div>
<br /></div>
<div>
To find issues you it helps to navigate your application only with the keyboard as this is what screen reader users will do. Also activating voice over can help you find issues as well as the voice over router that gives an overview of all voice over portions in your application. Another great tool is the browser plugin aXe-Coconut that can find accessibility violations. Additionally aXe-core can be integrated into your build process to run tests on your application so find such issues on your build server.</div>
<h3>
Why Fast Matters - Harry Roberts (<a href="https://twitter.com/csswizardry" target="_blank">@csswizardry</a>)</h3>
<div>
Why fast matters? Well, the obvious answer is money. Faster sites generate more revenue, reduced traffic saves bandwidth and thus costs. Easy, isn't it?</div>
<div>
<br /></div>
<div>
Easy yes, but not the whole truth. If we want to have a truly inclusive web we also have to make sure that our content can be accessed by as many people as possible. That also includes those in the so called third world countries and uprising economies. One major issue these countries face is the lack of high or even regular speed internet access. </div>
<div>
<br /></div>
<div>
Many people in the world have to use 2G connections or even worse. For those a lot of websites that we use daily and take for granted are hard or even impossible to use. Harry shows us numbers on how many people are actually using mobile devices with such bad connections and also ways how we can test our applications on how they behave in such circumstances.</div>
<div>
<br /></div>
<div>
Tools like dareboost or speedcurve can analyse your website using different connection types, origins and stability parameters. CharlesProxy can be used to effectively throttle your device's connection to simulate access from e.g. other countries.</div>
<div>
<br /></div>
<div>
This talk summed up a lot of interesting aspects about website performance that go beyond our usual scope and is therefore highly recommended.</div>
<h3>
Data Sketches: A Year of Exotic Data Visualizations - Nadieh Bremer (<a href="https://twitter.com/NadiehBremer" target="_blank">@NadiehBremer</a>)</h3>
<div>
Data Visualization is a virtue of it's own and I am usually perplexed by the results those people come up with.</div>
<div>
<br /></div>
<div>
Nadieh spoke about her insights and learnings from the past year of visualization projects showing the amazing results as well as the steps that led to them.</div>
<div>
<br /></div>
<div>
It was also interesting to see how and where you can find the data you are looking for but also what weird kind of data some people are gathering, e.g. all words spoken in the LotR movies by each character. I suggest you watch the video that explains the coherences way better than any summary I could put here. It is really worth watching.</div>
<h3>
A Tinker Story - dina Amin (<a href="https://twitter.com/dinaaamin" target="_blank">@dinaaamin</a>)</h3>
<div>
As I wrote above, I usually don't get art. But this one, this one is really cool. Maybe because dina does not consider herself an artist. She told the story of a young woman from Egypt that started to do what she like and by leveraging the internet coincidentally becomes famous.</div>
<div>
<br /></div>
<div>
The short description of what she does is simple. Take things apart, look at the parts, recreate something new from them and put all of this in a stop motion movie.</div>
<div>
<br /></div>
<div>
Sounds boring? Check out her video or look for #tinkerfriday You will not be disappointed. When I saw the first movie I also thought "so what?" but only until my jaw hit my knees..</div>
<h3>
Why Beauty Matters - Stefan Sagmeister (<a href="https://twitter.com/sagmeisterwalsh" target="_blank">@sagmeisterwalsh</a>) </h3>
<div>
Okay, last talk of the conference. Traditionally a rather funny but still insightful and informativ talk. Stefan explains the concepts and misconceptions of beauty in the context of architecture. This one also relies heavily on the images and videos used. So it would be vain to describe it here. </div>
<div>
<br /></div>
<div>
I had quite a few very good laughs and it was great closing talk. </div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com1tag:blogger.com,1999:blog-2445794899032855680.post-28521006255875008872017-12-14T21:50:00.000+01:002017-12-15T10:20:45.366+01:00IT-Tage 2017 in FrankfurtThe last conference has been a while but finally I managed to get myself signed up. This is my first time at the IT-Tage in Frankfurt which is a conference hosted by the German magazine <a href="https://informatik-aktuell.de/" target="_blank">Informatik Aktuell</a>.<br />
<br />
Three days with 6 parallel tracks seemed like a lot to choose from even though 3 tracks mainly revolve around sql database technologies. Although those are not of that much interest to me I was still looking forward to this as on the other hand there are lots of talks about micro services, security and programming languages.<br />
<br />
But before I go into detail about the talks, some general information. The venue is the Kap Europa Center in the heart of Frankfurt, easy to reach and rather classy looking. What strikes me as a bit odd is that all talks are held in German even though many use English slides. This seems to be intentional by the organizers and sure has some advantages but I think it should not be an issue for anyone working in IT to follow English talks and it would broaden the potential audience as well as pool of speakers.<br />
<br />
A positive thing on the other hand is the concept of track hosts. Actually all conferences have someone being responsible for the hardware to work properly but here those people do quite some more. They give a quick introduction about the speaker and the topic, encourage discussion afterwards and give additional information about the following program.<br />
<br />
<h2>
Day 1</h2>
<h3>
Harald Gröger - General Data Protection Regulation</h3>
This new regulation will become effective in May 2018 and does have some serious effects on how companies have to handle all aspects of personal data, gathering, processing and even deletion.<br />
<br />
I will not repeat every detail here but the key changes that got stuck in my mind are:<br />
<br />
you will have to explicitly ask for permission to gather any data<br />
the user has to actively give his permission<br />
it is not obvious what kind of information has to be considered being personal<br />
if a user requests deletion of his information, that will have to happen immediately but only if the data is not needed for other purposes like order processing/billing or legal matters<br />
Especially the last point will cause us developers serious headaches to handle all corner cases without breaking anything and not violating the law.<br />
<br />
Harald is working with IBM and also lectures at the University of Würzburg about related topics. So he knows his way around data protection and you noticed it throughout the solid and entertaining talk. TBH I would have enjoyed it more if the topic would have been more fun but it was still a good start for the day.<br />
<h3>
Domink Schadow - Build Security</h3>
Since the first session was about as theoretical as it can get the second one had to be "nerd on". So I went into this talk about build security hoping for some hands on stuff that I might actually be able to use back at the office.<br />
<br />
So what do we mean by "build security"? Your build process should verify that your code and the resulting application is as secure as it needs to be. Because that is what we all want, a working application that can't be hacked by script kiddies within 5 minutes ;-)<br />
<br />
To help us developers achieve this our build pipeline should perform certain analysis steps. It should perform them as often as possible/feasible and as soon as possible.<br />
<br />
The easiest approach to this is the well known static code analysis. A widely used tool here is FindBugs, which I consider pretty awesome. But FindBugs is not really suitable for security checks, it does have checks for some injections and programming errors but not in depth security analysis. Or does it...? There is a plugin to FindBugs called FindSecurityBugs or FindSecBugs or SpotBugs which does exactly that, scan explicitly for security issues. In combination with SonarQube this can be a really useful and powerful tool.<br />
<br />
But what apart from that? What should we even check for? To have a starting point everyone should at least know of the OWASP checklist showing the top security issues and the recommended counter measurements. To support working with that there are two OWASP tools.<br />
<br />
The first one is OWASP dependency check, this tools checks the dependencies you use to build and run your application and checks them for known vulnerabilities. Telling you which libraries have security flaws and to which version you should updated etc. Brilliant!<br />
<br />
The second one is OWASP ZAP. This is a powerful tool and a large portion of the session was spent on showing how you can configure it and what is important to consider. For my taste it could have been some fewer jenkins config screens (it has a jenkins plugin, yeah) but it was still good to hear all of the pitfalls etc.<br />
<br />
ZAP can be used as proxy between your app and the clients to manipulate and inspect requests and data. That is not that new. But it can also execute attacks on your application based on known real world security issues with actual working exploits. You can configure it on what endpoints it should attack or you can let it record your requests and then replay those in an altered way in the attack mode. If you think of using it, be sure to read the documentation very very carefully as this tool can easily break your neck if you screw up.<br />
<br />
But as great as those tools are, they also have downsides:<br />
each tool increased the build time, some only a bit like FindSecBugs (only seconds or maybe minutes) or a really really really shit load like ZAP which can cause a build of a few minutes to then take hours due to the amount of requests performed<br />
sadly all tools are known to report false-positives, some more, some less. But there are configuration options to limit those to keep the pain rather low<br />
Even though it was not exactly as I expected I think it was a pretty good talk from a tech guy showing us what can be done to improve the security of our software with tools available for everyone.<br />
<br />
<h3>
Keynote Pilipp Sandner - Blockchain and IoT</h3>
In this keynote we got a glimpse of what changes block chains, the concept behind things like bitcoin, might enable in the future.<br />
<br />
Basically a block chain creates sequential pieces of information where every piece has data from it's predecessor encoded into it thus making the sure no element of a chain can be manipulated unnoticed.<br />
<br />
Block chains would allow easy transactions not only between humans but also between humans and machines or even between machine, like a car transferring some kind of currency to a parking meter etc.<br />
<br />
Most of the use cases shown were not that new and could have been implemented already without block chains. But what block chains add is the possibility to ingrain checks, processes and restrictions but also convenience functions into the them. That allows to setup easy ecosystems for things like smart contracts or IoT chains that users can hook up to easily.<br />
<br />
Of course the note also covered the current state of the so called crypto currencies like bitcoin. I was surprised how many other crypto currencies are out there and how much bitcoin has been skyrocketing in the last months. But it is also scary that no one really knows if this will carry on or if there is a bubble just waiting to burst.<br />
<br />
Going further on this subject the basic question is, does value always have to be couple to a physical good? I don't know and I don't think anyone else really does, so only time can tell.<br />
<br />
As before it was clear the speaker knew about his subject and he was able to transport his enthusiasm to the audience.<br />
<br />
<h3>
Christoph Iserlohn - Security in Micro Service Environments</h3>
Aaaand again going from theory to real world hand on stuff, at least I thought I was.<br />
<br />
The first 15 minutes were spent on defining what a micro service is and then about how it is difficult to get security know how into your teams and then into your development life cycle. Everything true and important in it self but I still fail to see why we needed it in this kind of depth, but ok.<br />
<br />
In a world where most people are going from monolith to micro services we often forget that we have to secure our services. Sometimes that is considered done after slapping some OAuth on them but that is not enough.<br />
<br />
By splitting your application up into several services you also open up new attack vectors. Services are talking over the network so you have to secure the network, make sure only authenticated clients are talking to your services and that a requests that is passed to other services has all credentials and context information it needs to verify that the request is valid.<br />
<br />
Next was a short excursus about the history and relations of OAuth and OpenID, followed by how security tests should be part of the build pipeline. What I took from this part was, that the testing tools seem to be lacking and that you need to build a lot of what you need yourself.<br />
<br />
The last part focused on secret management. When going all in on micro services architecture you have a lot of secrets to maintain, deploy and revoke like passwords, certificates, API keys and shared secrets. The recommendation here was to use Vault and if possible an HSM (Hardware Security Module) and services to have secrets change dynamically.<br />
<br />
All in all I got the impression the speaker was rather gloom about this subject. Everything had the vibe of "this is not working and that is not working, we had problems here and problems there". This was emphasized by the fact that there were no real solutions presented only notions of what issues they ran into but not how they solved it.<br />
<br />
Of course micro services are no silver bullet and sometimes it is better to build larger systems, but are they really that bad? I doubt it..<br />
<br />
I think this was a real pity because I had the impression Christoph has a lot of know how in that area that he could share.<br />
<h3>
Lars Röwekamp - Serverless Architecture</h3>
Serverless is one of the latest buzz words (at least i think so) stirring around in the IT community. But what do people actually mean when they talk about serverless?<br />
<br />
Lars started with a good definition "If nobody uses it, you don't have to pay for it" or the more widely known quote "don't pay idle". So is my heroku dyno serverless? ;-) Not quite as shown by the serverless manifesto. I am not going to write all of that down, you can look it up. I am just going over the most important things Lars pointed out.<br />
<br />
In serverless we are talking about functions as deployment units (Faas), so a Unit much much smaller than your regular micro services, something that really only does one thing. Functions react to events, do something and by that trigger other events that trigger other functions. Well, this sounds like NodeJS in the cloud to me :-)<br />
<br />
The idea is that functions are scaled on a request basis, so every time a new handler is needed it is started up and shut down when it is not needed anymore. The reality seems not to be quite there yet, but we might be getting there eventually.<br />
<br />
What is also an interesting idea is that the developer does not care about the container the function will be running in. He just writes his code and the rest is done by the build and deployment processes.<br />
<br />
This went on for a while as Lars covered the whole manifest and I felt like he gave a very objective overview of the topic with the occasional reality check thrown in, showing that theory and practice often differ.<br />
<br />
After that we had a look at how such a function is build. We are actually not deploying a function but a lambda. A lambda consists of a few things. The actual code, that's what people usually mean when talking about the function. The function receives a context object and an event object. The event tells the function what has happened and the context gives information about the available resources. Additionally you should also always define security roles to make sure your function is only called by those who are actually allowed to do it and to also make sure your function only does what you want it to do. You would not to span e.g. EC2 instances when you don't need them etc.<br />
<br />
On a first glance serverless sounds like awesome, because you hardly pay anything, right? Well, not quite. What you have to consider is that with serverless a lot of your development and testing also has to happen in the cloud. You can do tests locally but in the end you always have to check if it really runs as expected in the cloud environment.<br />
<br />
Then followed a few examples of possible scenarios which I think you should best lookup on the slides.<br />
<br />
And finally the obligatory pitfalls section. Again this was presented very objective showing that of course the complexity of applications cannot be simply removed by a new architectural pattern. All issues people have with micro services also apply to serverless and are on some cases even amplified due to the even higher degree of distribution and smaller granularity. A special mention has to go to the dreaded vendor lock, if you go to serverless your code will have dependencies to the vendor you use. But usually doing everything yourself the vendor does for you is magnitudes more work then changing those dependencies should you decide to change vendors.<br />
<br />
For the rest I also recommend you check out the slides. As a summary I want to say that Lars so far gave the best talk on this conference and it really shows he knows what he is talking about.<br />
<h3>
Werner Eberling - My Name is Nobody – the Architect in Scrum</h3>
This will be a short summary. Basically this was an experience<span style="background-color: #ffffcc; font-family: "arial" , "helvetica" , sans-serif; font-size: 13px;"> </span>report of how a single architect has to fail in an environment with several scrum teams working on a single huge project.<br />
<br />
I try to sum it up: If the architect is outside of the teams has no team support, his decisions will not be backed the developers and he does not have enough knowledge of the team domains to understand the issues a team might have with his design. If you make that one architect part of all teams he will have absolutely no time to tend to the individual teams he will be in meetings all the time and soon burn out. So the only and imo obvious solution is: you need architecture know how in all teams, the teams have to design the architecture themselves but to maintain the big picture all cross team concerns have to be discussed in a community of practice.<br />
<br />
It seems that the scrum masters just tried to followed what they considered textbook instead of simply thinking what is needed to make the project work, which is what imo is the core idea of scrum. Identify issues and then work as a team to remove them. And somebody should have noticed that there is something weird when someone gets appointed or hired as architect but the scrum masters claim that this role does not exist and he is not needed. At least one side has to be wrong in that argument.<br />
<br />
I might be in beneficial situation as this is how we worked for years and it struck me as odd that there are still organizations that do not understand how to handle this. It is nothing new and anyone with at least some brains should see that the single architect approach is prone to fail or at least notice that after a year.<br />
<br />
But so far this report does not do justice to Werner. While I did not take much from the talk his presentation was entertaining and solid. So if he decides to give another talk about a more technical topic I will try to join.<br />
<h3>
Guido Schmutz - Micro Services with Kafka Ecosystem</h3>
We start off with a definition of micro services, again ;-)<br />
<br />
But after that Guido got real on how to build software with an event bus system like Kafka even though the first part focused on the concepts without taking Kafka into consideration.<br />
<br />
Even though this was very interesting the summary is rather short. There seem to be three best practices for event bus systems:<br />
<h4>
CQRS (Command Query Responsibility Segregation) </h4>
There is also an article by Martin Fowler about this topic, so I try to keep it short: To allow for a large amount of transactions and responsive systems it is advisable to have read and write operations on your data separated, e.g. you have one service writing data to a data store (e.g. an event store) but have read operations performed by a different service working on a view of that data store. This view can have a completely different format and technology underneath. All you have to do is propagate write changes to the original data store to the view.<br />
<br />
<h4>
Event Sourcing: State is saved as a chain of events</h4>
The New York Times published an article how they are using this technique to save all their published data. All editorial changes are saved as an event in an event store in the order they occurred. So a client can simply resume from the last event it had seen without the bus system having to keep track of each client.<br />
<h4>
One Source of Truth</h4>
Only ever ever ever write into one data store, all other stores must be populated from that main data store. Otherwise in case of an error you will run into consistency issues as distributed transaction are not (well) supported (yet) and also have performance impact.<br />
<br />
To round it up Guido gave a run down on the reasons why he used Kafka for this kind of systems. The main one being that Kafka is a slim implementation focusing only on this one purpose.<br />
<br />
For me this was in interesting overview on event bus architectures and an impulse to look into them some more.<br />
<h3>
D. Bornkessel & C. Iserlohn: Quick Introduction to Go</h3>
This was exactly what I expected, a run down on where Go came from, what the design criteria where and a brief feature overview followed by a small tutorial on the basic programming tasks.<br />
<br />
Here a short list of the topics I found most interesting:<br />
<br />
<ul>
<li>Dependency Management: This seems to be rather broken/bad/cumbersome which would be a big issue for me but on the other hand most things are already shipped with Go, so maybe it is not that bad?</li>
<li>No package hierarchies: ok.. well if you don't need a lot of dependencies then maybe that works.. </li>
<li>Compile breaks on unused variables: On the one hand this is good for finding bugs etc. but during development this could cause some frustration. Maybe you get used it..</li>
<li>Functions can return tuples: Yeah, that can be of great help in some cases</li>
<li>No Exceptions: Instead you have to check if the called function returned an error object together with the return value. So that is why the made it return tupels, eh? Causes a lot of if checks.. *yuck*..</li>
<li>Casting also returns error objects like a function call</li>
<li>Implicit Interfaces: You do not declare to implement an interface you just implement the methods of the interface and then your class implicitly is also of that interface type.. TBH I don't know yet if I think this is cool or horrible.. Something about this makes my skin itch.</li>
</ul>
<br />
<br />
<h3>
Christian Schneider - Pen Testing using Open Source Tools</h3>
The final evening session, lasting two hours. Again security :-)<br />
<br />
The first part was an exhaustive overview of the available tools you can use for different purposes<br />
<br />
<h4>
Web Server Fingerprinting & Scanning</h4>
<br />
<ul>
<li>Nikto: Scans a webserver for typical issues like default applications still deployed, server state pages, missing headers etc</li>
<li>testssl.sh: Does exactly that, checks your SSL configuration about supported ciphers etc</li>
<li>OWASP O-Saft: An alternative to testssl </li>
<li>OWASP ZAP: This part took up most of the time which was good because the tool is very powerful but for me held not much new information because of Dominik Schadow's talk earlier. But for those who do not remember, ZAP is an intercepting proxy which can also run complete and exhaustive attack scenarios on your application.</li>
<li>Arachni: Allows to spider Javascript applications better than the other tools</li>
<li>sqlmap: Database take over tool. Man that looked impressive AND scary. This tool performs a massive load of very deep injection tests on a single request trying to get into your database and cause damage or extract information. The results are then available in a separate sql shell/browser for inspection.</li>
</ul>
<br />
<h4>
OS Scanning</h4>
<br />
<ul>
<li>lynis: Checks your server for available root explotations like root crontabs being world writeable or dangerous sticky flags etc and necessary updates if run as root</li>
<li>linuxprivchecker: shows which root exploits exist in your kernel and libs</li>
</ul>
<br />
<h4>
Whitebox Analysis</h4>
<br />
<ul>
<li>FindSecBugs/SpotBugs: Has also been handled in the talk of Dominik Schadow, so nothing new here for us</li>
<li>ESLint with ScanJS: Allows scanning of Javascript for security bugs</li>
<li>Brakeman: Same for Ruby</li>
<li>OWASP Dependency Check: Also same as before ;-)</li>
</ul>
<br />
Then we got a live demo on Christian's Maschine showing us how ZAP behaves in attack mode, what the output looks like and how to tweak the configuration.<br />
<br />
We also saw the XEE vulnerability being exploited to read the passwd file of the server. Even though this is nothing new from a theoretical point of few it is something different seeing it actually happen.<br />
<br />
This was followed by a discussion until we finally decided to call it a day... ufff....<br />
<br />
<h2>
Day 2</h2>
<div>
<h3>
Thorsten Maier & Falk Sippach - Agile Architecture</h3>
<div>
TBH I did expect a different kind of talk here, something more along the lines how a flexible and agile architecture could look like to suit changing needs. But that is something that probably does not even exist, so I should not have been surprised that it was actually about how to create and maintain an architecture in a dynamic environment ;-)</div>
<div>
<br /></div>
<div>
The basic problem Thorsten and Falk try to approach is that a system architecture is usually something very fundamental that can't be changed easily afterwards while an agile environment often demands changes late in the project.</div>
<div>
<br /></div>
<div>
What the presented were 12 different tasks an architect or rather the team should perform in cyclic iterations to see if the architecture still fits the project needs.</div>
<div>
<br /></div>
<div>
This cycle consists of 4 phases, design, implement, evaluate, improve. Much like the typical scrum process. The details can be seen on the slides I'll just summarize the main points:</div>
<div>
<ul>
<li>gather the actual requirements not just abstract wishes, make sure you know what your stakeholders need and who you are dealing with</li>
<li>try to compare different architecture approaches, e.g. using ATAM or other metrics</li>
<li>document your architecture (in words and graphics) and explain it to other people to get early feedback and sanity checks</li>
<li>try to have documentation generated during the build, maybe have automatic code checks to find violations (not really sure about that tbh, that is what code reviews are for imo)</li>
<li>check if the requirements have changed and if the architecture still suits the needs</li>
</ul>
<div>
This sounds all very well and it sure can help to come up with a good architecture in the start and enable your team to stick to it. But still the problem persists that if the requirements change drastically in a late phase you will have the wrong architecture. So I don't really get how that addresses the problem at hand.</div>
</div>
<div>
<br /></div>
<div>
What I take from the talk ist that it might be worth to check out arc42 and PlantUML for automated architecture documentation. </div>
<div>
</div>
<h3>
Raphael Knecht & Rouven Röhrig - App Developement with React Native, React and Redux</h3>
<div>
Well, what can I say. I have no clue about React or Redux and so this talk did contain a LOT of new information for me and I think I am still trying to digest all of it.</div>
<div>
<br /></div>
<div>
Raphael and Rouven gave an overview of what React, React-Native and Redux are, what you can do with it and what their experiences were. First of, with all of those tools you write Javascript or JSX which claims to be a statically typed Javascript. React is a view framework so it handles only rendering. React-Native compiles or transpiles or whateverpiles the Javascript (or JSX) code into native code for mobile devices. Redux handles everything apart from the view, it provides a state, that can be changed by using actions and reducers, where the action states what should be done and the reducer how it should be done. </div>
<div>
<br /></div>
<div>
For details on how this is coupled I have again to refer you to the slides as the diagrams explain this better than I could. An important notion is that a reducer is a pure function so there are no side effects in those. But for some aspects you need side effects, like logging e.g. To handle those concerns React uses something called middleware.</div>
<div>
<br /></div>
<div>
There are two different middleware implementations (at least in this talk), Redux-Thunk and Redux-Saga, both with their own pros and cons. The speakers did end up using Saga as it seems to be more flexible in handling complex requirements, where as Thunk tends to end up with large actions that are not maintainable.</div>
<div>
<br /></div>
<div>
Reasons why React/React-Native/Redux is cool:</div>
<div>
<ul>
<li>good tool support for dev and built</li>
<li>hot and live reload in the ide</li>
<li>remote debugging</li>
<li>powerful inspector</li>
</ul>
<div>
Reasons why React/React-Native/Redux is sometimes not so cool:</div>
</div>
<div>
<ul>
<li>not everything can be done in JS/JSX, sometimes you need native code</li>
<li>currently version 0.51.0 and there can be breaking changes</li>
<li>sometimes not all dependencies are available in compatible versions due to different release cycles</li>
</ul>
</div>
<div>
Maybe, when I have time, I can try making an app with React. *dreams on*</div>
<div>
<br /></div>
<h3>
Dragan Zuvic - Kotlin in Production: Integration into the Java Landscape</h3>
<div>
tl;dr - I think that was a great talk. I like kotlin, at least that what I have seen so far and it was good to have someone explain not only the basic but also the advanced features but also issues of this language.</div>
<div>
<br /></div>
<div>
I would say Dragan is a kotlin fanboy, he is very enthusiastic about the language features and the tool support, which indeed is really good. We started with the basic overview of the language features:</div>
<div>
<ul>
<li>type inference</li>
<li>nullable types</li>
<li>extension functions</li>
<li>lambdas</li>
<li>compact syntax</li>
<ul>
<li>no semi colons</li>
<li>it keyword in lambdas</li>
<li>null safety operator</li>
<li>elvis operator</li>
</ul>
</ul>
<div>
To only name a few. What was also interesting to me is that by default kotlin code is compiled to JRE 6 byte code but you can still you use fancy new stuff like lambdas. Alternatively you can also compile to JRE 9 code with module support or even to native code.. wooot....</div>
</div>
<div>
<br /></div>
<div>
Most of the talk revolved around interoperability between kotlin and Java. To make it short, it works pretty well. Calling Java from kotlin seems to be no problem at all. The other way round has a few issues but usually is also not much of a problem.</div>
<h3>
Falk Sippach - Master Legacy Code in 5 Easy Steps</h3>
<div>
Live coding demo on what techniques you can use when dealing with legacy applications. There are already some books about this but most of them assume that you a) the legacy code is testable and b) you already have tests.</div>
<div>
<br /></div>
<div>
That is not always the case. So what do you do when you have code that can't be tested and that also does not have tests (which is not that unlikely since it is not testable.. d'oh). </div>
<div>
<br /></div>
<div>
Before you actually start getting to work you need to make yourself aware of two necessities:</div>
<div>
<ol>
<li>only perform very small isolated steps, so that cannot break to much and can stop at any time</li>
<li>do not start fixing bugs on the way, you do not know if those bugs are accepted behavior for clients or maybe they aren't bugs after all when you see the big picture - preserve the current behavior. </li>
</ol>
<div>
The following techniques can help you to get control over your legacy code:</div>
</div>
<div>
<ul>
<li>Golden Master: Even if you do not have tests you can usually in some record the system behavior for a certain event. That can be log output or the behavior of your UI when you enter certain data. You can record this behavior, make small changes and then perform the same action again to see if the behavior is still the same. This is no guarantee that you did not break anything but it is an indication that you did not break everything. So if your steps are small enough this can be a good way to change your code into testability.</li>
<li>Subclass to test: Some classes cannot be tested because they have certain dependencies that make tests hard or unpredictable. You can try to subclass those classes and then overwrite methods relying on those dependencies to return a static value allowing you to test the rest of the class.</li>
<li>Extract pure functions: Split your code up so that you can isolate pure function where possible, making your code better readable.</li>
<li>Remove duplication: That is usually good to remove lines of code.</li>
<li>Extract class: Similar to extract pure functions but on a larger scale. That way you can create cohesion by extracting small logic parts into separate classes.</li>
</ul>
</div>
<h3>
N. Orschel & F. Bader: Mobile DevOps – From Idea to App-Store</h3>
<div>
This was also not quite what I was hoping for. The part that would have been interesting to me was rather short in this talk. How to handle the different build requirements for all platforms, what challenges are there to have the app rolled out to the different stores etc.</div>
<div>
<br /></div>
<div>
The main part of this talk revolved around tool selections like "do we use centralized or decentralized version control". Yes, that was an important for the guys in the project but in the end does not matter much for the way the app is built and deployed, not even much for development. Code reviews can be done with any VCS it is sometimes just more difficult. </div>
<div>
<br /></div>
<div>
Anyways, there still have been some relevant infos for me, regarding on how to test the different applications.</div>
<div>
<br /></div>
<div>
To build and test the iOS app you still need a mac but you don't want to buy Macs for every developer. The solution shown here looks promising. Simply buy a Mac Mini with the maximum hardware profile and then install Parallels on it, that way you can have lots of virtual Macs for your dev and test environments.</div>
<div>
<br /></div>
<div>
With Android you have the issue that there are thousands of different devices out there and can't buy one of each just to test your app. Solutions for this can be found at Xamarin Testcloud or Perfecto Mobile.</div>
<div>
<br /></div>
<div>
And finally Appium provides an abstraction for test automation.</div>
<h3>
Franziska Dessart: Transclusion – Kit for Properly Structured Web Applications</h3>
<div>
I literally had NO clue what transclusion means. And the subtitle was also not that elusive to me. So what is it? A new framework? A weird forgotten technique? Well.. not really ;-)</div>
<div>
<br /></div>
<div>
Transclusion means that a resource can include other resources via links and those resources will then be embedded into the main resource.</div>
<div>
<br /></div>
<div>
Sounds familiar? Here a few examples of transclusions:</div>
<div>
<br /></div>
<div>
<ul>
<li>iframe</li>
<li>loading web page parts via ajax</li>
<li>SSI (Server Side Includes)</li>
<li>ESI (Edge Side Includes)</li>
<li>External XML Entities (remember the XEE exploit from yesterday? ;-))</li>
</ul>
<div>
The term is not new, it is just not that widely known. But with more and more micro service architectures it becomes more important.</div>
<div>
<br /></div>
<div>
Most of this talk targeted the different places a transclusion can occur and what considerations have to be made. Mainly you want to assemble the primary content of a website before the user sees it, so if you have to use transclusion for you do not want to do it in the client. Secondary content on the other hand is fine to be transcluded on client side. </div>
</div>
<div>
<br /></div>
<div>
With every tranclusion choice you will have to take some aspects into account:</div>
<div>
<ul>
<li>should the transcluded resource contain styling or scripting?</li>
<li>do you need/want to resolve transclusions recursively and if so for how many levels?</li>
<li>do you cache? if so the final resource or only certain transclusions or only the main resource?</li>
</ul>
</div>
<div>
All of those questions have to be answered separately for each use case. </div>
<h3>
Thorsten Maier: Resilient Software Design Pattern</h3>
<div>
Resilient software has always been important. Micro services hold new challenges in this area though. </div>
<div>
<br /></div>
<div>
If we want a high availability for our software we can try to increase the time until a failure will occur and we can also try to reduce the time for recovery in case of a failure. Ideal would be a system where a failure is not noticeable from the outside because the system can recover instantly, or at least seem to do so.</div>
<div>
<br /></div>
<div>
Thorsten not only described the well known patterns for these goals but gave specific implementation examples for most of them. e.g. using Eureka (from Netflix) as a service registry, have client side load balancing with Ribbon or Zuul as API-Gateway.</div>
<div>
<br /></div>
<div>
This was a nice change because usually those talks only cover the theoretical concepts but do not show you what tools you could use. But to be fair, usually the implementation was done by using an annotation within a Spring Boot application, so it was rather easy to show ;-)</div>
<div>
<br /></div>
<h2>
Day 3</h2>
</div>
<h3>
Mario-Leander
Reimer: Versatile In Memory Computing using Apache Ignite and
Kubernetes</h3>
<div>
Starting the day with some nerding, oh yeah!</div>
<div>
<br /></div>
<div>
Mario-Leander gave a great overview of the impressive capabilities Apache Ignite has. It seems to try to handle everything any middleware has ever done. While I am not a big fan of the "ultimate tool" pattern it does have some really interesting features.</div>
<div>
<br /></div>
<div>
Mario-Leander started of with his reasons why he started using Ignite. Micro services should not have state but applications usually do have state. So this state has to be put somewhere usually that is some shared database somewhere. When your landscape grows this can become a bottleneck or in some cases you needed to access your data in different ways. This is where Ignite can help.</div>
<div>
<br /></div>
<div>
Ignite provides you with distributed, ACID compliant key value store that is also accessible via SQL or even Lucene queries. That alone is quite a lot but the list of features goes on for some times including messaging, streaming and the service grid. The messaging component provides queues and topics just as JMS would do.<br />
<br />
The service grid allows your software to deploy IgniteServices into your cluster, an IgniteService is some piece of code that gets distributed to your nodes. This service usually needs to access portions of the data, but depending on the cache mechanism not all data is available on all nodes. Ignite supports collated processing which means that processing takes place on the nodes where the data is to reduce data transfer to a minimum.<br />
<br />
The streaming component was shown with a live demo where Mario-Leander attached his Ignite to Twitter querying for the conference hash tag and printing the tweet data to standard out. For most features the slides provide code examples that show a concise API.<br />
<br />
The talk itself was very good and Mario-Leander was able to answer most questions in depth showing his experience with the topic. Was definitely worth it.<br />
<h3>
Andre Krämer: Exhausting CPU and I/O with Pipelines and Async</h3>
Uhh.. more nerding!!! Or not ;-) From the topic I was expecting some advance techniques for asynchronous programming or maybe some project report about what problems have been tackles by async paradigms. Actually it was more an introduction to async and why async is faster than sync.<br />
<br />
The basics were that you should separate I/O and CPU intensive tasks in a consumer/producer pipeline so that the separate workers can be scaled independently to get the most our of your system.<br />
<br />
Then we had a part about performance measuring I/O performance on a machine and what pitfalls can lurk there. There were some interesting aspects but focused a bit much on NTFS specialties which simply are not relevant to me. The conclusion was that you should be sure to measure the right thing if you want reliable results, e.g. small files are often cached in RAM and not on disc.<br />
<br />
<h3>
Christoph Iserlohn: Monolithen – Better than their Reputation</h3>
</div>
<div>
This topic sounds pretty controversial with the current micro services hype. </div>
<div>
<br /></div>
<div>
A slow or cumbersome development cycles quite often is not the caused by the software but by the organizational structure. When different departments with different agendas are involved (e.g. Devs have different goals than Ops or DBAs - feature vs stability) then you will run into problems that you will not be able to solve with micro services.</div>
<div>
<br /></div>
<div>
On the other hand a monolith must not be bad per se. You can still structure your monolith into separate modules to mitigate most of the well known disadvantages of monoliths. There are even some aspects in which the monolith is superior to micro services:</div>
<div>
<br /></div>
<div>
<ul>
<li>Debugging: It is very hard to debug an application consisting of 10s or 100s of different micro services and requires a lot of work before hand to be actually possible</li>
<li>Refactoring across module boundaries: In a monolith you (usually) have all affected components in one place and can spot errors quite early. In a micro service landscape it can be quite hard to make sure all clients are adjusted to or can cope with your changes</li>
<li>Security: One micro services is more secure than a large monolith but if you consider the whole micro service application this is not necessarily the case as you have to take the communication paths into account which are often quite hard to secure</li>
<li>UI: With micro services a good UI is usually hard to build if the data comes from different services</li>
<li>Homogenous Technology: This can be an advantage as it reduces the complexity of the system and requires less skill diversity but also a disadvantage as you can't choose a different technology for a module</li>
</ul>
<div>
The bottom line is that monoliths or micro services are neither simply good or bad, it all comes down to your requirements and external parameters. So think before you build!</div>
</div>
<div>
<h3>
Nicholas Dille - Continuous Delivery for Infrastructure Services in Container Environments</h3>
</div>
<div>
<div>
This talk focused strongly on the Ops perspective of micro service platforms and, like many others, started off with the basic reasons and advantages of automation for software deployments, like reproducibility, ease of deployment and stability.</div>
<div>
<br /></div>
<div>
To achieve that the automation must be easy to use, well tested and standardized. That is why everything as code is so important because it allows us to create exactly that. According to Nicholas this is where Ops still can and need to learn from Devs' experience in software engineering.</div>
<div>
<br /></div>
<div>
Another method to improve the build process is micro labeling for containers. This means to label each build with a set of properties to make it identifiable and allows us to see what source code version it reflects. Those properties can be:</div>
<div>
<ul>
<li>artifact name</li>
<li>repository name</li>
<li>commit id</li>
<li>timestamp</li>
<li>branch name</li>
</ul>
</div>
<div>
To further help with automation you should use containers to deploy your applications as that means you have one way of deployment. Also containers make monitoring easier as the containers can collect the monitoring data from the application and expose it to the monitoring infrastructure. That way you can focus on the actual evaluation instead of collecting data.</div>
<div>
<br /></div>
<div>
One issue that arises with containers is that a container should be stateless but most applications do require state to function properly. Instead of using host volumes mounted into docker Nicholas presented a different approach. Ceph is a distributed storage system that can also run in a container. That way applications can store their data in Ceph but of course if the Ceph container dies the data is lost. So they set up a cluster of Ceph containers so if one dies it gets restarted by your orchestration software (Rancher in this case) and the new container syncs to the existing cluster within minutes. </div>
<div>
<br /></div>
<div>
I think this is an interesting solution but I am not sure I would feel comfortable knowing that all my data resides in memory. Maybe they only use it for non critical data that must not be persistent at all costs, but I can't remember anymore.</div>
<div>
<br /></div>
<div>
Even though I was not exactly the target audience I took quite a bit from this talk and think Nicholas showed a lot of experience in this area. Especially while answering all questions in depth, two thumbs up!</div>
</div>
<div>
<h3>
Christian Robert - Doctors, Aircraft Mechanics and Pilots: What can we learn from them?</h3>
<div>
Well the title really says it all. Other professions have harnessed techniques to function under pressure situations, so why not try to learn from them.</div>
<div>
<ul>
<li>Pilots</li>
<ul>
<li>All information in the cockpit -> Have all monitoring data aggregated in one place so that you can spot problems at once. </li>
<li>Standardized language -> Have a common vocabulary and a common understanding of it, e.g. what does "Done" mean?</li>
<li>Clear responsibilities -> Communicate in a clear and expressive way so that you are sure your colleagues understand. Also vice versa tell your colleague that you did understand.</li>
<li> Checklists -> Always use checklist for important or complicated tasks, no matter how often you have done them in the past. Routine is one of the greatest dangers for your uptime.</li>
<li> Plan B -> Always make sure you have a plan when the shit hits the fan</li>
</ul>
<li>Aircraft Mechanics</li>
<ul>
<li>Prepare your workspace -> Well this analogue did not work that great. It refers to the fact that a aircraft mechanic would not repair a turbine that is still attached to the plane. He would dismount it and the bring it to the workshop. In software terms you could translate it to, build your software modular so you only have to patch an isolated component.</li>
<li>Tool box -> Use the tools you know best and that suit the task at hand</li>
<li>Visualize processes -> Use a paper Scrum/Kanban board so people can move the post its themselves. This is one point where I disagree.</li>
<li>Document your decisions -> Documentation for system architecture and other project decisions so everyone can understand them.</li>
<li>Bidirectional communication -> Make sure everyone can follow the progress by using issue trackers like JIRA.</li>
</ul>
<li>Doctors</li>
<ul>
<li>Profession vs Passion -> Doctors want to help people but sometimes they have to deal with bills and pharma consultants. In every job there are tasks that you have to do even though you don't like them, e.g. meetings.</li>
<li>Understand your patients -> When talking to non techies we have to explain things so that they can understand. No tech mumbo jumbo.</li>
<li>prepare as good as you can -> A doctor does a lot of preparation for an operation by talking to the patient, running tests and making sure he has all the information he needs. Similar we should prepare before implementing features by gathering all requirements and information from the stakeholders.</li>
</ul>
</ul>
</div>
<div>
And one they all have in common: "Don't panic. Stay calm." It does not help to have 10 people fix the same bug or doing things just for the sake of it. Focus what the issue is, how bad it really is and what is needed to tackle it.</div>
</div>
<div>
<h3>
Uwe Friedrichsen - Real-world consistency explained</h3>
<div>
<i>Disclaimer: To understand this part you should know about ACID, CAP and BASE.</i></div>
<div>
<br /></div>
<div>
I don't know how to say this differently: This talk scared the bejesus out of me. Why, you ask? You will see.</div>
<div>
<br /></div>
<div>
Relational databases with ACID, that is what most of us started with. A simple MySQL or maybe Oracle or something similar and we were happy. All of those had ACID and so we could simply code on and be sure that all of our database operations would complete and we would not lose and data or even have inconsistencies.</div>
<div>
<br /></div>
<div>
But unfortunately this was never the case. All has to do with the 'I' in ACID: Isolation. Uwe did a great job explaining the technical details but here is the short of it (especially since I can't repeat it ;-)): ACID in it's textbook definition can only be achieved when the database uses the highest isolation level called "serializable" but hardly any database uses this due to serious performance impacts. Usually a databases uses "read committed" or "repeatable reads", those do provide some isolation but not perfectly. That is why you are very likely to see some kind of anomalies in every database. YUCK!!</div>
<div>
<br /></div>
<div>
So what about NoSQL databases? We have to deal with the CAP theorem but that is what BASE is for, so they all provide eventual consistency, right? Turns that is also not the case but most people just don't know it. You have to configure your database properly to ensure eventual consistency. One problem, that is quite common, is that often a database is chosen because it is hyped or sounds interesting, but not because it suits the problem. But especially with NoSQL this is very important since almost every NoSQL database was designed with a special purpose. If you look at Cassandra e.g. this database was designed to be as available as possible. As long as one node is alive you can write data into it. But consistency? You wish...</div>
<div>
<br /></div>
<div>
Check out the slides. The research Uwe has done is impressive and I can't repeat half of it here.</div>
<div>
<br /></div>
<div>
Another problem with NoSQL is, since there is no ACID but instead BASE, our programs have to take that into account. So the programming models are not as simple anymore as they were with SQL databases. </div>
<div>
<br /></div>
<div>
So are we stuck with either ACID that does not work as good as we thought or BASE that makes programming much more difficult? There are a lot of things between ACID and BASE like Casual Consistency oder Monotonic Atomic View. But there is still a lot of research going on in this area but in the end our applications will have to do their part to make sure our data is safe.</div>
<div>
<br /></div>
<div>
I really recommend to check out the slides as this is a very interesting and also very important topic.</div>
</div>
<div>
<h3>
Sven Schürmann & Jens Schumacher - Container Orchestration with Rancher</h3>
<div>
A hands on report by two guys who spent the last year working with Rancher. To keep it short: It was good overview over some key features of Rancher that I will try to summarize below.</div>
<div>
<br /></div>
<div>
But first: Why do you need Rancher? Can't you do orcherstration with Kubernetes? Yes you can but there is more to container platform than plain orchestration. You still need stuff like access control, handling deployment on different stages, defining how a cluster should look like exactly and so on and so forth. And this is where tools like Rancher come into play. For the plain orchestration you can use Kubernetes in Rancher or other tools like Docker Swarm or Rancher's own Cattle. As of 2.0 Rancher will use Kubernetes by default.</div>
<div>
<br /></div>
<div>
Rancher Features:</div>
<div>
<ul>
<li>Machine Driver: With this you can create new hosts dynamically. It supports various cloud providers but can also include custom scripts.</li>
<li>Rancher Catalog: Used to define templates for each service. A template consists of a docker-compose.yaml and rancher-compose.yaml where rancher-composes follows the docker-compose mechanics. You can integrate it with VCS so you can always roll back to older templates. You can use variables in the docker-compose file (like spring profiles for an environment) and define the allowed values in rancher-compose that can be selected when applying the template.</li>
<li>Infrastructure Services: </li>
<ul>
<li> Healthcheck: Knows all containers running on a host and monitors them closely</li>
<li>Scheduler: Works together with Healthcheck. When a node is down the scheduler notices that there are fewer containers running than configured and starts up a new one.</li>
<li>Network: You can define different network types for your containers depending on where you are running, e.g. if you need IPSec or not. Contains a simple load balancing and service discovery </li>
<li>Storage: You can configure the storage type and Rancher will apply the appropriate plugins. So far you can choose between NFS, NetApp SAN and Amazon EBS</li>
</ul>
</ul>
</div>
<div>
This was only a small insight into Rancher and it's features but it got me interested and it shows that for larger landscapes you need more than "just" Kubernetes.</div>
<div>
<h3>
Dr. Jonas Trüstedt - Docker: Lego for DevOps</h3>
<div>
The last talk of the conference. Once more containers ;-) Quite a lot of this talk has already been covered by others, so I will not repeat that. What I took from this talk was a short comparison between Rancher and OpenShift</div>
<div>
<ul>
<li>Rancher is easier for a first test setup where as OpenShift requires quite more confiugration to get started</li>
<li>OpenShift has a higher integration with development tools, e.g. you can just tell it to checkout a git repo with ruby code in it, then OpenShift will create a new image based on a ruby image and push that new image to your registry</li>
<li>OpenShift uses Ansible, so you have to install Ansible and at least get aquainted with it</li>
<li>According to Jonas OpenShift is more powerful</li>
</ul>
</div>
</div>
</div>
<h2>
Summary</h2>
<div>
Thank you for ready this far, or at least for scrolling down. I hope you found at least some useful information in this post. Please let me know if you spotted an error or any misunderstandings on my part. After three days and lot of different topics it is quite possible that i messed something up. And as always, any comments are welcome :-)</div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-51482426511322403242017-11-13T20:41:00.000+01:002017-11-14T12:51:22.823+01:00Cambridge Double Trouble 2017After a few years of only going to continental and mainly German tournaments I decided it was time to head over to the island again. By browsing TFF for the next upcoming British tournaments I finally found the Cambridge Double Trouble. This tournament had a few selling points. It has a rather unique rule set (only double skills allowed with 4 tier system and a rather low amount of skills, at least for the tier 1-3 races), it is a team tournament for 2 player teams but you can just sign up and get assigned another random single sign up (so you are bound to meet new people!!) aaaaand it is run by Schmee and Purplegoo.<br />
<br />
Especially the latter point was important to me, as both are lovely chaps and the combination promised the best of both worlds. Schmee coming up with the wacky ideas for rules and evening entertainment and Purplegoo running the actual tournament with his routine and calmness. And what can I say, both delivered!<br />
<br />
The travel connections where great and my hotel was only 10 minutes walk from the venue and 20 minutes from the train station. So all was set for a smooth trip. On Friday evening we had a get together in a nice pub The Castle Inn closer to the city center so I had a nice evening walk through the living areas of Cambridge to get there. We were only a small group of 6 people in total and only 3 were actually involved in the tournament (Schmee, Pipey and myself), the others being Schmee's lovely significant other Kate and two friends Mike and Matthew. So apart from the traditional Blood Bowl nerd talk we also had "regular" conversations and quite a few entertaining games included "cricket trumps" and "take it away" rounded off by some beers and pub food. A perfect start to the weekend.<br />
<br />
Saturday morning started slow due to the land lord not being up in time to let us in but as this was the same as every year (according to everyone involved) no one was either suprised or stressed and with a bit of delay we were able to get started. The first step was to meet my random team mate Wolimorb, a rather new player with a few tournaments under his belt. To our surprise we were both using Humans with a similar roster but different skills. While we both had an Ogre with Block I opted for the lame 4 Guard Linemen variant and he took more fancy skills on his Blitzers like Dodge, Sidestep and even Leap. Especially the Leap Blitzer was used several times to great success and caused some serious head aches for his opponents! Go Woli!!!<br />
<br />
In round 1 we were paired against Howlinggriffon (Skaven, vs me) and Mr Frodo (Underworld, vs Wolimorb). The Skaven had a rather crappy start only producing one knock down from roughly 12 block dice against my Linemen. In the end everything was rather tied up and I was able to chain push the screening players away from the ball carrier and take him down. From there it was a few turns of back and forth but finally I was able to secure the ball and score ion Turn 8. In the second half attrition really hit the Skaven and there was not much to be done so I was able to get a safe 2-0 win. Wolimorb drew his game 1-1 so we went straight to the top dogs :-)<br />
<br />
Round 2 saw two Underworld vs Human matches where I faced besters while Wolimorb took on VultureSquadron. besters had to kick and the ball landed exactly on LoS one square from the sides which lead to the inevitable Blitz! kick off result. The underworld moved Skitter Stab-Stab under the ball and managed to build a screen around him before he caught the ball. So much for my offense then. Even though I got the ball lose in the next turn the sewer scum managed to recover and retreat. The following turns where dominated by a tight defense from my end forcing lots of rolls on the underworld and trying to maximize damage. Unfortunately it did not pay off at first. Only in the very last turn was I able to regain the ball and score a touchdown after having to do a 3+ dodge, 2 gfi, 3+ pickup, 4+ pass, 4+ catch and 3+ dodge. All after the reroll was gone for taking down Skitter. In the second half the Underworld offense tried to advance but I kept up the pressure as before so it was a tight affair. In the end I was not able to do enough damage/enforce enough turn overs so the game ended in 1-1 draw. My team mate got a whooping 0-0 so, we were still unbeaten.<br />
<br />
Round 3 paired us off against the later winners, Wolimorb had to play Pipey with his Undead, who should later finish the tournament as best individual with an impressive 4/2/0. I got to play peo2223 with an interesting Norse roster, consisting of Wilhelm Chaney, a Block Snow Troll and 11 Linemen containing 2 Guarders and a Leader. And I got the offence and again the kick off was a Blitz!. This time the kick was deep so the Norse broke through and tried to put as much pressure as possible on the ball. I barely managed to recover but the Norse refused to die and started to do some Damage themselves. Especially the Snow Troll was very reliable and caused some major head aches on my side. With some luck I could advance in the opposing half and was finally able to squeeze through the Norse screen and scored in Turn 7. The Norse threw everything they had into the 2 turn drive and Wilhelm went off with the ball. I got him down and tried to secure the ball as good as possible. But it was not enough and Wilhelm did show he is worth his pay check by making a dodge, pickup and 2 gfi to score the 1-1. In the second half the kick went way over to the sidelines and Nuffle struck on the Norse, failed pickup, ball get's thrown in and lands just behind my defense line. I got the ball up and tried to secure it as good as possible. peo on the other hand was determined to get it back and a few turns later my numbers started to crumble. It was massive back and forth around the LoS until I saw a small chance for an opening and advanced. Then in turn 7 when peo decided to go for the draw instead of trying to win (probably the right decision at this point) I was able to make a bold move and sent the ball carrier through the lines. Unfortunately the much needed screening failed due to a dodge and so the ball carrier stood there rather scared awaiting his doom. peo had to do some rolls but managed to get 2 dice on the ball which luckily for me where not enough. So in the last turn I cranked up the boldness some more and scored with a 4+ and 3+ dodge. Pewh... On the other table Pipey was not so cooperative and gave my team mate a rather good whooping, so we ended with a second draw. Still awesome!!<br />
<br />
The Saturday evening saw a collective dinner at a nice curry place, Schmee had organized the order before hand and despite some confusion with the order and the bill afterwards everything turned out ok and we enjoyed our meal and some interesting conversations with tournament veterans and newbies. Afterwards we went to a close pub with live music, played some pool (or rather the english played and I tried not to scratch the table too much) before we got schooled by some local semi pros ;-) This was followed by more talking and drinking until the pub closed down and we headed off to our beds.<br />
<br />
Sunday morning gave us a new matchup, I got to play Darkson with more Norse, this time with Dodge Blitzers and a Mighty Blow Runner but no stars. Wolimorb had to take on Moodygits Undead. This time I had to play defence from the start but with pouring rain the Norse failed the first pickup. So I tried to swarm the opposing half to put on some pressure, after having a guarder sent to the ko box. In the second turn the Norse got the ball up caused some stuns and a second ko that I apoed. Due to constant hihg AV rolls the Norse managed to advance. After a few turns I was able to put pressure on the ball but the Dodge Blitzer survived a total of 8 block dice and managed to dodge out a few times only to finally fail the very last dodge into the end zone. This caused some understandable distress on the other side of the table ;-) In the second half I tried to punch through the Norse but only had moderate success. At one point I had to take a gamble to move around a Norse bulk. The orginal plan was to use the ball carrier for a chain push into the fans but since the first action resulted in a double skull I had to readjust a bit and so a lino had to perform that blitz which meant that the ball carrier was not completely safe. So Darkson got a 3+ dodge and 2 gfi for 1 die block on the ball carrier which worked. The real problem was that the ball bounced to the fans and was of course thrown way back into my half. From then it was 3-4 turns of knocking the ball loose, failing to pick up, putting tackle zones on the ball etc from both sides. At one point I got the ball back with my catcher but there where two Norse linos that could reach with one dodge each. The others where behind a screen. I figured it would be better if only one of them was standing so there would be no second player to pickup the ball afterwards. That's why I tried to block with my ogre which boneheaded. That way the Lino that should have been blocked was able to open the screen and the Mighty Blow Runner could blitz the ball carrier. At first I thought it was a mistake to try the block but now I am not so sure as a knock down would have been really helpful. But in the end it fired back and so we kept on struggling for the ball. I got it back again, but had to many players out for protection so got knocked down again. In the last turn I then failed the pickup due to the rain. So it ended in a 0-0 draw. Luckily my team mate managed to hold a draw as well, so we did not loose this round either.. wooot wooot!!<br />
<br />
After a tasty breakfast/lunch break round 5 paired Wolimorb against Lycos with his Halflings, he was very successful with them last year but this weekend the little ones had a hard time, so good omens for Woli! For my J_Bone brought some Chaos Pact with fully packed Big Guys, Claw on the Mino and Block on the other two plus a Chainsaw. After losing the coin toss I decided to sacrifice some Linos but Nuffle threw a Blitz! over the fence together with a kick in the middle of the opposing half. So I tried to capitalize on this, blitzed through the screen and tried to push a blitzer forward but failed. So there was not mich benefit. But J_Bones Big Guys and the Chainsaw did have some trouble getting started. A lot of failed nega traits and kickbacks where a dominant factor in this half. In the end I got the ball and managed to score at the end of the half. The second half started with.. another Blitz! This time for the Chaos Pact. J_Bone got quite more out of his Blitz! than I did and so it was pretty tough to get the ball save. After a bit of rolling and praying I managed to advance and finally scored in the middle of the half. So we got our third kick off and of course, the third Blitz! This put the final nail into J_Bones coffin and even though his Big Guys decided that the second half was the time to maim some humans he was not able to score. Had his player removal worked that well in the first half I would probably not have had any chance but the dice were on my side and so I got a lucky 2-0 win. On the other hand Lycos' luck seemed to have come around and he creamed Wolimorb with the little fellas. But still, undefeated!!<br />
<br />
Final round!! It feels weird when you are 3/2/0 after five games and THEN get paired with Halflings. But deeferdan2383 was on 3/1/1 with his and so posed a serious threat. Wolimorb faced MrZay's Orcs. The coin toss sent me into defence and I lost 2 rerolls. I decided to put the Ogre on LoS despite the Dirty Player Halfling. The idea was that the Ogre will be the fouling bait with his Thick Skull which gives good odds of staying on the pitch compared to the fouler being sent off. Well, the first block killed the unskilled Lino and the foul also caused a cas on the Ogre. The Dirty Player was sent off and the apo saved my Ogre. After that I killed a Halfling so we were on 9 vs 9 and I started to swarm the Halflings to force dice rolls. Unfortunately the Halflings refused to fail their dodges or die from my blocks while none of the trees (including Deeproot) failed their rolls. So I really struggled to keep them at bay, and it did not help that dan played it very solid ;-) In turn 7 came the inevitable Throw Team Mate attempt, which worked perfectly and so the little ones went up 1-0. So the Humans set up for the two turn touchdown which is quite hard against a LoS full of trees. But the fans decided to create some havoc and so we lost a turn due to a riot. So in the second half the pressure was on. I wanted to take down the two regular trees and surround them so the stand up rolls would be hard enough for at least one to stay down. The problem was, that before I could do all of that I had to get the ball safe but my thrower screwed up. So I was in a rather bad position and the trees AND Halflings took out more and more players. I tried to break through but a successful Throw Team Mate gave dan a chance for a 2 dice wrestle blitz which worked. The ball was thrown in but only 2 squares and so landed next to the halflings. In the end I was not able to recover. The trees and Halflings were on fire not giving me the least of chances in this game. Well done, Dan!! Since the Orcs were also not in the mood to give away points, this sealed our first and only team defeat :-(<br />
<br />
Then it came to the awards. As expected from the match results Pipey and peo won the team competition and Pipey was best individual player. deeferdan came second with his Halflings and of course got the "Best Stunty" award. At this point something unexpected happened. Since Pipey and Dan both already got an award, the tropohy for "Best Individual Player" went to the 3rd place, which was me... This took completely by surprise as it seems a bit odd to give that award to someone who had not actually won it. But everyone seemed to be okay with that and so I gratefully accepted the trophy. I was even more surplused when I realized that with the award also came a "real" prize. In my case I got one of the new boxed Dwarf teams from Games Workshop.<br />
<br />
As expected the crowd soon departed as everyone was eager to get home in time. So I decided to stay in the pub for dinner trying the traditional sunday roast (when in Rome..) and enjoy the atmosphere.<br />
<br />
To sum it all up, this tournament was an awesome experience on and off the pitch. So if you fancy a unique ruleset with great competion, good sportsmen and a well rouned supporting programme you should definitely go to the Double Trouble!! I can only recommend it to everyone. Thanks again Schmee and Purplegoo for organizing this and everyone else for the great inclusion and entertaining conversations.SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-62370505234913167082016-09-23T18:10:00.003+02:002016-09-23T18:10:56.257+02:00Humans PaintingA lot of time has passed since I painted my last team. But as I was stuck the couch for the last weeks due to a juicy knee injury I finally got it done and painted my human team.<br />
<br />
The minis are an Elfball team from Impact, so the positions were not exactly like those on the Blood Bowl Humans and I had to juggle them a bit.<br />
<br />
So two of the five safety players, which kind of resemble the blitzers, ended up being linemen, as I liked the postures of a lino better for blitzers.<br />
<br />
As usual the painting is not that great, but considering my lack of practice and the fact that most colors have been very old and pretty claggy, I am still rather happy about the outcome.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-WFwFdrnBsRE/V-VLr3UxdZI/AAAAAAAABhE/Nc3nOqtA90A17BTTKNPPAk53iWsk-T1XwCEw/s1600/20160921_202447_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-WFwFdrnBsRE/V-VLr3UxdZI/AAAAAAAABhE/Nc3nOqtA90A17BTTKNPPAk53iWsk-T1XwCEw/s320/20160921_202447_HDR.jpg" width="180" /></a><a href="https://3.bp.blogspot.com/--4qdV0130Zk/V-VLscej9RI/AAAAAAAABhE/ibEsiyuepIATWDQUo7L5KQVpngO4ubseACEw/s1600/20160921_202622.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/--4qdV0130Zk/V-VLscej9RI/AAAAAAAABhE/ibEsiyuepIATWDQUo7L5KQVpngO4ubseACEw/s320/20160921_202622.jpg" width="180" /></a><a href="https://1.bp.blogspot.com/-KEPDVBrXR7w/V-VLr2tHX_I/AAAAAAAABhE/yvDEkZPZPBIBC8oR5cQ8h6tUmLL7U5CCgCEw/s1600/20160921_202637.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-KEPDVBrXR7w/V-VLr2tHX_I/AAAAAAAABhE/yvDEkZPZPBIBC8oR5cQ8h6tUmLL7U5CCgCEw/s320/20160921_202637.jpg" width="180" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-EGjccL_yzns/V-VMjipUSgI/AAAAAAAABhU/FKdGvTCd0C8sBBb-xY2c3aBZfjUik6K-QCEw/s1600/20160921_202652.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-EGjccL_yzns/V-VMjipUSgI/AAAAAAAABhU/FKdGvTCd0C8sBBb-xY2c3aBZfjUik6K-QCEw/s320/20160921_202652.jpg" width="180" /></a><a href="https://3.bp.blogspot.com/-7puyZPZ8BQA/V-VMkrD3YfI/AAAAAAAABhU/b1BHrMAIoMYQsDTj5MeleZfnKl1iiP_qQCEw/s1600/20160921_202742.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-7puyZPZ8BQA/V-VMkrD3YfI/AAAAAAAABhU/b1BHrMAIoMYQsDTj5MeleZfnKl1iiP_qQCEw/s320/20160921_202742.jpg" width="180" /></a><a href="https://2.bp.blogspot.com/-ZVAWej7wMeg/V-VNZc58jdI/AAAAAAAABiM/JlbxwQbegugg2lF1m-sRXgBVB__KNh3pQCEw/s1600/20160921_202818.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-ZVAWej7wMeg/V-VNZc58jdI/AAAAAAAABiM/JlbxwQbegugg2lF1m-sRXgBVB__KNh3pQCEw/s320/20160921_202818.jpg" width="180" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-GIGJRFNBXgk/V-VNW1JpvtI/AAAAAAAABiM/oMI9k6kpqFsmOQvh9nIFzDK-v3AtTwE4gCEw/s1600/20160921_202831.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-GIGJRFNBXgk/V-VNW1JpvtI/AAAAAAAABiM/oMI9k6kpqFsmOQvh9nIFzDK-v3AtTwE4gCEw/s320/20160921_202831.jpg" width="180" /></a><a href="https://2.bp.blogspot.com/-EMSdrjIC7Ps/V-VNZKbsvBI/AAAAAAAABiM/W_WgNKPP-egI9IJMSzP8qtHDKK_4oE1QwCEw/s1600/20160921_202851_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-EMSdrjIC7Ps/V-VNZKbsvBI/AAAAAAAABiM/W_WgNKPP-egI9IJMSzP8qtHDKK_4oE1QwCEw/s320/20160921_202851_HDR.jpg" width="180" /></a><a href="https://3.bp.blogspot.com/-1nP-z0KIG2k/V-VOJ6oXwuI/AAAAAAAABiM/P3WiDwrbPvUxbmC-hS0zm2RK_iOqiS49QCEw/s1600/20160921_202905.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-1nP-z0KIG2k/V-VOJ6oXwuI/AAAAAAAABiM/P3WiDwrbPvUxbmC-hS0zm2RK_iOqiS49QCEw/s320/20160921_202905.jpg" width="180" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-xxDKselTKPw/V-VOOXCp4vI/AAAAAAAABiM/LW2kR0mSob0_eCzB_TB75uUJaLmg0JjfgCEw/s1600/20160921_202932_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-xxDKselTKPw/V-VOOXCp4vI/AAAAAAAABiM/LW2kR0mSob0_eCzB_TB75uUJaLmg0JjfgCEw/s320/20160921_202932_HDR.jpg" width="180" /></a><a href="https://4.bp.blogspot.com/-4LAYbpims_w/V-VOM1HhCqI/AAAAAAAABiM/IDLs7qyBClI5KlCxBnh_PHne0jlAZr0dwCEw/s1600/20160921_202948_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-4LAYbpims_w/V-VOM1HhCqI/AAAAAAAABiM/IDLs7qyBClI5KlCxBnh_PHne0jlAZr0dwCEw/s320/20160921_202948_HDR.jpg" width="180" /></a><a href="https://2.bp.blogspot.com/-Ckxoh0Zw4vc/V-VPEBBJbpI/AAAAAAAABiM/V_i_JLmCUyoudbav0mwOgPQUWJ-vON_jACEw/s1600/20160921_203045_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-Ckxoh0Zw4vc/V-VPEBBJbpI/AAAAAAAABiM/V_i_JLmCUyoudbav0mwOgPQUWJ-vON_jACEw/s320/20160921_203045_HDR.jpg" width="180" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-k4IsXIquNdQ/V-VO9BZ1K1I/AAAAAAAABiM/GTr90GJb2gwDQFVf6jKFEjUE5pTdZ7XCgCEw/s1600/20160921_203033_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-k4IsXIquNdQ/V-VO9BZ1K1I/AAAAAAAABiM/GTr90GJb2gwDQFVf6jKFEjUE5pTdZ7XCgCEw/s320/20160921_203033_HDR.jpg" width="180" /></a><a href="https://4.bp.blogspot.com/-XHYPzP-GRcM/V-VPDzvcZiI/AAAAAAAABiM/j8d5MOs0WgY4Sg2jIw02mNg-yVspSujVwCEw/s1600/20160921_203052.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-XHYPzP-GRcM/V-VPDzvcZiI/AAAAAAAABiM/j8d5MOs0WgY4Sg2jIw02mNg-yVspSujVwCEw/s320/20160921_203052.jpg" width="180" /></a><a href="https://1.bp.blogspot.com/-AGTtmS-8XCU/V-VPyqfwhaI/AAAAAAAABiM/qDAzPweazeEe1zH2cyjJDxKPzVe91io8QCEw/s1600/20160921_203112_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-AGTtmS-8XCU/V-VPyqfwhaI/AAAAAAAABiM/qDAzPweazeEe1zH2cyjJDxKPzVe91io8QCEw/s320/20160921_203112_HDR.jpg" width="180" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-qOJ0VyNd6lU/V-VP220j9zI/AAAAAAAABiM/ILbo_wuq9-IjVcYZwqEcuY1ibk2aMAZ8QCEw/s1600/20160921_203132.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-qOJ0VyNd6lU/V-VP220j9zI/AAAAAAAABiM/ILbo_wuq9-IjVcYZwqEcuY1ibk2aMAZ8QCEw/s320/20160921_203132.jpg" width="180" /></a><a href="https://3.bp.blogspot.com/-dnXpmpyOGEs/V-VP85aflmI/AAAAAAAABic/TtvRV2wOBOQTke7fhaIbCSjVwhr7VOrhACEw/s1600/20160921_203144_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-dnXpmpyOGEs/V-VP85aflmI/AAAAAAAABic/TtvRV2wOBOQTke7fhaIbCSjVwhr7VOrhACEw/s320/20160921_203144_HDR.jpg" width="180" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-pu4OkzSfpD8/V-VQj7w3LNI/AAAAAAAABic/qpK974brb_cfTxjUSEK7xwLH09kCxCTVACEw/s1600/20160921_203553.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://3.bp.blogspot.com/-pu4OkzSfpD8/V-VQj7w3LNI/AAAAAAAABic/qpK974brb_cfTxjUSEK7xwLH09kCxCTVACEw/s320/20160921_203553.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-om18Gq6ZivQ/V-VQpFjXgOI/AAAAAAAABic/M-sawoanFrUgxk-aqAg6G9qg_DpjZZANACEw/s1600/20160921_203605.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://4.bp.blogspot.com/-om18Gq6ZivQ/V-VQpFjXgOI/AAAAAAAABic/M-sawoanFrUgxk-aqAg6G9qg_DpjZZANACEw/s320/20160921_203605.jpg" style="cursor: move;" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-51217546101343139412016-08-07T18:33:00.002+02:002016-08-07T18:37:16.556+02:00Devoxx UK 2016<br />
<h3>
Ambience and Background</h3>
<div>
<br /></div>
Three years ago London saw the first installment of Devoxx UK which I had the pleasure to visit. This year I decided it was time to come back and see how the conference has evolved and if it's value for<br />
money is still as good as it was.<br />
<br />
To make it short, yes it is! For a very reasonable ticket price you get two days full of talks spread over five tracks a decent catering and free water supply. The Business Design Center is a nice<br />
location and of course London is always worth a visit.<br />
<br />
In order to keep the ticket prices low the organizers have to bring a lot of sponsors, so the lobby was packed with stands. IMO this is not necessarily bad, at least you cab get a lot of goodies ;-)<br />
<br />
Another cool thing is, that all talks are taped on video and the videos are all uploaded to youtube. So if you want to watch the talks just go to the <a href="https://www.youtube.com/channel/UCxIamwHotqAAdmecaKT9WpA" target="_blank">Devoxx UK Channel</a><br />
<br />
<h3>
Day 1</h3>
<div>
<br /></div>
<h4>
Dot Con - James Veitch</h4>
<div>
<br /></div>
The opening talk was a great start to the conference. A very funny narrative of what happens when you actually reply to scammer emails (like Nigeria Connection etc.) but in a special way.<br />
<br />
James gave a summary of this experiences when messing with the people behind those emails and by that almost driving them mad. Usually I am not a fan of harrassing people, but if it happens to<br />
frauds that try to steal the savings of innocent people who do not really understand that there is a whole con industriy out there, I strongly approve!<br />
<br />
I highly recommend you watch the video to this talk, as no summary would do justice to it. It was hilarious.<br />
<br />
Unfortunately it seems this video was not uploaded to the channel.. real pitty there...<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=hf6PVE2yFgA" target="_blank">Embracing Failure</a> - Mazz Mosely</h4>
<br />
I chose this talk, because I remembered Mazz from a talk at the first Devoxx which was petty good, so I gave her another shot. You noticed immediately that she was very nervous speaking in front of<br />
a rather large audience but apart from that the talk was good. The topic itself was more about what bad management looks like, especially when the project is in a bad phase. She drew the picture of<br />
the typical jerk boss stereotype (pressumably from her first job) who responds to delays and errors by putting on more pressure but taking all the credit for success.<br />
<br />
The story seemd to take a turn for the better when she told us about a meeting where she, as a young developer, dared to speak up in a review meeting, suggesting some improvements. Against all<br />
expectations the more expirienced team mates backed her up and it seemed that from there on all would turn out good. But no, afterwarsd she got snubbed by the manager and it was clear that<br />
there would be no happy future for her in this job. To make everything even sadder, the manager got promoted for the work the team did and no credit was left for those who actually saved the project.<br />
<br />
In the end her morale was that you should speak, you should try to make your work a better place, even if it is hard. But if it turns out, that there is no way to make progress and that you will not be<br />
happy where you are, then move on and find people who share the same values as you do.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=_58mNj3Chzo" target="_blank">Where's my free Lunch?</a> - Hadi Hariri</h4>
<br />
For me, this one, can be summed pretty short. There are a huge number of online services that are, at a first glance, free. You can use them and no one is charging you. Hadi shows in detail in what way<br />
you actually are paying for things like Google search or Facebook, just to name a few big ones. The bottom line is, you should not just blindly use everything out there. But make sure you protect your<br />
data and understand what the service you are using, is taking from you in return.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=U0i2Wn9xjLE" target="_blank">Dials to 11 - Moderne Exteme Programming</a> - Benjí Weber</h4>
<br />
Cool talk, revisting the principiles of Extreme Programming and Agile Development plus a few ideas and principile bulding on that. The concept I found most intriguing was Mob Programming, using the<br />
brain power of the complete team to code complex core modules sounds like a really good idea. Other concepts revovled around Continious Deployment and Test Driven Development which did not strike me<br />
as too revolutionary. The final point that I had to agree with is, that projects have to be refactored on a regular basis, especially when maintenance, testing, monitoring etc are too complicated.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=c9uvV4ChIXw" target="_blank">Cybercrime and the Developer. How to start defending against the darker side of the web</a> - Steve Poole</h4>
<br />
Now that topic did sound interresting, I was looking forward to hear about best practices against cyber attacks, backgrounds of the business etc. But in the end this was just the same old story of<br />
"Check your app for security issues" and "The bad guys are out there" combined with some numbers on cyber crime and links to checklists for security issues. Breaking news.. And the biggest wtf moment<br />
was a short advertisment break for a sponsor. Well, I am not going to get that time back...<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=BMOgQnypzss" target="_blank">Arduino and Java with the Intel Galileo</a> - Simon Ritter</h4>
<br />
For this one, I was probably not the intended audience. I think I would have got more from it if I had at least some practial expirience with Arduino. Over a while it felt like an advertisement for<br />
the Intel Galileo but soon turned into a report of the issues the Azul guys encountered when trying to get Java working on it.<br />
<br />
Overall the style of the talk was good and it was interresting to hear what problems can occure on embedded platforms.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=7PkkxDaFDj8" target="_blank">Extreme Profiling: Digging into Hotspots</a> - Nitsan Wakart</h4>
<br />
Okay, this one went right into the nerd stuff. Nitsan gave a great overview over different profiling tools like VisualVM or Java Mission Control compared to what FlameGraphs in Java 8 can do and how<br />
to use perf to help find performance issues within the Java application. If you like this kind of stuff, just go and watch the video, it is really insightful.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=OH4KSD-rLP8" target="_blank">On Polymer and Smileys... or Polysmileys</a> - Carmen Popoviciu</h4>
<br />
Finally some hands on coding! Carmen introduced the different features of Polymer and how it enables you to create reusable webcomponents. This was one of the talks where you saw from the first<br />
second that the speaker really loves the topic. Carmen's passion and enthusiasm were very catching and the code examples she showed were precise, clear and easy to follow. One of my favorite talks<br />
of this conference.<br />
<br />
Polymer is abstracting the browser differences for webcomponents, but of course the webcomponent standard is changing. So Polymer has to adjust to those changes once those are final.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=eJVvVCh0u3c" target="_blank">Busy Java Developers Guide to Hacking in Java</a> - Ted Neward</h4>
<br />
Another talk with 10/10 nerd points. Ted had prepared a variety of special topics concerning tweakings of the jvm and the jdk. Basically it was an in depth tour of some of the more exotic settings<br />
you can use to alter compiler and runtime behaviours. I must admit, I can't restate them here, so again I recommend watching the video. Ted's expertise combined with his presentation skills and his<br />
relaxed and easy attitude made this a very enjoyable talk.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=5V-6lI3Qz6w" target="_blank">Knowledge is Power: Getting out of trouble by understanding Git</a> - Steve Smith</h4>
<br />
I must admit, Steve knows Git. He gave an indepth overview of the basic principles Git was built upon. This started with the structure of the .git directory and how objects are created/stored and did<br />
end with the power that the reflog gives you. In essence, if you screw up your git project, check the reflog to find the has before it all went wrong and then revert to that. For the details how to do<br />
that just watch the video.<br />
<br />
One thing I do not agree with though, is his hate towards git-flow. It is true, that the schema looks highly complicated and weird, but once you understand the basic system, it is rather simple and<br />
intuitivly most teams implement something very similar. I do agree with his opinion, that you should only add as much complexity to your development workflow as necessary.<br />
<br />
<h4>
Git in Practice - John Stevenson</h4>
<br />
The last slot of the day was another Git topic, this time a Bird of Feathers (more a guided group discussion). Steve threw in some rather generic questions about workflows and team structures and<br />
the group shared their experiences and opinions. There were no real surprises there, teams usually have some git flow like development process with feature and release branches that get merged back to<br />
master/develop. One thing shocked my though, someone explained how their team uses code reviews to ensure code quality before merging the branch and, as I expected, there was a lot of nodding and<br />
agreement among the other participants. But one guy spoke up and said, that he considers that sad because "you obviously don't trust each other". That was a huge wtf moment for me, but I was relieved<br />
that noone else shared this view. A team where this kind of attitude is common can just mean that there must be a highly inconsistent code base.. *shudder*..<br />
<br />
<h3>
Day 2</h3>
<br />
<h4>
<a href="https://www.youtube.com/watch?v=urF0CHOLQDk" target="_blank">Microsoft and Open Source? Microsoft and Java? Really?</a> - Giles Davies</h4>
<br />
Well, the title says it all, really. Like most IT guys I have some reservations when it comes to Microsoft, this is of course caused by their actions in the 80s, 90s and early 2000s. But seeing how<br />
they are now trying to get to grips with IT reality (e.g. the development of Edge) I figured I give them a chance to convince me that they are not that bad anymore.<br />
<br />
The picture Giles tried to draw was one of a "regular" IT company that uses different technologies to provide their customers with the best possible service. While that all sounded fair enough it was<br />
more or less what was to be expected by this kind of talk. How much of this is really as good as it sounds only time can tell. But at least it is clear, that Microsoft tries to abandon it's old ways<br />
and so they will probably again become a global player again who might rival with Apple or Google.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=DQ54lvCLL7Y" target="_blank">Composing Music in the Cloud</a> - James Weaver</h4>
<br />
Mr JavaFX talking again. As always his experiences speaking style made the presentation itself worthwhile. The topic itself was nice but it actually did not blow my mind. Basically Jim did show how<br />
he was using CloudFoundry to host a Spring-Boot application that can assist in different ways of music composition and how fast this can be done with modern technology.<br />
<br />
If you are looking for some distraction after a work day with some kind of nerd flavour, this video is the way to go.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=XwXL7urUlP4" target="_blank">Java 9 Modularity in Action</a> - Sander Mak, Paul Bakker</h4>
<br />
Oh yeah, some real bleeding edge stuff coming up. Sander and Paul gave a nice insight into the Java 9 modul concept that is intended to change how Java applications are written and run. One of the<br />
main points for me is that this aweful classpath "thing" is meant to die with Java 9. Instead applications will be composed of moduels which expose certain classes and functions and can be combined<br />
using provide and require declarations.<br />
<br />
Does that sound familiar? Oh yes.. OSGI!!!! The concepts of OSGI are rather old, the last time I really had to do with that was back in 2003/2004. But so we meet again. Don't get me wrong, this is<br />
nothing bad. I really like the concept of OSGI as it also allows you to have different versions of modules available at the same time etc. So I am excited to see how this works out when it comes to<br />
the "regular" Java world.<br />
<br />
Of course it is not so easy to upgrade to this new version, at least not when you want to follow the new paradigm. First of, the JDK and JRE are using the module structure too, so if your<br />
application is doing something nasty with those resources, it is very lickely going to break with Java 9. And how do you migrate to the module structure? Every application has a lot of dependencies<br />
and those have to be migrated as well. But that was taken care of, you can use jar files as so called automatic modules, that way you can upgrade your dependencies step by step.<br />
<br />
The downside is, that in practice those upgrade will not happen soon at most companies, because they are expensive and risky. So we will have to wait and see when Java 9 will truely be taking over.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=dlzMV83RTtw" target="_blank">Refactoring to Java 8</a> - Trisha Gee</h4>
<br />
Not so much bleeding edge, but still a very interessting topic as Java 8 is, unfortunately, still new for most companies. In additon, a talk with Trisha is always worth listening to and so was this one.<br />
What I liked most about her approach was, that she did not do any of that fanboy "omg, you have to use all the features asap because this is new and therefore better than, omg" stuff. Instead she<br />
took some of the most popular Java 8 features and examined them closer in terms of: How easy is it to migrate? How much can go wrong? And how does the performance change?<br />
<br />
The results were somewhat disillusioning, not only did some patterns prove pretty tricky to to migrate to but also the performance analysis showed that there was hardly any performance gain from<br />
using the new features and in some cases peformance even dropped.<br />
<br />
Bottom line is, you have to decide for each language feature and each use case independently if it worth to migrate and you always have to run performance tests on the code base to compare the<br />
behaviour under high load. For everyone who is about to upgrade to Java 8, this video is a must watch!<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=iKC2yoTwuvk" target="_blank">Faster Java By Adding Structs (Sort Of) </a>- Simon Ritter</h4>
<br />
And some more Java action! This time about the ObjectLayout project from the guys at Azul. The idea behind this is, to bring the performance advantages that C/C++ have compared to Java due to the use<br />
of structs.<br />
<br />
With a struct defintion the compiler knows exactly how large the struct object is and all objects do have the same size, as all elements are only pointers to the real data. That way the code can make<br />
assumptions of where a certain object is within an array etc. and thus take short cuts during the execution.<br />
<br />
This is what the ObjectLayout project tries to bring into Java. For details you better watch the video, as I am sure I will mix something up if I try to summarize it here. Pretty weird stuff.<br />
<br />
<h4>
<a href="https://www.youtube.com/watch?v=iKTFalVfoSU" target="_blank">Building multiplayer game using Reactive Streams </a>- Michal Plachta</h4>
<br />
The last talk of the conference was again more hands on. Michal showed us, how Reactive Streams work and hwo those can be used to create a nice simple multiplayer game in a live coding session. Nice<br />
topic and the coding was ratehr easy to follow, so for me this was a pretty good end to the conference.<br />
<br />
<br />
<h3>
Summary</h3>
<br />
As I said before, the value for money ratio on this conference is still great. Lots of talks and variety of topic to choose from with some very good and experienced speakers.<br />
<br />
Of course there are some rather minor issues, or rather things that I would not need which I want to sum up just for completeness sake.<br />
<br />
In comparission to the first year, there where less tables, seats and especially power plugs available. This makes it a but cumbersome for us techies with all our electronic devices. I understand<br />
that the space is limited and the organizers preferred to put up more buffets for lunch but still it would be great to get some more set up in the future.<br />
<br />
There are also more talk slots that I did not mention, for one the Ignite talks. A series of 5 Minutes talks about some small or humorous topics. I did not get much from them and I really don't<br />
see the point of those. But obviously there is an audience for that. The other are 15 Minute talks during the lunch breaks. Usually you are in line waiting to get to the buffet and so don't have<br />
time to listen to them. It seems to be pretty ungratifying to give such a talk. But again, this is in place since the first year, so some people seem to like it.<br />
<br />
The one thing that really kinda bummed me out was the organization of the DevRoxx party. The party took place at the second evening, but it was not really advertised that much apart from the<br />
closing talk of the conference. It as then that I took a closer look at the home page and finally found the section about it and then saw that you had to go to some of the sponsors to get a ticket<br />
for the party. At that point it was of course to late, but we decided to give it a try and went to the location just to see that quite a lot of people did not know about the tickets. So it was<br />
not just my problem ;-) So maybe that is something to improve for the years to come.<br />
<br />
The last thing I want to criticize is that even during the closing talk not only the sponsor stands got removed but also the wifi was taken down, which can be a problem for foreigners who have no<br />
data contract and who want to look up things, like e.g. the party location.<br />
<br />
Even though this seems to be a lot to complain about I want to stress the point, that this is really good conference considering the cheap prizes and that I am very sure you will not regret coming<br />
to this in the future.<br />
<br />
<br />
<br />SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-8308247728368750482016-05-15T00:37:00.000+02:002016-05-15T00:37:16.819+02:00Front End Excursion °2 - BeyondTellerrand Düsseldorf 2016<div class="p1">
<span class="s1">So I am off to a conference once more,
this time it is beyondtellerrand (<a href="https://twitter.com/search?q=%23btconf" target="_blank">#btconf</a>) in Düsseldorf, Germany
together with my colleagues <a href="https://twitter.com/isellsoap" target="_blank">Francesco Schwarz</a> and <a href="https://twitter.com/neupixel" target="_blank">Thomas Berendt</a>. And yes, this is the second Front End conference in a row for me, go pixel pushers!! ;-)</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<h3>
Supporting Program</h3>
<div>
<br /></div>
<h4>
Running Man</h4>
<div>
<br /></div>
<div class="p2">
<span class="s1"></span></div>
<div class="p2">
<span class="s1"></span>Usually I would start with stuff like what happend between the talks or maybe at the warm up meeting. But in this case I just have to start with what we are now calling the "Jogging Man Incident".</div>
<div class="p2">
<span class="s1"></span><br /></div>
<div class="p2">
On our way to the hotel, we encountered a jogger, a man in his middle years with a medium sized beer gut. Why am I telling this? Well, in order for you to understand that, I have to describe what he was wearing. The most ordinary part where is joggin shoes and sun glasses, bit more extra ordinary where the black cowboy hat and the black and white bandana. But what caused us all to kinda stop dead on our way was the rest of his outfit, a black and white striped speedo. And that's it.. </div>
<div class="p2">
<br /></div>
<div class="p2">
Maybe that's nothing unusual in Düsseldorf, but boy did we have a laugh ;-)</div>
<div class="p2">
<br /></div>
<h4>
Warm Up BBQ</h4>
<div>
<br /></div>
<div class="p2">
On Sunday evening there was a Warm Up BBQ, hosted by the lovely people from sipgate at their beautiful office hidden in a nice and quiet backyard. There was lots of delicious food and drinks, even a rich variety of food for vegans (not that it matters much for me, but I think it is good they were that considerate). Also, as a side effect, we were able to preregister for the conference so we could sleep longer on Monday :-) <span class="s1"></span></div>
<div class="p2">
<br /></div>
<div class="p2">
But apart from that there was also a lovely talk by <a href="https://twitter.com/evalottchen" target="_blank">Eva-Lotta Lamm</a>, title provocatively "Sketchers are better Thinkers". Even though I am not totally convinced, I did get a feeling how sketching can help you to think of creative solutions. Sketchers start with simple shapes like lines, triangles, squares or circles and then proceed on to more complex objects by composing them of those simple shapes. This way you practice e.g. how to split complicated requirements into simpler parts and thus come up with an elegant solution. </div>
<div class="p2">
<br /></div>
<div class="p2">
Another point that Eva-Lotta illustrated nicely in this low tech but highly entertaining talk was a suggestion of how to put your skills into relation with those of others. She did so by giving a brief overview of how her sketches evolved over the years, from very very simple up to being rather sophisticated. So this is something she is very happy about, seeing her own considerate improvement, instead of comparing herself to people like professional painters/sketchers. Those are of course able to produce way more realistic images. So comparing yourself to those is not only very depressing but also totally pointless. Always look at what you did achieve not only at what you you did not yet.</div>
<div class="p2">
<br /></div>
<h4>
Thank you for the Music</h4>
<div>
<br /></div>
<div class="p2">
Throughout the whole conference there was not just some music playing, but instead they mixed a special beyondtellerrand song, that played at the start and end of the conference. That was a nice twist in itself, but it was not just soe playback there. Instead there was a dj, <a href="https://twitter.com/tobilessnow" target="_blank">Tobi Lessnow</a>, mixing live for us and you could see immediately how much fun he was having :-) And what was the coolest part was Tobi mixing quotes from the previous talk into his music during the breaks. I know it does not sound like much, but it really lifted peoples spirit and made the time to the next speaker pass by rather quickly, thanks for that!</div>
<div class="p2">
<br /></div>
<h4>
Entertainment on the side</h4>
<div>
<br /></div>
<div>
Oh we are not done yet with the entertainment. The organizers put up some really old vintage consoles, Atari, Nintendo etc.where you could play classics like Pac Man, Mario Brothers or even Pong! Yeah, those were the days! Really really awesome. </div>
<div>
<br /></div>
<div>
But what cracked us up the most, were the chaps from Accenture Digital, with their booth display. </div>
<div>
<br /></div>
<div>
<img src="https://pbs.twimg.com/media/Ch_1QvOWkAAKgVH.jpg" /></div>
<div class="p2">
<br /></div>
<div class="p1">
<span class="s1">For those who do not see what I am talking about, look at the line below "solutions" and in case you need more hints: After a while the first two words in that line were taped over rather quickly. </span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Sorry guys, I know that was just a small mistake, but especially at a "front end" conference that just has to create lots of lols ;-) </span></div>
<div class="p1">
<br /></div>
<h3>
<span class="s1">Day 1</span></h3>
<div>
<span class="s1"><br /></span></div>
<div class="p1">
Ok, enough dawdling, let's talk business.</div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/165950257" target="_blank">Time and Creativity</a> by <a href="https://twitter.com/fehler" target="_blank">Christopher Murphy</a></h4>
<div>
<br /></div>
<div class="p1">
Chris was elaborating on the concepts of procrastination/late binding as well as t-shaped thinking and yak shaving. I am still not sure I totally got everything he meant, because it does not quite make sense to me yet ;-) But I will try to sum it up.</div>
<div class="p1">
<br /></div>
<div class="p1">
Chris' basic example was one we all know, you have a deadline for a project, but instead of working on it immediately you are doing other stuff and then at one point you realize that you must start now and work around the clock to finish on time.</div>
<div class="p1">
<br /></div>
<div class="p1">
The time that get's "wasted" until you start working is what Chris calls "fuck off time". At this point I was expecting suggestions how to motivate yourself to start earlier to get the project done properly. But thatwas not quite what Chis was going at. His point was more, that you should use the "fuck off time" creatively so that it is not wasted, as your time on earth is limited. He also explicitly stated that you should not work at that project but instead do something else. To me this seemed a bit odd as it implies that ususally the "fuck off time" is wasted and people are just sitting there waiting for the deadline to approach. </div>
<div class="p1">
<br /></div>
<div class="p1">
Maybe my confusion stems from me being not a big fan of procrastination, because at my work I often encounter the results that people produce that are "fucking off" a lot and then leave a mess ;-) I think this technique is not for everyone and is often abused by people who just want to be lazy.</div>
<div class="p1">
<br /></div>
<div class="p1">
Another term Chris was using is late binding, basically a kind of deliberate procrastination in a way that you only do stuff when it has to be done. That way aou are able to take into account the most recent requirements and thus can create a solution that honours those best. While I understand this reasoning I do not totally agree in the context of builing software, for the same reason as above. Too often this idea is abused to just slack off and then produce rubish within a short amount of time. So again, this concept should not be adapted without questioning if it is really appropriate for the task :-)</div>
<div class="p1">
<br /></div>
<div class="p1">
The second topic in Chris' entertaining talk was about yak shaving and t-shaped thinking. Yak shaving describes what happens when you set of to do a small task and during this notice that something else needs to be done and so start with that before finishing the original task. Like when you start tidying up and then notice that a drawer is broken and then start fixing that but then you see that some of your tools are broken so you head off to the hardware store and then you see that you have a flat tire and so on. For Chris this is a rewarding technique as you occupy yourself with tasks fom different areas of expertice. This leads to the concept he calls t-shaped thinking, meaning that the future needs people that have a certain area of expertice that they excel in but also have basic knowledge in a lot of other areas. This allows them to connect ideas and approaches from all of those areas to create a more complete and satisfying solution for a problem.</div>
<div class="p1">
<br /></div>
<div class="p1">
And finally he was pointing out how importing it is to solve a problem by addressing it's root cause and not simply the symptons. This is were t-shaped thinking comes in handy again, as sometimes you have to think out of the box to really understand what the problem is and how to solve it in the best possible way.</div>
<div class="p1">
<br /></div>
<div class="p1">
Especially this is what I can relate and agree to the most from this talk. And while I disagree with Chris on some of his points, I must say this was a very entertaining talk and a great start to the conference. And in case I misunderstood anything in this talk, I would be grateful for any corretion :-)</div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/165950912" target="_blank">Advice from a young Designer to younger Designers</a> by <a href="https://twitter.com/_lilchen" target="_blank">Lil Chen</a></h4>
<div>
<br /></div>
<div class="p2">
<span class="s1"></span>Second in line was Lil Chen. She spoke about her experiences when she started out in her first job and what she did learn from them. Basically all of her points can be applied to any profession not just designers and it boils down to a few important points.</div>
<div class="p2">
<br /></div>
<div class="p2">
First off it is important to learn how you can communicate about your job and duties with people from other areas, e.g. how a designer can explain to a developer or marketeer what males a design good or bad. And instead of just rambling about something being bad, explain what exactly is the problem with it, so that others can understand you and have a chance to relate to it. That way they have the chance to communicate with you and your colleagues in a better and more efficient way.</div>
<div class="p2">
<br /></div>
<div class="p2">
Second you have to actively promote your skills, you cannot just expect people to know what you can do. Instead you can start little side projects to show how you could improve certain aspects at your company. Make yourself heard without being arrogant, be encouraging and strife to make your and your colleagues work better.</div>
<div class="p2">
<br /></div>
<div class="p2">
Also it is important to show confidence when you start a new job, don't act like you don't care or are scared to take action. Try to be a productive member of your workforce. And last but not least, everyone is hired to fill a role, but noone says that role is set in stone. You can shape your own role to become something more than initially intended and thus become an even more valuable asset for your employer.</div>
<div class="p2">
<br /></div>
<div class="p2">
All things I can second and that everyone should keep in mind, not only when starting a job but also throughout our career.</div>
<div class="p2">
<br /></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/165951806" target="_blank">An abusive Relationship with AngularJs...</a> by <a href="https://twitter.com/0x6D6172696F" target="_blank">Mario Heiderich</a></h4>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Mario is a security specialst and together with his team runs penetration tests on various systems and software. Mario is also a lightning speed talker, so it was a real challenge to keep up with this very technical and advanced talk and not miss anything :-)</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">He showed various ways how it was possible to exploit angularjs in order to get access to the top level javascript components like window, which should be protected by the angular sandbox. Especially interessting was how he illustrated the ping pong between his team and the angular developer team and how the bugs they reported got fixed and how they then set off to find new bugs. At one point they were able to tell who fixed a bug and sometimes predict what new bugs this fix most likely introduced - very impressive.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Their work has increased the framework security dramatically, but unfortunately it turned out that angular 1.x is still and will always be somewhat unsafe as long as you have user input in our application. An upgrade to 2.x should fix those problems, but would cause a rather large amount of work since the new version contains a lot of breaking changes. </span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">What I found most interessting was when he explained how they managed to introduce a deliberate security hole into the framework source code via a pull request seemingly inteded to fix a minor bug. This was done with knowledge of the Google security team and they took care that the bug was removed before the new version was released. But they did prove that the system is vulnerable and that nobody can be sure his software is not prone to security issues. Despite this kinda depressing result I really enjoyed this very technical talk.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<h4>
<a href="https://vimeo.com/165960084" target="_blank">Unreal.js</a> by <a href="https://twitter.com/mflux" target="_blank">Michael Chang</a></h4>
<div class="p2">
<span class="s1"></span><br /></div>
<div class="p1">
Michael showed us different prjects he was part of during his career. One especially asonishing one was the visualisation of a sculpting process of various artists. By using tracking information of the sculpting tools and head mounted cameras, they were able to create some kind VR experience. You could see how the sculpture got created from the view of the artist and could also rotate around the scene while the sculpture was growing. This is very hard to describe properly, so I hope you will be able to see for youself in the video of the talk.</div>
<div class="p1">
<br /></div>
<div class="p1">
Another aspect was how Michael wanted to create some kind of Sim City like game, where you can see a city growing and a simulated timelapse with cars driving though the city and how the lights change during the night. All in all an ambitious project.</div>
<div class="p1">
<br /></div>
<div class="p1">
He showed us his first steps where he created a tool to draw streets and how he created images for buildings and lighting by using thee.js. It was also impressive to see his strive for perfection and how far he got with the game. Then at one point he had to update his libraries only to find that a component of three.js that was crucial to him got deprecated and thus he could not rely on it anymore. </div>
<div class="p1">
<br /></div>
<div class="p1">
This taught him how dependend you are on the maintainers of open source projects. So after cnosidering his possibilities he came across Unreal.js which is a java script plugin to the Unreal4 engine. Finally he decided to move to this engine and he was able to show us some of the awesome capabilites of this tool, which allows you leverage the Unreal engiens features through a javascript API.</div>
<div class="p1">
<br /></div>
<div class="p1">
For me this talk was inspiring to have a look at Unreal.js and maybe create a small game of my own. Hopefully I can scrape together some time for this :-)</div>
<div class="p1">
<br /></div>
<div class="p1">
<span class="s1"><br /></span></div>
<h4>
<span class="s1"><a href="https://vimeo.com/165960107" target="_blank">Designing socially impactful digital Experiences</a> by <a href="https://twitter.com/cattsmall" target="_blank">Catt Small</a></span></h4>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">This talk again addressed the more abstract aspects of technology projects. Catt elaborated on how well meant social projects can backfire due to lack of planing or research (a.k.a. Murphy's law butting people in the butt).</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">She pointed out that to create something truly meanignful you first have to really understand the complete scenario:</span></div>
<div class="p1">
</div>
<ul>
<li>what is the exact problem you are facing, not only the symptoms but the root causes?</li>
<li>what do you need to provide to improve the situation?</li>
<li>sometimes you do not have to create a completely new experience but it is better to augment something existing</li>
<li>look at all possible failures and how those would impact people relying on your project</li>
<li>do you need an information app? or maybe a communication tool?or something completely different? </li>
<li>what are the limitations of your project, not only technology wise</li>
<li>do you really have all th facts you need</li>
<li>did you ask for help on aspects you lack experience in?</li>
<li>when you got feedback, did you really consider it and learn from it?</li>
<li>test everything as soon and as often as you can</li>
</ul>
<div>
All of this is crucial to design something that is really meaningful to the society. Catt decided to create a game to improve the sex education in the United States. She did this, because she noticed that there was no standard among the different states and that more often than not young people were badly or even ill informed by their teachers or other adults. She wanted to change this and thus created an application that allows people to get informed about sexual topics without having to be afraid to be denounced by others. And even though she knows this will not change the world over night, she is sure it will contribute a small part in order to improve the situation. </div>
<div>
<br /></div>
<div>
I think it is great, that today someone can build something like that and help to make the world a better place.</div>
<div>
<br /></div>
<div>
<br /></div>
<h4>
<a href="https://vimeo.com/165960150" target="_blank">Typography on the Web is just like other Typography only much more interessting</a> by <a href="https://twitter.com/kupfers" target="_blank">Indra Kupferschmid</a></h4>
<br />
<div class="p1">
<span class="s1">No web conference without at least one typography talk :-) </span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">We started off with the history of typography and layouting from the first newspapers and books up until the modern age. Indra showed examples of different kinds of typography - posters, books, scientific articles or ads. She showed the main differences between those typographies and what those differences were used to achieve.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Soon it became clear what she was going at, e.g. the posters had large catchy letters so the readers attention is drawn to the few keypoints. The ads were similar, not that much text but with strong emphasises. On the contrary books and articles were designed for smooth and easy reading, while the article was more structured to guide the readers focus to it's main aspects.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Indra pointed out how important it is to take into account how your text will be read when choosing fonts and layouts. If you have a long text the font should be clear and easy to read with a high contrast (yeah, I know the current blog style does not adhere to that.. I will try to make a better one, promise!).</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Another good point was, how usage of different styles (bolds, italics etc.) can be used to guide the readers focus to the central aspects of a text. She rounded everything up with a very good series of examples on good and bad choices for typography for all kinds of reading purposes. Very insightful.</span></div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/165960184" target="_blank">Living Language</a> by <a href="https://twitter.com/orielisar" target="_blank">Ori Elisar</a></h4>
<div class="p1">
<br /></div>
<div class="p1">
This was an unscheduled intermediate talk by Ori about his art project he put on display in the lobby. The background is the evolution of the Hebrew alphabet from the ancient to the modern version. To illustrate this he prepared a set of petri dishes and in each he put a culture of a bacteria in the form of a letter from the ancient alphabet. Then he added nutrition for the bacteria in the form of the modern version of the letter. That way the bacteria grew from the ancient into the modern form.</div>
<div class="p1">
<br /></div>
<div class="p1">
When he was happy with the result he killed the bacteria and thus conserved the spread of the bacteria for exhibition.</div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h4>
The Reinvention of normal by <a href="https://twitter.com/dominicwilcox" target="_blank">Dominic Wilcox</a></h4>
<div class="p2">
<span class="s1"></span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Okay, I must admit it: I was NOWHERE ready for what hit me there. Dominic Wilcox is definitly an unbelieveable creative mind. He has done tons of drawings and sketches about inventions or simply weird ideas. Some of them remind me of style of Monty Python in terms of weirdness and lunacy, which is a big compliment in my book.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
No description can do justice to what this man does, so best check out this <a href="https://www.youtube.com/watch?v=eCfT54A92tQ" target="_blank">short movie about him</a>. Here are just a few of the things I remember:</div>
<div class="p1">
<br /></div>
<div class="p1">
</div>
<ul>
<li>his office is a tree</li>
<li>reverse bungee</li>
<li>head mounted cereal crane</li>
<li>reverse hearing</li>
<li>tummy rumbling amplifier</li>
</ul>
<div>
But he is not only inventing funny stuff himself, more importantly he is running projects to encourage children to creative and innovative thinking. Make them explore their minds and show them that it is okay to have strange ideas and not being afraid to speak them. This is something I consider very valuable and hope he reaches as many children as possible with it.</div>
<div>
<br /></div>
<div>
This extremely funny talk was a perfect closer for day one and made me look forward to... </div>
<br />
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<br /></div>
<h3>
<span class="s1">Day 2</span></h3>
<div class="p1">
<span class="s1"><br /></span></div>
<h4>
<span class="s1"><a href="https://vimeo.com/166140718" target="_blank">Resiliance</a> by <a href="https://twitter.com/adactio" target="_blank">Jeremy Keith</a></span></h4>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">As Jeremy put this so eloquently, this was the hang over slot. But boy where we in for a treat. First he started with the good old "History of the Internet" starting with ealry ARPA-Net and the origin of the World Wide Web at CERN by Tim Berners-Lee. </span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Even though this is old news, Jeremy told it in an highly entertaining way. What was new though was his way to look at the basic principles that compse the internet as we know it today, HTTP, URI and HTML. Simple principles that let us compose a net of documents and information that can be extended easily and seemlessly. Anyone can put out a new website without needing permissions or being added to some central repository. And why is that? Because all core technologies are designed from ground up to allow this. They seem simple and sometimes even crude, but they are just very elegant.</span></div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
More on the topic of resiliance Jeremy took a look on the three basic components that we use to build websites, HTML, CSS and JS. And although it is something we all know, it was still enlightening to hear him pointing it out that HTML and CSS also are from ground up resilient technologies.</div>
<div class="p1">
<br /></div>
<div class="p1">
You can still open websites from the very first day in any browser, likewise old browsers still can display websites with new HTML. This is due to the fact that with HTML the browser just ignores tags it does not know, it simply ignores them but still displays the content within that tag. That way it is virtually impossible to break a webpage by HTML. Same goes for CSS, what ever the browser does not recognize just is ignored but it still goes on parsing the remaining HTML and CSS to show as much as possible to the reader while not showing an errors to the reader.</div>
<div class="p1">
<br /></div>
<div class="p1">
JS on the other hand is very non-resilient, If you put something in your JS that the browser cannot handle, execution will break. The rest of the JS will not be parsed or executed and there will be errors, at least in the browser's developer console. This is due to the fact that JS is an imperative language as opposed to HTML and CSS which are declarative languages.</div>
<div class="p1">
<br /></div>
<div class="p1">
So it would be good to use HTML and CSS as much as possible and as less JS as possible, right? So, why don't we do it? Sometimes it is because we do not know better, but more often than not, it is because we want to build functionality that can only be implemented with JS. But history shows, if a feature becomes popular and important enough, people start to put this functionality into the browser's HTML parser. And then we can use HTML for this feature, making the site more resilient again. </div>
<div class="p1">
<br /></div>
<div class="p1">
The last thing I took from this talk is the advice to build your website in a way that as many people as possible can enjoy it. Meaning you build the page with the most basic of feature sets so that old browsers can still make use of it. Then you add additional convenience features leveraging newer technologies. That way up to date browsers can provide the best of all possible experiences for their users, while older browsers can still provide access to the data.</div>
<div class="p1">
<br /></div>
<div class="p1">
I am sure this is not always perfectly feasible but it is definitly something to keep in mind when building a page.</div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/166144917" target="_blank">Designing meaningful Animation</a> by <a href="https://twitter.com/vlh" target="_blank">Val Head</a></h4>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<span class="s1">Usually when I hear people talk about animations I get the creeps, because I have seen to many pages loaded with bollox animations all over. This is something Val is also aware of and her mission is to sharpen peoples awareness about how to use animations in way that make a webpage work more seemlessly and more consistently.</span></div>
<div class="p1">
<br /></div>
<div class="p1">
In order to show us what that means she put on a little live coding session. During that she showed how to use the cubic bezier curve to get nice and smooth movements as the default animation properties in CSS are somewhat limited.</div>
<div class="p1">
<br /></div>
<div class="p1">
Unfortunately that is another talk that does not make sense to depict here, so you just better watch the video. I think it is really worth it. My colleague <a href="https://twitter.com/neupixel" target="_blank">Thomas Berendt</a> got hooked up immediately and spend the rest of the day hacking together animations at code pen during the rest of the conference while listening to other talks. So Val really hit it off there :-)</div>
<div class="p1">
<span class="s1"><br /></span></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/166145048" target="_blank">Your Hero Images need you! Save the Day with HTTP2 Image loading</a> by <a href="https://twitter.com/tbaldauf" target="_blank">Tobias Baldauf</a></h4>
<div class="p1">
<br /></div>
<div class="p1">
Now how can I put this? IT... WAS... AWESOME!! I do not mean to offend anyone, but this is exactly the kind of talk I would like to have way more of. Filled with reliable research data, back up information on all statements and everything explained in detail. And on top, some hands on examples. It just swooped me away!</div>
<div class="p1">
<br /></div>
<div class="p1">
Oh yeah, back to the actual topic. Tobias did explain what can be done to speed up image loading on your web site. Now you will say: Ahh.. I know about that stuff already. But behold, there is something new to this that is not widely known yet.</div>
<div class="p1">
<br /></div>
<div class="p1">
But first we gonna recap the known stuff. Step 1 - Switch to HTTP2. With HTTP2 resources from the webserver are streamed allowing browsers to use more efficient ways of displaying data quicker. Also the clients can load resources in parallel instead of sequential as in HTTP1.x. That way pages load much much quicker .</div>
<div class="p1">
<br /></div>
<div class="p1">
Step 2 - Use optimal compression. Here Tobias suggests to use mozjpeg, which is, according to him, currently the best and most efficient jpeg encoder on the planet. That way you can drastically reduce the amount of data being sent over the wire.</div>
<div class="p1">
<br /></div>
<div class="p1">
Step 3 - Use progressive jpeg images. With progressive images the browser can display images to the user even though they are not fully loaded yet. Non-progressive images are encoded sequentially, so the browsers loads and displays them line by line, which we all know from slow connections. With progressive encoding it is basically like the browser is sending a small amounts of every 64bit package jpeg is encoded in. With every frame that gets transmitted the image gets clearer and sharper but is pretty much already completely comprehensible with 15% of the data transmitted.</div>
<div class="p1">
<br /></div>
<div class="p1">
Now this is, what you probably have already known. What is very likely knew is (Step 4) that you can toy around with the frame settings. By using e.g. less frames and transmitting a bit more data in the first frames, the user has an almost completely usable webpage much much quicker. The rest of the image data is still loaded and sharpens the images more until full detail.</div>
<div class="p1">
<br /></div>
<div class="p1">
All of this is very valuable information in our times when it is very important to provide readers with workable webpages as quick as possible.</div>
<div class="p1">
<br /></div>
<div class="p1">
For me, this talk was the highlight of the conference. Just great!</div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h4>
<a href="https://vimeo.com/166161405" target="_blank">Cracking the Code</a> by <a href="https://twitter.com/djrrb" target="_blank">David Jonathan Ross</a></h4>
<div>
<br /></div>
<div>
Despite the title, this was another typography talk ;-) But it was indeed different than usual, because this time it was about fonts for us developers. So fonts that you can use in your IDE and editors to make your code as readable as possible. </div>
<div>
<br /></div>
<div>
David gave a detailed overview over a lot of coding fonts from the early days like Win95 until now and what he learned from them.</div>
<div>
<br /></div>
<div>
All this led him to the development of his own coding font, called Input. A free font with 7 different weights and 4 different widths. From there on, it was more a bit of advertising his font but I did not mind as he was making good points on how he got around to making the design choices for Input.</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="p2">
<span class="s1"></span></div>
<h4>
<a href="https://vimeo.com/166161489" target="_blank">Bye, bye Screen</a> by <a href="https://twitter.com/krajewski" target="_blank">Andrea Krajewski</a></h4>
<div class="p1">
<br /></div>
<div class="p1">
This talk was concerned with what we call the Internet of Things. Humans are transfixed on things, because our mind kind of needs things to comprehend the world. That's way we also picture abstract concepts like e.g. time as an object, a thing.</div>
<div class="p1">
<br /></div>
<div class="p1">
Andrea introduced several projects from her students that try to combine sensual impressions with technology. One of this projects is called Juno and it consists of two roundish objects that are meant to transmit vital signs and moods over the internet to make long distance relations more bearable. When ever someone touches his Juno it reacts to body temprature, pulse etc. and then the counter part emits light and maybe sounds to transport all of this information to the partner on the other side. At least that's what I understood.</div>
<div class="p1">
<br /></div>
<div class="p1">
Another project called Miro is meant to determine how you feel and what you need and then make suggestions on how to keep or imporve your health. This would be something like telling you to get running or eat/drink something e.g.</div>
<div class="p1">
<br /></div>
<div class="p1">
Unfortunately there is not much more that I took from this talk, not sure if I missed a key point. If so, please let me know.</div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h4>
How to get the Public to fund your daft Ideas by <a href="https://twitter.com/mr_bingo" target="_blank">Mr. Bingo</a></h4>
<div class="p1">
<br /></div>
<div class="p1">
Ufff, the final talk. As it turns out, this would be a similar finisher as the day before. Extremly funny and entertaining. Mr. Bingo is also a very creative mind, as he likes to draw funny and also often very offending sketches and images, which he became quite famous for.</div>
<div class="p1">
<br /></div>
<div class="p1">
At one point he offered on twitter to send an abusive hate mail post card to anyone who responds to his post. And there were like 50 replies within a few minutes. In fact the resonance was so big he could not handle it all and so had to shut down after a short time. He is still opening his services from time to time for a few minutes because then he has so many requests again that it takes him weeks or months to process them all.</div>
<div class="p1">
<br /></div>
<div class="p1">
Now this does sound pretty weird, why would you pay someone to insult you by post? Well, to understand that you have to see his artwork. Some of it was also exhibited in a museum. And once again the medium of text fails me to describe what we saw on his slides. So again, please just watch the video of the talk and you will see what I mean.</div>
<div class="p1">
<br /></div>
<div class="p1">
Ok, then we came to the topic, crowd funding. Mr. Bingo wanted to print a book of his drawings, but not just some book. He wanted it to be a top class book. With high quality paper, neat designs on the cover, just everything top notch. But the cost for such a book as simply to high for any publisher to take on the project.</div>
<div class="p1">
<br /></div>
<div class="p1">
And that's where Mr. Bingo wanted to give kickstarter a try. When he had a look at the promotial videos for other kickstarters he considered them a tad boring, all being basically the same. He wanted something different. So he set out to make bad ass rap video.</div>
<div class="p1">
<br /></div>
<div class="p1">
So the main part of the talk is about him describing how he went about to create this video, his mistakes in this and all he learned during the process. All that is too much to write down and I could not give enough credit to the humor in it. So I have once again tell you to just watch the video. Believe me, it is worth it!!!</div>
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
<h3>
Rounding it up</h3>
<div>
<br /></div>
<div>
After that last talk, we set off to the airport to catch our flight home. But we spend all the time talking about this really great conference and all the laughs we had. And all thanks to <a href="https://twitter.com/marcthiele" target="_blank">Marc Thiele</a>.</div>
<div>
<br /></div>
<div>
As you might have noticed I linked the videos to the talks and to the speakers twitter profiles in the respective subheadlines. Unfortunately at the time of wrting this, the videos of Dominic Wilcox and Mr. Bingo are not available. I really hope they will be put online as those are the two talks that would benefit most from it.</div>
<div>
<br /></div>
<div>
And finally a little disclaimer. All what I wrote above is simply my personal opinion and impression. Should I have forrgotten or misunderstood anything important, please let me know and I will gladly correct it. Otherise I hope you enjoyed reading about my experience and to everyone who made it through this rather lengthy post - Thank you!</div>
<div>
<br /></div>
<div class="p1">
<br /></div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com1tag:blogger.com,1999:blog-2445794899032855680.post-71308640528261556362015-10-26T01:59:00.000+01:002016-05-13T23:24:22.893+02:00A Backend Dev's Travel to Frontend Land a.k.a. Me @ Smashing Conference 2015 in BarcelonaNow this must seem pretty weird, what is a backend developer fossil doing at the conference of one of the most reknown frontend technology magazines?<br />
<br />
The answer is simple, seeing what those pixel pushers are actually doing ;-) Or on a more serious note, trying to broaden my technological horizon, whereas I did not expect to understand very much. But you got to give it a try :-)<br />
<br />
So first off, the choice of Barcelona to hold the conference was awesome. A very lovely city, great food, nice weather even in October and open and friendly people. On top, the conference venue was the Palau de la Música Catalana, an old and very impressive concert hall in the<br />
heart of Barcelona.<br />
<br />
<table style="margin: auto;"><tbody>
<tr> <td rowspan="3"><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-Z3c0QqT5k_U/VizTq_GzQlI/AAAAAAAABbA/mj7ATwV2Av0/s1600/20151020_145602_HDR.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://2.bp.blogspot.com/-Z3c0QqT5k_U/VizTq_GzQlI/AAAAAAAABbA/mj7ATwV2Av0/s400/20151020_145602_HDR.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Palau's east corner.</td></tr>
</tbody></table>
</td> <td><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-1uaKYhizSME/VizTByleaPI/AAAAAAAABaU/_-HY8NpMr_o/s1600/20151020_083855.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://2.bp.blogspot.com/-1uaKYhizSME/VizTByleaPI/AAAAAAAABaU/_-HY8NpMr_o/s200/20151020_083855.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The small café, later used for refreshments.</td></tr>
</tbody></table>
</td></tr>
<tr><td><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-eN7-x67zyfg/VizS9--3vMI/AAAAAAAABaM/fIc714vjEFU/s1600/20151020_083857.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://2.bp.blogspot.com/-eN7-x67zyfg/VizS9--3vMI/AAAAAAAABaM/fIc714vjEFU/s200/20151020_083857.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Stair case to the conference hall.</td></tr>
</tbody></table>
</td></tr>
<tr><td><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-eN7-x67zyfg/VizS9--3vMI/AAAAAAAABaM/fIc714vjEFU/s1600/20151020_083857.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://1.bp.blogspot.com/-4zXmoQ77MGM/VizT0hcvIqI/AAAAAAAABbM/DawOU_v8YMM/s320/20151020_170336.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Inside view of the conference hall.</td></tr>
</tbody></table>
</td></tr>
</tbody></table>
<div>
Ok, let's talk business: </div>
<div>
<br /></div>
<h3>
Day 1</h3>
<div>
<br /></div>
<h4>
Chris Coyier - The Wonderful World of SVG</h4>
<div>
<br /></div>
<div>
Well, SVG is nothing new as Chris points this out himself, but still it is underused in most web applications, which is a shame. Chris shows the beauty and simplicity of SVG, how to use it and also what you can do when you have more complex needs (e.g. using defs and use directives to allow reusability). It was a very enthusiastic talk, entertaining and informative. One of my colleagues fired up an SVG editor and didn't stop playing around with it for the rest of the conference ;-) So this was definitely a great start and got me excited regarding the upcoming talks.<br />
<br /></div>
<h4>
</h4>
<h4>
Jina Bolton - Living Design Systems</h4>
<div>
<br /></div>
<div>
Who doesn't know this kind of problem? There are style guides as PDF or maybe even DOC stored on some network drive, most often in different versions without proper time stamping or even worse just some print outs on a wall in some designers office. Noone really knows what version is the current one, none tells you when it changes etc. The result is an inconsistent user expirience despite an usually high maintenance effort. Jina showed us how they tried to tackle those difficulties at sales force.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
In summary they used a technial approach to maintain the style guide, a json format which is then processed by a self built tool that translates it into different technologies like sass, less or even android layout information. A key to that was active and intense communication with all involved parties and to have the designers to actually work in the browser and not just using photoshop to define the style guide.<br />
<br />
Talk and topic where both very interessting but adopting this approach for a regular company will probably prove rather difficult. Especially getting the designers to forsake their precious photoshop might be almost impossible in many cases, as it would require the designers to actually learn html and css. Nevertheless I hope this methodology finds it's way into more companies.<br />
<br />
<h4>
</h4>
<h4>
Patrick Hamann - Embracing the network</h4>
<div>
<br /></div>
Uhh yeah.. Network!! Finally something I can really relate to ;-) This was a very enlighting and amusing talk about how network failure can impact browser applications and not only with the all to common absence of data or some "request failed" message. loading of ads, tracking scripts or even fonts can result in a broken or even unavailable page should the requests for those resources fail.<br />
<br />
Patrick gave a good overview of how to avoid having your site broken by some external dependency, e.g. always use proper timeouts, make sure you really need what you are loading, use asychronous loading etc. But also what you should do proactivly, disable Javascript and then see hwo your site loads/performs without, what works what doesn't, use SPOF test which are available on pages like <a href="http://webpagetest.org/">webpagetest.org</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Very good talk, very cool topic. Enuff said!!<br />
<br />
<h4>
</h4>
<h4>
Seb Lester - Peace, Hellfire & Outer Space</h4>
<div>
<br /></div>
<div>
Woah, what a title.. But who is this Seb Lester? I had absolutely no clue what to expect here and I was very surprised when I was presented with wide range of drawigns,paintings and mostg of all calligraphy of all sorts. I got to hand it to Seb, he is one heck of a talent there and once in a while he even threw in the occasional joke. But in essence this was just a listing of his different successes in artwork for an impressive list of clients /(the coolest IMO the NASA for their SWOT project). I still fail to see what this has to do with web development or even web design, as there was nothing you could take away from this talk. Apart from that to become leading in your area of expertice you do not only need talent but also dedication and maybe to some degree obsession for what you do.</div>
<div>
<br /></div>
<div>
The talk itself was also more like walking through a check list. First he showed the agenda "First I will tell you..., then I will show you..., then I will tell you..." and then stoically going through that list. Most of the time he seemed rather anoyed with "having" to give this talk and he was the first who seemed upset/impatiant during the following Q&A session with Vitaly.</div>
<div>
<br /></div>
<div>
I am sorry but this was the low light of the conference and this talk seemed totally out of place to me.<br />
<br /></div>
<h4>
</h4>
<h4>
Joe Leech - How to design with science without loosing the magic</h4>
<div>
<br /></div>
<div>
What works and what doesn't? What do you have to consider when you want to convince your audience? Simple and obvious questions with tricky and complicated answers. Joe shared his experiences from a lot of different projects with us, The essence was, if you want to make the sell, make your images big and shiny and do not put too much magic into the user interface or the client will be confused, As an example for the last point he referred to a case where a project used the users credit card number to automatically display the card brand (VISA, AmEx, etc.). This can be deducted from the first numbers of any card which means there is absolutly no magic involved, but many clients thought that this information was somehow obtained from their personal data which lead to a drop in sales.</div>
<div>
<br /></div>
<div>
I wonder why you could not put a short explanation next to the credit card brand, but there where probably reasons for it. Joe's conclusions, as much as I might not like them are surely valid and show the sad but undeniable truth about humans.. we are stupid ;-)<br />
<br /></div>
<h4>
</h4>
<h4>
Brendan Dawes - Paper, Plastic & Pixels</h4>
<div>
<br /></div>
<div>
Brendan gave us a thourough overview of his past work, many different ways of visualizing data and innovative approaches for physical user interacttion. Even though this was another simple listing of "what" was done, instead of showing techniques of "how" to do things, it was inspiring. Also in this case the "how" was always different, always a result of creative thinking out of the box. So that would be VERY hard to give instructions for ;-) I can only recommend to check out the presentation as it would be useless to describe the different visualization approaches, it is well worth the time.<br />
<br /></div>
<h3>
</h3>
<h3>
</h3>
<h3>
Day 2</h3>
<div>
<br /></div>
<h4>
</h4>
<h4>
The Mystery Speaker... Bruce Lawson</h4>
<div>
<br /></div>
<div>
This year's Mystery Speaker is one of the people behind the Opera browser and his enthusastic talk covered a lot of ground. Starting with web components vs installable webapps, passing over the difficulties when trying to define a web standard to the process of how to get a new feature into the html standard. As an example for the latter he gave how responsive images found their way into the browser. This was an interesting insight how browser development works and how browser developer think.<br />
<br /></div>
<h4>
</h4>
<h4>
Anna Debenham - Game Console Browser</h4>
<div>
<br /></div>
<div>
Anna basically gave an overview over what browsers are available on what console, what those browsers can do and more importantly what they can't. Also she showed us what challenges web page design for those varying displays hold for us and, at least for my part, managed to raise some awareness for it.</div>
<div>
<br /></div>
<div>
I must admit that the practical relevance of this is still kinda minimal, but I am also sure that in the next 5 - 10 years this will become rather important and so we should take up on this opportunity to make up our mind about it.</div>
<div>
<br /></div>
<h4>
Zoe M. Gillenwater - Enhancing responsivness with Flexbox</h4>
<div>
<br /></div>
<div>
Well, this was just Flexbox in depth! How you use, what it does, what is the difference to other layouts, what are the benefits, how you make sure a fallback is used, etc. </div>
<div>
<br /></div>
<div>
Everything came with working code examples, plain and simply hands on stuff. And I LOVED it!! Mainly because it was nice to see actual code for a change, as opposed to concepts and theories as before. On the other hand this means I cannot say any more about it, apart from: Look for the slides and checkout Flexbox if you haven't already!</div>
<div>
<br /></div>
<h4>
Espen Brunborg - Graphic Design in the 21st Century: Is the internet killing creativity?</h4>
<div>
<br /></div>
<div>
I must admit, after the first 5 minutes into this talk I thought "Oh my god, this will be an hour of useless whining - shoot me now!" But I was wring.. UTTERLY wrong, as it turned out to be one of the best talks of this conference.</div>
<div>
<br /></div>
<div>
Espen's point was twofold. For one he pointed out, that creativity in the web indeed seems to have gone into hiatus. Most web sites look the same, with similar layout, almost identical look and feel and basically looking like copy cats of each other. He made a very strong point to dare trying new, creative and maybe unconventional approaches. Designers should take pride in what they create and try to make something unique. </div>
<div>
<br /></div>
<div>
The second part of his talk was related but still something different. His point was that designers restrict themselves too much with so called "rules" of what must be done and what mustn't, examples for this are the dreaded parallax or the often shunned carousels. Espen's response was "I use those" and he showed the audience where and why he did use those elements. And he has a point, there are cases in which all of those things make sense and thus can or maybe even should be used. Cases in which they emphasize the message of the site or even improve the user expirience. His bottom line was, that you should not blindly follow every rule that is out there because if you do you can't do anything useful, instead think for yourself and decide what to use and what not. And if someone disagrees, well that can always happen. But if you are convinced that your's is best approach, stick to it!</div>
<div>
<br /></div>
<h4>
Zach Leatherman - A brief history of that time you used web fonts</h4>
<div>
<br /></div>
<div>
Here Zach told us a lot about what is good about web fonts and what is bad, or rather what many people do wrong when using web fonts. This had a lot of overlap with Patrick's talk from Day 1, but covered the fonts aspect way more indpeth. His main focus was the importance of font loading strategies and what can go wrong if you ignore this point, which can even lead to our web page being unable to render. He showed us how FOIT (flash of invisible text) and FOUT (flash of unstyled text) can occur and how you can deal with that. Was very interesting and you should definitely checkout the slides.</div>
<div>
<br /></div>
<h4>
Andrew Tider & Jeff Greenspan - We'll teach you everything we don't know</h4>
<div>
<br /></div>
<div>
Well, what can I say about those two? They are crazy and did crazy stuff during their carrers ;-) Starting with plush toys of sexual techniques over a sound prrof booth where you can shout at George Bush to a statue for Edward Snowden in Central Park. </div>
<div>
<br /></div>
<div>
They spoke about how they started their projects without having a clue how they will turn out or most of the time not even knowing where to start. The essence was that you have to believe in yourself and your idea and that you have to dare to go down an unconventional path, maybe even walk the line of legality. Think out of the box and don't wait for miracles to happen, make them happen!!</div>
<div>
<br /></div>
<div>
<br /></div>
<h4>
Andrew Clarke - Counting Stars: Creativity over Predictability</h4>
<div>
<br /></div>
<div>
So, the very last talk of the conference. I was curious what gem the organizers had saved for us. Weeeelll.... I would say the summary of this talk would be like the first 10 minutes of what Espen spoke of earlier. Creativity in web design runs low and designers should create new and original pages again. Something they can be proud of instead of just copying what others have already done.</div>
<div>
<br /></div>
<div>
Yet Andrew managed to drag this point on and on for 50 minutes boring the hell out of the audience. And just have to point out the irony of holding a talk where you complain that people just copy instead of create and then have about 50? slides each one having just a quote of someone else. There was actually exactly one slide that did not have such a copied quote and that one had a quote of himself. Sorry but quoting yourself in a talk is pretty lame. </div>
<div>
<br /></div>
<div>
So this one was a huge let down and it seems Andrew noticed the audience's disapproval because he was extremly rude during Q&A.</div>
<div>
<br /></div>
<div>
<br /></div>
<h4>
Summary</h4>
<div>
<br /></div>
<div>
I did really enjoy my first Smashing Conf, the overall level of talks was good with the occasional crap in between that you just cannot avoid. Nice location, some goodies and tasty catering.</div>
<div>
<br /></div>
<div>
It was a bit of a pity that there was no lunch served at the venue, so every group wandered off on their own but understandable that you cannot do that in such a location. It was also a bit unusual for me that there was only one track, on the one hand you don't miss anything but on the other hand you have no choice what to hear. Not sure if that was good or bad tbh ;-)</div>
<div>
<br /></div>
<div>
I think I could have done without the Q&A which often resulted in a chitchat between Vitaly and the speaker but I heard from others that they liked it. So I guess everyone has to see that for himself. </div>
<div>
<br /></div>
<div>
I would also like to point out that the party on the first evening was held in a nice venue, the Estrella brewery with great catering. I think it might have been a bit better if there had been bistro tables to allow people to mix up easier and maybe not only have beer and water for drinks, but hey nothing is perfect ;-)</div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-43850322754052252992013-12-22T23:50:00.000+01:002014-09-03T19:42:07.473+02:00Dark Elf Painting FinishedSo I finally managed to get my Dark Elf team painted and I must say I am kinda happy with the results. Of course any pro painter would just laugh at it but hey, it's still the best I managed so far ;-)<br />
<br />
The color theme is Naggaroth Night, Xereus Purple, Hoeth Blue and Shining Gold. So rather traditional for this kind of team. As always painting the eyes has been the most pain for me and only for the Witch Elves it turned out okayish, so I still have a lot to practice in this area. Also I could not be arsed to bother much with high lights and shading but I will tackle this with the next teams.<br />
<br />
This has also been my first project where I used electrostatic grass and I think it looks pretty neat. First the bases have been flocked with brown acre and then another layer of glue and grass finished it off. That way in some places you can see the sandy ground and hopefully this does not mean I have to replace all the portions of grass the minis will loose over time.<br />
<br />
Finally I added two layers of spray varnish, first glossy then mat to preserve the color as good as possible.<br />
<br />
And yes, I really need to get a better camera for future pics ;-)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-0QAEv2qvcGk/UrdkcCXiHBI/AAAAAAAAAQg/qHtY57uBoTw/s1600/Foto+3.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://1.bp.blogspot.com/-0QAEv2qvcGk/UrdkcCXiHBI/AAAAAAAAAQg/qHtY57uBoTw/s320/Foto+3.JPG" height="320" width="239" /></a><a href="http://4.bp.blogspot.com/-yqzI5wnP3H0/UrdkeJclrdI/AAAAAAAAARQ/kMMfc6XNNow/s1600/Foto+9.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-yqzI5wnP3H0/UrdkeJclrdI/AAAAAAAAARQ/kMMfc6XNNow/s320/Foto+9.JPG" height="320" width="239" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-g3UXguylmKs/UrdkZPVnbjI/AAAAAAAAAPc/4XdsLGW5cQk/s1600/Foto+11.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://1.bp.blogspot.com/-g3UXguylmKs/UrdkZPVnbjI/AAAAAAAAAPc/4XdsLGW5cQk/s320/Foto+11.JPG" height="320" width="239" /></a><a href="http://3.bp.blogspot.com/-2eeuZ9WCE6c/UrdkZ8EgJNI/AAAAAAAAAPo/b1HdawsieCA/s1600/Foto+13.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-2eeuZ9WCE6c/UrdkZ8EgJNI/AAAAAAAAAPo/b1HdawsieCA/s320/Foto+13.JPG" height="320" width="239" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-yaCkdoLa_R8/UrdkY0TRT5I/AAAAAAAAAPU/XEl1M9U5gAQ/s1600/Foto+10.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-yaCkdoLa_R8/UrdkY0TRT5I/AAAAAAAAAPU/XEl1M9U5gAQ/s320/Foto+10.JPG" height="320" width="239" /></a><a href="http://3.bp.blogspot.com/-wl0GSrqHwd8/Urdkc_X2MEI/AAAAAAAAAQ8/9OBocEawDI0/s1600/Foto+5.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-wl0GSrqHwd8/Urdkc_X2MEI/AAAAAAAAAQ8/9OBocEawDI0/s320/Foto+5.JPG" height="320" width="239" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-DSRQCVBRCQo/UrdkccxYiWI/AAAAAAAAAQs/JRHCnAWMHiA/s1600/Foto+4.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-DSRQCVBRCQo/UrdkccxYiWI/AAAAAAAAAQs/JRHCnAWMHiA/s320/Foto+4.JPG" height="320" width="239" /></a><a href="http://4.bp.blogspot.com/-AnmQoeP4gRw/UrdkZcFgSNI/AAAAAAAAAPg/Sje21QwyYLY/s1600/Foto+12.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://4.bp.blogspot.com/-AnmQoeP4gRw/UrdkZcFgSNI/AAAAAAAAAPg/Sje21QwyYLY/s320/Foto+12.JPG" height="320" width="239" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-_73L_2STB3c/UrdkYjMykaI/AAAAAAAAAPQ/zT3D_uafwMc/s1600/Foto+1.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-_73L_2STB3c/UrdkYjMykaI/AAAAAAAAAPQ/zT3D_uafwMc/s1600/Foto+1.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://2.bp.blogspot.com/-_73L_2STB3c/UrdkYjMykaI/AAAAAAAAAPQ/zT3D_uafwMc/s320/Foto+1.JPG" height="320" width="239" /></a></div>
<a href="http://2.bp.blogspot.com/-tluxUYxwBPs/Urdkbx0aOII/AAAAAAAAAQc/ICjHXNCLxA0/s1600/Foto+2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-tluxUYxwBPs/Urdkbx0aOII/AAAAAAAAAQc/ICjHXNCLxA0/s320/Foto+2.JPG" height="320" width="239" /></a><br />
<br />
<br />
<br />
<a href="http://2.bp.blogspot.com/-oIxhMAP0Qg0/UrdkdnJEOOI/AAAAAAAAARI/NjCFGIrMGyg/s1600/Foto+8.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="http://3.bp.blogspot.com/-rja0f7sIucQ/UrdkbKM6VEI/AAAAAAAAAQM/ze064K-sTEM/s1600/Foto+17.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-rja0f7sIucQ/UrdkbKM6VEI/AAAAAAAAAQM/ze064K-sTEM/s320/Foto+17.JPG" height="320" width="239" /></a><img border="0" src="http://2.bp.blogspot.com/-oIxhMAP0Qg0/UrdkdnJEOOI/AAAAAAAAARI/NjCFGIrMGyg/s320/Foto+8.JPG" height="320" width="239" /><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-yJUv5CqpKxM/UrdkalFqF-I/AAAAAAAAAQA/eW7UAWPZwZQ/s1600/Foto+16.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://4.bp.blogspot.com/-yJUv5CqpKxM/UrdkalFqF-I/AAAAAAAAAQA/eW7UAWPZwZQ/s320/Foto+16.JPG" height="320" width="239" /></a></div>
<a href="http://4.bp.blogspot.com/-OPxdR4WViwk/Urdkboz7cwI/AAAAAAAAAQU/xh9DPnSwrnI/s1600/Foto+18.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-OPxdR4WViwk/Urdkboz7cwI/AAAAAAAAAQU/xh9DPnSwrnI/s320/Foto+18.JPG" height="320" width="239" /></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ABzTCR-yrsg/UrdkdVWW2KI/AAAAAAAAARE/jDzAZAGm_J4/s1600/Foto+7.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://2.bp.blogspot.com/-ABzTCR-yrsg/UrdkdVWW2KI/AAAAAAAAARE/jDzAZAGm_J4/s320/Foto+7.JPG" height="320" width="239" /></a></div>
<a href="http://4.bp.blogspot.com/-DFnXroKdn6s/UrdkdMixT9I/AAAAAAAAAQ0/_VHuJXm2KXw/s1600/Foto+6.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-DFnXroKdn6s/UrdkdMixT9I/AAAAAAAAAQ0/_VHuJXm2KXw/s320/Foto+6.JPG" height="320" width="239" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-bAFox2urgjc/UrdkaWOhFhI/AAAAAAAAAP8/xkTWhio2suU/s1600/Foto+14.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/-bAFox2urgjc/UrdkaWOhFhI/AAAAAAAAAP8/xkTWhio2suU/s320/Foto+14.JPG" height="320" width="239" /></a><a href="http://3.bp.blogspot.com/-5Zj4aBYV1r4/UrdkaYtQwzI/AAAAAAAAAP4/CU-KRQ5kmlM/s1600/Foto+15.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-5Zj4aBYV1r4/UrdkaYtQwzI/AAAAAAAAAP4/CU-KRQ5kmlM/s320/Foto+15.JPG" height="320" width="239" /></a></div>
<br />
<br />
<br />
<br />
<br />SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-60675105706987207202013-09-30T21:55:00.000+02:002013-09-30T21:55:42.711+02:00Iterating in Scala Play templates and Reverse RoutingToday I finally solved a puzzle that bugged me for the last few days and even though it is in some kind a case of RTFM I decided to put it here because someone else might encounter the same problem<br />
<br />
Play has pretty powerful <a href="http://www.playframework.com/documentation/2.2.x/ScalaTemplates" target="_blank">templating engine</a> that allows you to do lots of different stuff when generating html. Two of those features are iterating over lists and genrating URLs by <a href="http://www.playframework.com/documentation/2.0/ScalaRouting" target="_blank">reverse routing</a>.<br />
<br />
My problem was that in my template I was not able to get a URL out of the reverse routing and at first I thought there was a mistake in the routes configuration or in the template syntax and searching the web and documentation for it drove me almost mad.<br />
<br />
The solution was something completely different though. In a template you can basically inject any Scala code fragment which also includes flow and control structures. The documentation about <a href="http://www.playframework.com/documentation/2.2.x/ScalaTemplates" target="_blank">ScalaTemplating </a>states that you can use a for loop to iterate over list items but the framework also allows you to use the map function of a list to process it's items. The code compiles, the page gets rendered without warnings or errors and everything looks fine at first. But if you want to insert a link generated by reverse routing for each item you are screwed with this approach. For some reason the reverse route does not get generated in this case.<br />
<br />
@items.map(item -> {<br />
<a href="@routes.Application.index"></a> <-- Creates <a href="@routes.Application.index"></a><br />
})<br />
<br />
@for(item <-items) {<br />
<a href="@routes.Application.index"></a> <-- Creates <a href="/"></a><br />
}<br />
<br />
So to sum it up: Always use "@for" to iterate in Play templates to avoid stuff like this. Though I don't really get why it has to be that way... SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-59144636942493438142013-06-12T23:42:00.000+02:002013-06-12T23:45:06.466+02:00Constant Tarfiles For Resumable Downloads <h4>
Our Situation</h4>
<h4>
</h4>
We have an Java based backend server providing daily changing content to mobile applications as a gzipped tar archive. The content can change over the course of the day and some applications need to download the complete content in the new version, while others need to get the diff between some versions. In addition old content from previous days has also to be available in all those variations. That means it is not really feasible to have all possible different tar files pregenerated and stored in our backend (yes Hadoop and friends stand ready to help but at the moment this is not an option for us for several reasons).<br />
<br />
So what we do is, store the different versions of our content, calculate the needed tar files, deliver them to the requesting app and put the file into a caching server to reduce load but of course we cannot cache everything permanently so the entries timeout from time to time.<br />
<h4>
</h4>
<h4>
Our Problem</h4>
<h4>
</h4>
Some applications reported downloading issues that we at first blamed on general mobile network issues but after a while it became evident that there was more to it. After some debugging on application side it seemed that in some cases the app was not able to resume an interrupted download due to the checksum of the file having changed.<br />
<h4>
</h4>
<h4>
The Underlying Cause</h4>
<h4>
</h4>
This issue was quite a surprise for us as we were sure that for every kind of request the corresponding file was created from exactly the same content every time. But by bypassing our cache the effect could be reproduced immediately by downloading the same file twice from our server. The mighty diff tool told me that the two archives differ even though their extracted contents did not (phew...). <br />
<br />
My first suspect was gzip and a quick Google search brought up some hints about the gzip timestamp header that is contained in the first 10 bytes of an archive.So I fired up my hex editor to check the starting sequences of the two files only to be disappointed because they were exactly the same. Having a look at the libraries source code of GZipOutputStream (we use the Apache compressor lib) revealed that this implementation sets a fixed timestamp for all gzip archives (all fields are set to 0 whch I think is the right thing to do). <br />
<br />
Looking at the differences of the archives in my hex editor and matching those against the tar rfc docs it became clear that the culprit was the mtime header for tar entries. In our code we construct the tar entries using the filepath and then add bytes from a stream to it. The invoked constructor sets the entry's mtime to the current time so it is different every time the archive is created. Eureka!!<br />
<h4>
</h4>
<h4>
The Solution</h4>
<h4>
</h4>
Now that was rather easy to fix, we now calculate a timestamp value based on the date the content was created at, with a few tweaks, that is constant for each single file and set that as mtime for each tar entry we create, et voilà :-)<br />
<h4>
</h4>
<h4>
Sometimes They Come Back</h4>
<h4>
</h4>
A few weeks later we got reports about some strange download issues again, this time with only with certain content packages and it was absolutely not obvious where those came from. We had a lot of red herrings to hunt and during one of those hunts I noticed that files that should be identical in some cases simply weren't. Again diff and hex editor came to the rescue and I found that for some entries the mtime headers again did not match!!! So we got down on the code again... Did I forget to handle any tar entries? Nope, everything was covered... Any issues with entries being added twice or changed in other methods? Nope.. nothing.. In addition after extracting the tar all files had the desired timestamp, no sign of the other timestamps at all.. Oh how I swore...<br />
<br />
So back to checking the archive contents.. then the tar docs.. and again the archive contents.. finally I found a clue, a classic tar entry has only 100 bytes reserved for it's name field which contains not only the file name but also the complete path to the file within a directory hierarchy and the offending files lay within a rather deep directory hierarchy and had pretty long names itself. To change my suspicion to certainty I added a copy of a file with the correct timestamp to the content and altered it's name to exceed the 100 byte limit. In the resulting tar the copy again had the invalid timestamp and just then I noticed something else, for the copy's name there were two header entry's while the original file only had one.<br />
<br />
So I did more research about long file names and header fields and dug into the code of the TarOutputStream class. To handle long file names tar can use additional posix or gnu headers and in both cases the TarOutputStream creates additional tar entries using the same constructor as we did in our code. So if you have long file names in our archive it will contain additional tar entries that always have their creation date as mtime header value!! Oh man, that was mean..<br />
<h4>
</h4>
<h4>
The Solution - For Real This Time</h4>
<h4>
</h4>
The only way to fix this was to copy the code of TarOutputStream to our project (and TarBuffer as that class is a dependency of the former with default scope) and adjust it so we can set a custom timestamp for the additonal entries.Not my favorite way of fixing things but unfortunately we had no other choice here... So beware of tars with long file names if you need to rely on the checksum.. SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-68786464812399230552013-05-27T23:06:00.000+02:002013-05-27T23:21:13.145+02:00Siringit Tantor PaintingAfter a rather long time I finally got around to use my pretty limited painting skills once more, this time on an Elfball Siringit Tantor.<br />
<br />
Even though this is by way not as good as most other painters would do I still feel happy about getting it done. It took me only about two days which is almost lightning speed for me and it looks almost half as good as I had hoped ;-)<br />
<br />
<h3>
Front</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-j1IB2G9G3Hw/UaPN9xP3dzI/AAAAAAAAAOs/qSz3YPVmOAA/s1600/front.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-j1IB2G9G3Hw/UaPN9xP3dzI/AAAAAAAAAOs/qSz3YPVmOAA/s320/front.jpeg" width="239" /></a></div>
<br />
<h3>
Back</h3>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-zy-vnXWsREM/UaPNv4f19aI/AAAAAAAAAOM/zmovNDrxkak/s1600/back.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-zy-vnXWsREM/UaPNv4f19aI/AAAAAAAAAOM/zmovNDrxkak/s320/back.jpeg" width="239" /></a></div>
<h3>
Left Side</h3>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<a href="http://2.bp.blogspot.com/-SXONhArZkyI/UaPNyT76YwI/AAAAAAAAAOk/YhDmU3CcGjo/s1600/right.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-SXONhArZkyI/UaPNyT76YwI/AAAAAAAAAOk/YhDmU3CcGjo/s320/right.jpeg" width="239" /></a></div>
<h3>
Right Side</h3>
<div class="separator" style="clear: both; text-align: center;">
</div>
<h3 style="text-align: center;">
<a href="http://3.bp.blogspot.com/-n4qDABFfRso/UaPNxovWojI/AAAAAAAAAOY/-mEq2stEOjI/s1600/left.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-n4qDABFfRso/UaPNxovWojI/AAAAAAAAAOY/-mEq2stEOjI/s320/left.jpeg" width="239" /></a></h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-18916188410134423202013-04-03T00:04:00.000+02:002016-05-13T23:27:59.979+02:00Devoxx UK 2013<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>DE</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><br />
<div class="MsoNormal">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Normale Tabelle";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-fareast-language:EN-US;}
</style>
<![endif]--><span lang="EN-US" style="mso-ansi-language: EN-US;">This year
Devoxx came to the UK for the first time after having a record of rather
successful editions in Belgium. After failing to attend the Devoxx in Belgium
for a few times due to loaded work schedules at the end of the year I thought
why not try the UK edition in March, so this year was my first Devoxx as well.</span></div>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h3>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">General
stuff</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">I must
admit as it was the first UK Devoxx I was expecting a lot of issues and stuff going
wrong, as it usually happens when an event gets organized for the first time.
But to my pleasant surprise the whole event went very smooth and it was over all
a lovely experience so I will definitely try to be back for the next editions. It
was noticeable that the organizers put a lot of effort as well as sweat and
tears into everything and that they really cared about it. We had some sponsor
booths that handed out goodies, some raffles (I even won an infinispan book at
the red hat raffle ;-)), free wifi (yes, everyone takes that for granted
nowadays but still…) and an app to plan your talks, the latter was a bit buggy
though but that was fixed for next year, so it is also a plus for me.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">That said
there are also a few things I think could be improved or suggestions that came
to my mind and that I would like to share here. What bothered me somewhat was
for one, that one BOF almost did not happen as the responsible speaker just did
not show up. BUT cudos to Dan from the organization who took a few minutes of
his time to get the group started about what a BOF is about (mainly more a big
discussion among everyone who showed up rather than a regular talk) so we put
up a list of questions and issues and just went from there. The other thing
that pissed me off a bit was that the abstracts of the talks quite often did
not resemble what the speaker really spoke about in the end. Quite a few times
the topic form the abstract was done within 5 minutes and the rest of the time
was spent on stuff related to it and even though it was usually also interesting
it was not what one expected and it is annoying when you realize that 20
minutes into a 50 minutes slot. And yes, I am aware that this is a common
problem at conferences but hey, it can’t hurt to mention it ;-)</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Regarding
suggestions the following things came to my mind:</span></div>
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US;">Put
the wifi access data into the welcome package</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Try
to have more power supplies in the talk rooms for people that want to try out
coding examples on the fly because recharging in the breaks is usually not
sufficient</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;">The
website did not say too precisely what kind of refreshments would be available
for free and which ones would be sold (at least neither I nor my mates knew
about that) and free tab water would have been cool (or did we just miss that?)<span style="mso-list: Ignore;"></span></span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Maybe
don’t shut down the wifi as soon as the ending keynote is over ;-)</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">The
Quickies on the first day really cut into the lunch break and in order not to
gulp done your meal you had to skip one of them while on the second day there
were only half as many <span style="mso-spacerun: yes;"> </span>and in general
longer breaks. Would be cool if that could be evened out a bit in the future</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Lunch
was a broad variety of sandwiches, wraps and bagels so I think everyone found
something suitable but the fact you had to give away a lunch coin when picking
up your meal caused people to stack up their plates quite a bit and I am sure
that not all of it was eaten in the end.</span></li>
</ul>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">I know that
all of that is nothing crucial and as I said before it was a nice conference
and everyone should consider attending in the future. Oh right, move the date
to summer!!! ;-)</span></div>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h3>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Day 1</span></h3>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Keynote</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Not much to
say here, nice introduction of the team and the obligatory Queen joke that did
not catch on much. Then there was a humorous talk by Kevlin Henney about the
everyday life of programmers and developers with some funny analogies etc.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Continuous
Delivery – David Farley</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Good
introduction talk about CD and even though I am familiar with the topic it did
help to reiterate over the concepts and think about how they can be applied to
your current work. The things I remember most are:</span></div>
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Do
the difficult/annoying stuff as often as possible so you get better at it</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Use
the same deployment mechanism for each environment, something that we do only
partially right now</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Automate
as much as possible</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Everybody
is responsible to get the stuff done</span></li>
</ul>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Especially
the last point got me thinking what we can do at my work place. If you have
external client applications that depend on your backend and that run on
certain mobile devices you have to use those for your acceptance tests and this
cannot automate those at least for new features.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Banking, how
hard can it be? – John Davies</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Somehow I
was hoping for a bit more in this talk. Basically John pointed out how hard it
is to establish new technologies in a large bank or any other big company. The
sheer amount of Oracle databases that where in use at that particular bank was
quite overwhelming (several thousands) and the idea you have to migrate all of
them kinda blew my mind. All in all it sounded like an overly complex
environment and the migration project was surely a huge effort. Also interesting
was the fact that the FPML data structure in use in the banking sector could
not be simply thrown at regular ORM tools like hibernate because those would
generate 1700+ tables. He then did show some in memory dbs that they used
instead but I must admit that I don’t remember which ones because it just was not
very important to me.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Intro to
NoSQL for busy developers (Quickie) – Trisha Gee and Kim Ross</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Trisha and
Kim gave a brief overview over the different types of NoSQL databases:</span></div>
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Graph</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US;">Document</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">KVS</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Column
Family</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US;">Sorted
Maps</span></li>
</ul>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Also some
typical use cases for a few of those and how eventual consistency works. This talk
got me thinking if MongoDB was the best choice for our use case, maybe Riak or
some Column Family database would have been more suitable.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">But what I
want to point out the most is that rhetorical this was an extremely pleasant
talk, Trisha and Kim created a very comfortable atmosphere and it was just nice
to listen to them. That is not a given at tech talks ;-)</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Applications’s
development using JavaFX2 – Thierry Wasylczenko and Jim Weaver</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Now this
was one I put great hopes in, I knew Jim Weaver’s book on JavaFX from a few
years back and figured he would give some insights on the changes.<span style="mso-spacerun: yes;"> </span>Thierry’s part was okay information wise
apart from that he did not intend to give a demo of the visual editor even
though that was announced in the abstract. Jim then said he’d cut his part 5
minutes short so we can see that demo, nice gesture but should not have been
necessary in the first place. The downside of Thierry’s talk was that it was
really monotone and hard to understand. To me it seemed that he had not much
talking experience and I hope he does practice on that some more because I
guess he could become a good speaker with his technical knowledge. So Thierry,
if you read this, consider it an encouragement ;-) </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Then Jim
took over but not with much JavaFX stuff but instead he was talking about Java
8 features like Nashorn support, Websockets and web workers. All in respect to
how they can be help with JavaFX development but still it was not quite what I
was hoping for. But of course it was a good talk, so I am not unhappy with it.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Stop doing
retrospective and start your Toyota Kata – Mattias Karlsson and Hakan Forss</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">This one
was something different. Mattias and Hakan prepared a dialog where Mattias acted
as a scrum master and Hakan was Kata coach that gave Mattias an introduction
and they went through a typical Kata cycle together. Even though both were
clearly not actors and should not try to become ones it was very refreshing and
also entertaining. </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Kata is a
method to improve your processes in a continuous way. You first have to find
out where you are at and write down your current state then you set a vision
that should be quite ambitious as well as a set of target conditions that are
some kind of intermediate goals you want to achieve. For a cycle you choose a
target condition and how to reach it, that is your challenge. That is the improvement
Kata. In the coaching Kata you then do some kind of mini retro to see what you
accomplished and what problems you have. The cycles can be quite short, maybe
even one or two days.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Hitting the
limits of your hardware with Java – Peter Lawrey</span></h3>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h3>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Okay, this
one was a disappointment, sorry I have to say it so harsh but that is how I
feel. The sad thing is, that Peter Lawrey does know his stuff but in this talk,
sheesh. First of all it was very hard to understand him then he did not really
cover the basic problems a programmer should be aware of or how you can help
with proper coding to avoid hardware limitation issues. Instead he did show
slides with some performance tests he made and the resulting graphs. Also some
graphs of performance issues and the audience had to guess what caused the
problems. And then after 20 minutes (of a 50 minutes slot) he ended his talk
for questions. The questions were then not even repeated aloud so that everyone
knew what they were talking about. Well... enuff said..</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Lambdas and
Collections in Java 8 – Maurice Naftalin</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Simply a
good talk. Covered the basics of lambdas and how they can be used with
collections for efficient coding. How and why the boilerplate parts can be omitted,
what map reduce is about plus Guava features like Optional and Predicate that
are part of Java 8. Pleasant to listen to, so nothing for me to moan about ;-)</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Beyond
Beauty: JavaFX, Parallax, Touch, Gyroscopse and much more (BOF) – Angela Caicedo</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">This was
basically how you can get a pseudo 3D illusion with motion sensors to run on
Raspberry PI with JavaFX. Well, it was not that much FX stuff in it, and most of
the time was spent on the hardware spec of the PI and how sensors and signals
can be read on pin level. IMO that was not too useful especially the latter as
all of that is abstracted by the PI4J lib she introduced in the end. But it was
a nice demo and it was obvious she knows her stuff. As that BOF ended early I
staggered into another one of the same slot.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Is NAO your
robotic overlord? (BOF) – David Snowdon</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">NAO is very
impressive small robot, but this just seemed like a product demo, so no
conference stuff IMO.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Get your
head around git, Team Collaboration – John Stevenson</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Now, John
did not show up, no clue why. But Dan from the organization team spent a few
minutes with us and got us started. We put down some questions people had and
tried to answer them in a group discussion. Two voluntary helpers where also
there and those had some git experience. I myself have only used git-svn until
now but to my surprise this meant I had the third most knowledge on this
subject in the whole group. But it was an interesting discussion so now time
wasted for me.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Opening the
hidden door: JavaFX development everywhere (BOF) – Angela Caicedo</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">So we met
again ;-) This time there were only 4 people in total so we got together at a
table and Angela gave a short presentation how packaging and development works
with JavaFX. Of course I had some things to complain ;-) Like finding out in
what mode you are, embedded or not, depends if the main routine gets a stage
object handed to it that is something that should be abstracted by a static
method call returning an enum. But it was informative and as such a nice end
for the first day.</span></div>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h3>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Day 2</span></h3>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Creating
Games with WebGL and Three.js – James Williams</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Cool talk.
Gave a good overview of what WebGL can do, where it is supported what the
drawbacks are and how Three.js as an abstraction layer can help to immensely reduce
those by wrapping a lot of stuff. Gave me the urge to check it out and toy
around with it.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Getting
started with Websocket and Server-Sent Events using Java – Arun Gupta</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Even though
it took me some time to get used to the Indian accent, this was a solid talk.
We saw detailed examples how Websockets and Server-Sent Events can be
implemented, what client requirements they impose and also a working live demo.
Kind of obvious but still worth to mention are the main differences between the
two technologies. Websockets are truly bi-directional but require special browser
support for it, while Server-Sent Events can be implemented using plain HTTP
and thus can run on any browser but only provide one way communication.
Websockets provide mapping functionality for JSON, binary and other request
types and parameters are typed according to their position. I am sorry I don’t
have much more to say here because this talk was surely a good one. </span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Dark Side
of Agile – Mazz Mosley</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Mazz spoke
about her experiences with a large agile team working on the UK government
website and what problems she witnessed. Sadly she did not provide any new
insights or yet unknown solutions, it was more stuff that everyone with project
experience already knew. Like that it can cause problems when the team is
growing too fast, that documentation is essential but must not be overdone and
team spirit is vital to success. But what I like was the way she presented her
talk, very solid speaking, funny anecdotes and nice to listen too. So I hope to
see her at another Devoxx again, maybe with a more complex topic.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">What do you
mean, backwards compatibility? – Trisha Gee</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Now this
topic sounded extremely interesting, finding new ways to change APIs without
breaking the clients is always useful and after Trisha’s first talk on Day 1 I was
really looking forward to this one. <span style="mso-spacerun: yes;"> </span>Unfortunately
the backwards compatibility part was done in five minutes as the original
driver did use the wrong package namespace “com.mongo” instead of “org.mongo”,
so the new API simply uses the new namespace and the old API can still coexist.
Well, that’s what I call a disappointment. At least the talk itself was
entertaining and had some interesting bits of information about the monog
project itself. But still if I had known beforehand I would have chosen a
different talk for this slot.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Does your
WAR resemble the world’s largest bowl of spaghetti? Enterprise OSGi can help –
Holly Cummins</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Entertaining,
solid talk about the basics of OSGi. While we have quite a few visibility
mechanisms inside JARs etc. there is nothing like that on the level of JARs itself
so the classpath gets rather polluted by all classes of all JARs even though
only a few should be exposed. Also searching for classes throughout the
complete classpath is a bit tedious. OSGi provides encapsulation for JARs and
also has a graph like classpath structure. In addition OSGi modules can be
removed, added and updated without any need to shutdown the virtual machine. So
it could be a nice addition for many large scale applications but on the other
hand you first have to modularize them properly. But maybe I get a chance to
try it someday.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Introduction
to Riak – Chris Molozian</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Usually I
don’t like product presentation talks but the NoSQL intro the other day got me
interested in this topic so I figured I’d give it a try. As expected Chris
focused on the key selling features of Riak but who can blame him for that ;-)
The ones I found most remarkable are:</span></div>
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Data
is stored in logical buckets using hierarchical structured names for faster
lookups and query optimizations</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Patches
to the Riak engine can be deployed without downtime</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">There
are no slave nodes and so you can issue read and write requests to each node</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">The
interface is HTTP based and thus requires only very loosely coupling to
application code</span></li>
</ul>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">But on the
other hand there were also a few drawbacks:</span></div>
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">You
have to run at least four nodes in a Riak cluster, recommended would be five</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Conflict
merging in case of data inconsistency seemed a bit strange, but maybe I just
did not get it</span></li>
<li><span lang="EN-US" style="mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"><span style="mso-list: Ignore;"><span style="font: 7.0pt "Times New Roman";"></span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">A
deleted record can still be read for a few seconds <- eventual consistency
is not for every use case</span></li>
</ul>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">The talk in
general was okay and it seemed that Chris knew what he was talking about while
he took on all kinds of questions.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Security in
the real world – Matt Kilner</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Matt gave a
nice overview over the latest Java security issues and how they were caused by
sometimes minor changes. Like changing the visibility of field in the ToolKit
class gave way to the critical security hole of running any native command from
a Java class taking advantage of the exploit. Another interesting point was
that fixes cannot always be applied easily because the fix would break
something else. Details about that can be seen on the slides to this talk and
sure are worth a look. At first I had the impression the talk would also cover
how application development should take security into account but that was just
a misunderstanding of the abstract on my behalf. It was obvious Matt knows his
stuff but I hope he gets some more speaking practice in because he did not seem
that comfortable or used to speaking in public. Once he gets the hang of that I
am confident his talks will become very popular.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">The Future
of Agile – Nigel Runnels-Moss</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Oh boy...
what can I say… When Nigel announced that he was hijacking this talk to speak
about something else I should have just left but for some reason I never learn
and always hope for a happy end. Man that was mistake.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-family: inherit;">Basically
</span>this was a “Why managers suck and are responsible for the death of our industry”
rant, backed up with diagrams showing data of unknown sources that he drew questionable
conclusions from.<span style="mso-spacerun: yes;"> </span>Summing it with “this
is intentionally provocative” did not help much IMO. Granted some aspects of
the talk did make sense but those were rather quotes from books he referenced,
e.g. managers are usually bad at what they do because as long as they do well they
get promoted until they are above their level competence. But still it seemed
as if he just held this talk because he likes to hear himself talking. Which he
btw did… very slowly… by always making... pauses after… a few words… as if he
was... reading to a child… Well, sorry to say but I just did not like that one,
even though others seemed to enjoy it.</span></div>
<h4 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></h4>
<h3 class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Summary</span></h3>
<br />
<div class="MsoNormal">
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Normale Tabelle";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">As I
pointed out at the start of this rather long post, I did enjoy the conference
even though there were some issues. Of course not all speakers are world class
with a huge list of references and recommendations but that does not
necessarily mean they are not good. And even if you get one or two not so good
talks… that can happen at any other conference as well but with the cheap
ticket price Devoxx offers one of the best values for your money you can find.
So go and sign up for<span style="mso-spacerun: yes;"> </span>next edition!! </span></div>
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>DE</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]-->SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0Business Design Centre, 52 Upper Street, London, Greater London N1 0QH, Vereinigtes Königreich51.5355877 -0.1063234000000647951.2194642 -0.75177040000006479 51.851711200000004 0.5391235999999352tag:blogger.com,1999:blog-2445794899032855680.post-62429896825809893672013-03-31T00:42:00.001+01:002013-03-31T22:29:08.736+02:00London 2013<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Normale Tabelle";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
</style>
<![endif]--><span lang="EN-US" style="mso-ansi-language: EN-US;">When some of
my ex-colleagues told me they were going to London this year to visit the
Devoxx conference and also spend some time in the city I figured it might be a
good idea to join them.<span style="mso-spacerun: yes;"> </span>So I talked my
boss into paying me the trip to London (at least the conference related stuff)
and hooked up with my former co-workers for some cultural sightseeing and
enjoying some London pubs ;-)</span><br />
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Fortunately
we had some lovely English spring weather, meaning 0-2°C snow and rain plus a
chilling wind that tried to rip the flesh from our soaked bodies... man, how I
hate that bloody weather over there…</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Nevertheless
we got to see a few really noteworthy attractions during those days, the first
one being the Tower of London. On a few maze like tracks through a few dozens
of towers, galleries, halls and chambers you explore the old fortress and get
to know some interesting facts about the Tower’s history. Due to the narrow and
steep staircases, like you only see them in the Netherlands these days ;-),
this trip can be quite a challenge but is still worth it if you are keen on
English history, medieval stuff or ancient architecture. Unfortunately a
greater part of the tours require you to get outside into the inhabitable area
of rain and chill. But as long as you stay inside, e.g. visiting the crown
jewels (very impressive stuff) it is rather pleasant. As we just arrived that
day, and some of us acted as if they were freezing to death, this was the only
sightseeing we did that day.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">For dinner
we fancied some curry and the hotel staff sent us to “Brick Lane”, it took us
some time to figure out that this was not the name of a specific restaurant but
instead a street name where you can find a lot of Indian restaurants next to
each other. And what happened there was something we have never encountered
before. In front of each of those restaurants was a guy advertising rather aggressively
for said restaurant, telling us that this was the best place etc. Well, we were
there for the food after all so we just took one and went in, after the guy
outside promised us a 20% discount on the food. Inside we saw that all tables
were full and the place was rather crowded. But before we (a party of 5 people
after all) could leave again we were given some drinks and told to wait as
there would be a table available soon. And so the ushering began… <span style="mso-spacerun: yes;"> </span>A two person table just got free and on the
other side of the aisle a three person party seemed to finish their meal. But those
two tables could not be connected on the other hand there was a small table
next to the three person table where two girls just got their food and were
enjoying it. So those two simply got relocated by the staff to the other side
of the aisle and suddenly there was enough room for us. To be honest, something
like that would get the place shut down very quickly if you tried that in
Germany ;-) So we sat down... ordered… and ate the food that was IMO rather
tasty. But as soon as we finished our plates were taken away, in some cases in
the very same second the cutlery hit the plate (and I am NOT exaggerating here).
Well, we paid up and emptied our drinks but we were not quick enough to avoid
being asked to leave... politely but nevertheless it was clear they wanted us
out as soon as possible… Now that was a first to all of us…</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Afterwards
we were to meet up with friend of one of my companions who already lives in
London for a few years now. He took us to some kind nightclub in the city. As I
am not much of a clubbing person that was not my favorite part of the trip ;-)
But I learned that people are people no matter if you are in London or Munich
or anywhere else… add loud music, enough alcohol and heat and the idiocy
emerges ;-) Yes, I know… I am just too cranky about that topic so let’s just
move on… When we left the club the tube was already shut so we had to find a
bus line taking us back to our hotels (I stayed at a different place than my
mates) but that was rather tricky as our guide had not much clue himself about
the bus night lines. At least we found a line at Picadilly that took us to my
mates’ hotel and I decided to join them and take a cab from their place. So we
already saw Picadilly and I had London cab ride… Check ;-)</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">On the next
day we met up at Hyde Park, had a look at Speakers’ Corner and walked south to
the Buckingham Palace. Then took a turn through the government quarters looking
at Downing Street and then at the Houses of Parliament as well as Westminster
Abbey. Too bad it was Sunday, so Westminster was closed for tourists. After crossing
the Thames to the Eye of London we walked all the way to the Tate Modern Museum
too look at some crazy shit… Yeah right, I am not an art person, congrats for
figuring that one out… As that was a very long walk we had, we decided to go
back to the hotel and so crossed the Thames again to St. Paul’s via the
Millenium Bridge and had another nice bus ride. This time we decided to go for
an Italian dinner, which actually was quite nice in a rather classy place. But
when it came to the check there was some confusion, the check had a service charge
on it (about 12.5%) and as far as we knew that meant that we should not give an
additional tip. But our waitress did not look too happy so we just asked and
she told us, that this service charge was for the company only but also that it
was “okay”… So we all put in some extra for a nice tip, but after some more
research on the topic it now seems that the bitch screwed us over. Afterwards
we headed for pub next to the hotel and had a nice chatty evening while
enjoying funny named beers like “Doom Bar” or “Panzerfaust”, yes that’s right,
that is how those English people name beer. The experience of a bar closing down
at 11 pm, even though it was expected, was somehow weird though.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Okay, final
sightseeing day. We started out at Harrods, holy cow they sell a lot of crap
there… It was really impressing seeing such a big and overwhelming shopping
mall especially with a lot of luxury stuff. On the top level I found the
following item in the sports section, please note the very reasonable price on the sign sitting on the right side of the seabob (okay, looks like you can't zoom in, well the sign says you can buy this nifty toy for the very reasonable price of 80.000 GBP):</span></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-e0FqHxTL_cg/UVd3q0cT7iI/AAAAAAAAAMw/qNp_lw_MTaY/s1600/Seabob.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="http://2.bp.blogspot.com/-e0FqHxTL_cg/UVd3q0cT7iI/AAAAAAAAAMw/qNp_lw_MTaY/s320/Seabob.JPG" width="320" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">After about
an hour we headed off to Madame Tussauds to see some wax celebrities and I must
say, some of them look _really_ impressive. My favorite of live like look is
Sean Connery, that face seemed almost alive. All in all there was quite a lot
to see but the “horror show” does not deserve its name and the “Marvel
Experience” has just nothing to do with the rest. Even though, the visit was
well worth it and I can only recommend it to anyone who has the chance to see
it. Afterwards we were considering to try Westminster Abbey again until we
found out it had already closed down for that day, darn it! So we did call it a
day and headed back to the hotel again. This time our dinner plans took us to a
Mexican place that was close to the Italian we were at before, for some reason
I could not interest anyone in an English dinner ;-) After a really lovely but
rather expensive meal we tried a different pub which was also quite lovely.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">The next
two days were filled with conference stuff which I will write about in some
other post. On the first evening I was at the conference until 10 pm but the
others left earlier as the later talks were not interesting for them. So they
went back to the pub from the day before but had a not that pleasant experience
with a obviously drunk fellow that tried to get them started on “the war, that
we lost” etc. When I heard about that I was pretty happy I stayed at the
conference ;-) But seriously, is that really something English people need to
talk about? Or do you consider it funny to annoy us? Or do you just like to make
Nazi references? I really hope that one was an exception… </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">On our last
evening after the conference ended we went to another Italian place and a pub afterwards
near the conference venue. This one got by without any trouble what so ever and
was kind of a perfect ending for our trip. </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">I must say
despite being an awful expensive place to live London seems like a real nice
place, at least for<span style="mso-spacerun: yes;"> </span>a short vacation
even though it seemed to me that an awful lot of litter was laying around
everywhere. But the tube took me any place I had to go very reliably and the
huge amount of signs and service people everywhere (all way more friendly and
helpful than those at home) made it very easy for me as a foreigner to find my
way. So I guess I will be back some day to get to see the stuff I missed this
time... Beware!!!</span></div>
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0London, Vereinigtes Königreich51.511213899999987 -0.1198243999999704151.195090399999984 -0.7652713999999704 51.82733739999999 0.52562260000002958tag:blogger.com,1999:blog-2445794899032855680.post-66967815810780115022012-08-04T23:30:00.000+02:002012-08-04T23:32:18.990+02:00"Attaching plugins to Maven goals" or "How to shoot yourself in the foot - Part 2"Well, this is basically a case of "Should have read the manual more thoroughly" but as this issue does not seem very obvious to me even after reading the documentation and I found several people asking something similar on the web I guess this is worth sharing.<br />
<br />
In my current project I had an issue that at first seemed like a problem with the maven configuration. When deploying a new release artifact to the project nexus the generated javadoc and source jars were always uploaded twice to the repository (both artifacts were configured via the corresponding plugins). So in order for the release process to complete successfully we had to allow artifact redeployment for the repository.<br />
<br />
This was a major issue for me in matters of build stability and especially reproducibility as it gave the option to overwrite an already released version of an artifact but for a long time the project's budget and deadlines did not allow for a proper analysis. Luckily we were able to handle this problem by being extra cautious during releasing. <br />
<br />
Lately I was able to prioritize this issue properly and could spend some time on it. At first I suspected an issue with our maven configuration as the project consists of a lot of modules organized in a complex hierarchy. So I spent a few hours dissecting the POMs to find a working setup but to my surprise I was able to reproduce the problem even with a single dummy POM and the plugins were configured properly according to their documentation.<br />
<br />
So I decided to hit the web for a search about this problem but after reading through a lot of forum and mailing list posts I just got the idea that for some reason the plugin executions got attached twice.<br />
<br />
Then I took a closer look at the maven documentation and tried to understand how attaching plugin execution to goals and build phases works. And this let my suspicion grow stronger but the final solution was given by another post to the maven mailing list by <a href="http://javaadventure.blogspot.de/" target="_blank">Stephen Connolly</a> (unfortunately I didn't save the link to the post).<br />
<br />
The problem was simply a wrong invocation of our maven build. We were invoking "mvn clean install deploy" as we were not aware the jar goal is not only bound to the install phase (or rather the packaging phase) but also to the deploy phase. Again, I don't consider this as obvious and if anyone has a link to a page were this is described properly is very welcome to share it here.<br />
<br />
Anyhow this means the solution is rather trivial, just use "mvn clean deploy" if you want to build an artifact and deploy it to the remote repository in one step ;-)SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-67194343473262619852012-02-19T19:46:00.000+01:002012-02-19T19:46:10.956+01:00Maven Transitivity Hell - How Dependency Mediation Can Snap Your Neck ;-)Lately I ran into a problem at work which at first puzzled me somewhat so I figured putting it here could help others.<br />
<br />
We have a rather complex maven hierarchy in our project with a lot of artifacts on many dependency levels. After the rather common task of changing an artifacts dependencies to their new release versions the tests crashed with a NoSuchMethodError within one of the changed dependencies. At first I suspected duplicate libs in the main artifact to be the cause but all libs were present only once and in the correct versions.<br />
<br />
To illustrate the actual problem imagine a dependency hierarchy like this:<br />
<br />
main artifact<br /> base lib V1 <br /> data lib V1<br /> specialized lib V1<br /> base lib V2<br /> data lib V2<br />
<br />
It immediately becomes obvious that during dependency resolution maven has to decide which version of base lib and data lib have to be added to main artifact's libs... <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies" target="_blank">Dependency Mediation</a> TO THE RESCUE!!!<br />
<br />
Following the mediation algorithm maven decides to use V1 of base and data lib now if specialized lib uses classes or methods of base or data lib that were introduced in V2 those will not be available at runtime causing NoSuchMethodErrors or ClassNotFoundExceptions.<br />
<br />
In the above example a fix should be easy by simply change the pom of main artifact to depend on the new version of base lib but often enough real world scenarios are not solved that easy. In our case we were lucky to have full controll over all involved artifacts so we could adjust the code as needed. But if you are using third party libraries which in turn depend on other libs that you are also using in your own code like e.g. apache commons or similar an upgrade of said libraries can cause a lot of trouble.<br />
<br />
What if specialized lib was a third party lib of which we need to use the newest version because it contains some vital enhancement or bug fix but on the other hand including the new version of base lib would cause severe runtime errors, e.g. LinkageErrors because now a different version of class is used as the container provides (happened to us with QName in weblogic which was the reason why we used V1 of base lib in the first place)? Then you could end up between a rock and a hard place...<br />
<br />
The same problem could also occure if base lib was not a direct dependency of main artifact but a transrient one of another lib which makes it even harder to discover thus discrepancies.<br />
<br />
Unfortunately the only thing you can do about it is to check the dependencies of the libs you plan to include in your project and make sure they are not conflicting with each other which can become quite cumbersome with growing projects and sometimes even impossible (especially when using large frameworks or application servers etc.).<br />
<br />
All of this got me thinking about the size and complexitiy of today's average JEE applications and how many of them may be only working by coincidence because some of their libs have been compiled against other libs with versions that are not available in the deployment unit. Those applications can still work if, applied to the example above, specialized lib does not use any features of base lib that are only available in V2. This can happen a lot since when starting a new project you usually use the newest version of a library available but you might only be using methods and classes that have already been available for several versions. Of course the methods might work differently or even have some bugs in them that would have been fixed in the new version so you might run on broken code without even knowing.<br />
<br />
So you now might like to go and check your projects dependency hierarchies... ;-)SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-70861188373290089232012-02-12T19:57:00.001+01:002012-02-12T19:57:30.572+01:00Bavarian BurgerToday I had an idea for a new dish which turned out rather tasty, so I thought why not share it here :-)<br />
<br />
The base is a simple slice of bread on which you spread some tomato purée, sprinkle some oregano and basil onto the purée and then put some onion rings on top of it.<br />
<br />
As the next step you heat a pan and fry one or two slices of a German meat loaf (a.k.a. Leberkäse) from both sides. While frying the second side you put some cheese (in my case Gouda *yammy*) on the meat loaf so it starts to melt a bit.<br />
<br />
When the meat loaf is done just put it on the bread and then make one or two fried eggs which you then put into the cheese covered meat loaf.<br />
<br />
Finally add salt and pepper to the mix and enjoy :-)SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-90370409093666547212011-12-31T18:25:00.000+01:002012-02-12T19:58:29.716+01:00Besuch im LegolandNachdem es hier jetzt einige Zeit sehr ruhig war, dachte ich mir ich poste mal etwas über unseren diesjährigen Besuch im <a href="http://legoland.de/" target="_blank">Legoland Günzburg</a>.<br />
<br />
Für meine Freundin und mich war das bereits der zweite Besuch dort und wir sind mal wieder hellauf begeistert :-) Únd neeeeiin, das ist nicht nur was für Kinder :-p Aber natürlich muss man damit rechnen, dort auf viele Familien zu treffen, von daher bietet sich ein Besuch eher außerhalb der Ferienzeiten an.<br />
<br />
Zu erwähnen sind zum Einen die zahlreichen Fahrgeschäfte die es in den verschiedenen Themenbereichen gibt (Ritter, Piraten, Bionicle, Abenteuer...), die alle unterschiedlich wild sind und so doch für so ziemlich jeden was passendes bieten. Hervorheben muss man da aus meiner Sicht besonders die Bioncles bei denen man einem großen Roboterarm sitzt den man zuvor selbst programmieren kann und damit die Fahrt selbst bestimmt. Das ist aber nichts für Leute mit schwachem Magen...<br />
<br />
Außerdem ist die Wildwasserrutsche erwähnenswert die feuchtfröhlchen Spaß garantiert *g* <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-N8ndBonMP6k/TnzE_MI43II/AAAAAAAAACM/JB8O1GyGYdw/s1600/CIMG1248.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-N8ndBonMP6k/TnzE_MI43II/AAAAAAAAACM/JB8O1GyGYdw/s320/CIMG1248.JPG" width="240" /></a></div>
<br />
<br />
<br />
Weitere Attraktionen sind Goldwaschen, Führung durch die Legofactory und das Aquarium, letzteres bietet einen wirklich interessanten Rundgang durch eine aufwendig gestaltete Unterwasserlandschaft mit vielen exotischen Fischen. <br />
<br />
So weit, so gut, aber die, zumindest für uns, interesantesten Bereiche fehlen noch. Im Build- und Testcenter kann man das tun, was jeder Legofan gern tut... BAUEN!!! Es werden verschiedene Modelle mit unterschiedlichem Schwierigkeitsgrad angeboten, wobei die größte Schwierigkeit oft darin liegt auf den relativ klein kopierten Bauplänen alles richtig zu erkennen ;-) Trotzdem macht das basteln immer viel Spaß und man bekommt danach auch eine nette kleine Urkunde *g* Zusätzlich bietet das Testcenter auch Workshops an, z.B. für Mindstorms in den wir reinkamen. In dem Workshop konnte man eine Stunde lang einen bestehenden Roboter programmieren und etwas herumexperimentieren, als Spätfolge gab es dann zu Weihnachten bei uns ein Mindstorms-Set :-)<br />
<br />
Aber das Highlight sind eigentlich immer die Miniaturwelten die einige der schönsten oder beeindruckendsten Bauwerke/Stadtkulissen Europas darstellen und inzwischen gibt es dort auch einen "Star Wars"-Bereich.<br />
<br />
Ein Hingucker ist hier vor allem das Schloß Neuschwanstein:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NCBqsSQRT9U/TnzDY3JUhHI/AAAAAAAAAB8/qPYYd91eoJk/s1600/CIMG1237.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-NCBqsSQRT9U/TnzDY3JUhHI/AAAAAAAAAB8/qPYYd91eoJk/s320/CIMG1237.JPG" width="240" /></a></div>
<br />
<br />
<br />
<br />
<br />
Oder der Reichstag unserer Hauptstadt:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-qx0I_ff9I3k/TnzOaLFRZkI/AAAAAAAAADg/EwLQjE2JFrg/s1600/CIMG1165.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-qx0I_ff9I3k/TnzOaLFRZkI/AAAAAAAAADg/EwLQjE2JFrg/s320/CIMG1165.JPG" width="320" /></a></div>
<br />
Und für Sportfans gibt es natürlich auch etwas :-)<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-9W6naDOHAZQ/TnzW6kXlQ8I/AAAAAAAAAE0/lqcg_RVY2lQ/s1600/CIMG1186.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://2.bp.blogspot.com/-9W6naDOHAZQ/TnzW6kXlQ8I/AAAAAAAAAE0/lqcg_RVY2lQ/s320/CIMG1186.JPG" width="320" /></a></div>
<br />
<br />
<br />
<br />
Das Legoland bietet aber noch weit mehr als das was ich hier beschrieben habe, von daher sollte man sich einen Besuch dort wirklich ein mal überlegen. Mehr Bilder von unserem Besuch gibt es in meinem <a href="https://picasaweb.google.com/107122152318051658909/Legoland2011" target="_blank">entsprechenden Picasa-Album.</a><br />
<br />
<br />SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0Legoland-Allee, 89312 Günzburg, Deutschland48.42683 10.3007948.424196 10.295854499999999 48.429464 10.3057255tag:blogger.com,1999:blog-2445794899032855680.post-52954212830202244262011-09-23T16:14:00.000+02:002011-09-24T10:44:13.133+02:00Adding Footnote Support to WicketDuring my current <a href="http://wicket.apache.org">Wicket</a> project I found that there is no built in support for adding footnotes to components. All you could do was adding the footnote and the corresponding description explicitly and as separate components. This is not very flexible or generic and when you start adding footnotes to panels but want to have the description show up in the containing page or in a different component of the same page.it gets very tedious to keep everything consistent by hand.<br />
<br />
So once more I put my project work on hold and started some plumbing ;-). It took me about two days of trying and testing but finally I came up with a solution that serves all of my needs and should be rather easy to use. But I would also like to point out that I am aware this solution might not be what the wicket team would recommend (suggestions for improvement are as always welcome). But for me this is quite sufficient and should cover most real life use cases. For those interessted the source is available <a href="http://heve.butterbrot.org/code/wicket_footnote/wicket_footnote.zip">here</a>.<br />
<br />
Here a summary of the available features:<br />
<br />
- programmatically add a footnote to a component<br />
- programmatically process the descriptions for programmatically added components<br />
- declaratively add labels with footnotes to a markup container<br />
- declaratively add label with footnote descriptions for declaratively added footnotes<br />
- declaratively add label with footnote descriptions for programmatically added footnotes<br />
- use text or images as footnotes<br />
- use separate style definitions for each footnote and description<br />
- use freely defined wrapping tags for declaratively added footnote descriptions<br />
<br />
As a first I took on the part of the solution concerning adding footnotes programmatically to later add support for declarative footnote creation on top of it.<br />
<br />
For the programmatical solution I created two artifacts:<br />
<br />
- a new behavior <a href="http://heve.butterbrot.org/code/wicket_footnote/FootnoteBehavior.java">FootnoteBehavior.java</a>, to be added to the component that is to be enriched with a footnote<br />
- a new interface <a href="http://heve.butterbrot.org/code/wicket_footnote/FootnoteAware.java">FootnoteAware.java</a>, that is used to handle the descriptions for added footnotes<br />
<br />
The behavior takes several argument:<br />
<br />
<pre width="90 px">/**
* @param footNote
* The footnote text to be added to the component's model object
* as superscript and will additionally be wrapped with an anchor
* tag, e.g. 1 would result in <sup><a>1</a></sup>
* @param createImageTag
* If set to <code>true</code> the value of <code>footNote</code>
* is wrapped into a html img tag in which it is used as src
* attribute. This allows to use images for a footnote instead of
* regular text.
* @param footNoteClass
* If this parameter is not empty it's value will be set as class
* attribute on the generated anchor tag.
* @param footNoteText
* If this parameter is not empty a footnote description will be
* created.
* @param fromResolver
* Indicates if this behavior was constructed by
* {@link FootnoteResolver}
*/
public FootnoteBehavior(String footNote, boolean createImageTag, String footNoteClass, String footNoteText, boolean fromResolver)
</pre><br />
The text representing the footNote is appended to the response after the component the behavior has been added to finished rendering. Additionally a footnote description is created as a Label and added to the first parent in the component's hierarchy that implements the FootnoteAware interface, the specifics of how this is done can be seen in the javadoc and source code of the classes. Then the FootnoteAware can render the descriptions as it needs to, e.g. as a PropertyListView. <br />
<br />
This was already a nice effort but not yet sufficient for every day use as most components that use footnotes are Labels which are usually declaratively. So with the solution we have so far it would be necessary to add all those Labels by Java code which would be a drawback.<br />
<br />
So we need support for declarativ footnotes which can be achieved by adding two resolvers:<br />
<br />
- <a href="http://heve.butterbrot.org/code/wicket_footnote/FootnoteResolver.java">FootnoteResolver.java</a>, to add a Label component with a FootnoteBehavior to the markup container<br />
- <a href="http://heve.butterbrot.org/code/wicket_footnote/FootnoteDescriptionResolver.java">FootnoteDescriptionResolver.java</a>, to add a Label containing all footnote descriptions from the closest FootnoteAware parent<br />
<br />
The first resolver simply takes it's the tag attributes and constructs a Label component as well as a FootnoteBehavior accordingly. The key attribute is used to determine the Label's content in the same way as a <wicket:message> tag would, which means it is resolved via proeprty lookup. In addition all attributes are interpolated using the markup container's properties and/or nested tags. For further details please check javadoc and source code.<br />
<br />
The second resolver looks for a FootnoteAware parent of it's container and if it finds one renders the contained footnote descriptions according to the tag attributes. Each description will be wrapped in a tag who's name can be defined via the tagname attribute and can optionally have a class attribute to allow futher styling flexibility.<br />
<br />
I hope this summary is comprehensive enough as I tried to keep it rather short instead of copying the classes' source code. If you find any flaws or have suggestions I would be glad if you shared them. And of course everyone is welcome to copy and use the code provided here.<br />
<br />
<br />
<br />
SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0tag:blogger.com,1999:blog-2445794899032855680.post-32598766162732731602011-08-10T22:52:00.001+02:002011-09-22T14:52:40.696+02:00Creating a Custom Wicket Tag ResolverWhen building pages with <a href="wicket.apache.org">Wicket</a> the wicket:message tag is very handy for adding localized text to said page. What I don't like about it is the fact that you are limited to<br />
using properties. The problem about that is when you need to use large portion of text a property file gets very bloated, very ugly to read and incredibly ugly when trying to add formatting. From a maintenance point of view resoruce should be <br />
structured very clearly and especially when using xml properties an auto formatter is very handy, which can also cause ill formatted results. <br />
<br />
On workaround is to split your text in several properties and then just add them one by one to your markup/components but this is very cumbersome. So I figured it would be cool if you were able to use<br />
includes in the same way as properties with the message tag where you could externalize a layouted portion of text with format information. But to my knowledge no such tag exists, so I took this as an opportunity <br />
to find out how to build my very own tag resolver :-)<br />
<br />
Unfortunately I did not find a lot of information about this topic which meant I had find out the hard way, by looking at existing Wicket classes and the obvious choice was WicketMessageResolver, so what<br />
you will see next is heavily inspired by this class even though I did change quite a few portions.<br />
<br />
These are the basics that need to be done:<br />
<br />
<ul><li>your class has to implement IComponentResolver</li>
<li>in a static initializer block make your tag well known by calling WicketTagIdentifier.registerWellKnownTagName(tagname)</li>
<li>in your application class register your resolver using getPageSettings().addComponentResolver(new YourResolver())</li>
<li>in the resolve method instantiate a subclass of MarkupContainer and add it to the resolvers container</li>
<li>make sure the subclass' isTransparentResolver() method always returns true, thus he can access it's parent's children as if they were it's own</li>
<li>and as a last you override the markup container's onComponentTag() method where you can put all the logic you need to handle your tag, create the rendered result and put it into the response object</li>
</ul><br />
And here my complete IncludeResolver, I hope this will be useful to someone someday. And as usual I would be greatful for comments, additions and corrections on this :-)<br />
<br />
<pre>
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Response;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupElement;
import org.apache.wicket.markup.MarkupException;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.WicketTag;
import org.apache.wicket.markup.html.include.Include;
import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
import org.apache.wicket.markup.resolver.IComponentResolver;
import org.apache.wicket.model.Model;
import org.apache.wicket.response.StringResponse;
import org.apache.wicket.util.lang.PropertyResolver;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class is a tag resolver to handle tags of the following format
* <wicket:include [key="xxx"|filename="xxx"]/>.
* <p/>* This class tries to provide the same functionality for included html files as
* <code>WicketMessageResolver</code> does for property file entries but also
* tries to avoid to fail early.
* <p/>* You have to specify either a key or a filename. A key will be looked up via
* the resource mechanism and the result will be used as filename.
* <p/>* In addition you can nest tags within this tag. Those child tags will then be
* used to generate the replacements for variables defined in the file content.
* If this fails for a variable the parent's model object will queried for a
* property with the variable's value as name. Should this also fail the last
* fall back is the same query on the parent object.
* <p/>* If the resource settings are set to throw exceptions on missing properties
* this class will raise an exception if either a variable cannot be looked up
* or a child component is not replaced.
* <p/>* This tag allows you to easily include files in your pages which can also
* depend on your localized properties.
* <p/>* <b>Usage:</b>
* <p/>*
* <pre>* <wicket:include key="myFile">
* This text will be replaced with text from the specified file.
* <span wicket:id="replaceme">[to be replaced]</span>.
* </wicket:include>
* </pre>*
* Then your property file needs an entry like this:
*
* <pre>* myFile = path / to / file
* </pre>*
* This file contains html fragments with variables:
*
* <pre>* This is a file with ${replaceme}.
* </pre>*
* And your java component add:
*
* <pre>* add(new Label("replaceme", new Model<String>("some replaced text")));
* </pre>*
* The output will be:
*
* <pre>* This is a file with some replaced text.
* </pre>*
* @author Chris
*
*/
public class IncludeResolver implements IComponentResolver {
/**
*
*/
private static final long serialVersionUID = -9164415653709941809L;
private static final String tagname = "include";
private static final Logger log = LoggerFactory.getLogger(IncludeResolver.class);
// register the tagname
static {
WicketTagIdentifier.registerWellKnownTagName(tagname);
}
/**
* Handles resolving the wicket:include tag. If a filename is specified this
* file will be looked up. If a key is specified it's value is looked up
* using the resource mechanism. The looked up value will then be used as
* filename.
*
*/
public boolean resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag) {
if ((tag instanceof WicketTag) && tagname.equalsIgnoreCase(tag.getName())) {
WicketTag wtag = (WicketTag) tag;
String fileName = StringUtils.trimToNull(wtag.getAttribute("file"));
String fileKey = StringUtils.trimToNull(wtag.getAttribute("key"));
if (null != fileKey) {
if (null != fileName) {
throw new MarkupException( "Wrong format of <wicket:include [key='xxx'|file='xxx']>: you must not use file and key attribtue at once");
}
fileName = StringUtils.trimToNull(container.getString(fileKey));
if (null == fileName) {
throw new MarkupException("The key inside <wicket:include key='xxx'> could not be resolved");
}
} else if (null == fileName) {
throw new MarkupException(
"Wrong format of <wicket:include [key='xxx'|file='xxx']>: specify the file or key attribute");
}
final String id = "_" + tagname + "_" + container.getPage().getAutoIndex();
IncludeContainer ic = new IncludeContainer(id, fileName, fileKey, markupStream);
ic.setRenderBodyOnly(container.getApplication().getMarkupSettings().getStripWicketTags());
container.autoAdd(ic, markupStream);
return true;
}
return false;
}
/**
* Helper class to break open the original Include class by using
* inheritance.
*
* @author Chris
*
*/
private static final class ExposingInclude extends Include {
/**
*
*/
private static final long serialVersionUID = -212861726226482365L;
public ExposingInclude(String id, String filename) {
super(id, filename);
}
public final String expose() {
return this.importAsString();
}
}
/**
* Container class to render the included file.
*
* @author Chris
*
*/
private static final class IncludeContainer extends MarkupContainer {
/**
*
*/
private static final long serialVersionUID = 3991477945186422264L;
private final String key;
private final String fileName;
public IncludeContainer(String id, String fileName, String key, MarkupStream markupStream) {
super(id, new Model<string>(fileName));
this.key = key;
this.fileName = fileName;
}
/**
* Wrapper to log this instance's settings.
*
* @return String containing the instance's settings.
*/
private final String logParams() {
return "<wicket:include> tag with " + (null != this.key ? "key = '" + this.key + "' and resulting " : "") + "fileName = '" + this.fileName + "'";
}
/**
* Renders the component tag. The base content is read from the file
* defined by the filename. Afterwards all containing variables are
* replaced by the following methods in this order:
* <ul>*
<li>trying to get the value from a child component that has the<br />
* variable's value as id</li>
*
<li>trying to get the value as property from the parent's model<br />
* object</li>
*
<li>trying to get the value as property from the parent object</li>
* </ul>*
* If all attempts to lookup up variable fail or not all child tags are
* replaced either an exception is thrown or a warning is logged
* depending on the resource settings.
*
*/
@Override
protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) {
// get all child tags' rendered contents
Map<String, String> children = this.getRenderedChildren(markupStream, openTag);
// read the included file content
String fileContent = new ExposingInclude(this.getId() + "_internalInclude", this.getDefaultModelObjectAsString()).expose();
// remember all replaced child tags
final Set<string> replacedChildren = new HashSet<string>();
// substitute all variables and set the result as response
this.getResponse().write(new MapVariableInterpolator(fileContent, children) {
@Override
protected String getValue(String variableName) {
// try to get value from rendered child tags
String value = super.getValue(variableName);
if (null != value) {
// if we used a child tag create a marker
replacedChildren.add(variableName);
} else {
if (log.isDebugEnabled()) {
log.debug(IncludeContainer.this.logParams()
+ " - Could not find replacement value for variable = '" + variableName
+ "' in child tags");
}
// see if the variable can be replaced using the
// parent's model object - use try/catch to avoid fail
// early
try {
value = Strings.toString(PropertyResolver.getValue(variableName, IncludeContainer.this.getParent().getDefaultModelObject()));
} catch (WicketRuntimeException e) {
if (log.isDebugEnabled()) {
log.debug(IncludeContainer.this.logParams()
+ " - Could not find replacement value for variable = '" + variableName
+ "' in parent model");
}
}
}
if (null == value) {
// see if the variable can be replaced using the parent
// object - use try/catch to avoid fail early
try {
value = Strings.toString(PropertyResolver.getValue(variableName, IncludeContainer.this.getParent()));
} catch (WicketRuntimeException e) {
if (log.isDebugEnabled()) {
log.debug(IncludeContainer.this.logParams()
+ " - Could not find replacement value for variable = '" + variableName
+ "' in parent object");
}
}
}
if (null == value) {
// Handle failed lookup
String logMsg = IncludeContainer.this.logParams()
+ " - Bailing with exception since variable = '" + variableName
+ "' could not be replaced";
if (IncludeContainer.this.isThrowingExceptions()) {
if (log.isDebugEnabled()) {
log.debug(logMsg);
}
markupStream.throwMarkupException(IncludeContainer.this.logParams()
+ " - Could not replace variable = '" + variableName + "'");
} else {
log.warn(logMsg);
}
}
return value;
}
}.toString());
// Make sure all of the children were rendered
Iterator<String> iter = children.keySet().iterator();
while (iter.hasNext()) {
String id = iter.next();
if (replacedChildren.contains(id) == false) {
String msg = "The <wicket:include> for file " + this.fileName
+ "has a child element with wicket:id=\"" + id + "\". You must add the variable ${" + id
+ "} to the file content for the wicket:include.";
if (this.isThrowingExceptions() == true) {
markupStream.throwMarkupException(msg);
} else {
log.warn(msg);
}
}
}
}
/**
* Wraps call to resource settings to determine if a exception should be
* thrown in case not all variables are resolved or not all children are
* rendered.
*
* @return
* <code>Application.get().getResourceSettings().getThrowExceptionOnMissingResource()</code>
*/
private final boolean isThrowingExceptions() {
return Application.get().getResourceSettings().getThrowExceptionOnMissingResource();
}
/**
* Walks through all children of the current tag and stores their
* rendering results in a map.
*
* @param markupStream
* The markupStream associated with the tag.
* @param openTag
* The current include tag to be rendered.
* @return Map containing all children's rendered responses associated
* with each child's id.
*/
private Map<String, String> getRenderedChildren(final MarkupStream markupStream, final ComponentTag openTag) {
Map<String, String> children = new HashMap<String, String>();
if (!openTag.isOpenClose()) {
while (markupStream.hasMore() && !markupStream.get().closes(openTag)) {
MarkupElement element = markupStream.get();
// If it a tag like <wicket..> or <span wicket:id="..." >
if ((element instanceof ComponentTag) && !markupStream.atCloseTag()) {
String id = ((ComponentTag) element).getId();
Component comp = this.getParent().get(id);
if (comp != null) {
children.put(id, this.getRenderedResponseString(markupStream, comp));
} else {
markupStream.next();
}
} else {
markupStream.next();
}
}
}
return children;
}
/**
* Obtains the rendered response of the given component rendered
* according to the markupStream. Rendering uses a temporary response
* and the original response is restored before returning the result.
*
* @param markupStream
* The markupStream used to render the component.
* @param comp
* The component to be rendered.
* @return The rendered result.
*/
private String getRenderedResponseString(final MarkupStream markupStream, Component comp) {
Response webResponse = comp.getResponse();
StringResponse response = new StringResponse();
try {
this.getRequestCycle().setResponse(response);
comp.render(markupStream);
} finally {
this.getRequestCycle().setResponse(webResponse);
}
return response.getBuffer().toString();
}
/**
*
* @see org.apache.wicket.MarkupContainer#isTransparentResolver()
*/
@Override
public boolean isTransparentResolver() {
return true;
}
}
}
</pre>SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com3tag:blogger.com,1999:blog-2445794899032855680.post-91464795697154822482011-08-03T21:47:00.002+02:002012-02-17T22:02:07.982+01:00Firefox Plugin PitfallToday I did learn something about firefox plugins. We had some problems with a plugin provided by a 3rd party vendor that we integrated in our site.<br />
<br />
The plugin did not install properly in firefox instance of version 4 or later. The respective extension got listed in the extension manager but the plugin itself did not show up in the list of installed plugins. This meant the plugin was not available and our site still asked for it to be installed. In firefox 3.6 everything was okay. <br />
<br />
After a lot of research and some peeking around I finally found the solution. From firefox 4 onwards an extension has to declare if it needs to be unpacked by firefox to work or not. In versions older than 4 every extension was unpacked but in newer versions unpacking requires the presence of the unpack tag in the install.rdf packaged with every xpi file.<br />
<br />
As described at the <a href="https://developer.mozilla.org/en/Install_Manifests#unpack">mozilla documentation</a> the install.rdf needs to contain this entry:<em:unpack>true</em:unpack><br />
<br />
When I unzipped the xpi file in question and extracted the contained install.rdf I saw that it did contain the unpack tag but with a subtle differece: <em:unpack>True</em:unpack><br />
<br />
As you see the only difference is the uppercase "T". It was a long shot but since I had nothing to lose I changed the entry to "true" and repackaged the xpi. After putting up this new version to our website the plugin installed perfectly in every firefox version!!<br />
<br />
Two things here really threw me off, first how our vendor could ship this version as this file cannot have every worked for firefox 4 for which it was explicitly built (but I will get back at them about this ;-)). And secondly why firefox does not recognize the entry just because of the case.<br />
<br />
Anyways I had a hard time figuring this one out today so maybe this can be of use to someone :-)SanityResorthttp://www.blogger.com/profile/00072652616547616807noreply@blogger.com0