go.talks: add dotGo State Of the Gopher talk

LGTM=campoy, adg
R=adg, campoy
CC=golang-codereviews
https://golang.org/cl/159940043
diff --git a/2014/state-of-the-gopher.slide b/2014/state-of-the-gopher.slide
new file mode 100644
index 0000000..d8aec55
--- /dev/null
+++ b/2014/state-of-the-gopher.slide
@@ -0,0 +1,369 @@
+The State of the Gopher (Oct)
+10 Oct 2014
+Tags: dotgo, gopher
+
+Brad Fitzpatrick
+Gopher, Google
+@bradfitz
+bradfitz@golang.org
+
+* The State of the Gopher
+
+- where we've been
+- where we're going
+
+.image state-of-the-gopher/gopher.jpg
+
+* bradfitz
+
+- Work on Go's standard library, builders, etc
+- Started contributing to Go May 2010
+- [[http://camlistore.org]], my big, old Go project: personal data storage & indexing for life
+
+* The Past
+
+* Userbase before November 2009
+
+- 3-10 people inside Google?
+
+* November 2009
+
+- Go is [[http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html][open sourced]]:
+
+.image state-of-the-gopher/opensource.png
+
+* Website in 2009
+
+.image state-of-the-gopher/website1.png
+
+* Website in 2009
+
+.image state-of-the-gopher/website2.png
+
+* Compilers in 2009
+
+- already two: `gc` and `gccgo`
+
+* Aside: GC vs gc
+
+- `gc`: "Go compiler", based originally on Plan 9's C compiler. The main Go compiler.
+- `GC`: "Garbage Collector"
+
+* Ports in 2009
+
+- linux-386
+- linux-amd64
+- linux-arm, just starting to work
+- darwin-386
+- darwin-amd64
+- nacl-386 (first attempt)
+With gccgo, more.
+
+* Tools in 2009
+
+- gofmt
+- gofix
+- godoc
+
+* Release Highlights
+
+* weekly releases
+
+- "weekly.2009-12-09"
+- break users weekly, not daily
+- gofix appears
+
+* monthly releases
+
+- "r56" ... "r60"
+- break users monthly, not weekly
+- still painful to write and use packages (Makefiles)
+
+* Go 1.0 (2012-03-28)
+
+- the "error" type
+- delete(m, k)
+
+  // before Go 1:
+  latLong[storeID] = LatLong{}, false
+  name[userID] = "", false
+
+  // new:
+  delete(name, userID)
+
+- [[https://golang.org/doc/go1compat][stability promise]] + API check tool:
+
+  pkg net/http, const StatusOK = 200
+  pkg net/http, const StatusOK ideal-int
+  pkg net/http, type RoundTripper interface { RoundTrip }
+  pkg net/http, type Server struct, TLSConfig *tls.Config
+  pkg net/http, var DefaultServeMux *ServeMux
+  pkg time, method (*Timer) Reset(Duration) bool
+  pkg unicode/utf8, func ValidRune(int32) bool
+
+- the `go` tool (get, build, test, ...)
+
+* Go 1.1 (2013-05-03)
+
+- method values
+
+  type S struct { once sync.Once; ... }
+  func (s *S) init() { ... }
+  func (s *S) Foo() {
+      s.once.Do(s.init)
+
+- func "terminating statement"
+
+  func abs(n int) int {
+      switch {
+      case n < 0: return -n
+      default:    return n
+      }
+  }
+
+- 64-bit "int", large heaps
+- 30-40% speed improvement, stdlib++
+- more precise heap GC, usually
+
+* Aside: precise vs conservative GC
+
+Conservative GC: if it "looks like" a pointer, treat it like one.
+
+  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
+  [ ptr? ] [ byte slice (skipped in Go 1.0)                             ]
+  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
+
+Terrible for 32-bit (e.g. ARM) computers: many integers look like pointers.
+
+Precise GC:
+
+  [ int ] [ ptr     ] [ string      ] [ byte slice          ]
+  [ int ] [ t f t f ] [ ptr ] [ int ] [ float64     ] [ ptr ]
+
+Requires knowing what every position in memory _actually_ is.
+
+- no false retention, only look at some memory during GC
+
+* Go 1.2 (2013-12-01)
+
+- 6 month release cycle begins
+- setting slice capacity with s[i:j:k]
+
+  s := make([]byte, 10, 20)
+  foo(s[10:12:15])
+
+  func foo(s []byte) { fmt.Println(len(s), cap(s)) }
+
+- preemption in scheduler
+- go test -cover
+
+* Go 1.3 (2014-06-18)
+
+- no language changes
+- GOOS=solaris,dragonfly,plan9,nacl
+- precise GC of the stack (mostly)
+- contiguous stacks (mostly)
+
+* Aside: Segmented vs. Contiguous stacks
+
+- C++/Java: one huge stack per thread
+- Go <= 1.2: multiple discontiguous 4K stacks, bounce between
+- Go 1.3: one little stack, grow & shrink as needed
+.image state-of-the-gopher/contig-stack.png _ 550
+
+* The present (relative to Nov 2009)
+
+* More ports
+
+- Windows
+- FreeBSD, OpenBSD, NetBSD
+- Solaris, Plan 9, DragonFly BSD
+- NaCl (again)
+
+* Better docs
+
+- [[http://blog.golangorg][Blog]] articles,
+- Community [[https://code.google.com/p/go-wiki/w/list][Wiki]],
+- [[https://code.google.com/p/go-wiki/wiki/Books][Books]]
+
+* Users: up and to the right
+
+- Go [[https://code.google.com/p/go-wiki/wiki/GoUserGroups][user groups]], [[http://go-meetups.appspot.com/][meetups]]
+- GitHub commits, stars, forks
+- Since 2009: `golang-nuts@` (1450 → 14134), `-dev` (37 → 2152)
+.link http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/ Go: the emerging language of cloud infrastructure
+
+.image state-of-the-gopher/oloh.png
+
+* The Cloud
+
+- Docker
+- CoreOS, etcd, fleet
+- Juju
+- NATS, gnatsd, Packer, Heka
+- dl.google.com, Vitess, Kubernetes
+- App Engine
+
+* Conferences
+
+[[http://connpass.com/series/312/][GoCon Tokyo]]
+
+* Conferences
+
+.image state-of-the-gopher/gophercon.png
+
+* Conferences
+
+.image state-of-the-gopher/dotgo.png
+
+* Conferences
+
+.image state-of-the-gopher/india.png
+
+* CoreOS
+
+.image state-of-the-gopher/bus.jpg
+
+- increasingly running [[http://build.golang.org]], each in a Docker container
+- Go powering Go development!
+
+* build.golang.org
+
+.image state-of-the-gopher/build.png 400 _
+
+* Better tools
+
+- go/parser: godoc, [[http://godoc.org]], gofmt, gofix →
+- [[http://godoc.org/code.google.com/p/go.tools/cmd/goimports][goimports]]: automatic import lines
+- go/types, gofix+types, 
+- go/ast, go/ssa, [[http://godoc.org/code.google.com/p/go.tools/cmd/oracle][oracle]],
+- [[http://godoc.org/code.google.com/p/go.tools/cmd/eg][eg]], example-based refactoring
+- [[http://godoc.org/code.google.com/p/go.tools/cmd/gorename][gorename]], safe global renaming tool
+
+Tooling begets better tooling!
+
+- goimports + go/types + go/parser == [[https://twitter.com/sqs/status/520203018957250560][goreturns]] (lazy "return err")
+
+* The Future
+
+* Go 1.4
+
+* Go 1.4 (2014-12-01?)
+
+- fully precise GC of the stack + heap
+- segmented stacks & conservative GC deleted
+- stack copier & shrinker requires precise stack types too
+
+- `runtime` conversion from C to Go: maps, channels, interfaces, type checks, println, defer, panic, etc.
+
+- Garbage collector and scheduler are still in C
+
+* Go 1.4
+
+- [[http://golang.org/s/go14android][GOOS=android]] (Elias Naur, David Crawshaw)
+- GOOS=nacl GOARCH=arm
+- [[http://golang.org/s/go14internal]["internal" packages]]
+- [[http://golang.org/s/go1.4-generate]["go generate"]]
+- [[https://docs.google.com/a/golang.org/document/d/1QXzI9I1pOfZPujQzxhyRy6EeHYTQitKKjHfpq0zpxZs][syscall package frozen, go.sys]]
+- "go tool pprof" converted from Perl (!) to Go
+- minor stdlib additions, improvements
+
+* Go 1.5
+
+* Go 1.5 (2014-06-01?)
+
+- Concurrent GC is main theme
+- Roadmap: [[http://golang.org/s/go14gc]] (GC in 1.4, 1.5, 1.6+)
+
+* Go 1.5: ports
+
+- GOOS=ios revival? (Minux, David Crawshaw)
+- GOARCH=ppc64 (minux)
+- GOARCH=arm64 (aram, dfc)
+
+* Go 1.5: removing more C
+
+Didn't make Go 1.4:
+
+- `cmd/link`: linker rewrite in Go
+- `cmd/asm`: assembler rewrite in Go
+- "gc" compiler in Go
+
+* "gc" Compiler in Go
+
+- lots of C
+- C → Go translator == kinda ugly Go
+- refactor that Go with tools: `eg`, `gorename`, etc
+- add packages, tests
+- unify all `8g`, `5g`, `6g`, `9g`
+- SSA form, new optimizations
+
+See rsc's GopherCon [[http://talks.golang.org/2014/c2go.slide#1][slides]], [[http://gophercon.sourcegraph.com/post/83820197495/russ-cox-porting-the-go-compiler-from-c-to-go][notes]], [[https://www.youtube.com/watch?v=QIE5nV5fDwA][video]].
+
+* Go 1.5 Tracing
+
+- Dmitry's GOTRACE + Chrome trace viewer
+
+.image state-of-the-gopher/trace.png
+
+* Go 1.6
+
+- More GC work
+- Ongoing compiler-in-Go cleanup & optimizations
+- PNaCl?
+- [[https://docs.google.com/a/google.com/document/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub][NUMA-aware scheduler]]?
+- unknown surprises
+Who knows.
+Find out next year at dotGo Paris 2015!
+
+* Go 2.0
+
+- maybe one day
+
+* Outside of the core
+
+* libraries & tools
+
+- HTTP/2, to be merged into `net/http`
+- go.tools: `goimports`, `eg`, `gorename`, `oracle`, ...
+- go.text: Unicode collation, normalization, ...
+- go.mobile: Android, iOS, gaming, 3D graphics, event handling
+- go.crypto
+- go.net
+- go.tools
+- go.syscall
+
+* gccgo
+
+- keeping up with spec
+- better in some ways (codegen, OS, arch)
+- worse in others (precise GC, escape analysis)
+- work underway to improve
+
+All checking & improving each other:
+
+- gc, gccgo, go/types, language spec, unit tests
+
+* Notable other compilers
+
+- [[https://github.com/go-llvm/llgo][llgo]], Go → LLVM → PNaCL, etc
+- [[https://github.com/tardisgo/tardisgo][TARDIS Go]], Go → Haxe → JS, anything
+- [[https://github.com/gopherjs/gopherjs][GopherJS]], Go → JS
+
+And all three written in Go, use `go/parser`, `go/types`, etc.
+We can't wait to join them.
+
+* In summary
+
+* The growth is exciting
+
+- things are getting cleaner,
+- things are getting faster,
+- things are getting more impressive,
+- everything is growing on top of everything else,
+- hard to keep up with golang-dev@, golang-nuts@, bugs, wiki, new github projects, code reviews,
+
+* You all are awesome 
+
+- keep being awesome
+- keep making awesome things
diff --git a/2014/state-of-the-gopher/build.png b/2014/state-of-the-gopher/build.png
new file mode 100644
index 0000000..0cd68ea
--- /dev/null
+++ b/2014/state-of-the-gopher/build.png
Binary files differ
diff --git a/2014/state-of-the-gopher/bus.jpg b/2014/state-of-the-gopher/bus.jpg
new file mode 100644
index 0000000..b8dba8c
--- /dev/null
+++ b/2014/state-of-the-gopher/bus.jpg
Binary files differ
diff --git a/2014/state-of-the-gopher/contig-stack.png b/2014/state-of-the-gopher/contig-stack.png
new file mode 100644
index 0000000..04559a4
--- /dev/null
+++ b/2014/state-of-the-gopher/contig-stack.png
Binary files differ
diff --git a/2014/state-of-the-gopher/dotgo.png b/2014/state-of-the-gopher/dotgo.png
new file mode 100644
index 0000000..1c357c8
--- /dev/null
+++ b/2014/state-of-the-gopher/dotgo.png
Binary files differ
diff --git a/2014/state-of-the-gopher/gopher.jpg b/2014/state-of-the-gopher/gopher.jpg
new file mode 100644
index 0000000..a27d109
--- /dev/null
+++ b/2014/state-of-the-gopher/gopher.jpg
Binary files differ
diff --git a/2014/state-of-the-gopher/gophercon.png b/2014/state-of-the-gopher/gophercon.png
new file mode 100644
index 0000000..9c29865
--- /dev/null
+++ b/2014/state-of-the-gopher/gophercon.png
Binary files differ
diff --git a/2014/state-of-the-gopher/india.png b/2014/state-of-the-gopher/india.png
new file mode 100644
index 0000000..7b43e4a
--- /dev/null
+++ b/2014/state-of-the-gopher/india.png
Binary files differ
diff --git a/2014/state-of-the-gopher/oloh.png b/2014/state-of-the-gopher/oloh.png
new file mode 100644
index 0000000..7ea9e66
--- /dev/null
+++ b/2014/state-of-the-gopher/oloh.png
Binary files differ
diff --git a/2014/state-of-the-gopher/opensource.png b/2014/state-of-the-gopher/opensource.png
new file mode 100644
index 0000000..dfaa92e
--- /dev/null
+++ b/2014/state-of-the-gopher/opensource.png
Binary files differ
diff --git a/2014/state-of-the-gopher/trace.png b/2014/state-of-the-gopher/trace.png
new file mode 100644
index 0000000..7b71532
--- /dev/null
+++ b/2014/state-of-the-gopher/trace.png
Binary files differ
diff --git a/2014/state-of-the-gopher/website1.png b/2014/state-of-the-gopher/website1.png
new file mode 100644
index 0000000..0c4e62f
--- /dev/null
+++ b/2014/state-of-the-gopher/website1.png
Binary files differ
diff --git a/2014/state-of-the-gopher/website2.png b/2014/state-of-the-gopher/website2.png
new file mode 100644
index 0000000..7fea6aa
--- /dev/null
+++ b/2014/state-of-the-gopher/website2.png
Binary files differ