XT-16 Conference Notes
XT-16
XT-16 has been an amazing single day conference organized by the friends at http://juxt.pro. Almost everything at the conference has been special: let's start from the location. The conference was held inside a well known automotive proving ground just outside Millbrook, a little village in the English countryside. After clearing security (including covering each and every camera with special stickers to prevent taking pictures) a small van took us to the "Pod", a semi-spheric structure where the conference was taking place. Unfortunately, apart from a little glimpse of the tracks and the far away noise of the powerful engines, we weren't able to see any Ferrari testing from there :(
At the Pod we have been welcomed by the wonderful smell of the Bogota Coffee Company. I've enjoyed a couple of high quality coffees just after registration and one more in the afternoon: can't think of a better way to digest the hog roast sandwich we had for lunch! Just before kick-off, a meditation session was available to attendees in a separate room to prepare the mind and soul for the conference. The welcome pack included the t-shirt, a bottle of specially brewed XT-16 beer, a signature glass and ukulele strap. A whole bunch of ukuleles were distributed in the room along with a little guide and chord progressions for a couple of songs. Ukuleles played a central part in the conference yesterday, being used by speakers, hosts and guests to all play together on stage!
During the day the signature beer was always available (including other drinks) to ease the task of un-packing the dense and thought-provoking talks. Drinking carried on with pizzas in the after conference, including Sam Aaron spot-on dynamically generated grooves. We were finally taken back to the train station (and Milton Keynes) inside a classic style double-decker bus. If you don't mind the unreliable wifi and the overcrowded toilets (two minor points in my opinion) the rest was perfect.
Two of the guiding themes for the conference were "playing" and "exploring". The ukulele played a central part for the first aspect, along with the unique possibility to relax throwing axes (!) and archery outside the room. The speakers often explored topics inside and beyond Clojure, ranging from "the roots" (HÃ¥kan RÃ¥berg - In Search of Simplicity) to "the future" (The Humanity of Our Industry - James Woudhuysen). The talks were all high-quality, entertaining and interesting. I have a few favourites (personally) but your mileage may vary.
I was literally blown away by Karsten Schmidt, HÃ¥kan RÃ¥berg and James Woudhuysen. The density of information in those talks will take me years to unroll, if ever. More understandable but still very enjoyable talks: Tommy Hall and Sam Aaron. Let me spend one more word for Sam: I started attending his talks sometimes in 2012 during the Overtone era. Despite his talks tend to be a repetition of the same themes over and over (and he explained this on stage), Sam continues to be an inspiration for me about how to look at our profession from a different angle. His talks are always inspiring not matter what.
After a quick introduction by Malcolm and Jon the conference kicked off. I took notes from each talk that you can see below. I written them quite fast and I couldn't pay too much attention to syntax and good English. Apologies for that. Although they are not perfectly written, they are certainly sequential and made in such a way that you can follow the main points of what was said. Many thanks to JUXT, I'm looking forward to XT-17!
01 The state of open source - James Lewis
where does the best software come from?
open-source, the past, most-sold? What is best
thompson, ritchie, multix, interactive OS
bell, move away from batch systems to interactive systems
new operating system based on multix, unix, a success story
C is B with data types, dennis ritchie wrote it at the same time as unix
not fast enough for system programming language
successful software: preent and future
spring framework is extremely successful
spring in the age of XML configuration
a response to J2EE by sun
they seems to reinvent itself everytime, with spring-boot for example
back to the past: fetchmail a well documented utilty
the cathedral and the bazar describes the software dev of fetchmail
cruisecontrol the integration sever, actually by thoughtworks
one of the first big agile projects in the world, with people in us, india and uk
cc was a response to create automation around integration of software coming from different teams
jMock oriainal story: the servlet API was horrendous to deal with in testing
you had to implement every single method of a huge interface
late '80 is when linux dev started, a new open source unix kernel
linux was an aggressive collaborative software project, 1k people working on the same project
rich gabriel wrote an article "is better worse or is worse better"
linux broke the phased software process development
all bugs in open source are shallow, more eyes looking for bugs, more likely for the bug to be released
the technology radar
technology radar data back to 2010, what are the trends in open source?
2010: distributed vcs, 2016: docker docker
clojure on the radar, appeared 2010, then JVM as a platform in general
trial in 2012, and adopt in 2014, but then nothing else.
is because TW is biased by using a lot of clj? not sure
let's compare this to JS
JS first heard in 2010, then always mentioned till 2016 with reactJS
nodeJS is similar, touching on every year on the radar with different aspects for it
NPM building game: pull a name, if you can npm install it, you have to drink.
you'll be surprised about how many things getting installed
next observations about microservices
you can see gradually building up on microservices tooling and infrastructure
but microservices never got into "adopt"
but since 2013 there is a huge explosion into services related to microservices
monetize the open source movement
microsoft recently open sourced a lot of things, arriving at virtuous companies by OSS
many companies are opensourcing on large scale: should be worried?
what concerns?
they opensource for attracting good people
but the community they attract is a closed community, leaving out people who are not github junkies
TW is for example looking into promising school drop-outs that cannot afford going to school in india
at the beginning it was someone scratching an hitch
from the '80 onward companies got interested to monetize this effort
the future
can we interpolate how the future looks like?
humanity augmented: software augmenting aspects of humanity
VR, augmented reality
reptile projection: laser scanning directly the back of your retina
a way to stimulating your retina directly to experience true vision
security, privacy, transparency is another important aspect for the future
autonomous corporation: charles stross book, accelerando
automating creation of companies
nano-technologies and the rise of the robots
"we are living in the future (it's just not evenly distributed yet)"
ska square kilometer array: a radio telescope bing built atm
ska software is open source: you can find alien from your mobile
industry seems to be moving to this utopian future
who is going to create this future? at the moment: FB, google, IBM
it was not very different 30 years ago.
the cathedral is dead: open source is the way forward.
companies are open sourcing more
as developer we'll continue scratching itches
better way to predict the future is to invent it (Alan Kay)
02 Computational Design - Karsten Schmidt
too much going on visually in this talk, not many meaningful notes
postspectacular design practice since 2007
computational design, turn design into a process to dissolve things into their essence
his work on the boundary of commercial and art-oriented
open source is one the clearest idea of contributing actively to society
"the limits of my language are the limit of my world" Ludwing Wittgentstein
atari machine was a 1.97 MHz and quite limited compared to current hardware
started programming on paper, because there was 1 hour of programming per week
idea of going from nothing to big things
like points: in one dimensions is just a point, but in 2D can become a line and so on
bezier curves shaped randomly generated points in the 3D
after you get the basic shape, by mixing them, you can get letters and so on
toxiclibs.org, home made code
300 building classes in java
several examples of generative design, like longest UK led wall
action diffusion simulation
from 0D to higher-D
thi.ng, largely done in java
over the years, going back to other languages that enable more platforms
visual programming language with 8 different words, can be used in the browser
idea of branching taken to 3D object evolving into something else
thi.ng/morphogen project
8 different operators: split, scale, pull, etc
pick a segment, then using the operators (like reflaction) one could create a grid
transplant object from one design to another, automated by genetic algorithms
the grow is then verified for fitness creating incredible shapes
every object is 3D printable and depart from a deterministic tree-structure
using genetic programming to evolve a "logo"
javascripting implementation of forth in the browser
@forthcharlie
charles moore: invetor of forth
almost no syntax, just basic stack rules
implementation of forth in javascript
interesting approach: data first, action next
the "." operator pop the head element from the stack
writing pixel shaders in forth through charlierepl
forth compiles itself to glsl and you can inspecting it
the more iterations are added the more the painting becomes complex
just math applied to basic colors
why forth? super-light, very simple, multiple devices
the same process can be applied to audio!!!
showing a synth and composer in 50k of forth code
brain melt.
03 The Search for Simplicity - HÃ¥kan RÃ¥berg
the search for simplicity
hakan raberg
from an RDF semantic web project
regain sanity, lower abstraction, remove metalevel, go back to school
early '90: amiga 68k assembler, then x86 assembler at school
what has changed in 20 years?
not necessarily going into retro-programming
asm-one simpler amiga editor for assembly
guru meditation!
devpac 3 "the new standard" from 1991, an assembly IDE from HiSoft!
Borland Turbo Assembler!
TIOBE today: assembly language is back, it's climbing! Probably for IOT or mobile
Akeem Scheme
Scheme R7RS small, a version of modern Scheme from the last 5 years
It's JIT: code as data
5636 LOC x86x64 bootstrapping
1611 LOC Scheme on top of that
glibc based, for sanity
there is no assemblyUnit! Using diff and "entr"
the unit tests is a scheme file looking into the golden master for diffs
basic mark and sweep GC, after reading a lot of papers, decided to go for something simple
2 months full time, then closed emacs and moved on with life
Modern x86 assembly
16 registers and 16 XMM registers
CISC instruction set, 1-2k instructions! Big big language.
Find your subset and feel comfortable with it.
mov, jmp, add, xor, for example and many many more.
stack grows downward
return everything in rax, rdx registers
scheme primitives are using assembly macros
use assembler to assembly data to build up bytes
for a simple lambda:
estabilish a frame
you don't want to go into the RED ZONE!
take the bytes that have been assembled and compile them
old school scheme technique to pass things around using conventions in bits
convention to clear registers by "xor" them
conclusion
modern CPUs are so complex that down to the hardware is just an illusion (again)
need to be strict about mutability, if you don't know what's going on you trash the CPU
conventions are extremely important to scale it up
you need to build the layers up before doing anything useful
04 Unleash Your Play Brain - Portia Tung
unleash your play brain - portia tung
play for life, working knowledge of play
play assessment, play or nay
why should I play, do I have the permission to play
stuart brown M.D.: seemingly purpoulsess, voluntary, inherent attractive, time flies by
reduced sense of self-consciousness, potential improvisation
playing: shapes organism brain, makes smarter and adaptable, foster creativity
seeker VS skeptic, knowhow-desire: can/cannot play, want/wouldn't play 4 quadrants
opposite of play: work, punishment, TV, middle-management, depression
world: without movies, fairy tales, or anything.
does work foster creativity?
business in Chinese means manning of life
spring source never met face 2 face, how did you decided how to indent square brackets?
they agreed on a book they believed it was good. They became great thanks to that level of collaboration
adult playing: breaks down barriers, open mind to learning, create social connections, joy and hope
5-10' to play per day is enough, 1 day of play lasts one week. Little and often is better.
the chimp paradox book, Dr. Steve Peters
the "chimp" is in the limbic (core) part of our brain.
if the imput go through the chimp is emotional thinking, "staying alive"
the limbic system is the lizard brain, very very concerned about bein dead
think about a toy you remember from your childhood: how do you feel after that?
nostalgic? embarrassed? happier? and so on.
find your "chimp" and play with it. externalize it and try to name it.
distinctive thinking is very valuable
alternative way to look at intelligence: 8 different types
in addition to school mantra: reading, writing, arithmetic
our identity risk to become tied to only reading, writing, arithmetic
growing tomato plants from a seed is a form of intelligence
as is great visual spatial awayness, music, and so on are all form of intelligence
no longer do we have IQ, we also have playing IQ
playing: anticipation, surprise, pleasure, understanding, mastery, poise
stop distinguishing between playing and learning: you'll see people growing a little bit
05 Adventures in User Interfaces - Kris Jenkins
adventures in user interfaces
12-18 months chris has been in other techs
1995 javascript was invented, at the time we thought it was for popup boxes
it was great for doing stuff that didn't really matter
until 2001: into the time of jquery, turning javascript into a single platform
until 2006-7: gmail, the first mainstream thing that you could do in the browser
we suddenly realized we could build entire front-ends with it
with angular: get away from low level dom manipulation stuff into raising abstraction
then our expectations just grown: how far we can take things
but reality didn't grow that fast at all, javascript is not keeping up
there is hope
wave of new things coming, hope for saner languages
new flush of langauges for the browser to build new things
first: because they have given time to mature. Celebration of hammock time. Like clojurescript
second: other languages were trying to avoid JS, writing something else.
clojurescript, elm, purescript: we have to build with better tools
also bringing new architectures, way of thinking into play
the biggest idea in programming is data and data modelling
running a wikipedia search example: it returns an answer which is the straight page, or a list of possibilities
if you add an extra part of the description coming back all of the sudden, the compiler said nope.
it's a good feature if your language has a way to describe data and comes back with messages about it
that kind of description of data comes usually with academic languages that are now more mainstream
2 big ideas: data and functions. But there is another important feature: illuminating design choices
the structure of the function is separated from the body of the function, so you can read them separately
the type declaration is the shape: the icon function takes some dom and returns a string (for example)
the body then executes that declaration into a code implementation
instead of string->string it takes an "Icon" and returns "HTML". much more precise.
elm is a language with a particoular idea about how architecting web application should be done
example architecture: events in -> state of the world -> f(state) -> another state -> out-html
functional architecture: f(data)->data or a f(data,data)->data,tasks
internal-model: changing the data in a html form is changing a data structure underneath
a progress-bar: a function from data->int that takes exactly the same form-data model into another shape
elm-rays example: traking the pointer position on the square. Architecture is the same as the input-form.
seats experiment live: you can connect, give your position and your position in the audience shows up on screen
a function(active-seat,name)->some SVG to render your seat on the canvas
now we are going to change it so that if you answered questions you show up in red instead
now we change the seat render so that we render out the question you answered
elm: haskell made accessible to the mainstream, way less scary learning curve
06 Unlimited Register Machines - Tommy Hall
daniel dennett "intuition pumps and other tools for thinking" book
URM unlimited register machines
program, a finite sequence of instructions
machine we are going to look at: (end), (inc n m) (deb n m p)
end instruction closes the program
deb is decrement and branch: is the only branching instruction in this language
state: a program counter, some registers, the program
computation is a sequence of states
first program example: a few steps through simple registers that are incremented
this first program is just recurring into registers to sum up the two initial numbers
there is a graphical representation for a program like this.
the double arrow is a branch on zero condition, single arrow is the default sequence
showing a graph for a program that is doing multiplication
let's build a DSL in Clojure for this simple URM
urm->fn is the macro taking our instruction and creating a program
the program can be invoked as a function and so on
lecture notes: computation theory for the computer science tripos part 1b
encode everything as numbers
godelization: key move in completeness theory, a computer has a way to express programs in numbers
we take a program, rapresents in number, feed it in a URN, that it will express the result as numbers
we need first a way to represent "pairs" as binary numbers
we can code pairs with code-pair clojure function and a decode-pair[binary] that brings them back
once we got pairs, we can get lists. Showing a way to encode lists and binaries, for example 0 is null or empty.
pairs are used as cons cell binaries: two zeros rapresent a 2, three zeros represent a 3 and so on
all separated by ones, that's more or less the idea.
next step: encoding the end, inc and deb instructions considering them lists: (inc i j)
(inc i j) can be encoded as a binary and when decoded can be executed
0 is used as the terminator, so it has a special meaning.
there is a way to decode-encode pairs (ending with the * symbol) which include or exclude the zeros for encoding
stacks are really good ideas
adding 3 more instructions: copy, push, pop to implement a stack
once we have these new instructions we can push and pop from registers
we can make the URM an UURM, an universal unlimited register machine
like a good turing machine is universal, we can create programs that can execute other programs
next steps
graphical editor and simulator
faster interpreter for 3 instructions URM
property based testing
book reference: martin davis "the universal computer"
book reference: computability by Cutland
07 ClojureScript without Borders - Frankie Sardo
rebuilding inventory written in xml and xslt
rewritten with clojure and datomic and able to pull the nice to have things
around 20k loc of clojurescript to build the art galley CMS
one goal was to add the mobile friendly site
they wanted to access the inventory and modify it from the mobile app
it looks simple to just send the same thing to mobile, but it wasn't
how to port the existing cljs code into a mobile app?
using an android emulator to browse the site and it looks native
the good part is that you can use chrome to just debug it
changing things and see things live when you change things
the next level is to evaluate some code on the IDE and see that reflected on the running app
the live demo showing that re-evaluation of clojurescript in the IDE is changing the app
another good point is the possibility to send a bug report along with the state of the app at that point
same goes about sending instead the list of the last 1k states so you can see how it get there
how hard is to create a notification when doing web deveopment, or take a picture?
when the REPL is connected, with a few lines you can set an alarm, make a phone call etc
exploring the way the application is rendered
loading the same application on ios, android emulators and a real browser
click on a button bug: a button doesn't work but it should sumbmit a form instead
so I go in the application and print an alert instead. The state is the same
but the code has changed to fix the problem
another example
changing the order of graphs on the page to put the pie-chart at the top
what if something broke on the mobile app?
so wouldn't be nice for the change to be propagated to all applications at once?
the code that is enabling this is figwheel BTW
it seems to be the only way to do development for multiple platforms at once
the shorter the feedback loop the more you stay in the loop
the reload-demo is available open-source to check that out
more tools
devcards
built on the idea that a view can be played as a series of application states
look at how the view behaves while states are changing
edge cases are showing up in all the possible details in the case.
microsoft
MS created a tool that allows you to change the JS and that gets deployed live right away
08 Looking Beyond Clojure - Martin Trojer
looking at some of the typed languages with clojure glasses
all roads lead to haskell
extremely subjective distorted reality bold statements are just about to happen
clj pro for about 5 years, some other FP experiences here and there
worked on several >30k LOC of Clojure projects, mostly webapps
the must be a better way
people who adopted FP are explorer, rejecting the status quo
apparently when you take that lead, that voice in your head doesn't go away
stuff that I really value:
refactor with confidence, being able to do change, being confident
code must scale: it shouldn't be a massive problem for the code to grow
it should be possible to do code changes 3months-3years later without too much remembering
what to look at when shopping new languages?
higher order functions
no null, too old for nulls
values instead of variables, immutable data structures
good type systems, controlled side-effects
let's talk types
very vague term with a lot of misconception
c-style types: quite limited
ml-style: modern type, what you really want
what is a bad type? they are "punitive"
there is so much typing going on that I feel like I'm working for the compiler
it should be the other way around clearly
difficult to express types, lot of repetition and so on
good types
simply describe a lot more of what is going on
look for: higher kinded, rank-N, traits, type-classes and so on
controlled side effects
Kris Jenkins: "side-effects are the complexity iceberg"
Knowing what part of the code is pure is very important
what else is out there
can it run in production, how do I deploy
how do I log, how to profile and so on and so forth
how are the stack traces?
Haskell
full and mature compiler
improving tooling history: after so many years of haskell hell
after cabal era
there are also quite a bit of libraries, even good ones
some down sides:
lazy evaluation sometimes bites you from behind: time/space reasoning
what about the M word?
it turns out that it's very important construct, but the implemntation is so simple
it's just about implications of that idea
elm
mature (ish) fantastic tooling, opinionated
faster and better code
really nice compiler errors, nothing like that in other type systems
very opinionated, so better use the elm architecture
some magic to make your life easier
coming from haskell (equality signature for instance) you'll go: what?
but you don't need to go full-haskell
FFI: when you want to call out is not exactly there
purescript
JS won, deal with it
influenced by haskell
lightweight, not a framework
FFI a little better, easier for you to blows your programs tho
runs well on node and browsers
really nice react wrapper
new and immature, with a small community
lack of library
09 Communicative Programming - Sam Aaron
languages are not that important, ideas are
how do you think about programming
standard engineering: efficiency, not the only thing
what other efficacies there are? what about communicative power?
communicative programming
business value to make people dancing is to keep them dancing
the parameter becomes: how a language should be in order to keep people dancing?
the other aspect is how to change the language so that we can communicate about applications
how about education? kids don't care about quick sort or bubble sort
kids have their own idea about the world, the language needs to talk their language
human interaction with programming environments
how to take those ideas into education and arts
a program easy to understand is easy to communicate to other people
art and expression
code is a powerful media ever invented, why do we use it for business only?
you wouldn't use English for contracts only.
what would be the possible targets to use code to target other aspect?
how to talk with code, how to dance with code?
how to think
not using the hammock time like Rich does
specs was really deeply thought, and that was ok
but you could go for a walk, and while walking taking notes and keep thinking
the office space is the worst place to think, when I want to work I go out of the office
physical activity is really important for thinking
practice a diary: communication happens over time
going into a school and say this is your super learning curve is not interesting
how to simplify and package idea in a way anyone can understand?
it's really easy to come up with ideas, but how to find a way that a child can understand them
so having a lot of ideas all floating around concurrently and walking is a way to think about them
this solves the problem of simplifying adoption of an idea or application
state of mind
when designing a system there are ideas that are greet at the whiteboard, but they turn out bad in practice
the constraint of the use case are fundamentally important about thinking the solution
a school a such a constrained environment: whatever great idea it needs to work in a constrained environment
every day you should practice what you preach: use the product you create and experience the pain
the flow of the context gives more ideas that flow then into a new practice and so on
examples
boilerplate code is nuts, annoying and useless
play a sound should be the simplest possible action
a loop should be as easy, couple lines of code
but having two playing at the same time is not possible apparently: they are sequential!
so our environment should know that things evaluated at the same time should play at the same time
the live_loop construct is a new DSL that applies that concept, playing together.
sleep 1 for example, doesn't work with music really. so it's simply only on the surface
follow sam playing loops at amazing speed
live performing has shaped the DSL for making music in the way it is now
education needs for children shaped simplicity in a similar way
10 The Humanity of Our Industry - James Woudhuysen
deconstructing and reconstructing IT
how can anybody predict the feature?
what is it that I don't know that I don't know
younger him on the oil rig platform
reported about piper-alpha about the most dangerous time was off-time
accidents tend to happen
you can predict the future a bit
in design land everybody seems to be sure about their intuition
rationality and instinct are important to what you are going to do next
is it right to future proof your business?
the answer is don't!
you get the idea that future is something that is happening to you instead of everybody
if you look at the news tho, it sounds very bad: health panics is everywhere
are fears justified?
banning a lot of stuff in the UK, this is the british response
the great thing about innovation is that you don't need to think about it
donald tusk: because of the brexit vote, weare dealing with the end of civilization?
hardware business review: what the manager will say about bad things tomorrow is coming from here
prototypes, experiments is the way you convert unquantifiable uncertainty into quantifiable certanty
you should not future proof your business
mith about IT
this one was very difficult to note down, very very dense, load of words and ideas.
a language is what defines us as a human being
is it instead our playful activity?
but the way economy defines that is through work and industry
fire invention brings problem, but overall this is not a problem
attacks your collegue in IT when they say: exponential and disruptive
back at 1957-58 at the time Lisp was invented: first pressurised atomic reactor, double helix envealed, laser and so on
and today we say that technology is really accelerating? if anything is slowing down
much deeper and subtle changes
HR: small H and small R, more important to your life
IT will destroy work
in 2013 it was predicted that 47% of american jobs are in high risk for automation and 19% are in medium risk.
the luddite triangle: stop down being critical about IT
the broke up pieces of equipment in 1779
teenage scribblers are saying this, risk thesis that IT will destroy millions of jobs
one of the grat things about algorithms are neutral, unbiased and fair
the financial time compared algorithmic management to most rude forms of exploitation
IT as fingersmiths
unemployment in USA and Japan dropped but in Spain and Greece
IT is not destroying jobs
it is not happening because of barriers to innovations, lawyers and so on
and above all the obsession of risk
if you want to carrying on codeing and move higher in the salary scale, it's time to get serious about forecasting
look at the slow of innovation: when will you able to buy a personalized medicine at booth?
read an innovation book each month, that alone would be an innovation
why innovation is not happening at the pace we expect?
crisis of capital investment in the west and india
we get too few of them
technological unemployment: there is not enough tech going on
even IT: gdp is dropped 1% since the beginning of the century
without the capital investment you're not going to get the innovation you expect
USA is spending proportionally less on IT than 15 years ago
the last few years USA productivity went the same instead of increasing
laboratory is too risky
being bought is just around the corner, it's too easy to just buy a company than investing in innovation
trump means a slump: there will be anyway, bad strategy, bad management, too many wars
germany and USA are very reliant on immigration than automation
agile now means traveling light, not making investment
it's the lack of IT that is the danger for our future
hardware is as important as software in order to keep productivity up
investing in air quality, lighting, all factors are important
more IT future fields
less agreement, more heat
look at biometrics
eye tracking, gestore control, brain computer interfaces
open a file for biometrics, you're going to work for that field pretty soon
mobile-first interfaces
cyvber security
quantum computing ecryption
insect drones?
wereable improvements: medicalisation of our society is pushing us to new frontiers
3D printed villas in 3 hours
building insoles with sensors to improve your walking
robots are not coming: small and more precise, but nowhere near taking over more than warehouses










