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