Slide 1

Slide 1 text

Hello, I’m Francesc

Slide 2

Slide 2 text

Machine Learning on Source Code #MLonCode

Slide 3

Slide 3 text

'112', '97', '99', '107', '97', '103', '101', '32', '109', '97', '105', '110', '10', '10', '105', '109', '112', '111', '114', '116', '32', '40', '10', '9', '34', '102', '109', '116', '34', '10', '41', '10', '10', '102', '117', '110', '99', '32', '109', '97', '105', '110', '40', '41', '32', '123', '10', '9', '102', '109', '116', '46', '80', '114', '105', '110', '116', '108', '110', '40', '34', '72', '101', '108', '108', '111', '44', '32', '112', '108', '97', '121', '103', '114', '111', '117', '110', '100', '34', '41', '10', '125', '10' package main import “fmt” func main() { fmt.Println(“Hello, Chicago”) } What is Source Code

Slide 4

Slide 4 text

package package IDENT main ; import import STRING "fmt" ; func func IDENT main ( ) package main import “fmt” func main() { fmt.Println(“Hello, Chicago”) } What is Source Code { IDENT fmt . IDENT Println ( STRING "Hello, Chicago" ) ; } ;

Slide 5

Slide 5 text

package main import “fmt” func main() { fmt.Println(“Hello, Chicago”) } What is Source Code

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

… a self-hosted server for universal source code parsing, turning code files into Universal Abstract Syntax Trees

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Parsing Go in Go is easy Parsing Java in Java is easy Parsing Go in Java is doable … I guess Parsing Java in Go is interesting … Parsing C++ in Go is why are you like this? Parsing X in Y

Slide 12

Slide 12 text

N parsers in 1 language is way harder than N parsers in M languages

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

● Good UX ○ Intuitive commands, flags, args ... ○ Reasonable defaults ● Frictionless installation ○ As few dependencies as possible ○ One line to run is good ○ No lines to run is even better DevRel: reducing time to “wow”!

Slide 16

Slide 16 text

docker run >>> apt-get + pip + brew + ....

Slide 17

Slide 17 text

Bblfsh container docker run foo container foo

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Docker in Docker! Using Docker-in-Docker for your CI or testing environment? Think twice jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

Slide 20

Slide 20 text

Docker in Docker! However, contrary to popular belief, Docker-in-Docker is not 100% made of sparkles, ponies, and unicorns

Slide 21

Slide 21 text

Actually … docker run \ --privileged -d \ docker:stable-dind Later on ... hub.docker.com/r/library/docker/

Slide 22

Slide 22 text

Docker in Docker! jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ Just map /var/run/docker.sock !

Slide 23

Slide 23 text

container Docker CLI /var/run/docker.sock

Slide 24

Slide 24 text

container docker run foo /var/run/docker.sock container foo

Slide 25

Slide 25 text

libcontainer

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Managing drivers (parsers)

Slide 29

Slide 29 text

Scaling ● Pluggable strategy ● Default behavior: ○ 1 container per request ○ Extra time for reuse ● Not implemented yet ● Upgrade is for now Remove + Installation bblfshctl driver \ install --update \ foo Upgrading

Slide 30

Slide 30 text

Docker in Docker Docker Socket - Hard to use, previously - Much easier now - Lots of features we don’t use - Requires Docker to be used no matter what libcontainer - Fewer features - Fewer dependencies - Runs on Linux without Docker

Slide 31

Slide 31 text

References - bblf.sh / dashboard.bblf.sh - sourced.tech - github.com/bblfsh - @francesc @sourcedtech

Slide 32

Slide 32 text

Thanks!