Talks

Lightning Talks: Day 2

EuRuKo 2016

00:00:04.899 okay so we are back for the lightning talks we're gonna have seven lightning
00:00:10.070 talks because yesterday one was out there so we're gonna have it tonight and
00:00:17.230 about the rules each talk is gonna last five minutes
00:00:22.250 sharp at the end you're gonna hear the awesome gong
00:00:28.810 played by the awesome Gennady and clap so first lightning talk chris and
00:00:37.760 levena aka Chrissy that is gonna talk about the HTTP and
00:00:43.909 cake requests keeping your clients happy not hungry
00:00:56.829 hi everyone so I'm Chris Alda I'm a software engineer at deliverer who was sponsoring this event and I'm very proud
00:01:03.710 to say that so thank you very much hirako when I'm not doing that I'm a board member and volunteer at these two
00:01:10.189 organizations called women hack for nonprofit and empower hack the last one building tech solutions for Refugees and
00:01:15.799 they're both open source orgs yes you can read more about them follow me
00:01:22.789 on Twitter Christy go around if you're interested so I've been working with delivery for a mere three months and in
00:01:29.360 that time I've done a lot of things already every day's different which is so great and I've been doing a lot of
00:01:34.789 stuff on api's and we're working on api's for the restaurant apps that we
00:01:40.369 use for order management and we're also moving away from a rails monolith and into a service based architecture and
00:01:46.460 building our own internal event bus so obviously the talk and kafka yesterday was very timely and insightful and I
00:01:53.390 have a lot of things to say back to the team when we get back to London and I'm also really eating a lot of food so
00:02:01.420 when you work for an on-demand food industry you end up needing to get a gym
00:02:06.560 membership and so I'm going to talk to you today about API design and eating
00:02:12.260 food so specifically I'm gonna talk to you about brunch and by that I do mean the meal between
00:02:18.829 breakfast and lunch not brunch io the html5 build tool just to clarify this and I've created this makeshift graphic
00:02:26.659 here which will kill some of our designers if they looked at it so I apologize if they do find this but just
00:02:32.659 to set the scene while I tell you about my last brunch experience in London so just to draw the picture it was a sunny
00:02:40.220 day we have about five of those per year in London and generally it makes us all very happy so
00:02:47.180 we're in a good mood and we tend to go off and want to eat eggs and bacon on sourdough toast for some reason and have
00:02:53.150 brunch at a fancy cafe so I went there with a couple of my friends and their baby we had a big pram with us and
00:02:59.409 unfortunately the restaurant manager wasn't in quite that good a mood as well and the first thing we got from him was
00:03:06.019 the fact that there was no room to sit we were in the garden were very confused because there was obviously a table
00:03:12.079 there for us to sit and when we said we could move the pram he basically sped
00:03:17.389 out the same thing and said sorry there's no room here walked away to the kitchen and needless to say we went and
00:03:23.389 had a really great brunch at the cafe next door instead so the problem here wasn't the fact that
00:03:28.819 there was no room to sit it was the fact that to this day we have no idea what the problem was and it felt very much
00:03:34.489 like this like a generic 500 internal server error where the very useless error response
00:03:41.510 and I says his claims felt very confused and frustrated because we didn't know what was going on and we vowed to never
00:03:48.379 use that service ever again so illusive errors API design they're not very good
00:03:54.409 ideas so what I would expect from the better brunch experience would be something a bit more like this a little
00:04:00.109 bit more thought put into the error response design here HTTP comes jam-packed with its own status codes to
00:04:06.349 use not just to say whether or not a request was successful or a failure but why so try to use those a general rule
00:04:14.209 of API design and I think this guy could have taken a leaf out of that book and been a bit more verbose with his error
00:04:21.139 messaging just to help the client on the other end solve their problem without being
00:04:26.419 blocked by them so moving away from that grunt experience I also want to reflect on
00:04:34.620 brunches that I've had that I've really enjoyed what was it about them that made them perfect dining experiences yes the
00:04:41.830 food was great but wasn't all about that it was actually just the mere fact that they made me feel a bit special they
00:04:47.740 didn't make me feel like a generic client of theirs and they put effort into their service to make it a bit more
00:04:54.940 customized to my experience it reminds me a lot about implementing HTTP caching in your API in a very deaky way so just
00:05:03.790 to paint that picture as well imagine I was at a restaurant for the first time and I was requesting a menu of theirs
00:05:09.670 for the first time and they gave me a menu put it on my lap walked away I
00:05:14.800 ordered the potato pancakes which were amazing and made a few requests after that then
00:05:20.590 the second time I came I get a waiter and I say I changed my requests a little bit I say do you still have the potato
00:05:27.160 pancakes and that's kind of like me saying has your menu changed since I was last here if it hasn't then I don't need
00:05:33.880 to see it I just want those amazing pancakes of yours I would expect a response much more like this at a better
00:05:39.970 brunch cafe rather than them giving me the same menu all over again because they say possibly I don't know check
00:05:45.250 them in yourself I would expect a bit more better customer service when they come and they give me a little bit more
00:05:51.370 information than I asked for so in HTTP that would be in the form of some
00:05:56.470 additional caching headers in the response like this cache control header last modified and etags and then that
00:06:04.870 mere effort to give me a little bit more information would make me feel comfortable to ask all my annoying questions and cater for conditional
00:06:12.430 requests like okay can you please give me the menu only if it hasn't changed only if it's different from the date I
00:06:20.440 last saw it and instead of giving me an entire menu back they'll say that cached or in your brain that remembers the menu
00:06:26.590 and the potato pancakes is correct and you don't need to see the menu so second
00:06:33.180 so in rails this is a ruby conference so I just wanted to say that if you do API design you will eventually see HTTP
00:06:40.480 caching and it's a whole universe to explore I was very happy to see that in rails we can implement all these
00:06:46.020 concepts in about three lines and this is what I love about working with Ruby on Rails the fact that it does get out
00:06:52.830 of your way to solve your problems and you don't need to think about implementation so much and there are three takeaways from this so first I
00:06:59.610 stole it from Bill Gates but you're most unhappy customers are your greatest source of learning second build the type
00:07:05.279 of service you would enjoy interacting with again and this is not just about content but how you deliver it documentation your error responses those
00:07:12.509 annoying things prioritize them and at the end of the day leave your client happy not hungry thank you
00:07:22.879 Thank You Chrissy so second round decoding af-s key data Commodore 64
00:07:31.919 edition by Stefan - ik all right
00:07:54.479 I'm Ruby developer from Vienna Austria and besides doing high-level
00:08:02.190 programming in Ruby I also really like to do some low-level stuff and play
00:08:07.690 around with old hardware play around with old hardware like this and
00:08:13.680 recently I played around with this specific device so who of you knows what
00:08:19.240 this is hands up okay I suspect these are the older ones in the audience for
00:08:26.770 the younger ones this is called a data set and it's a storage device for home
00:08:33.430 computers that was actually quite common back in the 80s because it was way cheaper than floppy disk drives and you
00:08:41.649 used it to save your data to audio cassette tapes like this and you could
00:08:48.070 even buy tapes with pre-recorded data containing games and applications mostly
00:08:54.700 games so if we take such a tape and with data
00:09:00.040 on it and put it into our stereo try to listen to it what will it sound like
00:09:05.230 well
00:09:11.130 so this was real data actually written
00:09:16.300 by a Commodore 64 some weeks ago in my lab in Vienna and it may have reminded you of the sounds
00:09:25.420 you get from other devices back from the 80s analog modems fax machines so why do
00:09:33.279 these devices all sound similar if you want to encode bits and bytes
00:09:40.420 into audio you need to employ some kind of
00:09:45.810 some kind of modulation technique and all of these devices fax machines modems
00:09:51.610 and the data sets use the same technique it's called audio frequency
00:09:56.920 shift keying afsk so this is what this talk is about and this is why all these
00:10:03.519 devices sound so similar so afsk gives us this but how do we get
00:10:11.560 back our data how do we decode this back into bits and bytes well let me show you
00:10:19.860 this is a short segment of the complete waveform and at a very high assumed level and it
00:10:27.790 exactly represents one single byte and to decode this byte we have to look at
00:10:34.690 individual pulses in the signal so a pulse is a very short segment where the
00:10:41.589 signal starts at zero goes down to the bottom up to the top and again to zero this is a pulse and if you look closely
00:10:49.449 you might notice that there are several identical pulses in this segment they
00:10:55.029 all have the same length and there's another group of pulses also identical
00:11:00.610 but a bit longer than the first ones and finally a third group on the two pulses
00:11:06.160 which are even longer again so these palaces obviously come in three
00:11:11.829 different lengths long medium and short and now if we look at these pulses in
00:11:17.410 pairs we get various combinations like long medium or medium short and each
00:11:24.339 combination has a specific meaning long medium for example is start of byte
00:11:30.160 and it tells us that a byte is going to start medium short is a 1 bit and
00:11:38.880 short medium is a 0 bit so hooray we got
00:11:44.170 some bits we found some bits maybe we're done well not quite two more things
00:11:50.019 first of all I don't know if anyone of you noticed but in fact we got 9 bits
00:11:55.990 instead of only 8 and this is because there's one additional bit for error checking a parity bit so
00:12:04.720 for now let's just assume that that is correct and we don't need this error checking so just ignore it and the
00:12:11.079 second thing we have to do the remaining 8 bits are in reverse order so the most
00:12:17.319 significant bit the bit with the highest value is coming last and if we want to decode them back into a normal decimal
00:12:25.060 value we have to reverse them so if it arose those bit and have the most
00:12:30.189 significant bit at the front then we can simply do the math this gives us
00:12:35.910 145 as a decimal value and that's it we have successfully decoded a single byte
00:12:42.790 of audio frequency shift keyed data written on an audio tape by an actual commodore 64 i think that success
00:12:56.920 automates this process it generates lots of interesting debugging output also uses enumerators
00:13:03.610 check it out on github and if you have any more questions just ask thank you
00:13:12.920 that was so cool and what like some some
00:13:19.100 memories okay third talk working with PDFs in Ruby
00:13:24.410 environment by Thomas if I remember correctly we had some headaches with that so let's see
00:13:49.490 about PDFs and it will be and it will start off with short warning
00:13:56.320 if you know slash dot you probably know slash participants this is one so guys
00:14:03.020 me it is a shameless plug for one of my pet projects but I think you might also
00:14:09.290 find it useful so what is the current situation
00:14:14.480 regarding PDF in Ruby you'll have grown probably
00:14:19.820 most of you know it or use it in various applications then you have PDF Reader
00:14:25.490 for reading PDFs there's also a solution called origami that is intended for auditing PDFs and
00:14:31.880 combined PDF is a tool for marching that came out for the first station of Braun
00:14:38.300 not able to using templates and so on and if you're using gob you also have
00:14:43.340 naturally access to many more libraries like PDF boxes which is a quite good solution
00:14:50.110 what are the current problems with the solutions that we have in Ruby one is
00:14:55.610 there's no complete integrated solution you have no library that can reach white and modified PDFs the other one is that
00:15:04.430 all of the current lobbyists only implement parts of the PDF specification so one can read the arc and white or
00:15:12.290 they don't handle all the encryption techniques and the last one is that none
00:15:19.460 of them have performance or memory efficiency in mind so
00:15:25.870 if what if there was a library for reading and Word in PDFs that helps most
00:15:33.070 of the specification of PDF can generate content like bronze so we can generate pages and so on can easily
00:15:40.840 be extended so you can extend it this if there's a new specification of PDF for
00:15:47.410 example you can easily extend it and it is written in pure Ruby there is actually one it is not released
00:15:55.000 yet that's the final catch but there is one it's called hexa PDF it's one of my
00:16:00.520 pet projects like cramdown it came out of frustration with the current situation of PDFs in Ruby and
00:16:08.820 currently the hex PDF library can read modify and white PDFs it disabled handle
00:16:15.820 most passive based encryption formats including the unreleased PDF 2.0 entry
00:16:22.330 format and it has a bunch of other features so it is fully tested as you can see
00:16:30.540 the test suit has about yeah rather than two seconds it's it's not fast but
00:16:36.700 that's okay we want fast code performance wise if you look at the
00:16:50.859 if you look at the the first line here you'll see that the hex PDF actually is
00:16:56.799 the lowest memory usage in this benchmark this is because the file a dot
00:17:03.489 PDF is an encrypted file and most libraries that reach device decrypt the
00:17:09.370 content and then encrypt it again in this case where we just optimized the
00:17:14.559 contents hex bit after something better it just the coop the parts that need the
00:17:20.139 caption and just uses the rest of the parts therefore it has the lowest amount
00:17:25.329 of memory needed if you could be add to a seek solution lies like Q PDF it still
00:17:31.990 has my memory usage this is a benchmark regarding text
00:17:38.590 output performance it's taken from the past and we put lab lab way as you can
00:17:43.720 see there bran assist father soul only generates
00:17:48.940 35 pages per second hex PDF 249 pages per second that's rather good already
00:17:54.519 and but rebirth Labs is still a little bit better but we can get to that point
00:18:00.340 actually hex PDF was at 210 pages the day before yesterday after I put a
00:18:07.690 fix in yesterday at the conference here so what does it look like
00:18:14.639 this is an example for a compression you just open a document execute the optimization task that's built in and
00:18:20.830 then it worked out using the validation or you can merge VRS PDFs equate 1 PDF
00:18:28.090 file at the top and then you iterate to each arguments that you have and append
00:18:33.309 the pages to the output or you can generate the content like you
00:18:38.470 have a canvas on the page and you can draw images ellipses texts and so on that looks like this on the right you
00:18:45.429 see that xpx PDF can also handle TTFN fonts and all the nice emojis there
00:18:52.139 yeah another one for text processing like this you can find out the text
00:18:58.240 positions and the catch I've already said it it's not released yet but will be soon
00:19:15.320 okay next one using tech like rails etc
00:19:20.399 to scale teaching effort online by Anton Dimitrov
00:20:13.230 okay so while they fix the issue we would like to recycle the lanyards to give it to some
00:20:22.080 other conferences here locally and also because
00:20:28.580 well they are not cheap so it's good to help other conferences reduce the costs
00:20:36.000 so that we can have more fun so at a certain point you're gonna find three
00:20:41.580 cardboard boxes at the near the entrance so you can just put it back there and
00:20:48.649 that's it
00:21:05.950 okay we're gonna try later for this one because of technical issues otherwise
00:21:11.080 wouldn't be a technical conference so Ruby for science and open data by victor
00:21:17.710 Shibboleth
00:21:47.730 yeah
00:22:03.050 dramatic yes yeah and
00:22:09.050 sorry I need also my console I I will show you some tricks I
00:22:15.500 think
00:22:24.340 so
00:22:31.810 yeah on the right console
00:22:42.029 every single bogey yeah
00:22:56.309 okay let's start I I will talk of some topic that requires
00:23:05.499 some introduction of myself because you may wonder why he talks about those
00:23:10.929 things so I'll do exactly that I
00:23:16.259 think you can read the text the most important parts is that I write Ruby
00:23:21.639 like for a long amount of years and I love it and I mentor people and I want
00:23:31.539 Ruby to be great again or to stay great okay let's go away with
00:23:37.059 those great again since the only problem I am it's my first talk
00:23:44.019 in English and conference so please don't kill me okay I am talking
00:23:50.230 I'm working for total but I am NOT I'm talking for what I am doing for
00:23:56.840 money I am talking about what what I am volunteered to do and what I what
00:24:04.130 incites me and what I want to incite you so
00:24:09.340 topic is let's use Ruby for data analysis for data processing for data
00:24:15.590 with data visualization for some scientific things like some space
00:24:22.220 calculations for some visualization of some space things and so on and so on and so on
00:24:28.040 you may ask why like we have our data analysts they use
00:24:33.560 one tools we have our scientists they use another tools and what here for what
00:24:39.380 here for us we are just reduced we do our like Ruby but I want to say that
00:24:46.940 currently in like it went in 21st century and Sciences everywhere and what
00:24:55.820 what is important for us to do is like interact with the bleeding bleeding and
00:25:02.240 cutting edge of science and implemented said tones of data is everywhere I don't
00:25:09.800 think I should say more that we are at least we are not like some he kills in
00:25:16.070 our caverns we are programmed in smartphones which interact with reality
00:25:21.410 we constantly interact with reality we have tons of sensors and as I call
00:25:27.650 and what is important for our work is this motor what we do
00:25:36.350 what we needed for is understand things and explain things eventually the computers mostly to people and if we
00:25:45.820 everything else will be automated sometime so but why we should do it on
00:25:53.000 Rudy first because we love Ruby second because I think that Ruby is
00:26:00.620 really seriously expressive language that seriously underestimated for like
00:26:06.350 scientific experiment and that kind of stuff we we all know why why it is so
00:26:11.940 but I think we like we should fix it I think we could at some point we could do
00:26:18.679 something like what DHH did when he invented rails everyone was happy with
00:26:26.519 PHP yeah but then DHH cam came and he said like Ruby and its expressiveness
00:26:34.289 give me the ability to do it a nozzle in
00:26:39.659 another manner and we can do it in another manner we can like
00:26:45.139 not catch the leaders like Python or air or Scala but we can over perform them
00:26:51.720 and I'd like to do it that the things we need to do
00:27:00.740 I'm running out of time so I'll be quick sorry it was not a very well planned
00:27:08.090 there to think that that a cool about it in current Ruby it's like two of tens
00:27:16.529 and tens and tens of sinks is sky root organization
00:27:21.590 they're doing some very cool stuff but mostly catching via spite on these
00:27:27.720 Python pandas with air but some some of the stifle stuff that I
00:27:33.830 mentored this year it's life was like really interesting it was like about
00:27:39.419 space and so on and another thing that I do myself and I
00:27:46.169 wanted to present it but I only 10 seconds have left and I'll just show you
00:27:52.789 something like
00:28:05.260 I need like two more seconds
00:28:46.190 alright so I just want you to see it in
00:28:52.600 Internet's but it was a bit screwed up sorry but I I still sinkers at point
00:28:58.790 about what what I have talked it are valid
00:29:10.540 let's try again with using tech to scale teaching effort online
00:29:40.180 two things I'm working on called marital and heart in T my name is Anton and
00:29:47.000 based in Sophie right now and I'm currently using Ruby on Rails working for a company called cheerio but in my
00:29:54.020 free time one of the things I'm working on is are these two things so let's start with code marathon it's an
00:30:02.240 open source platform for online courses in computer science basically the most important things that you can
00:30:09.080 do it are that you can build courses course content using markdown so this means that you can give lessons grouped
00:30:16.310 in sections you can have text video images whatever markdown allows you to do and you can also define coding
00:30:22.910 challenges for the students which means that they can submit source code solutions for problems for coding
00:30:29.330 challenges and then get instant feedback about how the solution did for a predefined set of tests some more things
00:30:36.350 are that courses are textbooks meaning that a person can define a course and
00:30:41.510 another person can create a classroom based on that course and then can teach students observe what they do and stuff
00:30:47.690 like that very high overview about architecture it's split into two services
00:30:54.970 once I have the platform which stores course content user accounts challenges
00:31:01.580 and so on and on the other side you have a greater both for rails apps and the
00:31:08.210 greater is responsible for judging this source code solutions it compiles the
00:31:13.220 source code if needed runs it and runs it in a sandbox environment for which music docker borrowed some code from Vow
00:31:21.110 who is one of our emcees here should check out his github account the
00:31:26.240 platform talks to the grader when it sends source codes get back some status pretty simple or happens from API that
00:31:33.320 the grader so of course I have plenty of ideas for thanks to that so I quizzes some
00:31:39.420 gamification for the students more programming languages to be supported and better security in some areas of the
00:31:45.810 to apps and many more things there is time for that so the code is split into
00:31:51.960 repos in my github account publicly available everyone can check it out so where is it
00:31:58.350 used currently I use it for something called heart intake under this domain
00:32:04.020 karting Telkom it's basically office 3 preparation for taking interviews so
00:32:09.840 whoever is going to avoid company and I should go usually through the interview so it teaches the amalgams system design
00:32:16.710 questions the visual stuff that you get in most places and some interview specific tips because over the years I
00:32:22.860 found out that even there is queue for candidates could fail an interview due to not being prepared for the specific
00:32:29.130 formative from the interview so finally some quick stats
00:32:35.030 hearten take used to be hosted using a CMS solution until recently and for the
00:32:41.370 last two years more than forty thousand people studied for their interviews prepared in one way or another using the
00:32:47.730 content and just twas Sunday I switched from the CMS to code merit on the platform that I just talked about Wow
00:32:55.050 and since Sunday we had like a thousand registered users trying the content
00:33:01.500 submitting solutions which motivates me to probably add additional features that
00:33:07.320 I have in my mind so in summary just wanted to point out that it's great
00:33:14.460 that nowadays using technologies like rails all the other stuff as I mentioned and maybe something else whatever you
00:33:20.820 prefer you can build with not that much effort things that can have
00:33:26.120 noticed you predict impact but it's a significant impact on big number of
00:33:31.140 people who weren't staff from you if you have that knowledge in your mind and want to pass it on
00:33:37.100 and that's it for me
00:33:43.830 thank you so
00:33:48.930 yesterday's talk was about opening a calculator let's open a calculator with
00:34:13.220 I'm sorry for missing my talk yesterday anyway let's start
00:34:24.870 your Makos if you have one if you have an existing rails 4.2 Blas
00:34:31.140 application please just start a rail server on the
00:34:37.410 default port and then visit the following address there is nothing dangerous in this trick
00:34:44.850 I promise please do it now because it's going to take like 60 seconds to start we're
00:34:53.490 going to switch to the next slide so let me explain how the DNS rebinding
00:34:58.950 attack works domain name servers are like variables and my name is variable
00:35:04.500 that stores IP address in it and here we have a classic race condition because we
00:35:10.050 can change where the domain name points when the page is already loaded so this
00:35:16.290 page is going to be loaded from my server 52 points 17 its own but 67
00:35:24.060 seconds later browsers going to refresh cache and the same genetic binder is going to
00:35:32.010 point to localhost
00:35:37.160 if you have a calculator by now please raise your hand it's going to take 30 to 60 seconds and
00:35:45.180 probably that demo is down if many people visited it
00:35:52.790 otherwise you also can create a new application if you don't have a 4.2 version by now
00:36:01.610 it's going to look like this if nothing works I tried it yesterday on seven
00:36:08.100 different people and it worked basically if you have our Iranian development version of rails on your
00:36:14.490 laptop any webpage can exploit your browser can exploit your system and like
00:36:21.080 install malware keyloggers yoga Bitcoin lick your SSH keys and
00:36:26.140 stuff like that I think this is a big problem and that's why I submitted for a lightning talk
00:36:31.779 yesterday I didn't know how widespread the issue is until yesterday when I try it on like it worked it worked seven out
00:36:39.309 of seven times do you have a calculator anybody
00:36:46.289 seriously you didn't run the code okay
00:36:51.390 no it's for all of us the demo is just not perfect and it also can okay
00:37:00.660 it also supports web console better errors it supports pythons verb Zook and
00:37:06.010 it leads to critical code execution I mean you're completely pwned all your
00:37:11.319 data is hacked and it it works for any browser any OS and any port not just
00:37:17.529 3,000 it will just take a little longer to enumerate your ports I'm not gonna do that it works not just for web apps it
00:37:24.099 works for readies memcached elasticsearch but those ones are not so critical because we aren't going to get
00:37:31.240 critical code execution to them and 60 seconds is very easy to carry out with
00:37:38.049 very little social engineering the issue is known like for two years and
00:37:44.609 there were some public posts about it but there were no fixes in core for a
00:37:51.640 reason because it's not erect no rails no web console because it's browsers fault and DNS
00:37:57.369 design donor ability it's like 50 percent of DNS and fifty percent of browsers the bad news are they are not
00:38:03.700 going to fix it anytime soon that's why I want to ask you to shut down your rails applications right now and
00:38:09.970 implement this fix the link is going to be on the next slide the fix is very simple we are going to check if the host
00:38:16.990 we receive is in the whitelist at least by a good thing like math assignment and
00:38:24.160 stuff it also very helpful for DNS rebinding
00:38:29.180 this approach is state-of-the-art and security so for full write-up you can visit the
00:38:36.950 blog and see some links and this this snippet on the previous slide
00:38:43.000 it's also there I really hope rails core will listen to this and probably made
00:38:48.950 some protections even though it's completely not related to Rails it's just the way DNS works and
00:38:55.000 I'm not going to blame anyone in this vulnerability but you guys could be
00:39:00.350 pwned for the last two years and all the SSH keys could be compromised like even
00:39:05.420 when you read some blog posts online and you have run in rails in development or like some other web applications that
00:39:14.000 allows a ripple in the browser this is the problem okay I'm done
00:39:29.369 okay last lightning talk for today Phil wars do better-known technical talk
00:39:36.579 about psychology music and software development by alex
00:39:42.539 euros this is working hello
00:40:11.339 like this Oh No okay now what are you
00:40:16.679 doing no don't send wing
00:40:30.710 sorry for that right hi I'm Alex and my talk is not so
00:40:38.540 much a lightning talk at all it's it's more like a little piece of amateur stand-up comedy in a format that vaguely
00:40:46.190 resembles a lightning talk and first of I would like to ask the audience for permission to to do seven minutes
00:40:52.670 instead of five is that okay because my the thing I have prepared doesn't really compress into five minutes little I
00:40:58.250 would do it but it you miss out on all the fun at the end it's seven minutes all right okay thank you very much okay off we go
00:41:06.490 so I'm going to talk about a simple idea and like all ideas it's not original
00:41:13.640 it's not my I stole it and not shows this thank you very much for your attention I'm done no I still have some
00:41:19.849 time so let me elaborate what what I mean by good thing frustration is a good thing it's good in the sense that it can
00:41:27.140 be it can indicate that you're on your way to increasing creativity and creativity
00:41:33.970 is certainly a desirable outcome when it comes to a
00:41:39.380 software development so it's actually this version of the statement is a bit
00:41:45.230 more word worthy but more accurate it's not frustration that leads to creativity
00:41:50.690 but there are some techniques like constraints and disruptions that cause increase in increase in creativity but
00:41:57.650 also lead to frustration so you need to get past to the frustration in order to reap those benefits you need to get
00:42:04.550 comfortable with feeling uncomfortable so let's talk first about constraints one example is a code golf challenge
00:42:11.390 like the one just like the one hosted by a by a bank that shall remain anonymous because they don't endorse me the
00:42:19.460 restriction they oppose on on the program the arbitrary restriction of using as little as few characters as
00:42:27.260 possible actually forces you to think outside of the proverbial box and thereby discover some nifty hacks and
00:42:34.490 tricks along the way another well-known restriction is a time restriction of course I
00:42:41.980 think we're all been there that's exactly the kind of mood I was in when I was preparing this
00:42:47.780 talk yeah as I mentioned the idea is completely stolen from this awesome TED
00:42:54.050 talk I encourage everyone to watch it it is by by a guy called Tim Harvard and
00:43:01.330 london-based journalist and he presents two stories that are relevant to to
00:43:08.870 software development among other things first story is about this piece of
00:43:14.510 psychology research from the u.s. there was an experiment conducted on two
00:43:20.030 groups of students the group on the left is an homogeneous group they all know
00:43:26.360 each other they are all in the same sports club whatever they know each other well they and the other group is
00:43:32.360 more diverse in the sense that there is a stranger there that that doesn't know the others so
00:43:38.710 they were both tasked with some with some game which involved creative
00:43:45.170 problem-solving by way of communicating and sharing information and collaborating which is not unlike
00:43:51.430 software development and the results was that the heterogeneous group or the
00:43:56.900 group with a stranger actually performed better but felt worse so they in their self-assessment they
00:44:04.280 said we have doubts and we don't we don't feel very confident about our results the other guys were having a
00:44:10.310 blast they're really happy with their results but they were they actually measurably performed significantly worse
00:44:16.340 so the takeaway from that into into our regular day-to-day work is that
00:44:22.550 maybe we should try and seek out that uncomfortable pairing partner that's that person that
00:44:29.720 always asked always questions your every assumption and criticizes your every
00:44:34.790 idea and we might not like them really well not like working with them but but we should be working with them because
00:44:41.060 we might just achieve better result and more creative and more just higher quality code and if you
00:44:56.030 involves is about helpful disruptions this person
00:45:01.370 you see here is Brian Eno the Brits among you will know him is his a musician and composer and record
00:45:06.890 producer who in the 70s together with Peter Schmidt came up with this deck of index cards
00:45:15.100 designed to help musicians and bands to overcome creative block so when they
00:45:20.900 were really stuck in something that we just couldn't continue playing couldn't continue writing their song and they
00:45:26.240 were just out of the flow the idea was that they'd pick a card at random and just do with it whatever the card says
00:45:31.820 the cards are full of full of nifty aphorisms very short
00:45:36.880 haiku kind of things and the idea is that it gets you out of the out of your process it interrupts you it
00:45:44.090 inconveniences you deliberately but that can help you get over the hurdle and get
00:45:49.880 back into the flow and funny enough these things are completely applicable to any kind of creative endeavor
00:45:56.030 including and not limited to software development and I'm not kidding these the examples we're going to see I call
00:46:03.440 them a developer edition but there is no developer edition this is verbatim from the musicians deck of cards which you
00:46:09.710 can find online minute print them and use them so some of some of these examples are painfully obvious like take
00:46:16.310 a break get some fresh air and then the solution will come to you when you're stuck some are some of a practical
00:46:22.520 advice or practical wisdom
00:46:29.290 found doesn't it and some of our fresh point of view
00:46:34.630 it sounds almost like a Chinese proverb or something others sound just like Yoda
00:46:40.490 got high on fortune cookies and others are appear to have been taken
00:46:47.960 straight out of an agile handbook it's for musician right and it takes
00:46:53.180 talks about caring about pair programming in session essentially so it's applicable to us as well some are
00:46:58.490 motivational and inspirational and encouraging and others are highly
00:47:04.580 unconventional and yet others are very actionable this
00:47:09.760 is really easy to try in fact if staring at your code for half an hour doesn't help at all try disabling your syntax
00:47:17.110 highlight and change your codes code editors font to something ridiculous like I don't know Comic Sans
00:47:25.380 so it will hurt you it will hurt but it might just help you shift your
00:47:31.090 perspective slightly just enough to get over there to get over the block and to look at your code from a different angle
00:47:36.940 please go thank you and if Comic Sans doesn't hurt enough try copperplate
00:47:43.350 that's it thank you very much thank you so much there was soup I'd love some feedback thank you
00:48:04.369 you