content: convert to Markdown-enabled present inputs

Converted blog to Markdown-enabled present (CL 222846)
using present2md (CL 222847).

For golang/go#33955.

Change-Id: Ib39fa1ddd9a46f9c7a62a2ca7b96e117635553e8
Reviewed-on: https://go-review.googlesource.com/c/blog/+/222848
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/content/10years.article b/content/10years.article
index 4a33db0..f67c343 100644
--- a/content/10years.article
+++ b/content/10years.article
@@ -1,22 +1,23 @@
-Go Turns 10
+# Go Turns 10
 8 Nov 2019
+Summary: Happy birthday, Go!
 
 Russ Cox, for the Go team
 rsc@golang.org
 
-* Introduction
+##
 
 Happy birthday, Go!
 
 This weekend we celebrate the 10th anniversary of
-[[https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html][the Go release]],
+[the Go release](https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html),
 marking the 10th birthday of Go as an open-source programming language
 and ecosystem for building modern networked software.
 
 To mark the occasion,
-[[https://twitter.com/reneefrench][Renee French]],
+[Renee French](https://twitter.com/reneefrench),
 the creator of the
-[[https://blog.golang.org/gopher][Go gopher]],
+[Go gopher](https://blog.golang.org/gopher),
 painted this delightful scene:
 
 .html 10years/img1.html
@@ -46,14 +47,14 @@
 I wondered: where would Go be after a decade?
 
 Today, we can answer that question:
-Go is everywhere, used by at least [[https://research.swtch.com/gophercount][a million developers worldwide]].
+Go is everywhere, used by at least [a million developers worldwide](https://research.swtch.com/gophercount).
 
 Go’s original target was networked system infrastructure,
 what we now call cloud software.
 Every major cloud provider today uses core cloud infrastructure written in Go,
 such as Docker, Etcd, Istio, Kubernetes, Prometheus, and Terraform;
 the majority of the
-[[https://www.cncf.io/projects/][Cloud Native Computing Foundation’s projects]]
+[Cloud Native Computing Foundation’s projects](https://www.cncf.io/projects/)
 are written in Go.
 Countless companies are using Go to move their own work to the cloud as well,
 from startups building from scratch
@@ -62,9 +63,9 @@
 with uses ranging
 from
 controlling tiny embedded systems with
-[[https://gobot.io][GoBot]] and [[https://tinygo.org/][TinyGo]]
+[GoBot](https://gobot.io) and [TinyGo](https://tinygo.org/)
 to detecting cancer with
-[[https://medium.com/grail-eng/bigslice-a-cluster-computing-system-for-go-7e03acd2419b][massive big data analysis and machine learning at GRAIL]],
+[massive big data analysis and machine learning at GRAIL](https://medium.com/grail-eng/bigslice-a-cluster-computing-system-for-go-7e03acd2419b),
 and everything in between.
 
 All this is to say that Go has succeeded beyond our wildest dreams.
@@ -85,8 +86,8 @@
 with fantastic tooling,
 a production-quality implementation,
 a
-[[https://blog.golang.org/ismmkeynote][state-of-the-art garbage collector]],
-and [[https://golang.org/doc/install/source#introduction][ports to 12 operating systems and 10 architectures]].
+[state-of-the-art garbage collector](https://blog.golang.org/ismmkeynote),
+and [ports to 12 operating systems and 10 architectures](https://golang.org/doc/install/source#introduction).
 
 Any programming language needs the support of a thriving ecosystem.
 The open source release was the seed for that ecosystem,
@@ -98,10 +99,10 @@
 Of course, the ecosystem needs the support of a thriving community.
 In 2019 there are dozens of Go conferences all over the world,
 along with
-[[https://www.meetup.com/pro/go][over 150 Go meetup groups with over 90,000 members]].
-[[https://golangbridge.org][GoBridge]]
+[over 150 Go meetup groups with over 90,000 members](https://www.meetup.com/pro/go).
+[GoBridge](https://golangbridge.org)
 and
-[[https://medium.com/@carolynvs/www-loves-gobridge-ccb26309f667][Women Who Go]]
+[Women Who Go](https://medium.com/@carolynvs/www-loves-gobridge-ccb26309f667)
 help bring new voices into the Go community,
 through mentoring, training, and conference scholarships.
 This year alone, they have taught
@@ -109,7 +110,7 @@
 at workshops where community members teach and mentor those new to Go.
 
 There are
-[[https://research.swtch.com/gophercount][over a million Go developers]]
+[over a million Go developers](https://research.swtch.com/gophercount)
 worldwide,
 and companies all over the globe are looking to hire more.
 In fact, people often tell us that learning Go
@@ -121,7 +122,7 @@
 and we are thrilled that Go has helped so many others.
 
 As
-[[https://twitter.com/search?q=%23GoTurns10][#GoTurns10]],
+[\#GoTurns10](https://twitter.com/search?q=%23GoTurns10),
 I hope everyone will take a moment to celebrate
 the Go community and all we have achieved.
 On behalf of the entire Go team at Google,
diff --git a/content/4years.article b/content/4years.article
index 4122617..9bfe92c 100644
--- a/content/4years.article
+++ b/content/4years.article
@@ -1,10 +1,11 @@
-Four years of Go
+# Four years of Go
 10 Nov 2013
 Tags: community, birthday
+Summary: Today marks the fourth anniversary of Go as an open source project.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Today marks the fourth anniversary of Go as an open source project.
 
@@ -19,7 +20,7 @@
 .image 4years-graph.png
 
 This chart shows the growth of Google searches for the term
-"[[http://www.google.com/trends/explore?hl=en-US#q=golang&date=10/2009+50m&cmpt=q][golang]]"
+"[golang](http://www.google.com/trends/explore?hl=en-US#q=golang&date=10/2009+50m&cmpt=q)"
 over the past four years.
 Notice the knee in the curve around March 2012, when Go 1.0 was released.
 If these searches are a decent proxy for interest, then it's clear that
@@ -29,104 +30,104 @@
 But where is the interest coming from?
 
 The open source community has embraced Go,
-with our community wiki listing [[https://golang.org/wiki/Projects][hundreds of Go projects]]. Some popular ones:
+with our community wiki listing [hundreds of Go projects](https://golang.org/wiki/Projects). Some popular ones:
 
-- [[http://docker.io][Docker]] is a tool for packaging and running applications
-  in lightweight containers.
-  Docker makes it easy to isolate, package,
-  and deploy applications, and is beloved by system administrators.
-  Its creator Solomon Hykes cited Go's standard library,
-  concurrency primitives, and ease of deployment as key factors,
-  and said "To put it simply, if Docker had not been written in Go,
-  it would not have been as successful."
+  - [Docker](http://docker.io) is a tool for packaging and running applications
+    in lightweight containers.
+    Docker makes it easy to isolate, package,
+    and deploy applications, and is beloved by system administrators.
+    Its creator Solomon Hykes cited Go's standard library,
+    concurrency primitives, and ease of deployment as key factors,
+    and said "To put it simply, if Docker had not been written in Go,
+    it would not have been as successful."
 
-- [[http://packer.io][Packer]] is a tool for automating the creation of
-  machine images for deployment to virtual machines or cloud services.
-  Its author, Mitchell Hashimoto, is now working on another Go project,
-  [[http://www.serfdom.io/][serf]], a decentralized discovery service.
-  Like Docker, these projects help with management of large-scale,
-  cluster-based services.
+  - [Packer](http://packer.io) is a tool for automating the creation of
+    machine images for deployment to virtual machines or cloud services.
+    Its author, Mitchell Hashimoto, is now working on another Go project,
+    [serf](http://www.serfdom.io/), a decentralized discovery service.
+    Like Docker, these projects help with management of large-scale,
+    cluster-based services.
 
-- [[http://bit.ly][Bitly]]'s [[http://bitly.github.io/nsq/][NSQ]] is a realtime
-  distributed messaging platform designed for fault-tolerance and high-availability,
-  and is used in production at bitly and a bunch of other companies.
+  - [Bitly](http://bit.ly)'s [NSQ](http://bitly.github.io/nsq/) is a realtime
+    distributed messaging platform designed for fault-tolerance and high-availability,
+    and is used in production at bitly and a bunch of other companies.
 
-- [[http://canonical.com/][Canonical]]'s [[https://juju.ubuntu.com/][JuJu]]
-  infrastructure automation system was rewritten in Go.
-  Project lead Gustavo Niemeyer said "It's not a single aspect of Go that
-  makes it a compelling choice,
-  but rather the careful organization of well-crafted small pieces."
+  - [Canonical](http://canonical.com/)'s [JuJu](https://juju.ubuntu.com/)
+    infrastructure automation system was rewritten in Go.
+    Project lead Gustavo Niemeyer said "It's not a single aspect of Go that
+    makes it a compelling choice,
+    but rather the careful organization of well-crafted small pieces."
 
-- The [[https://github.com/goraft/raft][raft]] package provides an implementation
-  of the [[https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf][Raft]]
-  distributed consensus protocol.
-  It is the basis of Go projects like [[https://github.com/coreos/etcd][etcd]]
-  and [[https://github.com/skynetservices/skydns][SkyDNS]].
+  - The [raft](https://github.com/goraft/raft) package provides an implementation
+    of the [Raft](https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf)
+    distributed consensus protocol.
+    It is the basis of Go projects like [etcd](https://github.com/coreos/etcd)
+    and [SkyDNS](https://github.com/skynetservices/skydns).
 
-- Other popular projects include [[https://github.com/biogo/biogo][biogo]],
-  the [[http://www.gorillatoolkit.org/][Gorilla Web Toolkit]],
-  [[https://github.com/golang/groupcache][groupcache]],
-  Mozilla's [[https://github.com/mozilla-services/heka][heka]],
-  the [[https://github.com/cznic/kv][kv]] and [[https://github.com/cznic/ql][ql]]
-  lightweight storage systems,
-  and the [[http://skydb.io/][Sky]] behavioral database.
+  - Other popular projects include [biogo](https://github.com/biogo/biogo),
+    the [Gorilla Web Toolkit](http://www.gorillatoolkit.org/),
+    [groupcache](https://github.com/golang/groupcache),
+    Mozilla's [heka](https://github.com/mozilla-services/heka),
+    the [kv](https://github.com/cznic/kv) and [ql](https://github.com/cznic/ql)
+    lightweight storage systems,
+    and the [Sky](http://skydb.io/) behavioral database.
 
 But this is just the tip of the iceberg. The number of high-quality open
 source Go projects is phenomenal.
-Prolific Go hacker [[http://xph.us/software/][Keith Rarick]] put it well:
+Prolific Go hacker [Keith Rarick](http://xph.us/software/) put it well:
 "The state of the Go ecosystem after only four years is astounding.
 Compare Go in 2013 to Python in 1995 or Java in 1999. Or C++ in 1987!"
 
-Businesses are enjoying Go, too. The [[https://golang.org/wiki/GoUsers][Go Users wiki page]]
+Businesses are enjoying Go, too. The [Go Users wiki page](https://golang.org/wiki/GoUsers)
 lists dozens of success stories (and if you use Go,
 please add yourself to it). Some examples:
 
-- [[https://blog.cloudflare.com/go-at-cloudflare][CloudFlare]] built their
-  distributed DNS service entirely with Go,
-  and are in the process of migrating their gigabytes-per-minute logging infrastructure to the language.
-  Programmer John Graham-Cumming said "We've found Go to be the perfect match for our needs:
-  the combination of familiar syntax, a powerful type system,
-  a strong network library and built-in concurrency means that more and more
-  projects are being built here in Go."
+  - [CloudFlare](https://blog.cloudflare.com/go-at-cloudflare) built their
+    distributed DNS service entirely with Go,
+    and are in the process of migrating their gigabytes-per-minute logging infrastructure to the language.
+    Programmer John Graham-Cumming said "We've found Go to be the perfect match for our needs:
+    the combination of familiar syntax, a powerful type system,
+    a strong network library and built-in concurrency means that more and more
+    projects are being built here in Go."
 
-- [[http://soundcloud.com][SoundCloud]] is an audio distribution service
-  that has "dozens of [[http://backstage.soundcloud.com/2012/07/go-at-soundcloud/][systems in Go]],
-  touching almost every part of the site, and in many cases powering features
-  from top to bottom." Engineer Peter Bourgon said "Go demonstrates that the
-  cruft that burdens other languages and ecosystems—stuff that developers
-  have learned to deal with,
-  often in anger—is simply not a necessary part of modern programming.
-  With Go, I have a straightforward and non-adversarial relationship with my tools,
-  from development to production."
+  - [SoundCloud](http://soundcloud.com) is an audio distribution service
+    that has "dozens of [systems in Go](http://backstage.soundcloud.com/2012/07/go-at-soundcloud/),
+    touching almost every part of the site, and in many cases powering features
+    from top to bottom." Engineer Peter Bourgon said "Go demonstrates that the
+    cruft that burdens other languages and ecosystems—stuff that developers
+    have learned to deal with,
+    often in anger—is simply not a necessary part of modern programming.
+    With Go, I have a straightforward and non-adversarial relationship with my tools,
+    from development to production."
 
-- The [[https://ngrok.com/][ngrok]] service allows web developers to provide
-  remote access to their development environments.
-  Its author Alan Shreve said that "ngrok's success as a project is due in
-  no small part to choosing Go as the implementation language," citing Go's HTTP libraries,
-  efficiency, cross-platform compatibility,
-  and ease of deployment as the major benefits.
+  - The [ngrok](https://ngrok.com/) service allows web developers to provide
+    remote access to their development environments.
+    Its author Alan Shreve said that "ngrok's success as a project is due in
+    no small part to choosing Go as the implementation language," citing Go's HTTP libraries,
+    efficiency, cross-platform compatibility,
+    and ease of deployment as the major benefits.
 
-- [[http://poptip.com][Poptip]] provides social analytics services,
-  and product engineer Andy Bonventre said "What started as an experiment
-  in writing a single service in Go turned into moving almost our entire infrastructure over to it.
-  What I love about Go the most is not necessarily the features of the language,
-  but the focus on tooling, testing, and other elements that make writing
-  large applications much more manageable."
+  - [Poptip](http://poptip.com) provides social analytics services,
+    and product engineer Andy Bonventre said "What started as an experiment
+    in writing a single service in Go turned into moving almost our entire infrastructure over to it.
+    What I love about Go the most is not necessarily the features of the language,
+    but the focus on tooling, testing, and other elements that make writing
+    large applications much more manageable."
 
-- Music collaboration startup [[http://splice.com][Splice]] chose to build
-  their service with Go.
-  Co-founder Matt Aimonetti said "We seriously studied and considered many
-  programming languages,
-  but Go's simplicity, efficiency, philosophy and community won us over."
+  - Music collaboration startup [Splice](http://splice.com) chose to build
+    their service with Go.
+    Co-founder Matt Aimonetti said "We seriously studied and considered many
+    programming languages,
+    but Go's simplicity, efficiency, philosophy and community won us over."
 
-- And, of course, engineering teams across Google are moving to Go.
-  Engineer Matt Welsh recently [[http://matt-welsh.blogspot.com.au/2013/08/rewriting-large-production-system-in-go.html][shared his experience]]
-  rewriting a large production service in Go.
-  Other notable public examples include YouTube's [[https://github.com/youtube/vitess][vitess project]]
-  and [[https://talks.golang.org/2013/oscon-dl.slide][dl.google.com]].
-  We hope to share more stories like these soon.
+  - And, of course, engineering teams across Google are moving to Go.
+    Engineer Matt Welsh recently [shared his experience](http://matt-welsh.blogspot.com.au/2013/08/rewriting-large-production-system-in-go.html)
+    rewriting a large production service in Go.
+    Other notable public examples include YouTube's [vitess project](https://github.com/youtube/vitess)
+    and [dl.google.com](https://talks.golang.org/2013/oscon-dl.slide).
+    We hope to share more stories like these soon.
 
-In September 2012, [[http://apcera.com/][Apcera]] CEO Derek Collison [[https://twitter.com/derekcollison/status/245522124666716160][predicted]]
+In September 2012, [Apcera](http://apcera.com/) CEO Derek Collison [predicted](https://twitter.com/derekcollison/status/245522124666716160)
 that "Go will become the dominant language for systems work in [Infastructure-as-a-Service],
 Orchestration, and [Platform-as-a-Service] in 24 months." Looking at the list above,
 it's easy to believe that prediction.
@@ -134,25 +135,25 @@
 So how can you get involved? Whether you're a seasoned Go programmer or just Go-curious,
 there are many ways to get started in the Go community:
 
-- [[https://blog.golang.org/getthee-to-go-meetup][Join your nearest Go User Group]],
-  where your local gophers meet to share their knowledge and experience.
-  These groups are popping up all over the world.
-  I have personally spoken at Go groups in Amsterdam,
-  Berlin, Gothenburg, London, Moscow, Munich,
-  New York City, Paris, San Francisco, Seoul,
-  Stockholm, Sydney, Tokyo, and Warsaw;
-  but there are [[https://golang.org/wiki/GoUserGroups][many more]]!
+  - [Join your nearest Go User Group](https://blog.golang.org/getthee-to-go-meetup),
+    where your local gophers meet to share their knowledge and experience.
+    These groups are popping up all over the world.
+    I have personally spoken at Go groups in Amsterdam,
+    Berlin, Gothenburg, London, Moscow, Munich,
+    New York City, Paris, San Francisco, Seoul,
+    Stockholm, Sydney, Tokyo, and Warsaw;
+    but there are [many more](https://golang.org/wiki/GoUserGroups)!
 
-- Create or contribute to an open source Go project (or [[https://golang.org/doc/contribute.html][to Go itself]]).
-  (And if you're building something, we'd love to hear from you on the [[http://groups.google.com/group/golang-nuts][Go mailing list]].)
+  - Create or contribute to an open source Go project (or [to Go itself](https://golang.org/doc/contribute.html)).
+    (And if you're building something, we'd love to hear from you on the [Go mailing list](http://groups.google.com/group/golang-nuts).)
 
-- If you're in Europe in February 2014, come along to the [[https://code.google.com/p/go-wiki/wiki/Fosdem2014][Go Devroom]]
-  at [[https://fosdem.org/2014/][FOSDEM 2014]].
+  - If you're in Europe in February 2014, come along to the [Go Devroom](https://code.google.com/p/go-wiki/wiki/Fosdem2014)
+    at [FOSDEM 2014](https://fosdem.org/2014/).
 
-- Attend [[http://gophercon.com][GopherCon]],
-  the first major Go conference, in Denver in April 2014.
-  The event is organized by the [[http://www.gopheracademy.com][Gopher Academy]],
-  who also run a [[http://www.gopheracademy.com/jobs][Go job board]].
+  - Attend [GopherCon](http://gophercon.com),
+    the first major Go conference, in Denver in April 2014.
+    The event is organized by the [Gopher Academy](http://www.gopheracademy.com),
+    who also run a [Go job board](http://www.gopheracademy.com/jobs).
 
 The Go team has been amazed by the growth of the Go community over the past
 four years. We are thrilled to see so many great things being built with Go,
diff --git a/content/5years.article b/content/5years.article
index 4817f6c..9b5f3b2 100644
--- a/content/5years.article
+++ b/content/5years.article
@@ -1,14 +1,15 @@
-Half a decade with Go
+# Half a decade with Go
 10 Nov 2014
+Summary: Five years ago we launched the Go project. It seems like only yesterday that we were preparing the initial public release: our [website](https://web.archive.org/web/20091112094121/http://golang.org/) was a lovely shade of yellow, we were calling Go a "systems language", and you had to terminate statements with a semicolon and write Makefiles to build your code. We had no idea how Go would be received. Would people share our vision and goals? Would people find Go useful?
 
 Andrew Gerrand
 adg@golang.org
 
-* Introduction
+##
 
 Five years ago we launched the Go project. It seems like only yesterday that we
 were preparing the initial public release: our
-[[https://web.archive.org/web/20091112094121/http://golang.org/][website]] was
+[website](https://web.archive.org/web/20091112094121/http://golang.org/) was
 a lovely shade of yellow, we were calling Go a "systems language", and you had
 to terminate statements with a semicolon and write Makefiles to build your
 code. We had no idea how Go would be received. Would people share our vision
@@ -23,47 +24,47 @@
 
 .image 5years/gophers5th.jpg _ 850
 
-[[/gopher][_Gopher_]] _illustration_by_ [[http://reneefrench.blogspot.com.au/][_Renee_French_]]
+[_Gopher_](/gopher) _illustration by_ [_Renee French_](http://reneefrench.blogspot.com.au/)
 
 After the initial release, it took us a while to properly communicate the
 goals and design ethos behind Go. Rob Pike did so eloquently in his 2012 essay
-[[https://talks.golang.org/2012/splash.article][_Go_at_Google:_Language_Design_in_the_Service_of_Software_Engineering_]] and
+[_Go at Google: Language Design in the Service of Software Engineering_](https://talks.golang.org/2012/splash.article) and
 more personally in his blog post
-[[https://commandcenter.blogspot.com.au/2012/06/less-is-exponentially-more.html][_Less_is_exponentially_more_]].
+[_Less is exponentially more_](https://commandcenter.blogspot.com.au/2012/06/less-is-exponentially-more.html).
 Andrew Gerrand's
-[[http://vimeo.com/53221560][_Code_that_grows_with_grace_]]
-([[https://talks.golang.org/2012/chat.slide][slides]]) and
-[[https://www.youtube.com/watch?v=dKGmK_Z1Zl0][_Go_for_Gophers_]]
-([[https://talks.golang.org/2014/go4gophers.slide][slides]]) give a
+[_Code that grows with grace_](http://vimeo.com/53221560)
+([slides](https://talks.golang.org/2012/chat.slide)) and
+[_Go for Gophers_](https://www.youtube.com/watch?v=dKGmK_Z1Zl0)
+([slides](https://talks.golang.org/2014/go4gophers.slide)) give a
 more in-depth, technical take on Go's design philosophy.
 
 Over time, the few became many. The turning point for the project was the
 release of Go 1 in March 2012, which provided a stable language and standard
 library that developers could trust. By 2014, the project had hundreds of core
-contributors, the ecosystem had countless [[https://godoc.org/][libraries and tools]]
+contributors, the ecosystem had countless [libraries and tools](https://godoc.org/)
 maintained by thousands of developers, and the greater community had
 many passionate members (or, as we call them, "gophers"). Today, by our current
 metrics, the Go community is growing faster than we believed possible.
 
 Where can those gophers be found? They are at the many Go events that are
 popping up around the world. This year we saw several dedicated Go conferences:
-the inaugural [[https://blog.golang.org/gophercon][GopherCon]] and
-[[http://www.dotgo.eu/][dotGo]] conferences in Denver and Paris, the
-[[https://blog.golang.org/fosdem14][Go DevRoom at FOSDEM]] and two more
-instances of the biannual [[https://github.com/GoCon/GoCon][GoCon]] conference
+the inaugural [GopherCon](https://blog.golang.org/gophercon) and
+[dotGo](http://www.dotgo.eu/) conferences in Denver and Paris, the
+[Go DevRoom at FOSDEM](https://blog.golang.org/fosdem14) and two more
+instances of the biannual [GoCon](https://github.com/GoCon/GoCon) conference
 in Tokyo. At each event, gophers from around the globe eagerly presented their
 Go projects. For the Go team, it is very satisfying to meet so many programmers
 that share our vision and excitement.
 
 .image 5years/conferences.jpg
 
-_More_than_1,200_gophers_attended_GopherCon_in_Denver_and_dotGo_in_Paris._
+_More than 1,200 gophers attended GopherCon in Denver and dotGo in Paris._
 
 There are also dozens of community-run
-[[https://golang.org/wiki/GoUserGroups][Go User Groups]] spread across cities
+[Go User Groups](https://golang.org/wiki/GoUserGroups) spread across cities
 worldwide. If you haven't visited your local group, consider going along. And
 if there isn't a group in your area, maybe you should
-[[https://blog.golang.org/getthee-to-go-meetup][start one]]?
+[start one](https://blog.golang.org/getthee-to-go-meetup)?
 
 Today, Go has found a home in the cloud. Go arrived as the industry underwent a
 tectonic shift toward cloud computing, and we were thrilled to see it quickly
@@ -71,33 +72,33 @@
 concurrency primitives, and modern standard library make it a great fit for
 cloud software development (after all, that's what it was designed for).
 Significant open source cloud projects like
-[[https://www.docker.com/][Docker]] and
-[[https://github.com/GoogleCloudPlatform/kubernetes][Kubernetes]] have been
+[Docker](https://www.docker.com/) and
+[Kubernetes](https://github.com/GoogleCloudPlatform/kubernetes) have been
 written in Go, and infrastructure companies like Google, CloudFlare, Canonical,
 Digital Ocean, GitHub, Heroku, and Microsoft are now using Go to do some heavy
 lifting.
 
 So, what does the future hold? We think that 2015 will be Go's biggest year yet.
 
-Go 1.4—in addition to its [[https://golang.org/doc/go1.4][new features and fixes]]—lays
+Go 1.4—in addition to its [new features and fixes](https://golang.org/doc/go1.4)—lays
 the groundwork for a new low-latency garbage collector and support for running
 Go on mobile devices. It is due to be released on December 1st 2014.
 We expect the new GC to be available in Go 1.5, due June 1st 2015, which will
 make Go appealing for a broader range of applications.
 We can't wait to see where people take it.
 
-And there will be more great events, with [[http://gothamgo.com/][GothamGo]] in
+And there will be more great events, with [GothamGo](http://gothamgo.com/) in
 New York (15 Nov), another Go DevRoom at FOSDEM in Brussels (Jan 31 and Feb 1;
-[[https://groups.google.com/d/msg/golang-nuts/1xgBazQzs1I/hwrZ5ni8cTEJ][get involved!]]),
-[[http://www.gophercon.in/][GopherCon India]] in Bengaluru (19-21 Feb),
-the original [[http://gophercon.com/][GopherCon]] back at Denver in July, and
-[[http://www.dotgo.eu/][dotGo]] on again at Paris in November.
+[get involved!](https://groups.google.com/d/msg/golang-nuts/1xgBazQzs1I/hwrZ5ni8cTEJ)),
+[GopherCon India](http://www.gophercon.in/) in Bengaluru (19-21 Feb),
+the original [GopherCon](http://gophercon.com/) back at Denver in July, and
+[dotGo](http://www.dotgo.eu/) on again at Paris in November.
 
 The Go team would like to extend its thanks to all the gophers out there.
 Here's to the next five years.
 
-_To_celebrate_5_years_of_Go,_over_the_coming_month_the_
-[[http://blog.gopheracademy.com/][_Gopher_Academy_]]
-_will_publish_a_series_of_articles_by_prominent_Go_users._Be_sure_to_check_out_
-[[http://blog.gopheracademy.com/][_their_blog_]]
-_for_more_Go_action._
+_To celebrate 5 years of Go, over the coming month the_
+[_Gopher Academy_](http://blog.gopheracademy.com/)
+_will publish a series of articles by prominent Go users. Be sure to check out_
+[_their blog_](http://blog.gopheracademy.com/)
+_for more Go action._
diff --git a/content/6years.article b/content/6years.article
index a5d3ec1..02b3b3f 100644
--- a/content/6years.article
+++ b/content/6years.article
@@ -1,43 +1,44 @@
-Six years of Go
+# Six years of Go
 10 Nov 2015
+Summary: Six years ago today the Go language was released as an open source project. Since then, more than 780 contributors have made over 30,000 commits to the project's 22 repositories. The ecosystem continues to grow, with GitHub reporting more than 90,000 Go repositories. And, offline, we see new Go events and user groups pop up [around](https://blog.golang.org/gophercon2015) [the](https://blog.golang.org/gouk15) [world](https://blog.golang.org/gopherchina) with regularity.
 
 Andrew Gerrand
 adg@golang.org
 
-* Six years of Go
+##
 
 Six years ago today the Go language was released as an open source project.
 Since then, more than 780 contributors have made over 30,000 commits to the
 project's 22 repositories. The ecosystem continues to grow, with GitHub
 reporting more than 90,000 Go repositories. And, offline, we see new Go events
-and user groups pop up [[https://blog.golang.org/gophercon2015][around]]
-[[https://blog.golang.org/gouk15][the]]
-[[https://blog.golang.org/gopherchina][world]] with regularity.
+and user groups pop up [around](https://blog.golang.org/gophercon2015)
+[the](https://blog.golang.org/gouk15)
+[world](https://blog.golang.org/gopherchina) with regularity.
 
 .image 6years-gopher.png
 
-In August we [[https://blog.golang.org/go1.5][released Go 1.5]], the most
+In August we [released Go 1.5](https://blog.golang.org/go1.5), the most
 significant release since Go 1. It features a completely
-[[https://golang.org/doc/go1.5#gc][redesigned garbage collector]] that makes
+[redesigned garbage collector](https://golang.org/doc/go1.5#gc) that makes
 the language more suitable for latency-sensitive applications; it marks the
 transition from a C-based compiler tool chain to one
-[[https://golang.org/doc/go1.5#c][written entirely in Go]]; and it includes
-ports to [[https://golang.org/doc/go1.5#ports][new architectures]], with better
+[written entirely in Go](https://golang.org/doc/go1.5#c); and it includes
+ports to [new architectures](https://golang.org/doc/go1.5#ports), with better
 support for ARM processors (the chips that power most smartphones).
 These improvements make Go better suited to a broader range of tasks, a trend
 that we hope will continue over the coming years.
 
 Improvements to tools continue to boost developer productivity.
-We introduced the [[https://golang.org/cmd/trace/][execution tracer]] and the
-"[[https://golang.org/cmd/go/#hdr-Show_documentation_for_package_or_symbol][go doc]]"
+We introduced the [execution tracer](https://golang.org/cmd/trace/) and the
+"[go doc](https://golang.org/cmd/go/#hdr-Show_documentation_for_package_or_symbol)"
 command, as well as more enhancements to our various
-[[https://talks.golang.org/2014/static-analysis.slide][static analysis tools]].
+[static analysis tools](https://talks.golang.org/2014/static-analysis.slide).
 We are also working on an
-[[https://groups.google.com/forum/#!topic/Golang-nuts/8oCSjAiKXUQ][official Go plugin for Sublime Text]],
+[official Go plugin for Sublime Text](https://groups.google.com/forum/#!topic/Golang-nuts/8oCSjAiKXUQ),
 with better support for other editors in the pipeline.
 
 Early next year we will release more improvements in Go 1.6, including
-HTTP/2 support for [[https://golang.org/pkg/net/http/][net/http]] servers and
+HTTP/2 support for [net/http](https://golang.org/pkg/net/http/) servers and
 clients, an official package vendoring mechanism, support for blocks in text
 and HTML templates, a memory sanitizer that checks both Go and C/C++ code, and
 the usual assortment of other improvements and fixes.
diff --git a/content/7years.article b/content/7years.article
index 0957e85..b23d724 100644
--- a/content/7years.article
+++ b/content/7years.article
@@ -1,10 +1,11 @@
-Seven years of Go
+# Seven years of Go
 10 Nov 2016
+Summary: Today marks seven years since we open-sourced our preliminary sketch of Go. With the help of the open source community, including more than a thousand individual contributors to the Go source repositories, Go has matured into a language used all over the world.
 
 The Go Team
 rsc@golang.org
 
-* Seven years of Go
+##
 
 .html gopherbelly.html
 
@@ -15,9 +16,9 @@
 
 The most significant user-facing changes to Go over the past year are the
 addition of built-in support for
-[[https://www.youtube.com/watch?v=FARQMJndUn0#t=0m0s][HTTP/2]] in
-[[https://golang.org/doc/go1.6][Go 1.6]] and the integration of the
-[[https://blog.golang.org/context][context package]] into the standard library in [[https://golang.org/doc/go1.7][Go 1.7]].
+[HTTP/2](https://www.youtube.com/watch?v=FARQMJndUn0#t=0m0s) in
+[Go 1.6](https://golang.org/doc/go1.6) and the integration of the
+[context package](https://blog.golang.org/context) into the standard library in [Go 1.7](https://golang.org/doc/go1.7).
 But we’ve been making many less visible improvements.
 Go 1.7 changed the x86-64 compiler to use a new SSA-based back end,
 improving the performance of most Go programs by 10–20%.
@@ -26,18 +27,18 @@
 We’ve also added new ports, to Android on 32-bit x86, Linux on 64-bit MIPS,
 and Linux on IBM z Systems.
 And we’ve developed new garbage-collection techniques that reduce typical
-“stop the world” pauses to [[https://golang.org/design/17503-eliminate-rescan][under 100 microseconds]].
-(Contrast that with Go 1.5’s big news of [[https://blog.golang.org/go15gc][10 milliseconds or less]].)
+“stop the world” pauses to [under 100 microseconds](https://golang.org/design/17503-eliminate-rescan).
+(Contrast that with Go 1.5’s big news of [10 milliseconds or less](https://blog.golang.org/go15gc).)
 
 This year kicked off with a global Go hackathon,
-the [[https://blog.golang.org/gophergala][Gopher Gala]], in January.
-Then there were [[https://golang.org/wiki/Conferences][Go conferences]] in India and Dubai in February,
+the [Gopher Gala](https://blog.golang.org/gophergala), in January.
+Then there were [Go conferences](https://golang.org/wiki/Conferences) in India and Dubai in February,
 China and Japan in April, San Francisco in May, Denver in July,
 London in August, Paris last month, and Brazil this past weekend.
 And GothamGo in New York is next week.
-This year also saw more than 30 new [[https://golang.org/wiki/GoUserGroups][Go user groups]],
-eight new [[http://www.womenwhogo.org/][Women Who Go]] chapters,
-and four [[https://golangbridge.org/][GoBridge]] workshops around the world.
+This year also saw more than 30 new [Go user groups](https://golang.org/wiki/GoUserGroups),
+eight new [Women Who Go](http://www.womenwhogo.org/) chapters,
+and four [GoBridge](https://golangbridge.org/) workshops around the world.
 
 We continue to be overwhelmed by and grateful for
 the enthusiasm and support of the Go community.
diff --git a/content/8years.article b/content/8years.article
index 617193c..a48bc92 100644
--- a/content/8years.article
+++ b/content/8years.article
@@ -1,13 +1,14 @@
-Eight years of Go
+# Eight years of Go
 10 Nov 2017
 Tags: community, birthday
+Summary: Today we celebrate 8 years since Go was released as an open source project. During [Go’s 4th anniversary](https://blog.golang.org/4years), Andrew finished the post with “Here's to four more years!”. Now that we have reached that milestone, I cannot help but reflect on how much the project and ecosystem has grown since then. In our post 4 years ago we included a chart demonstrating Go's rising popularity on Google Trends with the search term "golang". Today, we’re including an updated chart. In this relative scale of popularity, what was 100 four years ago is now a mere 17. Go’s popularity has increased exponentially over the last 8 years and continues to grow.
 
 Steve Francia
 
-* Introduction
+##
 
 Today we celebrate 8 years since Go was released as an open source project.
-During [[https://blog.golang.org/4years][Go’s 4th anniversary]], Andrew
+During [Go’s 4th anniversary](https://blog.golang.org/4years), Andrew
 finished the post with “Here's to four more years!”. Now that we have reached
 that milestone, I cannot help but reflect on how much the project and
 ecosystem has grown since then. In our post 4 years ago we included a chart
@@ -18,43 +19,43 @@
 
 .image 8years/image1.png
 
-Source: [[https://trends.google.com/trends/explore?date=2009-10-01%202017-10-30&q=golang&hl=en-US][trends.google.com]]
+Source: [trends.google.com](https://trends.google.com/trends/explore?date=2009-10-01%202017-10-30&q=golang&hl=en-US)
 
-** Developers love Go
+## Developers love Go
 
 Go has been embraced by developers all over the world with approximately one
-million users worldwide. In the [[https://octoverse.github.com/][freshly published 2017 Octoverse]]
-by GitHub, *Go*has*become*the*#9*most*popular*language*, surpassing C.
-*Go*is*the*fastest*growing*language*on*GitHub*in*2017* in the top 10 with
-*52%*growth*over*the*previous*year*. In growth, Go swapped places with
+million users worldwide. In the [freshly published 2017 Octoverse](https://octoverse.github.com/)
+by GitHub, **Go has become the #9 most popular language**, surpassing C.
+**Go is the fastest growing language on GitHub in 2017** in the top 10 with
+**52% growth over the previous year**. In growth, Go swapped places with
 Javascript, which fell to the second spot with 44%.
 
 .image 8years/image2.png
 
-Source: [[https://octoverse.github.com/][octoverse.github.com]]
+Source: [octoverse.github.com](https://octoverse.github.com/)
 
-In [[https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted][Stack Overflow's 2017 developer survey]]
-, Go was the only language that was both on the *top*5*most*loved*and*top*5*most*wanted* languages.
+In [Stack Overflow's 2017 developer survey](https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted)
+, Go was the only language that was both on the **top 5 most loved and top 5 most wanted** languages.
 People who use Go, love it, and the people who aren’t using Go, want to be.
 
 .image 8years/image3.png
 .image 8years/image4.png
 
-Source: [[https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted][insights.stackoverflow.com/survey/2017]]
+Source: [insights.stackoverflow.com/survey/2017](https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted)
 
-** Go: The language of Cloud Infrastructure
+## Go: The language of Cloud Infrastructure
 
 In 2014, analyst Donnie Berkholz called Go
-[[http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/][the emerging language of cloud infrastructure]].
-*By*2017,*Go*has*emerged*as*the*language*of*cloud*infrastructure*.
-Today, *every*single*cloud*company*has*critical*components*of*their*cloud*infrastructure*implemented*in*Go*
+[the emerging language of cloud infrastructure](http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/).
+**By 2017, Go has emerged as the language of cloud infrastructure**.
+Today, **every single cloud company has critical components of their cloud infrastructure implemented in Go**
 including Google Cloud, AWS, Microsoft Azure, Digital Ocean, Heroku and many others. Go
 is a key part of cloud companies like Alibaba, Cloudflare, and Dropbox. Go is
 a critical part of open infrastructure including Kubernetes, Cloud Foundry,
 Openshift, NATS, Docker, Istio, Etcd, Consul, Juju and many more. Companies
 are increasingly choosing Go to build cloud infrastructure solutions.
 
-** Go’s Great Community
+## Go’s Great Community
 
 It may be hard to imagine that only four years ago the Go community was
 transitioning from online-only to include in-person community with its first
@@ -70,64 +71,64 @@
 Go Bridge and Women Who Go.
 
 This year we had two significant firsts for the Go project. We had our first
-[[https://blog.golang.org/contributors-summit][contributor summit]] where
+[contributor summit](https://blog.golang.org/contributors-summit) where
 people from across the Go community came together to
 discuss the needs and future of the Go project. Shortly after, we had the
-first [[https://blog.golang.org/contributor-workshop][Go contributor workshop]]
+first [Go contributor workshop](https://blog.golang.org/contributor-workshop)
 where hundreds of people came to make their first Go contribution.
 
 .image 8years/photo.jpg
 
 Photo by Sameer Ajmani
 
-** Go’s impact on open source
+## Go’s impact on open source
 
 Go has become a major force in the world of open source powering some of the
 most popular projects and enabling innovations across many industries. Find
-thousands of additional applications and libraries at [[https://github.com/avelino/awesome-go][awesome-go]]. Here are
+thousands of additional applications and libraries at [awesome-go](https://github.com/avelino/awesome-go). Here are
 just a handful of the most popular:
 
-- [[https://mobyproject.org/][Moby]] (formerly Docker) is a tool for packaging
-  and running applications in lightweight containers.
-  Its creator Solomon Hykes cited Go's standard library,
-  concurrency primitives, and ease of deployment as key factors,
-  and said "To put it simply, if Docker had not been written in Go,
-  it would not have been as successful."
+  - [Moby](https://mobyproject.org/) (formerly Docker) is a tool for packaging
+    and running applications in lightweight containers.
+    Its creator Solomon Hykes cited Go's standard library,
+    concurrency primitives, and ease of deployment as key factors,
+    and said "To put it simply, if Docker had not been written in Go,
+    it would not have been as successful."
 
-- [[https://kubernetes.io/][Kubernetes]] is a system for automating deployment,
-  scaling and management of containerized applications.
-  Initially designed by Google and used in the Google cloud,
-  Kubernetes now is a critical part of every major cloud offering.
+  - [Kubernetes](https://kubernetes.io/) is a system for automating deployment,
+    scaling and management of containerized applications.
+    Initially designed by Google and used in the Google cloud,
+    Kubernetes now is a critical part of every major cloud offering.
 
-- [[https://gohugo.io/][Hugo]] is now the most popular open-source static website engine.
-  With its amazing speed and flexibility, Hugo makes building websites fun again.
-  According to [[https://w3techs.com/technologies/overview/content_management/all][w3techs]],
-  Hugo now has nearly 3x the usage of Jekyll, the former leader.
+  - [Hugo](https://gohugo.io/) is now the most popular open-source static website engine.
+    With its amazing speed and flexibility, Hugo makes building websites fun again.
+    According to [w3techs](https://w3techs.com/technologies/overview/content_management/all),
+    Hugo now has nearly 3x the usage of Jekyll, the former leader.
 
-- [[https://prometheus.io/][Prometheus]] is an open source monitoring solution
-  and time series database that powers metrics and alerting designed to be
-  the system you go to during an outage to allow you to quickly diagnose problems.
+  - [Prometheus](https://prometheus.io/) is an open source monitoring solution
+    and time series database that powers metrics and alerting designed to be
+    the system you go to during an outage to allow you to quickly diagnose problems.
 
-- [[https://grafana.com/][Grafana]] is an open source,
-  feature-rich metrics dashboard and graph editor for Graphite,
-  Elasticsearch, OpenTSDB, Prometheus and InfluxDB.
+  - [Grafana](https://grafana.com/) is an open source,
+    feature-rich metrics dashboard and graph editor for Graphite,
+    Elasticsearch, OpenTSDB, Prometheus and InfluxDB.
 
-- [[https://getlantern.org/][Lantern]] delivers fast, reliable and secure access to blocked websites and apps.
+  - [Lantern](https://getlantern.org/) delivers fast, reliable and secure access to blocked websites and apps.
 
-- [[https://syncthing.net/][Syncthing]] is an open-source cross platform
-  peer-to-peer continuous file synchronization application
+  - [Syncthing](https://syncthing.net/) is an open-source cross platform
+    peer-to-peer continuous file synchronization application
 
-- [[https://keybase.io/][Keybase]] is a new and free security app for mobile
-  phones and computers.
-  Think of it as an open source Dropbox & Slack with end-to-end encryption
-  public-key cryptography.
+  - [Keybase](https://keybase.io/) is a new and free security app for mobile
+    phones and computers.
+    Think of it as an open source Dropbox & Slack with end-to-end encryption
+    public-key cryptography.
 
-- [[https://github.com/junegunn/fzf][Fzf]] is an interactive Unix filter
-  for command-line that can be used with any list;
-  files, command history, processes, hostnames,
-  bookmarks, git commits, etc.
-  Fzf supports Unix, macOS and has beta support for Windows.
-  It also can operate as a vim plugin.
+  - [Fzf](https://github.com/junegunn/fzf) is an interactive Unix filter
+    for command-line that can be used with any list;
+    files, command history, processes, hostnames,
+    bookmarks, git commits, etc.
+    Fzf supports Unix, macOS and has beta support for Windows.
+    It also can operate as a vim plugin.
 
 Many of these authors have said that their projects would not exist without
 Go. Some like Kubernetes and Docker created entirely new solutions. Others
@@ -135,7 +136,7 @@
 solutions already existed. The popularity of these applications alone is
 proof that Go is a ideal language for a broad set of use cases.
 
-** Thank You
+## Thank You
 
 This is the eighth time we have had the pleasure of writing a birthday blog
 post for Go and we continue to be overwhelmed by and grateful for the
@@ -144,8 +145,8 @@
 Since Go was first open sourced we have had 10 releases of the language,
 libraries and tooling with more than 1680 contributors making over 50,000
 commits to the project's 34 repositories; More than double the number of
-contributors and nearly double the number of commits from only [[https://blog.golang.org/6years][two years ago]].
-This year we announced that we have begun planning [[https://blog.golang.org/toward-go2][Go 2]], our first major
+contributors and nearly double the number of commits from only [two years ago](https://blog.golang.org/6years).
+This year we announced that we have begun planning [Go 2](https://blog.golang.org/toward-go2), our first major
 revision of the language and tooling.
 
 The Go team would like to thank everyone who has contributed to the project,
diff --git a/content/9years.article b/content/9years.article
index edc8199..88f63c2 100644
--- a/content/9years.article
+++ b/content/9years.article
@@ -1,56 +1,57 @@
-Nine years of Go
+# Nine years of Go
 10 Nov 2018
 Tags: community, birthday
+Summary: Today marks the ninth anniversary of the day we open-sourced our initial sketch of Go. On each anniversary we like to take time to reflect on what has happened over the past year. The past 12 months have been a breakout year for the Go language and community.
 
 Steve Francia
 
-* Introduction
+## Introduction
 
 Today marks the ninth anniversary of the day we open-sourced our initial sketch of Go.
 On each anniversary we like to take time to reflect on what has happened over the past year.
 The past 12 months have been a breakout year for the Go language and community.
 
-* Go Love & Adoption
+## Go Love & Adoption
 
 Thanks to all of you, 2018 was an amazing year for Go!
 In multiple industry surveys Gophers expressed how happy they were using Go,
 and many non-Go developers indicated they intended to learn Go before any other language.
 
-In [[https://insights.stackoverflow.com/survey/2018#most-loved-dreaded-and-wanted][Stack Overflow’s 2018 Developer Survey]],
+In [Stack Overflow’s 2018 Developer Survey](https://insights.stackoverflow.com/survey/2018#most-loved-dreaded-and-wanted),
 Go retained its coveted spot in both the top 5 most loved and top 5 most wanted languages.
 People who use Go love it, and people who aren’t using Go want to.
 
-In [[https://www.activestate.com/developer-survey-2018-open-source-runtime-pains][ActiveState’s 2018 Developer Survey]],
+In [ActiveState’s 2018 Developer Survey](https://www.activestate.com/developer-survey-2018-open-source-runtime-pains),
 Go topped the charts with 36% of users responding they were “Extremely Satisfied” using Go
 and 61% responding “Very Satisfied” or better.
 
-[[https://www.jetbrains.com/research/devecosystem-2018/][JetBrains’s 2018 Developer Survey]] awarded Go
+[JetBrains’s 2018 Developer Survey](https://www.jetbrains.com/research/devecosystem-2018/) awarded Go
 the “Most promising language” with 12% of respondents using Go today and 16% intending to use Go in the future.
 
-In [[https://research.hackerrank.com/developer-skills/2018/][HackerRank’s 2018 Developer Survey]],
+In [HackerRank’s 2018 Developer Survey](https://research.hackerrank.com/developer-skills/2018/),
 38% of developers responded that they were intending to learn Go next.
 
 We are excited about all of our new gophers and actively working to improve our educational and community resources.
 
-* Go Community
+## Go Community
 
 It’s hard to believe that it’s only been five years since
 the first Go conferences and Go meetups.
 We’ve seen major growth in this area of community leadership over the last year.
-There are now over 20 [[https://github.com/golang/go/wiki/Conferences][Go conferences]]
-and over 300 [[https://www.meetup.com/topics/golang/][Go-related meetups]] spanning the globe.
+There are now over 20 [Go conferences](https://github.com/golang/go/wiki/Conferences)
+and over 300 [Go-related meetups](https://www.meetup.com/topics/golang/) spanning the globe.
 
 Thanks to the hard work put into these many conferences and meetups,
 there have been hundreds of great talks this year.
 Here are a few of our favorite talks specifically discussing the growth of our community
 and how we can better support gophers worldwide.
 
-- [[https://www.youtube.com/watch?v=cVaDY0ChvOQ][Writing Accessible Go]], by Julia Ferraioli at GopherCon
-- [[https://www.youtube.com/watch?v=7yMXs9TRvVI][The Importance of Beginners]], by Natalie Pistunovich at GopherCon
-- [[https://www.youtube.com/watch?v=I_KcpgxcFyU][The Legacy of Go, Part 2]], by Carmen Andoh at GothamGo
-- [[https://www.youtube.com/watch?v=dl1mCGKwlYY][Growing a Community of Gophers]], by Cassandra Salisbury at Gopherpalooza
+  - [Writing Accessible Go](https://www.youtube.com/watch?v=cVaDY0ChvOQ), by Julia Ferraioli at GopherCon
+  - [The Importance of Beginners](https://www.youtube.com/watch?v=7yMXs9TRvVI), by Natalie Pistunovich at GopherCon
+  - [The Legacy of Go, Part 2](https://www.youtube.com/watch?v=I_KcpgxcFyU), by Carmen Andoh at GothamGo
+  - [Growing a Community of Gophers](https://www.youtube.com/watch?v=dl1mCGKwlYY), by Cassandra Salisbury at Gopherpalooza
 
-On that theme, this year we also [[https://blog.golang.org/conduct-2018][revised our code of conduct]]
+On that theme, this year we also [revised our code of conduct](https://blog.golang.org/conduct-2018)
 to better support inclusivity in the Go community.
 
 The Go community is truly global.
@@ -58,27 +59,27 @@
 
 .image 9years-iceland.jpg _ 800
 
-_(Photo_by_Winter_Francia.)_
+_(Photo by Winter Francia.)_
 
-* Go 2
+## Go 2
 
 After five years of experience with Go 1, we’ve started looking at
 what we should change about Go to better support
-[[https://talks.golang.org/2012/splash.article][programming at scale]].
+[programming at scale](https://talks.golang.org/2012/splash.article).
 
-Last spring, we published a [[https://blog.golang.org/versioning-proposal][draft design for Go modules]],
+Last spring, we published a [draft design for Go modules](https://blog.golang.org/versioning-proposal),
 which provide an integrated mechanism for versioning and package distribution.
 The most recent Go release, Go 1.11, included
-[[https://golang.org/doc/go1.11#modules][preliminary support for modules]].
+[preliminary support for modules](https://golang.org/doc/go1.11#modules).
 
 Last summer we published
-[[https://blog.golang.org/go2draft][early draft designs]]
+[early draft designs](https://blog.golang.org/go2draft)
 for how Go 2 might better support error values, error handling, and generic programming.
 
 We are excited about refining these designs with the community’s help as we work
-[[https://blog.golang.org/toward-go2][toward Go 2]].
+[toward Go 2](https://blog.golang.org/toward-go2).
 
-* Go Contributors
+## Go Contributors
 
 The Go project has been increasing in the number of contributions from the community for several years.
 The project hit a major milestone in mid-2018 when, for the first time,
@@ -86,7 +87,7 @@
 
 .image 9years-graph.png _ 600
 
-* Thank You
+## Thank You
 
 On a personal note, from the entire Go team,
 we want to sincerely thank all of you.
diff --git a/content/a-conversation-with-the-go-team.article b/content/a-conversation-with-the-go-team.article
index 7c8df47..475d4aa 100644
--- a/content/a-conversation-with-the-go-team.article
+++ b/content/a-conversation-with-the-go-team.article
@@ -1,7 +1,8 @@
-A conversation with the Go team
+# A conversation with the Go team
 6 Jun 2013
+Summary: At Google I/O 2013, several members of the Go team hosted a "Fireside chat." Robert Griesemer, Rob Pike, David Symonds, Andrew Gerrand, Ian Lance Taylor, Sameer Ajmani, Brad Fitzpatrick, and Nigel Tao took questions from the audience and people around the world about various aspects of the Go project.
 
-* Introduction
+##
 
 At Google I/O 2013, several members of the Go team hosted a "Fireside chat."
 Robert Griesemer, Rob Pike, David Symonds, Andrew Gerrand, Ian Lance Taylor,
@@ -11,23 +12,23 @@
 .iframe //www.youtube.com/embed/p9VUCp98ay4 309 549
 
 We also hosted a similar session at I/O last year:
-[[http://www.youtube.com/watch?v=sln-gJaURzk][_Meet_the_Go_team_]].
+[_Meet the Go team_](http://www.youtube.com/watch?v=sln-gJaURzk).
 
 There were many more questions from Google Moderator than we were able to
 answer in the short 40 minute session.
 Here we answer some of those we missed in the live session.
 
-_Linking_speed_(and_memory_usage)_for_the_gc_toolchain_are_a_known_problem._
-_Are_there_any_plans_to_address_this_during_the_1.2_cycle?_
+_Linking speed (and memory usage) for the gc toolchain are a known problem._
+_Are there any plans to address this during the 1.2 cycle?_
 
-*Rob:* Yes. We are always thinking about ways to improve performance of the
+**Rob:** Yes. We are always thinking about ways to improve performance of the
 tools as well as the language and libraries.
 
-_I_have_been_very_pleased_to_see_how_quickly_Go_appears_to_be_gaining_traction._
-_Can_you_talk_about_the_reactions_you_have_experienced_working_with_other_
-_developers_inside_and_outside_Google?_Are_there_any_major_sticking_points_remaining?_
+_I have been very pleased to see how quickly Go appears to be gaining traction._
+_Can you talk about the reactions you have experienced working with other_
+_developers inside and outside Google? Are there any major sticking points remaining?_
 
-*Robert:* A lot of developers that seriously tried Go are very happy with it.
+**Robert:** A lot of developers that seriously tried Go are very happy with it.
 Many of them report a much smaller, more readable and thus maintainable code
 base: A 50% code size reduction or more when coming from C++ seems common.
 Developers that switched to Go from Python are invariably pleased with the
@@ -35,34 +36,34 @@
 language (some of which we might iron out at some point). What surprises me is
 that almost nobody complains about the lack of generics.
 
-_When_will_Go_be_a_first-class_language_for_Android_development?_
+_When will Go be a first-class language for Android development?_
 
-*Andrew:* This would be great, but we don't have anything to announce.
+**Andrew:** This would be great, but we don't have anything to announce.
 
-_Is_there_a_roadmap_for_the_next_version_of_Go?_
+_Is there a roadmap for the next version of Go?_
 
-*Andrew:* We have no feature roadmap as such. The contributors tend to work on
+**Andrew:** We have no feature roadmap as such. The contributors tend to work on
 what interests them. Active areas of development include the gc and gccgo
 compilers, the garbage collector and runtime, and many others. We expect the
 majority of exciting new additions will be in the form of improvements to our
 tools. You can find design discussions and code reviews on the
-[[http://groups.google.com/group/golang-dev][golang-dev mailing list]].
+[golang-dev mailing list](http://groups.google.com/group/golang-dev).
 
 As for the timeline, we do have
-[[https://docs.google.com/document/d/106hMEZj58L9nq9N9p7Zll_WKfo-oyZHFyI6MttuZmBU/edit?usp=sharing][concrete plans]]:
+[concrete plans](https://docs.google.com/document/d/106hMEZj58L9nq9N9p7Zll_WKfo-oyZHFyI6MttuZmBU/edit?usp=sharing):
 we expect to release Go 1.2 on December 1, 2013.
 
-_Where_do_you_guys_want_to_see_Go_used_externally?_
-_What_would_you_consider_a_big_win_for_Go_adoption_outside_Google?_
-_Where_do_you_think_Go_has_the_potential_to_make_a_significant_impact?_
+_Where do you guys want to see Go used externally?_
+_What would you consider a big win for Go adoption outside Google?_
+_Where do you think Go has the potential to make a significant impact?_
 
-*Rob:* Where Go is deployed is up to its users, not to us. We're happy to see
+**Rob:** Where Go is deployed is up to its users, not to us. We're happy to see
 it gain traction anywhere it helps. It was designed with server-side software
 in mind, and is showing promise there, but has also shown strengths in many
 other areas and the story is really just beginning. There are many surprises to
 come.
 
-*Ian:* It’s easier for startups to use Go, because they don’t have an
+**Ian:** It’s easier for startups to use Go, because they don’t have an
 entrenched code base that they need to work with. So I see two future big wins
 for Go. One would be a significant use of Go by an existing large software
 company other than Google. Another would be a significant IPO or acquisition
@@ -71,25 +72,25 @@
 But it would be another way to show that Go can be part of a successful
 software system.
 
-_Have_you_thought_any_(more)_about_the_potential_of_dynamically_loading_
-_Go_packages_or_objects_and_how_it_could_work_in_Go?_
-_I_think_this_could_enable_some_really_interesting_and_expressive_constructs,_
-_especially_coupled_with_interfaces._
+_Have you thought any (more) about the potential of dynamically loading_
+_Go packages or objects and how it could work in Go?_
+_I think this could enable some really interesting and expressive constructs,_
+_especially coupled with interfaces._
 
-*Rob:* This is an active topic of discussion. We appreciate how powerful the
+**Rob:** This is an active topic of discussion. We appreciate how powerful the
 concept can be and hope we can find a way to implement it before too long.
 There are serious challenges in the design approach to take and the need to
 make it work portably.
 
-_There_was_a_discussion_a_while_ago_about_collecting_some_best-of-breed_
-`database/sql` _drivers_in_a_more_central_place._
-_Some_people_had_strong_opinions_to_the_contrary_though._
-_Where_is_ `database/sql` _and_its_drivers_going_in_the_next_year?_
+_There was a discussion a while ago about collecting some best-of-breed_
+`database/sql` _drivers in a more central place._
+_Some people had strong opinions to the contrary though._
+_Where is_ `database/sql` _and its drivers going in the next year?_
 
-*Brad:* While we could create an official subrepo (“go.db”) for database
+**Brad:** While we could create an official subrepo (“go.db”) for database
 drivers, we fear that would unduly bless certain drivers. At this point we’d
 still rather see healthy competition between different drivers. The
-[[https://golang.org/wiki/SQLDrivers][SQLDrivers wiki page]]
+[SQLDrivers wiki page](https://golang.org/wiki/SQLDrivers)
 lists some good ones.
 
 The `database/sql` package didn’t get much attention for a while, due to lack of
@@ -99,12 +100,12 @@
  There might be small extensions here and there as needed for performance or to
 assist some drivers.
 
-_What_is_the_status_of_versioning?_
-_Is_importing_some_code_from_github_a_best_practice_recommended_by_the_Go_team?_
-_What_happens_when_we_publish_our_code_that_is_dependent_on_a_github_repo_and_
-_the_API_of_the_dependee_changes?_
+_What is the status of versioning?_
+_Is importing some code from github a best practice recommended by the Go team?_
+_What happens when we publish our code that is dependent on a github repo and_
+_the API of the dependee changes?_
 
-*Ian:* This is frequently discussed on the mailing list. What we do internally
+**Ian:** This is frequently discussed on the mailing list. What we do internally
 is take a snapshot of the imported code, and update that snapshot from time to
 time. That way, our code base won't break unexpectedly if the API changes.
 But we understand that that approach doesn’t work very well for people who are
@@ -113,17 +114,17 @@
 than the language itself; the place to fix this is in the tools, not the
 language.
 
-_What_about_Go_and_Graphical_User_Interfaces?_
+_What about Go and Graphical User Interfaces?_
 
-*Rob:* This is a subject close to my heart. Newsqueak, a very early precursor
+**Rob:** This is a subject close to my heart. Newsqueak, a very early precursor
 language, was designed specifically for writing graphics programs (that's what
 we used to call apps). The landscape has changed a lot but I think Go's
 concurrency model has much to offer in the field of interactive graphics.
 
-*Andrew:* There are many
-[[https://golang.org/wiki/Projects#Graphics_and_Audio][bindings for existing graphics libraries]]
+**Andrew:** There are many
+[bindings for existing graphics libraries](https://golang.org/wiki/Projects#Graphics_and_Audio)
 out there, and a few Go-specific projects. One of the more promising ones is
-[[https://github.com/skelterjohn/go.uik][go.uik]], but it's still in its early
+[go.uik](https://github.com/skelterjohn/go.uik), but it's still in its early
 days. I think there's a lot of potential for a great Go-specific UI toolkit for
 writing native applications (consider handling user events by receiving from a
 channel), but developing a production-quality package is a significant
@@ -133,12 +134,12 @@
 interfaces. Go provides great support for building web apps, albeit only on the
 back end.
 
-_In_the_mailing_lists_Adam_Langley_has_stated_that_the_TLS_code_has_not_been_
-_reviewed_by_outside_groups,_and_thus_should_not_be_used_in_production._
-_Are_there_plans_to_have_the_code_reviewed?_
-_A_good_secure_implementation_of_concurrent_TLS_would_be_very_nice._
+_In the mailing lists Adam Langley has stated that the TLS code has not been_
+_reviewed by outside groups, and thus should not be used in production._
+_Are there plans to have the code reviewed?_
+_A good secure implementation of concurrent TLS would be very nice._
 
-*Adam*: Cryptography is notoriously easy to botch in subtle and surprising ways
+**Adam**: Cryptography is notoriously easy to botch in subtle and surprising ways
 and I’m only human. I don’t feel that I can warrant that Go’s TLS code is
 flawless and I wouldn’t want to misrepresent it.
 
@@ -152,7 +153,7 @@
 investigated whether we could get Matasano or the like to do it. That depends
 on whether Google wishes to fund it.
 
-_What_do_you_think_about_ [[http://www.gophercon.com/][_GopherCon_2014_]]_?_
-_Does_anyone_from_the_team_plan_to_attend?_
+_What do you think about_ [_GopherCon 2014_](http://www.gophercon.com/)_?_
+_Does anyone from the team plan to attend?_
 
-*Andrew:* It's very exciting. I'm sure some of us will be there.
+**Andrew:** It's very exciting. I'm sure some of us will be there.
diff --git a/content/a-new-go-api-for-protocol-buffers.article b/content/a-new-go-api-for-protocol-buffers.article
index f3afe0a..2c5c014 100644
--- a/content/a-new-go-api-for-protocol-buffers.article
+++ b/content/a-new-go-api-for-protocol-buffers.article
@@ -1,19 +1,20 @@
-A new Go API for Protocol Buffers
-02 Mar 2020
+# A new Go API for Protocol Buffers
+2 Mar 2020
 Tags: protobuf, technical
+Summary: We are pleased to announce the release of a major revision of the Go API for [protocol buffers](https://developers.google.com/protocol-buffers), Google's language-neutral data interchange format.
 
 Joe Tsai, Damien Neil, and Herbie Ong
 
-* Introduction
+## Introduction
 
 We are pleased to announce the release of a major revision of the Go API for
-[[https://developers.google.com/protocol-buffers][protocol buffers]],
+[protocol buffers](https://developers.google.com/protocol-buffers),
 Google's language-neutral data interchange format.
 
-* Motivations for a new API
+## Motivations for a new API
 
 The first protocol buffer bindings for Go were
-[[https://blog.golang.org/third-party-libraries-goprotobuf-and][announced by Rob Pike]]
+[announced by Rob Pike](https://blog.golang.org/third-party-libraries-goprotobuf-and)
 in March of 2010. Go 1 would not be released for another two years.
 
 In the decade since that first release, the package has grown and
@@ -21,7 +22,7 @@
 
 Many people want to write programs that use reflection to examine protocol
 buffer messages. The
-[[https://pkg.go.dev/reflect][`reflect`]]
+[`reflect`](https://pkg.go.dev/reflect)
 package provides a view of Go types and
 values, but omits information from the protocol buffer type system. For
 example, we might want to write a function that traverses a log entry and
@@ -33,7 +34,7 @@
 capable of representing messages whose type is not known at compile time.
 
 We also observed that a frequent source of problems was that the
-[[https://pkg.go.dev/github.com/golang/protobuf/proto?tab=doc#Message][`proto.Message`]]
+[`proto.Message`](https://pkg.go.dev/github.com/golang/protobuf/proto?tab=doc#Message)
 interface, which identifies values of generated message types, does very
 little to describe the behavior of those types. When users create types
 that implement that interface (often inadvertently by embedding a message
@@ -52,11 +53,11 @@
 
 Today, we're pleased to release that new module. We hope you like it.
 
-* Reflection
+## Reflection
 
 Reflection is the flagship feature of the new implementation. Similar
 to how the `reflect` package provides a view of Go types and values, the
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc][`google.golang.org/protobuf/reflect/protoreflect`]]
+[`google.golang.org/protobuf/reflect/protoreflect`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc)
 package provides a view of values according to the protocol buffer
 type system.
 
@@ -65,7 +66,7 @@
 function we mentioned previously.
 
 First, we'll write a `.proto` file defining an extension of the
-[[https://github.com/protocolbuffers/protobuf/blob/b96241b1b716781f5bc4dc25e1ebb0003dfaba6a/src/google/protobuf/descriptor.proto#L509][`google.protobuf.FieldOptions`]]
+[`google.protobuf.FieldOptions`](https://github.com/protocolbuffers/protobuf/blob/b96241b1b716781f5bc4dc25e1ebb0003dfaba6a/src/google/protobuf/descriptor.proto#L509)
 type so we can annotate fields as containing
 sensitive information or not.
 
@@ -91,7 +92,7 @@
 	}
 
 This function accepts a
-[[https://pkg.go.dev/google.golang.org/protobuf/proto?tab=doc#Message][`proto.Message`]],
+[`proto.Message`](https://pkg.go.dev/google.golang.org/protobuf/proto?tab=doc#Message),
 an interface type implemented by all generated message types. This type
 is an alias for one defined in the `protoreflect` package:
 
@@ -101,7 +102,7 @@
 
 To avoid filling up the namespace of generated
 messages, the interface contains only a single method returning a
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Message][`protoreflect.Message`]],
+[`protoreflect.Message`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Message),
 which provides access to the message contents.
 
 (Why an alias? Because `protoreflect.Message` has a corresponding
@@ -109,7 +110,7 @@
 import cycle between the two packages.)
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Message.Range][`protoreflect.Message.Range`]]
+[`protoreflect.Message.Range`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Message.Range)
 method calls a function for every populated field in a message.
 
 	m := pb.ProtoReflect()
@@ -119,13 +120,13 @@
 	})
 
 The range function is called with a
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#FieldDescriptor][`protoreflect.FieldDescriptor`]]
+[`protoreflect.FieldDescriptor`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#FieldDescriptor)
 describing the protocol buffer type of the field, and a
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Value][`protoreflect.Value`]]
+[`protoreflect.Value`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Value)
 containing the field value.
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Descriptor.Options][`protoreflect.FieldDescriptor.Options`]]
+[`protoreflect.FieldDescriptor.Options`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect?tab=doc#Descriptor.Options)
 method returns the field options as a `google.protobuf.FieldOptions`
 message.
 
@@ -147,9 +148,9 @@
 
 This is also an example of an area where we
 have simplified the `proto` package API. The original
-[[https://pkg.go.dev/github.com/golang/protobuf/proto?tab=doc#GetExtension][`proto.GetExtension`]]
+[`proto.GetExtension`](https://pkg.go.dev/github.com/golang/protobuf/proto?tab=doc#GetExtension)
 returned both a value and an error. The new
-[[https://pkg.go.dev/google.golang.org/protobuf/proto?tab=doc#GetExtension][`proto.GetExtension`]]
+[`proto.GetExtension`](https://pkg.go.dev/google.golang.org/protobuf/proto?tab=doc#GetExtension)
 returns just a value, returning the default value for the field if it is
 not present. Extension decoding errors are reported at `Unmarshal` time.
 
@@ -176,7 +177,7 @@
 message-valued fields. We hope that this simple example gives a
 taste of protocol buffer reflection and its uses.
 
-* Versions
+## Versions
 
 We call the original version of Go protocol buffers APIv1, and the
 new one APIv2. Because APIv2 is not backwards compatible with APIv1,
@@ -188,11 +189,11 @@
 `proto3` language versions.)
 
 The
-[[https://pkg.go.dev/github.com/golang/protobuf?tab=overview][`github.com/golang/protobuf`]]
+[`github.com/golang/protobuf`](https://pkg.go.dev/github.com/golang/protobuf?tab=overview)
 module is APIv1.
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf?tab=overview][`google.golang.org/protobuf`]]
+[`google.golang.org/protobuf`](https://pkg.go.dev/google.golang.org/protobuf?tab=overview)
 module is APIv2. We have taken advantage of the need to change the
 import path to switch to one that is not tied to a specific hosting
 provider. (We considered `google.golang.org/protobuf/v2`, to make it
@@ -205,17 +206,17 @@
 one API while others use another. It is essential, therefore, that we
 continue to support programs that use APIv1.
 
-- `github.com/golang/protobuf@v1.3.4` is the most recent pre-APIv2 version of APIv1.
+  - `github.com/golang/protobuf@v1.3.4` is the most recent pre-APIv2 version of APIv1.
 
-- `github.com/golang/protobuf@v1.4.0` is a version of APIv1 implemented in terms of APIv2.
-  The API is the same, but the underlying implementation is backed by the new one.
-  This version contains functions to convert between the APIv1 and APIv2 `proto.Message`
-  interfaces to ease the transition between the two.
+  - `github.com/golang/protobuf@v1.4.0` is a version of APIv1 implemented in terms of APIv2.
+    The API is the same, but the underlying implementation is backed by the new one.
+    This version contains functions to convert between the APIv1 and APIv2 `proto.Message`
+    interfaces to ease the transition between the two.
 
-- `google.golang.org/protobuf@v1.20.0` is APIv2.
-  This module depends upon `github.com/golang/protobuf@v1.4.0`,
-  so any program which uses APIv2 will automatically pick a version of APIv1
-  which integrates with it.
+  - `google.golang.org/protobuf@v1.20.0` is APIv2.
+    This module depends upon `github.com/golang/protobuf@v1.4.0`,
+    so any program which uses APIv2 will automatically pick a version of APIv1
+    which integrates with it.
 
 (Why start at version `v1.20.0`? To provide clarity.
 We do not anticipate APIv1 to ever reach `v1.20.0`,
@@ -232,31 +233,31 @@
 implementation until the maintainers choose to update to the new one
 (either directly, or by updating a dependency).
 
-* Additional features of note
+## Additional features of note
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson][`google.golang.org/protobuf/encoding/protojson`]]
+[`google.golang.org/protobuf/encoding/protojson`](https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson)
 package converts protocol buffer messages to and from JSON using the
-[[https://developers.google.com/protocol-buffers/docs/proto3#json][canonical JSON mapping]],
+[canonical JSON mapping](https://developers.google.com/protocol-buffers/docs/proto3#json),
 and fixes a number of issues with the old `jsonpb` package
 that were difficult to change without causing problems for existing users.
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/types/dynamicpb][`google.golang.org/protobuf/types/dynamicpb`]]
+[`google.golang.org/protobuf/types/dynamicpb`](https://pkg.go.dev/google.golang.org/protobuf/types/dynamicpb)
 package provides an implementation of `proto.Message` for messages whose
 protocol buffer type is derived at runtime.
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/testing/protocmp][`google.golang.org/protobuf/testing/protocmp`]]
+[`google.golang.org/protobuf/testing/protocmp`](https://pkg.go.dev/google.golang.org/protobuf/testing/protocmp)
 package provides functions to compare protocol buffer messages with the
-[[https://pkg.go.dev/github.com/google/go-cmp/cmp][`github.com/google/cmp`]]
+[`github.com/google/cmp`](https://pkg.go.dev/github.com/google/go-cmp/cmp)
 package.
 
 The
-[[https://pkg.go.dev/google.golang.org/protobuf/compiler/protogen?tab=doc][`google.golang.org/protobuf/compiler/protogen`]]
+[`google.golang.org/protobuf/compiler/protogen`](https://pkg.go.dev/google.golang.org/protobuf/compiler/protogen?tab=doc)
 package provides support for writing protocol compiler plugins.
 
-* Conclusion
+## Conclusion
 
 The `google.golang.org/protobuf` module is a major overhaul of
 Go's support for protocol buffers, providing first-class support
diff --git a/content/advanced-go-concurrency-patterns.article b/content/advanced-go-concurrency-patterns.article
index c3f1eab..f9b9298 100644
--- a/content/advanced-go-concurrency-patterns.article
+++ b/content/advanced-go-concurrency-patterns.article
@@ -1,15 +1,16 @@
-Advanced Go Concurrency Patterns
+# Advanced Go Concurrency Patterns
 23 May 2013
 Tags: talk, video, concurrency
+Summary: At Google I/O a year ago Rob Pike presented [_Go Concurrency Patterns_](https://talks.golang.org/2012/concurrency.slide), an introduction to Go's concurrency model. Last week, at I/O 2013, Go team member Sameer Ajmani continued the story with [_Advanced Go Concurrency Patterns_](http://talks.golang.org/2013/advconc.slide), an in-depth look at a real concurrent programming problem. The talk shows how to detect and avoid deadlocks and race conditions, and demonstrates the implementation of deadlines, cancellation, and more. For those who want to take their Go programming to the next level, this is a must-see.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-At Google I/O a year ago Rob Pike presented [[https://talks.golang.org/2012/concurrency.slide][_Go_Concurrency_Patterns_]],
+At Google I/O a year ago Rob Pike presented [_Go Concurrency Patterns_](https://talks.golang.org/2012/concurrency.slide),
 an introduction to Go's concurrency model.
 Last week, at I/O 2013, Go team member Sameer Ajmani continued the story
-with [[http://talks.golang.org/2013/advconc.slide][_Advanced_Go_Concurrency_Patterns_]],
+with [_Advanced Go Concurrency Patterns_](http://talks.golang.org/2013/advconc.slide),
 an in-depth look at a real concurrent programming problem.
 The talk shows how to detect and avoid deadlocks and race conditions,
 and demonstrates the implementation of deadlines,
@@ -18,9 +19,9 @@
 
 .iframe //www.youtube.com/embed/QDDwwePbDtw?rel=0 309 549
 
-The slides are [[https://talks.golang.org/2013/advconc.slide][available here]]
+The slides are [available here](https://talks.golang.org/2013/advconc.slide)
 (use the left and right arrows to navigate).
 
-The slides were produced with [[https://godoc.org/golang.org/x/tools/present][the present tool]],
-and the runnable code snippets are powered by the [[http://play.golang.org/][Go Playground]].
-The source code for this talk is in [[https://github.com/golang/talks/tree/master/content/2013/advconc][the go.talks sub-repository]].
+The slides were produced with [the present tool](https://godoc.org/golang.org/x/tools/present),
+and the runnable code snippets are powered by the [Go Playground](http://play.golang.org/).
+The source code for this talk is in [the go.talks sub-repository](https://github.com/golang/talks/tree/master/content/2013/advconc).
diff --git a/content/appengine-dec2013.article b/content/appengine-dec2013.article
index 1e53a7d..21ecd90 100644
--- a/content/appengine-dec2013.article
+++ b/content/appengine-dec2013.article
@@ -1,22 +1,23 @@
-Go on App Engine: tools, tests, and concurrency
+# Go on App Engine: tools, tests, and concurrency
 13 Dec 2013
 Tags: appengine
+Summary: When we [launched Go for App Engine](https://blog.golang.org/go-and-google-app-engine) in May 2011 the SDK was just a modified version of the Python SDK. At the time, there was no canonical way to build or organize Go programs, so it made sense to take the Python approach. Since then Go 1.0 was released, including the [go tool](https://golang.org/cmd/go/) and a [convention](https://golang.org/doc/code.html) for organizing Go programs.
 
 Andrew Gerrand
 
 Johan Euphrosine
 
-* Background
+## Background
 
-When we [[https://blog.golang.org/go-and-google-app-engine][launched Go for App Engine]]
+When we [launched Go for App Engine](https://blog.golang.org/go-and-google-app-engine)
 in May 2011 the SDK was just a modified version of the Python SDK.
 At the time, there was no canonical way to build or organize Go programs, so it
 made sense to take the Python approach. Since then Go 1.0 was released,
-including the [[https://golang.org/cmd/go/][go tool]] and a
-[[https://golang.org/doc/code.html][convention]] for organizing Go programs.
+including the [go tool](https://golang.org/cmd/go/) and a
+[convention](https://golang.org/doc/code.html) for organizing Go programs.
 
 In January 2013 we announced
-[[https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath][better integration]]
+[better integration](https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath)
 between the Go App Engine SDK and the go tool, promoting the use of
 conventional import paths in App Engine apps and making it possible to use "go
 get" to fetch app dependencies.
@@ -24,17 +25,17 @@
 With the recent release of App Engine 1.8.8 we are pleased to announce more
 improvements to the developer experience for Go on App Engine.
 
-* The goapp tool
+## The goapp tool
 
 The Go App Engine SDK now includes the "goapp" tool, an App Engine-specific
 version of the "go" tool. The new name permits users to keep both the regular
 "go" tool and the "goapp" tool in their system PATH.
 
-In addition to the existing "go" tool [[https://golang.org/cmd/go/][commands]],
+In addition to the existing "go" tool [commands](https://golang.org/cmd/go/),
 the "goapp" tool provides new commands for working with App Engine apps.
-The "[[https://developers.google.com/appengine/docs/go/tools/devserver][goapp serve]]"
+The "[goapp serve](https://developers.google.com/appengine/docs/go/tools/devserver)"
 command starts the local development server and the
-"[[https://developers.google.com/appengine/docs/go/tools/uploadinganapp][goapp deploy]]"
+"[goapp deploy](https://developers.google.com/appengine/docs/go/tools/uploadinganapp)"
 command uploads an app to App Engine.
 
 The main advantages offered by the "goapp serve" and "goapp deploy" commands
@@ -53,36 +54,36 @@
 	$ goapp serve github.com/user/myapp
 
 You can even specify a YAML file to serve or deploy a specific
-[[https://developers.google.com/appengine/docs/go/modules/][module]]:
+[module](https://developers.google.com/appengine/docs/go/modules/):
 
 	$ goapp deploy mymodule.yaml
 
 These commands can replace most uses of `dev_appserver.py` and `appcfg.py`,
 although the Python tools are still available for their less common uses.
 
-* Local unit testing
+## Local unit testing
 
 The Go App Engine SDK now supports local unit testing, using Go's native
-[[https://developers.google.com/appengine/docs/go/tools/localunittesting][testing package]]
-and the "[[https://golang.org/cmd/go/#hdr-Test_packages][go test]]" command
+[testing package](https://developers.google.com/appengine/docs/go/tools/localunittesting)
+and the "[go test](https://golang.org/cmd/go/#hdr-Test_packages)" command
 (provided as "goapp test" by the SDK).
 
 Furthermore, you can now write tests that use App Engine services.
-The [[https://developers.google.com/appengine/docs/go/tools/localunittesting#Go_Introducing_the_aetest_package][aetest package]]
+The [aetest package](https://developers.google.com/appengine/docs/go/tools/localunittesting#Go_Introducing_the_aetest_package)
 provides an appengine.Context value that delegates requests to a temporary
 instance of the development server.
 
 For more information about using "goapp test" and the aetest package, see the
-[[https://developers.google.com/appengine/docs/go/tools/localunittesting][Local Unit Testing for Go documentation]].
+[Local Unit Testing for Go documentation](https://developers.google.com/appengine/docs/go/tools/localunittesting).
 Note that the aetest package is still in its early days;
 we hope to add more features over time.
 
-* Better concurrency support
+## Better concurrency support
 
 It is now possible to configure the number of concurrent requests served by
 each of your app's dynamic instances by setting the
-[[https://developers.google.com/appengine/docs/go/modules/#max_concurrent_requests][`max_concurrent_requests`]] option
-(available to [[https://developers.google.com/appengine/docs/go/modules/#automatic_scaling][Automatic Scaling modules]] only).
+[`max_concurrent_requests`](https://developers.google.com/appengine/docs/go/modules/#max_concurrent_requests) option
+(available to [Automatic Scaling modules](https://developers.google.com/appengine/docs/go/modules/#automatic_scaling) only).
 
 Here's an example `app.yaml` file:
 
@@ -101,10 +102,10 @@
 taking advantage of Go's efficient handling of concurrency, which should yield
 better instance utilization and ultimately fewer billable instance hours.
 
-* Conclusion
+## Conclusion
 
 With these changes Go on App Engine is more convenient and efficient than ever,
 and we hope you enjoy the improvements. Please join the
-[[http://groups.google.com/group/google-appengine-go/][google-appengine-go group]]
+[google-appengine-go group](http://groups.google.com/group/google-appengine-go/)
 to raise questions or discuss these changes with the engineering team and the
 rest of the community.
diff --git a/content/appengine-go111.article b/content/appengine-go111.article
index 3319153..a9eaae4 100644
--- a/content/appengine-go111.article
+++ b/content/appengine-go111.article
@@ -1,19 +1,20 @@
-Announcing App Engine’s New Go 1.11 Runtime
+# Announcing App Engine’s New Go 1.11 Runtime
 16 Oct 2018
 Tags: appengine
+Summary: [App Engine](https://cloud.google.com/appengine/) launched [experimental support for Go](https://blog.golang.org/go-and-google-app-engine) in 2011. In the subsequent years, the Go community has grown significantly and has settled on idiomatic patterns for cloud-based applications. Today, Google Cloud is [announcing a new Go 1.11 runtime](https://cloud.google.com/blog/products/application-development/go-1-11-is-now-available-on-app-engine) for the App Engine standard environment that provides all the power of App Engine—things like paying only for what you use, automatic scaling, and managed infrastructure—while supporting idiomatic Go.
 
 Eno Compton
 
 Tyler Bui-Palsulich
 
-* Background
+##
 
-[[https://cloud.google.com/appengine/][App Engine]] launched
-[[https://blog.golang.org/go-and-google-app-engine][experimental support for Go]]
+[App Engine](https://cloud.google.com/appengine/) launched
+[experimental support for Go](https://blog.golang.org/go-and-google-app-engine)
 in 2011. In the subsequent years, the Go community has grown significantly and
 has settled on idiomatic
 patterns for cloud-based applications. Today, Google Cloud is
-[[https://cloud.google.com/blog/products/application-development/go-1-11-is-now-available-on-app-engine][announcing a new Go 1.11 runtime]]
+[announcing a new Go 1.11 runtime](https://cloud.google.com/blog/products/application-development/go-1-11-is-now-available-on-app-engine)
 for the App Engine standard environment that provides all the
 power of App Engine—things like paying only for what you use, automatic scaling,
 and managed infrastructure—while supporting idiomatic Go.
@@ -22,20 +23,20 @@
 supported packages, `context.Context` values, or HTTP clients. Write your Go
 application however you prefer, add an `app.yaml` file, and your app is ready
 to deploy on App Engine.
-[[https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies][Specifying Dependencies]]
+[Specifying Dependencies](https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies)
 describes how the new runtime
-supports [[https://golang.org/cmd/go/#hdr-Vendor_Directories][vendoring]] and
-[[https://golang.org/doc/go1.11#modules][modules]] (experimental) for dependency
+supports [vendoring](https://golang.org/cmd/go/#hdr-Vendor_Directories) and
+[modules](https://golang.org/doc/go1.11#modules) (experimental) for dependency
 management.
 
-Along with [[https://twitter.com/kelseyhightower/status/1035278586754813952][Cloud Functions support for Go]]
+Along with [Cloud Functions support for Go](https://twitter.com/kelseyhightower/status/1035278586754813952)
 (more on that in a future post), App Engine provides a compelling way to run Go
 code on Google Cloud Platform (GCP) with no concern for the underlying
 infrastructure.
 
 Let’s take a look at creating a small application for App Engine. For the
 example here, we assume a `GOPATH`-based workflow, although Go modules have
-[[https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies][experimental support]]
+[experimental support](https://cloud.google.com/appengine/docs/standard/go111/specifying-dependencies)
 as well.
 
 First, you create the application in your `GOPATH`:
@@ -59,9 +60,9 @@
 
 Finally, set your machine up with a Google Cloud Platform account:
 
-- Create an account with [[GCP][https://cloud.google.com]].
-- [[https://cloud.google.com/resource-manager/docs/creating-managing-projects][Create a project]].
-- Install the [[https://cloud.google.com/sdk/][Cloud SDK]] on your system.
+  - Create an account with [https://cloud.google.com](GCP).
+  - [Create a project](https://cloud.google.com/resource-manager/docs/creating-managing-projects).
+  - Install the [Cloud SDK](https://cloud.google.com/sdk/) on your system.
 
 With all the setup complete, you can deploy using one command:
 
@@ -69,8 +70,8 @@
 
 We think Go developers will find the new Go 1.11 runtime for App Engine an
 exciting addition to the available options to run Go applications. There is a
-[[https://cloud.google.com/free/][free tier]]. Check out the
-[[https://cloud.google.com/appengine/docs/standard/go111/building-app/][getting started guide]]
+[free tier](https://cloud.google.com/free/). Check out the
+[getting started guide](https://cloud.google.com/appengine/docs/standard/go111/building-app/)
 or the
-[[https://cloud.google.com/appengine/docs/standard/go111/go-differences][migration guide]]
-and deploy an app to the new runtime today!
\ No newline at end of file
+[migration guide](https://cloud.google.com/appengine/docs/standard/go111/go-differences)
+and deploy an app to the new runtime today!
diff --git a/content/building-stathat-with-go.article b/content/building-stathat-with-go.article
index ccf3daa..1a01559 100644
--- a/content/building-stathat-with-go.article
+++ b/content/building-stathat-with-go.article
@@ -1,17 +1,18 @@
-Building StatHat with Go
+# Building StatHat with Go
 19 Dec 2011
 Tags: guest
+Summary: My name is Patrick Crosby and I'm the founder of a company called Numerotron. We recently released [StatHat](http://www.stathat.com). This post is about why we chose to develop StatHat in [Go](https://golang.org), including details about how we are using Go.
 
 Patrick Crosby
 
-* Introduction
+## Introduction
 
 My name is Patrick Crosby and I'm the founder of a company called Numerotron.
-We recently released [[http://www.stathat.com][StatHat]].
-This post is about why we chose to develop StatHat in [[https://golang.org][Go]],
+We recently released [StatHat](http://www.stathat.com).
+This post is about why we chose to develop StatHat in [Go](https://golang.org),
 including details about how we are using Go.
 
-[[http://www.stathat.com][StatHat]] is a tool to track statistics and events in your code.
+[StatHat](http://www.stathat.com) is a tool to track statistics and events in your code.
 Everyone from HTML designers to backend engineers can use StatHat easily,
 as it supports sending stats from HTML, JavaScript,
 Go, and twelve other languages.
@@ -29,7 +30,7 @@
 
 .image building-stathat-with-go_weather.png
 
-* Architecture Overview
+## Architecture Overview
 
 StatHat consists of two main services:  incoming statistic/event API calls
 and the web application for viewing and analyzing stats.
@@ -56,27 +57,27 @@
 http, command line, automated tests, mobile API.
 StatHat uses MySQL for data storage.
 
-* Choosing Go
+## Choosing Go
 
 When we designed StatHat, we had the following check list for our development tools:
 
-- same programming language for backend and frontend systems
+  - same programming language for backend and frontend systems
 
-- good, fast HTML templating system
+  - good, fast HTML templating system
 
-- fast start-up, recompilation, testing for lots of tinkering
+  - fast start-up, recompilation, testing for lots of tinkering
 
-- lots of connections on one machine
+  - lots of connections on one machine
 
-- language tools for handling application-level concurrency
+  - language tools for handling application-level concurrency
 
-- good performance
+  - good performance
 
-- robust RPC layer to talk between tiers
+  - robust RPC layer to talk between tiers
 
-- lots of libraries
+  - lots of libraries
 
-- open source
+  - open source
 
 We evaluated many popular and not-so-popular web technologies and ended up choosing to develop it in Go.
 
@@ -85,30 +86,30 @@
 goroutines, channels, garbage collection,
 and all the packages that were available.
 I was especially pleased with how few lines of code my applications were using.
-I soon experimented with making a web app called [[http://langalot.com/][Langalot]]
+I soon experimented with making a web app called [Langalot](http://langalot.com/)
 that concurrently searched through five foreign language dictionaries as
 you typed in a query.
 It was blazingly fast.  I put it online and it's been running since February, 2010.
 
 The following sections detail how Go meets StatHat's requirements and our experience using Go to solve our problems.
 
-* Runtime
+## Runtime
 
-We use the standard Go [[https://golang.org/pkg/http/][http package]] for
+We use the standard Go [http package](https://golang.org/pkg/http/) for
 our API and web app servers.
 All requests first go through Nginx and any non-file requests are proxied
 to the Go-powered http servers.
-The backend servers are all written in Go and use the [[https://golang.org/pkg/rpc/][rpc package]]
+The backend servers are all written in Go and use the [rpc package](https://golang.org/pkg/rpc/)
 to communicate with the frontend.
 
-* Templating
+## Templating
 
-We built a template system using the standard [[https://golang.org/pkg/template/][template package]].
+We built a template system using the standard [template package](https://golang.org/pkg/template/).
 Our system adds layouts, some common formatting functions,
 and the ability to recompile templates on-the-fly during development.
 We are very pleased with the performance and functionality of the Go templates.
 
-* Tinkering
+## Tinkering
 
 In a previous job, I worked on a video game called Throne of Darkness that was written in C++.
 We had a few header files that, when modified,
@@ -126,18 +127,18 @@
 The result is that the StatHat system is very easy to work with,
 and the compiler is not a bottleneck.
 
-* RPC
+## RPC
 
 Since StatHat is a multi-tiered system, we wanted an RPC layer so that all
 communication was standard.
-With Go, we are using the [[https://golang.org/pkg/rpc/][rpc package]] and
-the [[https://golang.org/pkg/gob/][gob package]] for encoding Go objects.
+With Go, we are using the [rpc package](https://golang.org/pkg/rpc/) and
+the [gob package](https://golang.org/pkg/gob/) for encoding Go objects.
 In Go, the RPC server just takes any Go object and registers its exported methods.
 There is no need for an intermediary interface description language.
 We've found it very easy to use and many of our core application servers
 are under 300 lines of code.
 
-* Libraries
+## Libraries
 
 We don't want to spend time rewriting libraries for things like SSL,
 database drivers, JSON/XML parsers.
@@ -145,7 +146,7 @@
 number of user-contributed packages.
 With only a few exceptions, we have found Go packages for everything we have needed.
 
-* Open source
+## Open source
 
 In our experience, it has been invaluable to work with open source tools.
 If something is going awry, it is immensely helpful to be able to examine
@@ -156,7 +157,7 @@
 we frequently read the tests as they often give great examples of how to
 use packages and language features.
 
-* Performance
+## Performance
 
 People rely on StatHat for up to the minute analysis of their data and we
 need the system to be as responsive as possible.
@@ -169,7 +170,7 @@
 We've also taken advantage of the benchmark performance testing features
 of the Go testing package.
 
-* Application-Level Concurrency
+## Application-Level Concurrency
 
 In a former life, I was the CTO at OkCupid.
 My experience there using OKWS taught me the importance of async programming,
@@ -183,17 +184,17 @@
 StatHat uses goroutines extensively to run multiple functions concurrently
 and channels for sharing data between goroutines.
 
-* Hosting and Deployment
+## Hosting and Deployment
 
 StatHat runs on Amazon's EC2 servers.  Our servers are divided into several types:
 
-- API
+  - API
 
-- Web
+  - Web
 
-- Application servers
+  - Application servers
 
-- Database
+  - Database
 
 There are at least two of each type of server,
 and they are in different zones for high availability.
@@ -208,11 +209,11 @@
 for running and starts/stops/restarts any services.
 We frequently only deploy to a subset of the servers.
 
-* More
+## More
 
-For more information on StatHat, please visit [[http://www.stathat.com][stathat.com]].
+For more information on StatHat, please visit [stathat.com](http://www.stathat.com).
 We are releasing some of the Go code we've written.
-Go to [[http://www.stathat.com/src][www.stathat.com/src]] for all of the
+Go to [www.stathat.com/src](http://www.stathat.com/src) for all of the
 open source StatHat projects.
 
-To learn more about Go, visit [[https://golang.org/][golang.org]].
+To learn more about Go, visit [golang.org](https://golang.org/).
diff --git a/content/c-go-cgo.article b/content/c-go-cgo.article
index 2ee6e92..912ed32 100644
--- a/content/c-go-cgo.article
+++ b/content/c-go-cgo.article
@@ -1,10 +1,11 @@
-C? Go? Cgo!
+# C? Go? Cgo!
 17 Mar 2011
 Tags: cgo, technical
+Summary: Cgo lets Go packages call C code. Given a Go source file written with some special features, cgo outputs Go and C files that can be combined into a single Go package.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 Cgo lets Go packages call C code. Given a Go source file written with some special features,
 cgo outputs Go and C files that can be combined into a single Go package.
@@ -56,15 +57,15 @@
 	}
 
 The `Seed` function does the reverse, in a way.
-It takes a regular Go `int`, converts it to the C `unsigned`int` type,
+It takes a regular Go `int`, converts it to the C `unsigned int` type,
 and passes it to the C function `srandom`.
 
 	func Seed(i int) {
 	    C.srandom(C.uint(i))
 	}
 
-Note that cgo knows the `unsigned`int` type as `C.uint`;
-see the [[https://golang.org/cmd/cgo][cgo documentation]] for a complete
+Note that cgo knows the `unsigned int` type as `C.uint`;
+see the [cgo documentation](https://golang.org/cmd/cgo) for a complete
 list of these numeric type names.
 
 The one detail of this example we haven't examined yet is the comment above the `import` statement.
@@ -84,13 +85,13 @@
 when building the C parts of the package.
 
 There is a limitation: if your program uses any `//export` directives,
-then the C code in the comment may only include declarations (`extern`int`f();`),
-not definitions (`int`f()`{`return`1;`}`).
+then the C code in the comment may only include declarations (`extern int f();`),
+not definitions (`int f() { return 1; }`).
 You can use `//export` directives to make Go functions accessible to C code.
 
-The `#cgo` and `//export` directives are documented in the [[https://golang.org/cmd/cgo/][cgo documentation]].
+The `#cgo` and `//export` directives are documented in the [cgo documentation](https://golang.org/cmd/cgo/).
 
-* Strings and things
+## Strings and things
 
 Unlike Go, C doesn't have an explicit string type. Strings in C are represented by a zero-terminated array of chars.
 
@@ -119,9 +120,9 @@
 you must remember to free the memory when you're done with it by calling `C.free`.
 
 The call to `C.CString` returns a pointer to the start of the char array,
-so before the function exits we convert it to an [[https://golang.org/pkg/unsafe/#Pointer][`unsafe.Pointer`]]
+so before the function exits we convert it to an [`unsafe.Pointer`](https://golang.org/pkg/unsafe/#Pointer)
 and release the memory allocation with `C.free`.
-A common idiom in cgo programs is to [[https://golang.org/doc/articles/defer_panic_recover.html][`defer`]]
+A common idiom in cgo programs is to [`defer`](https://golang.org/doc/articles/defer_panic_recover.html)
 the free immediately after allocating (especially when the code that follows
 is more complex than a single function call),
 as in this rewrite of `Print`:
@@ -132,18 +133,18 @@
 	    C.fputs(cs, (*C.FILE)(C.stdout))
 	}
 
-* Building cgo packages
+## Building cgo packages
 
-To build cgo packages, just use [[https://golang.org/cmd/go/#Compile_packages_and_dependencies][`go`build`]]
-or [[https://golang.org/cmd/go/#Compile_and_install_packages_and_dependencies][`go`install`]] as usual.
+To build cgo packages, just use [`go build`](https://golang.org/cmd/go/#Compile_packages_and_dependencies)
+or [`go install`](https://golang.org/cmd/go/#Compile_and_install_packages_and_dependencies) as usual.
 The go tool recognizes the special `"C"` import and automatically uses cgo for those files.
 
-* More cgo resources
+## More cgo resources
 
-The [[https://golang.org/cmd/cgo/][cgo command]] documentation has more
+The [cgo command](https://golang.org/cmd/cgo/) documentation has more
 detail about the C pseudo-package and the build process.
-The [[https://golang.org/misc/cgo/][cgo examples]] in the Go tree demonstrate
+The [cgo examples](https://golang.org/misc/cgo/) in the Go tree demonstrate
 more advanced concepts.
 
 Finally, if you're curious as to how all this works internally,
-take a look at the introductory comment of the runtime package's [[https://golang.org/src/runtime/cgocall.go][cgocall.go]].
+take a look at the introductory comment of the runtime package's [cgocall.go](https://golang.org/src/runtime/cgocall.go).
diff --git a/content/community-outreach-working-group.article b/content/community-outreach-working-group.article
index df97301..d224f11 100644
--- a/content/community-outreach-working-group.article
+++ b/content/community-outreach-working-group.article
@@ -1,11 +1,12 @@
-Community Outreach Working Group
+# Community Outreach Working Group
 5 Sep 2017
 Tags: community
+Summary: The Go project has grown considerably with over half a million users and community members all over the world. To date all community oriented activities have been organized by the community with minimal involvement from the Go project. We greatly appreciate these efforts.
 
 Steve Francia & Cassandra Salisbury
 spf@golang.org
 
-* Announcing the Go Community Outreach Working Group
+## Announcing the Go Community Outreach Working Group
 
 The Go project has grown considerably with over half a million users and
 community members all over the world. To date all community oriented activities
@@ -17,7 +18,7 @@
 the Go project. We are forming the Community outreach Working Group (CWG)
 to help support these community efforts.
 
-* The CWG Mission
+## The CWG Mission
 
 The mission of the CWG is to act as a conduit between the broader Go
 community, it’s organizers and the Go project. The CWG will help provide
@@ -25,29 +26,29 @@
 in person community that is enjoyable and rewarding to participate in. The
 CWG leadership represents the Go project in these efforts.
 
-*The*CWG*is*responsible*for:*
+**The CWG is responsible for:**
 
-- Defining programs to facilitate deeper collaboration across the community.
-- Facilitating the coordination of Go events
-- Establishing growth and expansion plans for the community
-- Project exposure and accessibility
-- Ecosystem Development
+  - Defining programs to facilitate deeper collaboration across the community.
+  - Facilitating the coordination of Go events
+  - Establishing growth and expansion plans for the community
+  - Project exposure and accessibility
+  - Ecosystem Development
 
-*Leadership:*
+**Leadership:**
 
-- [[https://twitter.com/ashleymcnamara][Ashley McNamara]]
-- [[https://twitter.com/Cassandraoid][Cassandra Salisbury]]
-- [[https://twitter.com/francesc][Francesc Campoy]]
-- [[https://twitter.com/spf13][Steve Francia]]
+  - [Ashley McNamara](https://twitter.com/ashleymcnamara)
+  - [Cassandra Salisbury](https://twitter.com/Cassandraoid)
+  - [Francesc Campoy](https://twitter.com/francesc)
+  - [Steve Francia](https://twitter.com/spf13)
 
-* Plans for Action
+## Plans for Action
 
-The CWG has an [[https://github.com/golang/cwg][open GitHub repo]] we’ve created for complete transparency
-of our efforts.  We have various [[https://github.com/golang/cwg/projects][GitHub projects]] which are acting as our
-primary initiatives. Each project has a variety of [[https://github.com/golang/cwg/issues][issues]] tied to them
-with assignees from our Leadership team and [[https://github.com/golang/cwg/issues/15][our members]].
+The CWG has an [open GitHub repo](https://github.com/golang/cwg) we’ve created for complete transparency
+of our efforts.  We have various [GitHub projects](https://github.com/golang/cwg/projects) which are acting as our
+primary initiatives. Each project has a variety of [issues](https://github.com/golang/cwg/issues) tied to them
+with assignees from our Leadership team and [our members](https://github.com/golang/cwg/issues/15).
 
 .image community-outreach-working-group/project.png
 
 If you’d like to get involved, we encourage you to comment on the issue
-that interests you or [[https://github.com/golang/cwg/issues/new][submit an issue]] yourself!
+that interests you or [submit an issue](https://github.com/golang/cwg/issues/new) yourself!
diff --git a/content/company-questionnaire2018.article b/content/company-questionnaire2018.article
index 5395b41..5066f92 100644
--- a/content/company-questionnaire2018.article
+++ b/content/company-questionnaire2018.article
@@ -1,38 +1,39 @@
-Participate in the 2018 Go Company Questionnaire
+# Participate in the 2018 Go Company Questionnaire
 4 Oct 2018
 Tags: survey, community
+Summary: We need your help to create the best programming language for developing simple, reliable, and scalable software. To do this, we need to better understand how companies are using Go. Please help by participating in a 7-minute company questionnaire.
 
 Ran Tao, Steve Francia
 spf@golang.org
 
-* The Go project wants to hear from you!
+## The Go project wants to hear from you!
 
 We need your help to create the best programming language for developing
 simple, reliable, and scalable software. To do this, we need to better
 understand how companies are using Go. Please help by participating in a
 7-minute company questionnaire.
 
-*Who:* If you are in a position to share details like “company name,” “if your
+**Who:** If you are in a position to share details like “company name,” “if your
 company is hiring Go developers,” and “reasons your team or company adopted Go”
 then please help us by taking this company questionnaire. We only need one
 response per company (or per department for larger companies). If you aren’t the
 right person, please forward this onto the right person at your company.
 
-_Please_note:_this_is_different_from_our_annual_anonymous_Go_user_survey,_which_
-_will_be_announced_in_November._
+_Please note: this is different from our annual anonymous Go user survey, which_
+_will be announced in November._
 
-*Where:* Please take this 7-minute questionnaire by October 30th:
-[[http://goo.gl/nnPfct][Go Company Questionnaire 2018]].
+**Where:** Please take this 7-minute questionnaire by October 30th:
+[Go Company Questionnaire 2018](http://goo.gl/nnPfct).
 
 The questionnaire is confidential, but not anonymous. For more information,
 please refer to Google’s privacy policy
-[[https://policies.google.com/privacy][here]].
+[here](https://policies.google.com/privacy).
 
 The Go project leadership will use your responses to better understand how
 companies use Go and in what ways we can improve their experience.
 
-* Spread the word!
+## Spread the word!
 
 We would like as many companies as possible to participate to help us better
 understand our global user base. Please help us spread the word by sharing this
-post on your social network feeds, at meetups, and in other communities.
\ No newline at end of file
+post on your social network feeds, at meetups, and in other communities.
diff --git a/content/concurrency-is-not-parallelism.article b/content/concurrency-is-not-parallelism.article
index 41563e9..5ba96d0 100644
--- a/content/concurrency-is-not-parallelism.article
+++ b/content/concurrency-is-not-parallelism.article
@@ -1,10 +1,11 @@
-Concurrency is not parallelism
+# Concurrency is not parallelism
 16 Jan 2013
 Tags: concurrency, talk, video
+Summary: If there's one thing most people know about Go, is that it is designed for concurrency. No introduction to Go is complete without a demonstration of its goroutines and channels.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 If there's one thing most people know about Go,
 is that it is designed for concurrency.
@@ -14,18 +15,18 @@
 a related but quite distinct concept.
 In programming, concurrency is the _composition_ of independently executing processes,
 while parallelism is the simultaneous _execution_ of (possibly related) computations.
-Concurrency is about _dealing_with_ lots of things at once.
+Concurrency is about _dealing with_ lots of things at once.
 Parallelism is about _doing_ lots of things at once.
 
-To clear up this conflation, Rob Pike gave a talk at [[http://heroku.com/][Heroku]]'s
-[[http://waza.heroku.com/][Waza]] conference entitled _Concurrency_is_not_parallelism_,
+To clear up this conflation, Rob Pike gave a talk at [Heroku](http://heroku.com/)'s
+[Waza](http://waza.heroku.com/) conference entitled _Concurrency is not parallelism_,
 and a video recording of the talk was released a few months ago.
 
 .iframe //player.vimeo.com/video/49718712?badge=0 281 500
 
-The slides are available at [[https://talks.golang.org/2012/waza.slide][talks.golang.org]]
+The slides are available at [talks.golang.org](https://talks.golang.org/2012/waza.slide)
 (use the left and right arrow keys to navigate).
 
 To learn about Go's concurrency primitives,
-watch [[http://www.youtube.com/watch?v=f6kdp27TYZs][Go concurrency patterns]]
-([[https://talks.golang.org/2012/concurrency.slide][slides]]).
+watch [Go concurrency patterns](http://www.youtube.com/watch?v=f6kdp27TYZs)
+([slides](https://talks.golang.org/2012/concurrency.slide)).
diff --git a/content/conduct-2018.article b/content/conduct-2018.article
index 7fbda8c..1e76e8d 100644
--- a/content/conduct-2018.article
+++ b/content/conduct-2018.article
@@ -1,10 +1,11 @@
-Updating the Go Code of Conduct
+# Updating the Go Code of Conduct
 23 May 2018
 Tags: conduct
+Summary: In November 2015, we introduced the Go Code of Conduct. It was developed in a collaboration between the Go team members at Google and the Go community. I was fortunate to be one of the community members invited to participate in both drafting and then enforcing the Go Code of Conduct. Since then, we have learned two lessons about limitations in our code of conduct that restricted us from being able to cultivate the safe culture essential to Go’s success.
 
 Steve Francia
 
-* Introduction
+##
 
 In November 2015, we introduced the Go Code of Conduct.
 It was developed in a collaboration between
@@ -33,7 +34,7 @@
 of conduct place too heavy of a burden on volunteers.
 The initial version of the code of conduct presented the
 working group as disciplinarians. It was soon clear
-that this was too much, so in early 2017 [[https://golang.org/cl/37014][we changed the group’s role]]
+that this was too much, so in early 2017 [we changed the group’s role](https://golang.org/cl/37014)
 to that of advisors and mediators.
 Still, working group community members
 reported feeling overwhelmed, untrained, and vulnerable.
@@ -51,15 +52,15 @@
 Contributor Covenant Code of Conduct v1.4
 and then made changes, influenced by
 our experiences in Go community and our collective experiences in open source.
-This resulted in the Google [[https://opensource.google.com/docs/releasing/template/CODE_OF_CONDUCT/][code of conduct template]].
+This resulted in the Google [code of conduct template](https://opensource.google.com/docs/releasing/template/CODE_OF_CONDUCT/).
 
 Today the Go project is adopting this new code of conduct,
-and we’ve updated [[https://golang.org/conduct][golang.org/conduct]].
+and we’ve updated [golang.org/conduct](https://golang.org/conduct).
 This revised code of conduct retains much of the intent, structure and
 language of the original Go code of conduct while making two critical
 changes that address the shortcomings identified above.
 
-First, [[https://golang.org/conduct/#scope][the new code of conduct makes clear]] that people who
+First, [the new code of conduct makes clear](https://golang.org/conduct/#scope) that people who
 participate in any kind of harassment or inappropriate behavior,
 even outside our project spaces, are not welcome in our project spaces.
 This means that the Code of Conduct applies outside
@@ -68,7 +69,7 @@
 impact on the project or its community.
 
 Second, in the place of the working group,
-[[https://golang.org/conduct/#reporting][the new code of conduct introduces a single Project Steward]]
+[the new code of conduct introduces a single Project Steward](https://golang.org/conduct/#reporting)
 who will have explicit training and support for this role.
 The Project Steward will receive reported violations
 and then work with a committee,
@@ -76,7 +77,7 @@
 and the Google Open Source Strategy team,
 to find a resolution.
 
-Our first Project Steward will be [[https://twitter.com/cassandraoid][Cassandra Salisbury]].
+Our first Project Steward will be [Cassandra Salisbury](https://twitter.com/cassandraoid).
 She is well known to the Go community as a member of Go Bridge,
 an organizer of many Go meetups and conferences,
 and as a lead of the Go community outreach working group.
diff --git a/content/constants.article b/content/constants.article
index 5148cf1..c165733 100644
--- a/content/constants.article
+++ b/content/constants.article
@@ -1,10 +1,11 @@
-Constants
+# Constants
 25 Aug 2014
 Tags: constants
+Summary: Go is a statically typed language that does not permit operations that mix numeric types. You can't add a `float64` to an `int`, or even an `int32` to an `int`. Yet it is legal to write `1e6*time.Second` or `math.Exp(1)` or even `1<<('\t'+2.0)`. In Go, constants, unlike variables, behave pretty much like regular numbers. This post explains why that is and what it means.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 Go is a statically typed language that does not permit operations that mix numeric types.
 You can't add a `float64` to an `int`, or even an `int32` to an `int`.
@@ -12,7 +13,7 @@
 In Go, constants, unlike variables, behave pretty much like regular numbers.
 This post explains why that is and what it means.
 
-* Background: C
+## Background: C
 
 In the early days of thinking about Go, we talked about a number of problems
 caused by the way C and its descendants let you mix and match numeric types.
@@ -24,7 +25,7 @@
 	long signed int i = -1;
 	... i + u ...
 
-may be familiar, it isn't _a_priori_ obvious.
+may be familiar, it isn't _a priori_ obvious.
 How big is the result?
 What is its value?
 Is it signed or unsigned?
@@ -67,7 +68,7 @@
 In short, constants in Go just work, most of the time anyway.
 Let's see how that happens.
 
-* Terminology
+## Terminology
 
 First, a quick definition.
 In Go, `const` is a keyword introducing a name for a scalar value such as `2` or `3.14159` or `"scrumptious"`.
@@ -82,7 +83,7 @@
 
 But in Go, a constant is just a simple, unchanging value, and from here on we're talking only about Go.
 
-* String constants
+## String constants
 
 There are many kinds of numeric constants—integers,
 floats, runes, signed, unsigned, imaginary,
@@ -91,19 +92,19 @@
 to explore the type issues of constants in Go.
 
 A string constant encloses some text between double quotes.
-(Go also has raw string literals, enclosed by backquotes ``````,
+(Go also has raw string literals, enclosed by backquotes ````````,
 but for the purpose of this discussion they have all the same properties.)
 Here is a string constant:
 
 	"Hello, 世界"
 
 (For much more detail about the representation and interpretation of strings,
-see [[https://blog.golang.org/strings][this blog post]].)
+see [this blog post](https://blog.golang.org/strings).)
 
 What type does this string constant have?
 The obvious answer is `string`, but that is _wrong_.
 
-This is an _untyped_string_constant_, which is to say it is a constant textual
+This is an _untyped string constant_, which is to say it is a constant textual
 value that does not yet have a fixed type.
 Yes, it's a string, but it's not a Go value of type `string`.
 It remains an untyped string constant even when given a name:
@@ -152,14 +153,14 @@
 	m = hello
 
 because, unlike the typed constants `typedHello` and `myStringHello`,
-the untyped constants `"Hello,`世界"` and `hello` _have_no_type_.
+the untyped constants `"Hello, 世界"` and `hello` _have no type_.
 Assigning them to a variable of any type compatible with strings works without error.
 
 These untyped string constants are strings,
 of course, so they can only be used where a string is allowed,
 but they do not have _type_ `string`.
 
-* Default type
+## Default type
 
 As a Go programmer, you have certainly seen many declarations like
 
@@ -214,18 +215,18 @@
 .play -edit constants/default3.go /START/,/STOP/
 
 (For more information about how interface values work,
-see the first sections of [[https://blog.golang.org/laws-of-reflection][this blog post]].)
+see the first sections of [this blog post](https://blog.golang.org/laws-of-reflection).)
 
 In summary, a typed constant obeys all the rules of typed values in Go.
 On the other hand, an untyped constant does not carry a Go type in the same
 way and can be mixed and matched more freely.
 It does, however, have a default type that is exposed when, and only when, no other type information is available.
 
-* Default type determined by syntax
+## Default type determined by syntax
 
 The default type of an untyped constant is determined by its syntax.
 For string constants, the only possible implicit type is `string`.
-For [[https://golang.org/ref/spec#Numeric_types][numeric constants]], the implicit type has more variety.
+For [numeric constants](https://golang.org/ref/spec#Numeric_types), the implicit type has more variety.
 Integer constants default to `int`, floating-point constants `float64`,
 rune constants to `rune` (an alias for `int32`),
 and imaginary constants to `complex128`.
@@ -235,7 +236,7 @@
 
 (Exercise: Explain the result for `'x'`.)
 
-* Booleans
+## Booleans
 
 Everything we said about untyped string constants can be said for untyped boolean constants.
 The values `true` and `false` are untyped boolean constants that can be assigned to any boolean variable,
@@ -246,7 +247,7 @@
 Run the example and see what happens, then comment out the "Bad" line and run it again.
 The pattern here follows exactly that of string constants.
 
-* Floats
+## Floats
 
 Floating-point constants are just like boolean constants in most respects.
 Our standard example works as expected in translation:
@@ -283,7 +284,7 @@
 
 In a related way, floating-point constants may have very high precision,
 so that arithmetic involving them is more accurate.
-The constants defined in the [[https://golang.org/pkg/math][math]] package are given with many more digits than are
+The constants defined in the [math](https://golang.org/pkg/math) package are given with many more digits than are
 available in a `float64`. Here is the definition of `math.Pi`:
 
 	Pi	= 3.14159265358979323846264338327950288419716939937510582097494459
@@ -305,7 +306,7 @@
 (Division by a constant zero is a compile-time error,
 and when everything is a number there's no such thing as "not a number".)
 
-* Complex numbers
+## Complex numbers
 
 Complex constants behave a lot like floating-point constants.
 Here's a version of our now-familiar litany translated into complex numbers:
@@ -342,10 +343,10 @@
 Even though `Two` is a complex constant, it can be assigned to scalar floating-point variables.
 This ability for a constant to "cross" types like this will prove useful.
 
-* Integers
+## Integers
 
 At last we come to integers.
-They have more moving parts—[[https://golang.org/ref/spec#Numeric_types][many sizes, signed or unsigned, and more]]—but
+They have more moving parts—[many sizes, signed or unsigned, and more](https://golang.org/ref/spec#Numeric_types)—but
 they play by the same rules.
 For the last time, here is our familiar example, using just `int` this time:
 
@@ -397,7 +398,7 @@
 
 If the compiler complains about your use of a constant, it's likely a real bug like this.
 
-* An exercise: The largest unsigned int
+## An exercise: The largest unsigned int
 
 Here is an informative little exercise.
 How do we express a constant representing the largest value that fits in a `uint`?
@@ -409,7 +410,7 @@
 The `int` and `uint` types have equal unspecified numbers of bits, either 32 or 64.
 Since the number of bits available depends on the architecture, we can't just write down a single value.
 
-Fans of [[http://en.wikipedia.org/wiki/Two's_complement][two's-complement arithmetic]],
+Fans of [two's-complement arithmetic](http://en.wikipedia.org/wiki/Two's_complement),
 which Go's integers are defined to use, know that the representation of `-1` has all its bits set to 1,
 so the bit pattern of `-1` is internally the same as that of the
 largest unsigned integer.
@@ -424,7 +425,7 @@
 .play -edit constants/exercise2.go /const/
 
 Even though at run-time a value of -1 can be converted to an unsigned integer, the rules
-for constant [[https://golang.org/ref/spec#Conversions][conversions]] forbid this kind of coercion at compile time.
+for constant [conversions](https://golang.org/ref/spec#Conversions) forbid this kind of coercion at compile time.
 That is to say, this works:
 
 .play -edit constants/exercise3.go /START/,/STOP/
@@ -456,13 +457,13 @@
 .play -edit constants/exercise6.go /START/,/STOP/
 
 Whatever the number of bits it takes to represent a `uint` in the current execution environment
-(on the [[https://blog.golang.org/playground][playground]], it's 32),
+(on the [playground](https://blog.golang.org/playground), it's 32),
 this constant correctly represents the largest value a variable of type `uint` can hold.
 
 If you understand the analysis that got us to this result,
 you understand all the important points about constants in Go.
 
-* Numbers
+## Numbers
 
 The concept of untyped constants in Go means that all the numeric constants,
 whether integer, floating-point, complex,
@@ -486,7 +487,7 @@
 
 .play -edit constants/numbers1.go /START/,/STOP/
 
-The output from this snippet is: `1`1`1`1`1`(1+0i)`1`.
+The output from this snippet is: `1 1 1 1 1 (1+0i) 1`.
 
 You can even do nutty stuff like
 
diff --git a/content/context.article b/content/context.article
index 68c7f23..47c320d 100644
--- a/content/context.article
+++ b/content/context.article
@@ -1,10 +1,11 @@
-Go Concurrency Patterns: Context
+# Go Concurrency Patterns: Context
 29 Jul 2014
 Tags: concurrency, cancelation, cancellation, context
+Summary: In Go servers, each incoming request is handled in its own goroutine. Request handlers often start additional goroutines to access backends such as databases and RPC services. The set of goroutines working on a request typically needs access to request-specific values such as the identity of the end user, authorization tokens, and the request's deadline. When a request is canceled or times out, all the goroutines working on that request should exit quickly so the system can reclaim any resources they are using.
 
 Sameer Ajmani
 
-* Introduction
+## Introduction
 
 In Go servers, each incoming request is handled in its own goroutine.
 Request handlers often start additional goroutines to access backends such as
@@ -20,24 +21,24 @@
 request-scoped values, cancelation signals, and deadlines across API boundaries
 to all the goroutines involved in handling a request.
 The package is publicly available as
-[[https://golang.org/pkg/context][context]].
+[context](https://golang.org/pkg/context).
 This article describes how to use the package and provides a complete working
 example.
 
-* Context
+## Context
 
 The core of the `context` package is the `Context` type:
 
 .code context/interface.go /A Context/,/^}/
 
 (This description is condensed; the
-[[https://golang.org/pkg/context][godoc]] is authoritative.)
+[godoc](https://golang.org/pkg/context) is authoritative.)
 
 The `Done` method returns a channel that acts as a cancelation signal to
 functions running on behalf of the `Context`: when the channel is closed, the
 functions should abandon their work and return.
 The `Err` method returns an error indicating why the `Context` was canceled.
-The [[/pipelines][Pipelines and Cancelation]] article discusses the `Done`
+The [Pipelines and Cancelation](/pipelines) article discusses the `Done`
 channel idiom in more detail.
 
 A `Context` does _not_ have a `Cancel` method for the same reason the `Done`
@@ -59,7 +60,7 @@
 `Value` allows a `Context` to carry request-scoped data.
 That data must be safe for simultaneous use by multiple goroutines.
 
-** Derived contexts
+### Derived contexts
 
 The `context` package provides functions to _derive_ new `Context` values from
 existing ones.
@@ -87,24 +88,24 @@
 The best way to see how to use the `context` package is through a worked
 example.
 
-* Example: Google Web Search
+## Example: Google Web Search
 
 Our example is an HTTP server that handles URLs like
 `/search?q=golang&timeout=1s` by forwarding the query "golang" to the
-[[https://developers.google.com/web-search/docs/][Google Web Search API]] and
+[Google Web Search API](https://developers.google.com/web-search/docs/) and
 rendering the results.
 The `timeout` parameter tells the server to cancel the request after that
 duration elapses.
 
 The code is split across three packages:
 
-- [[context/server/server.go][server]] provides the `main` function and the handler for `/search`.
-- [[context/userip/userip.go][userip]] provides functions for extracting a user IP address from a request and associating it with a `Context`.
-- [[context/google/google.go][google]] provides the `Search` function for sending a query to Google.
+  - [server](context/server/server.go) provides the `main` function and the handler for `/search`.
+  - [userip](context/userip/userip.go) provides functions for extracting a user IP address from a request and associating it with a `Context`.
+  - [google](context/google/google.go) provides the `Search` function for sending a query to Google.
 
-** The server program
+### The server program
 
-The [[context/server/server.go][server]] program handles requests like
+The [server](context/server/server.go) program handles requests like
 `/search?q=golang` by serving the first few Google search results for `golang`.
 It registers `handleSearch` to handle the `/search` endpoint.
 The handler creates an initial `Context` called `ctx` and arranges for it to be
@@ -129,9 +130,9 @@
 
 .code context/server/server.go /resultsTemplate/,/}$/
 
-** Package userip
+### Package userip
 
-The [[context/userip/userip.go][userip]] package provides functions for
+The [userip](context/userip/userip.go) package provides functions for
 extracting a user IP address from a request and associating it with a `Context`.
 A `Context` provides a key-value mapping, where the keys and values are both of
 type `interface{}`.
@@ -157,10 +158,10 @@
 
 .code context/userip/userip.go /func FromContext/,/}/
 
-** Package google
+### Package google
 
-The [[context/google/google.go][google.Search]] function makes an HTTP request
-to the [[https://developers.google.com/web-search/docs/][Google Web Search API]]
+The [google.Search](context/google/google.go) function makes an HTTP request
+to the [Google Web Search API](https://developers.google.com/web-search/docs/)
 and parses the JSON-encoded result.
 It accepts a `Context` parameter `ctx` and returns immediately if `ctx.Done` is
 closed while the request is in flight.
@@ -182,7 +183,7 @@
 
 .code context/google/google.go /func httpDo/,/^}/
 
-* Adapting code for Contexts
+## Adapting code for Contexts
 
 Many server frameworks provide packages and types for carrying request-scoped
 values.
@@ -190,23 +191,23 @@
 code using existing frameworks and code that expects a `Context` parameter.
 
 For example, Gorilla's
-[[http://www.gorillatoolkit.org/pkg/context][github.com/gorilla/context]]
+[github.com/gorilla/context](http://www.gorillatoolkit.org/pkg/context)
 package allows handlers to associate data with incoming requests by providing a
 mapping from HTTP requests to key-value pairs.
-In [[context/gorilla/gorilla.go][gorilla.go]], we provide a `Context`
+In [gorilla.go](context/gorilla/gorilla.go), we provide a `Context`
 implementation whose `Value` method returns the values associated with a
 specific HTTP request in the Gorilla package.
 
 Other packages have provided cancelation support similar to `Context`.
-For example, [[https://godoc.org/gopkg.in/tomb.v2][Tomb]] provides a `Kill`
+For example, [Tomb](https://godoc.org/gopkg.in/tomb.v2) provides a `Kill`
 method that signals cancelation by closing a `Dying` channel.
 `Tomb` also provides methods to wait for those goroutines to exit, similar to
 `sync.WaitGroup`.
-In [[context/tomb/tomb.go][tomb.go]], we provide a `Context` implementation that
+In [tomb.go](context/tomb/tomb.go), we provide a `Context` implementation that
 is canceled when either its parent `Context` is canceled or a provided `Tomb` is
 killed.
 
-* Conclusion
+## Conclusion
 
 At Google, we require that Go programmers pass a `Context` parameter as the
 first argument to every function on the call path between incoming and outgoing
diff --git a/content/contributor-workshop.article b/content/contributor-workshop.article
index 3560c6c..e7cdd28 100644
--- a/content/contributor-workshop.article
+++ b/content/contributor-workshop.article
@@ -1,14 +1,14 @@
-Contribution Workshop
+# Contribution Workshop
 9 Aug 2017
 Tags: community
 
 Steve Francia, Cassandra Salisbury, Matt Broberg, Dmitri Shuralyov
 
-* Contribution Workshop
+##
 
-** Event Overview
+## Event Overview
 
-by [[https://twitter.com/spf13][Steve]]
+by [Steve](https://twitter.com/spf13)
 
 During the community day at GopherCon, the Go team held two workshops
 where we worked with people to help them make their first contribution to the
@@ -26,7 +26,7 @@
 section and built a tool `go-contrib-init`, which automated the process of
 setting up a development environment to be able to contribute to Go.
 
-For the workshop itself, we developed a presentation _"Contributing_to_Go,"_
+For the workshop itself, we developed a presentation _"Contributing to Go,"_
 and a dashboard / scoreboard that was presented during the event. The
 scoreboard was designed to encourage us all to work together towards a common
 goal of seeing our collective score increase. Participants added 1, 2 or 3 points to
@@ -44,7 +44,7 @@
 .image contributor-workshop/image9.jpg
 .image contributor-workshop/image6.png
 
-*** Impact
+### Impact
 
 We had a total of 65 CLs submitted from the people who participated in the
 workshop (within a week of the workshop). Of these, 44 were from contributors
@@ -53,35 +53,35 @@
 waiting on the codebase to thaw as we are in the middle of a freeze for the
 upcoming 1.9 release. In addition to CLs, many contributed to the project in
 the form of bug reports,
-[[https://golang.org/wiki/Gardening][gardening tasks]], and other types
+[gardening tasks](https://golang.org/wiki/Gardening), and other types
 of contributions.
 
 The most common type of contribution was an example function to be used in the
-documentation. The [[https://blog.golang.org/survey2016-results][Go User survey]]
+documentation. The [Go User survey](https://blog.golang.org/survey2016-results)
 identified that our documentation was significantly lacking examples. In the
 presentation, we asked users to find a package they loved and to add an example. In
 the Go project, examples are written as code in Go files
-(with specific naming) and the `go`doc` tool displays them along side the documentation.
+(with specific naming) and the `go doc` tool displays them along side the documentation.
 This is a perfect first contribution as it's something that can be merged
 during a freeze, it's of critical importance to our users, and it's an addition
 that has a relatively narrow scope.
 
 One of the examples added is that of creating a Stringer, one of the more
 widely used interfaces in Go.
-[[https://golang.org/cl/49270/][CL 49270]]
+[CL 49270](https://golang.org/cl/49270/)
 
 In addition to examples, many people contributed critical bug fixes including:
 
-- [[https://golang.org/cl/48988/][CL 48988]] fixing [[https://golang.org/issue/21029][issue #21029]]
-- [[https://golang.org/cl/49050/][CL 49050]] fixing [[https://golang.org/issue/20054][issue #20054]]
-- [[https://golang.org/cl/49031/][CL 49031]] fixing [[https://golang.org/issue/20166][issue #20166]]
-- [[https://golang.org/cl/49170/][CL 49170]] fixing [[https://golang.org/issue/20877][issue #20877]]
+  - [CL 48988](https://golang.org/cl/48988/) fixing [issue #21029](https://golang.org/issue/21029)
+  - [CL 49050](https://golang.org/cl/49050/) fixing [issue #20054](https://golang.org/issue/20054)
+  - [CL 49031](https://golang.org/cl/49031/) fixing [issue #20166](https://golang.org/issue/20166)
+  - [CL 49170](https://golang.org/cl/49170/) fixing [issue #20877](https://golang.org/issue/20877)
 
 Some people even surprised us by arriving with a bug in mind that they wanted
 to fix. Nikhita arrived ready to tackle
-[[https://golang.org/issue/20786][issue #20786]]
+[issue #20786](https://golang.org/issue/20786)
 and she did submitting
-[[https://golang.org/cl/48871/][CL 48871]],
+[CL 48871](https://golang.org/cl/48871/),
 after which she tweeted:
 
 .image contributor-workshop/image19.png
@@ -96,7 +96,7 @@
 .image contributor-workshop/image13.png
 .image contributor-workshop/image3.png
 
-*** Future
+### Future
 
 The event was successful well beyond our expectations. Sameer Ajmani, Go team
 manager said, "The contributor workshop was incredibly fun and educational–for
@@ -107,13 +107,13 @@
 We are looking into ways to make this workshop easier to run for future events
 (like meetups and conferences). Our biggest challenge is providing enough
 mentorship so that users feel supported. If you have any ideas or would like to
-help with this process please [[mailto:spf@golang.org][let me know]].
+help with this process please [let me know](mailto:spf@golang.org).
 
 I've asked a few participants of the event to share their experiences below:
 
-** My Contribution Experience
+## My Contribution Experience
 
-by [[https://twitter.com/cassandraoid][Cassandra]]
+by [Cassandra](https://twitter.com/cassandraoid)
 
 When I heard about the go-contrib workshop I was very excited and then I was
 extremely intimidated. I was encouraged by a member of the Go team to
@@ -126,7 +126,7 @@
 Brought up my screen and was ready to roll…
 
 Jess Frazelle stood up and started the presentation and provided the group with
-[[https://docs.google.com/presentation/d/1ap2fycBSgoo-jCswhK9lqgCIFroE1pYpsXC1ffYBCq4/edit#slide=id.p][a link]]
+[a link](https://docs.google.com/presentation/d/1ap2fycBSgoo-jCswhK9lqgCIFroE1pYpsXC1ffYBCq4/edit#slide=id.p)
 to make it easy to follow.
 
 .image contributor-workshop/image16.png
@@ -142,7 +142,7 @@
 
 .image contributor-workshop/image10.png
 
-Ok, now it was time to become a *freaking*Go*contributor*.
+Ok, now it was time to become a **freaking Go contributor**.
 
 To make this more exciting than it already is, the Go team set up a game where
 we could track as a group how many points we could rack up based on the Gerrit
@@ -167,9 +167,9 @@
 fellow participants for making it one of my most memorable moments at
 GopherCon.
 
-** My Contribution Experience
+## My Contribution Experience
 
-by [[https://twitter.com/mbbroberg][Matt]]
+by [Matt](https://twitter.com/mbbroberg)
 
 I've always found programming languages to be intimidating. It's the code that
 enables the world to write code. Given the impact, surely smarter people than
@@ -180,9 +180,9 @@
 
 Here are my very verbose steps to go from 0 to 2 contributions to Go:
 
-*** The Setup
+### The Setup
 
-Given Go's use of Gerrit, I started by setting up my environment for it. [[https://docs.google.com/presentation/d/1ap2fycBSgoo-jCswhK9lqgCIFroE1pYpsXC1ffYBCq4/edit#slide=id.g1f953ef7df_0_9][Jess Frazzelle's guide]]
+Given Go's use of Gerrit, I started by setting up my environment for it. [Jess Frazzelle's guide](https://docs.google.com/presentation/d/1ap2fycBSgoo-jCswhK9lqgCIFroE1pYpsXC1ffYBCq4/edit#slide=id.g1f953ef7df_0_9)
 is a great place to start to not miss a step.
 
 The real fun starts when you clone the Go repo. Ironically, you don't hack on
@@ -206,14 +206,14 @@
 This package includes `git change` and `git mail` which will replace your
 normal workflow of `git commit` and `git push` respectively.
 
-Okay, installations are out of the way. Now setup your [[https://go-review.googlesource.com/settings/#Profile][Gerrit account here]],
-then [[https://go-review.googlesource.com/settings#Agreements][sign the CLA]] appropriate for
+Okay, installations are out of the way. Now setup your [Gerrit account here](https://go-review.googlesource.com/settings/#Profile),
+then [sign the CLA](https://go-review.googlesource.com/settings#Agreements) appropriate for
 you (I signed a personal one for all Google projects, but choose the right option for you.
-You can see all CLAs you've signed at [[https://cla.developers.google.com/clas][cla.developers.google.com/clas]]).
+You can see all CLAs you've signed at [cla.developers.google.com/clas](https://cla.developers.google.com/clas)).
 
 AND BAM. You're good (to go)! But where to contribute?
 
-*** Contributing
+### Contributing
 
 In the workshop, they sent us into the `scratch` repository, which is a safe place to
 fool around in order to master the workflow:
@@ -236,7 +236,7 @@
 Two good notes to take at this point: `git change` also works like `git commit --amend`, so
 if you need to update your patch you can `add` then `change` and it will all
 link to the same patch. Secondly, you can always review your patch from your
-[[https://go-review.googlesource.com/dashboard/][personal Gerrit dashboard]].
+[personal Gerrit dashboard](https://go-review.googlesource.com/dashboard/).
 
 After a few back and forths, I officially had a contribute to Go! And if Jaana
 is right, it might be the first with emojis ✌️.
@@ -244,7 +244,7 @@
 .image contributor-workshop/image15.png
 .image contributor-workshop/image23.png
 
-*** Contributing, For Real
+### Contributing, For Real
 
 The scratch repo is fun and all, but there's a ton of ways to get into the
 depths of Go's packages and give back. It's at this point where I cruised
@@ -256,7 +256,7 @@
 
 I decided to see what I can do in the `regexp` package, maybe out of love and
 fear of regex. Here's where I switched to the
-[[https://godoc.org/regexp][website's view of the package]] (it's good to know
+[website's view of the package](https://godoc.org/regexp) (it's good to know
 that each standard package can be found at https://godoc.org/$PACKAGENAME). In
 there I noticed that `QuoteMeta` was missing the same level of detailed examples
 other functions have (and I could use the practice using Gerrit).
@@ -264,7 +264,7 @@
 .image contributor-workshop/image1.png
 
 I started looking at `go/src/regexp` to try to find where to add examples and I
-got lost pretty quickly. Lucky for me, [[https://twitter.com/francesc][Francesc]] was around that day. He walked
+got lost pretty quickly. Lucky for me, [Francesc](https://twitter.com/francesc) was around that day. He walked
 me through how all examples are actually in-line tests in a `example_test.go`
 file. They follow the format of test cases followed by "Output" commented out
 and then the answers to the tests. For example:
@@ -288,23 +288,23 @@
 but I think it's worth it on this one.
 
 I can hear your question already: how did I verify it worked? Well it wasn't
-easy to be honest. Running `go`test`example_test.go`-run`QuoteMeta`-v` won't do
+easy to be honest. Running `go test example_test.go -run QuoteMeta -v` won't do
 it since we're working outside of our $GOPATH. I struggled to figure it out
-until [[https://medium.com/@vCabbage/go-testing-standard-library-changes-1e9cbed11339][Kale Blakenship wrote this awesome post on testing in Go]].
+until [Kale Blakenship wrote this awesome post on testing in Go](https://medium.com/@vCabbage/go-testing-standard-library-changes-1e9cbed11339).
 Bookmark this one for later.
 
-You can see my completed [[https://go-review.googlesource.com/c/49130/][contribution here]]. What I also hope you see is
+You can see my completed [contribution here](https://go-review.googlesource.com/c/49130/). What I also hope you see is
 how simple it is to get into the flow of contributing. If you're like me,
 you'll be good at finding a small typo or missing example in the docs to start to
 get used to the `git codereview` workflow. After that, you'll be ready to find
-an open issue, ideally one [[https://github.com/golang/go/milestones][tagged for an upcoming release]], and give it a go. No matter
+an open issue, ideally one [tagged for an upcoming release](https://github.com/golang/go/milestones), and give it a go. No matter
 what you choose to do, definitely go forth and do it. The Go team proved to me
 just how much they care about helping us all contribute back. I can't wait for
 my next `git mail`.
 
-** My Mentorship Experience
+## My Mentorship Experience
 
-by [[https://twitter.com/dmitshur][Dmitri]]
+by [Dmitri](https://twitter.com/dmitshur)
 
 I was looking forward to participating in the Contribution Workshop event as a
 mentor. I had high expectations for the event, and thought it was a great idea
@@ -323,12 +323,12 @@
 After a few months passed, I thought "enough is enough," and decided to
 dedicate an entire day of an upcoming weekend to figuring out the process. I
 set aside all of Saturday for doing one thing: sending my first CL to Go. I
-opened up [[https://golang.org/doc/contribute.html][the Contribution Guide]]
+opened up [the Contribution Guide](https://golang.org/doc/contribute.html)
 and started following all the steps, from the very top. Within an hour, I was
 done. I had send my first CL. I was both in awe and shock. In awe, because I
 had finally sent a contribution to Go, and it was accepted! In shock, because,
 why did I wait so long to finally do this? Following the steps in
-[[https://golang.org/doc/contribute.html][the Contribution Guide]] was very
+[the Contribution Guide](https://golang.org/doc/contribute.html) was very
 easy, and the entire process went completely smoothly. If only someone had told
 me that I'd be done within an hour and nothing would go wrong, I would've done
 it much sooner!
@@ -376,7 +376,7 @@
 they sometimes found themselves. From what I can tell, many happy gophers
 walked away from the event, myself included!
 
-** Photos from the event
+## Photos from the event
 
 .image contributor-workshop/image2.jpg
 .image contributor-workshop/image4.jpg
diff --git a/content/contributors-summit-2019.article b/content/contributors-summit-2019.article
index ae43178..58ec47c 100644
--- a/content/contributors-summit-2019.article
+++ b/content/contributors-summit-2019.article
@@ -1,10 +1,11 @@
-Contributors Summit 2019
+# Contributors Summit 2019
 15 Aug 2019
 Tags: community
+Summary: For the third year in a row, the Go team and contributors convened the day before GopherCon to discuss and plan for the future of the Go project. The event included self-organizing into breakout groups, a town-hall style discussion about the proposal process in the morning, and afternoon break-out roundtable discussions based on topics our contributors chose. We asked five contributors to write about their experience in various discussions at this year’s summit.
 
 Carmen Andoh and contributors
 
-* Introduction
+## Introduction
 
 For the third year in a row, the Go team and contributors convened
 the day before GopherCon to discuss and plan for the future of the Go project.
@@ -17,9 +18,9 @@
 
 .image contributors-summit-2019/group.jpg _ 800
 
-_(Photo_by_Steve_Francia.)_
+_(Photo by Steve Francia.)_
 
-* Compiler and Runtime (report by Lynn Boger)
+## Compiler and Runtime (report by Lynn Boger)
 
 The Go contributors summit was a great opportunity
 to meet and discuss topics and ideas with others who also contribute to Go.
@@ -40,7 +41,7 @@
 here is my list of those topics which had the most interest and discussion,
 followed by some brief comments that were made on other topics.
 
-*Binary*size*.
+**Binary size**.
 There was a concern expressed about binary size,
 especially that it continues to grow with each release.
 Some possible reasons were identified such as increased inlining and other optimizations.
@@ -54,7 +55,7 @@
 those changes could be made, but if performance were affected
 some users would prefer better performance.
 
-*Vector*assembly*.
+**Vector assembly**.
 How to leverage vector assembly in Go was discussed for a while
 and has been a topic of interest in the past.
 I have split this into three separate possibilities, since they all relate to the use of vector instructions,
@@ -95,44 +96,44 @@
 There was some discussion of designing an experimental vector package
 to try and implement some of these ideas.
 
-*New*calling*convention*.
+**New calling convention**.
 Several people were interested in the topic of the
-[[https://golang.org/issue/18597][ABI changes to provide a register based calling convention]].
+[ABI changes to provide a register based calling convention](https://golang.org/issue/18597).
 The current status was reported with details.
 There was discussion on what remained to be done before it could be used.
 The ABI specification needs to be written first and it was not clear when that would be done.
 I know this will benefit some target platforms more than others
 and a register calling convention is used in most compilers for other platforms.
 
-*General*optimizations*.
+**General optimizations**.
 Certain optimizations that are more beneficial for some platforms other than x86 were discussed.
 In particular, loop optimizations such as hoisting of invariants and strength reduction could be done
 and provide more benefit on some platforms.
 Potential solutions were discussed, and implementation would probably be
 up to the targets that find those improvements important.
 
-*Feedback-directed*optimizations*.
+**Feedback-directed optimizations**.
 This was discussed and debated as a possible future enhancement.
 In my experience, it is hard to find meaningful programs to use for
 collecting performance data that can later be used to optimize code.
 It increases compile time and takes a lot of space to save the data
 which might only be meaningful for a small set of programs.
 
-*Pending*submissions*.
+**Pending submissions**.
 A few members in the group mentioned changes they had been working on
 and plan to submit soon, including improvements to makeslice, and a rewrite of rulegen.
 
-*Compile*time*concerns*.
+**Compile time concerns**.
 Compile time was discussed briefly. It was noted that phase timing was added to the GOSSAFUNC output.
 
-*Compiler*contributor*communication*.
+**Compiler contributor communication**.
 Someone asked if there was a need for a Go compiler mailing list.
 It was suggested that we use golang-dev for that purpose,
 adding compiler to the subject line to identify it.
 If there is too much traffic on golang-dev, then a compiler-specific mailing list
 can be considered at some later point in time.
 
-*Community*.
+**Community**.
 I found the day very beneficial in terms of connecting with people
 who have been active in the community and have similar areas of interest.
 I was able to meet many people who I’ve only known by the user name
@@ -146,15 +147,15 @@
 Hopefully these connections will lead to more effective communication
 and improved handling of issues and code changes in the future.
 
-* Tools (report by Paul Jolly)
+## Tools (report by Paul Jolly)
 
 The tools breakout session during the contributor summit took an extended form,
 with two further sessions on the main conference days organized by the
-[[https://github.com/golang/go/wiki/golang-tools][golang-tools]] group.
+[golang-tools](https://github.com/golang/go/wiki/golang-tools) group.
 This summary is broken down into two parts: the tools session at the contributor workshop,
 and a combined report from the golang-tools sessions on the main conference days.
 
-*Contributor*summit*.
+**Contributor summit**.
 The tools session started with introductions from ~25 folks gathered,
 followed by a brainstorming of topics, including:
 gopls, ARM 32-bit, eval, signal, analysis, go/packages api, refactoring, pprof,
@@ -163,8 +164,8 @@
 A lot of people with lots of interest in lots of tools!
 
 The session focused on two areas (all that time allowed): gopls and visualizations.
-[[https://golang.org/wiki/gopls][Gopls]] (pronounced: “go please”) is an implementation of the
-[[https://langserver.org][Language Server Protocol (LSP)]] server for Go.
+[Gopls](https://golang.org/wiki/gopls) (pronounced: “go please”) is an implementation of the
+[Language Server Protocol (LSP)](https://langserver.org) server for Go.
 Rebecca Stamber, the gopls lead author, and the rest of the Go tools team were interested
 in hearing people’s experiences with gopls: stability, missing features, integrations in editors working, etc?
 The general feeling was that gopls was in really good shape and working extremely well for the majority of use cases.
@@ -177,19 +178,19 @@
 Currently there is no good solution, but it’s actively under investigation.
 Conversation shifted to the very broad topic of visualizations, with a
 demo-based introduction from Anthony Starks (who, incidentally, gave an excellent talk about
-[[https://www.youtube.com/watch?v=NyDNJnioWhI][Go for information displays]] at GopherCon 2018).
+[Go for information displays](https://www.youtube.com/watch?v=NyDNJnioWhI) at GopherCon 2018).
 
-*Conference*days*.
+**Conference days**.
 The golang-tools sessions on the main conference days were a continuation of the
-[[https://golang.org/wiki/golang-tools][monthly calls]] that have been happening since the group’s inception at GopherCon 2018.
+[monthly calls](https://golang.org/wiki/golang-tools) that have been happening since the group’s inception at GopherCon 2018.
 Full notes are available for the
-[[https://docs.google.com/document/d/1-RVyttQ0ncjCpR_sRwizf-Ubedkr0Emwmk2LhnsUOmE/edit][day 1]] and
-[[https://docs.google.com/document/d/1ZI_WqpLCB8DO6teJ3aBuXTeYD2iZZZlkDptmcY6Ja60/edit#heading=h.x9lkytc2gxmg][day 2]] sessions.
+[day 1](https://docs.google.com/document/d/1-RVyttQ0ncjCpR_sRwizf-Ubedkr0Emwmk2LhnsUOmE/edit) and
+[day 2](https://docs.google.com/document/d/1ZI_WqpLCB8DO6teJ3aBuXTeYD2iZZZlkDptmcY6Ja60/edit#heading=h.x9lkytc2gxmg) sessions.
 These sessions were again well attended with 25-30 people at each session.
 The Go tools team was there in strength (a good sign of the support being put behind this area), as was the Uber platform team.
 In contrast to the contributor summit, the goal from these sessions was to come away with specific action items.
 
-*Gopls*.
+**Gopls**.
 Gopls “readiness” was a major focus for both sessions.
 This answer effectively boiled down to determining when it makes sense to tell
 editor integrators “we have a good first cut of gopls” and then compiling a
@@ -210,28 +211,28 @@
 now the state of debugger-editor integration needs to be established,
 following a process similar to that of gopls and the “blessed” integrations.
 
-*Go*Discovery*Site*.
+**Go Discovery Site**.
 The second golang-tools session started with an excellent introduction to
 the Go Discovery Site by Julie Qiu from the Go tools team, along with a quick demo.
 Julie talked about the plans for the Discovery Site: open sourcing the project,
-what signals are used in search ranking, how [[http://godoc.org/][godoc.org]] will ultimately be replaced,
+what signals are used in search ranking, how [godoc.org](http://godoc.org/) will ultimately be replaced,
 how submodules should work, how users can discover new major versions.
 
-*Build*Tags*.
+**Build Tags**.
 Conversation then moved to build tag support within gopls.
 This is an area that clearly needs to be better understood
-(use cases are currently being gathered in [[https://golang.org/issue/33389][issue 33389]]).
+(use cases are currently being gathered in [issue 33389](https://golang.org/issue/33389)).
 In light of this conversation, the session wrapped up with
 Alexander Zolotov from the JetBrains GoLand team suggesting that the gopls and
 GoLand teams should share experience in this and more areas, given GoLand
 has already gained lots of experience.
 
-*Join*Us!*
+**Join Us!**
 We could easily have talked about tools-related topics for days!
 The good news is that the golang-tools calls will continue for the foreseeable future.
-Anyone interested in Go tooling is very much encouraged to join: [[https://golang.org/wiki/golang-tools][the wiki]] has more details.
+Anyone interested in Go tooling is very much encouraged to join: [the wiki](https://golang.org/wiki/golang-tools) has more details.
 
-* Enterprise Use (report by Daniel Theophanes)
+## Enterprise Use (report by Daniel Theophanes)
 
 Actively asking after the needs of less vocal developers will be the largest challenge,
 and greatest win, for the Go language. There is a large segment of programmers
@@ -270,7 +271,7 @@
 If you are in an organization where Go is only used for a subsection of programming tasks,
 but not others, why isn’t it used for more? Are there specific blockers to adoption?
 
-* Education (report by Andy Walker)
+## Education (report by Andy Walker)
 
 One of the roundtables I was involved in at the Contributors Summit
 this year was on the topic of Go education,
@@ -284,21 +285,21 @@
 Early on, talk turned to whether or not Go makes a good first programming language.
 I wasn’t sure, and advocated against it.
 Go isn’t a good first language, I argued, because it isn’t intended to be.
-As Rob Pike [[https://talks.golang.org/2012/splash.article][wrote back in 2012]],
+As Rob Pike [wrote back in 2012](https://talks.golang.org/2012/splash.article),
 “the language was designed by and for people who write—and read and debug and maintain—large software systems”.
 To me, this guiding ethos is clear: Go is a deliberate response to perceived flaws
 in the processes used by experienced engineers, not an attempt to create an ideal
 programming language, and as such a certain basic familiarity with programming concepts is assumed.
 
-This is evident in the official documentation at [[https://golang.org/doc/][golang.org/doc]].
+This is evident in the official documentation at [golang.org/doc](https://golang.org/doc/).
 It jumps right into how to install the language before passing the user on to the
-[[https://tour.golang.org/][tour]], which is geared towards programmers
+[tour](https://tour.golang.org/), which is geared towards programmers
 who are already familiar with a C-like language.
-From there, they are taken to [[https://golang.org/doc/code.html][How to Write Go Code]],
+From there, they are taken to [How to Write Go Code](https://golang.org/doc/code.html),
 which provides a very basic introduction to the classic non-module Go workspace,
 before moving immediately on to writing libraries and testing.
-Finally, we have [[https://golang.org/doc/effective_go.html][Effective Go]],
-and a series of references including the [[https://golang.org/ref/spec][spec]],
+Finally, we have [Effective Go](https://golang.org/doc/effective_go.html),
+and a series of references including the [spec](https://golang.org/ref/spec),
 rounded out by some examples.
 These are all decent resources if you’re already familiar with a C-like language,
 but they still leave a lot to be desired, and there’s nothing to be found
@@ -322,12 +323,12 @@
 design decisions principles of good architecture in Go.
 They should find answers to questions like:
 
-- Why are there so many integer types when I am encouraged to use `int` most of the time?
-- Is there ever a good reason to pick a value receiver?
-- Why is there a plain `int`, but no plain `float`?
-- What are send- and receive-only channels, and when would I use them?
-- How do I effectively compose concurrency primitives, and when would I _not_ want to use channels?
-- What is `uint` good for? Should I use it to restrict my user to positive values? Why not?
+  - Why are there so many integer types when I am encouraged to use `int` most of the time?
+  - Is there ever a good reason to pick a value receiver?
+  - Why is there a plain `int`, but no plain `float`?
+  - What are send- and receive-only channels, and when would I use them?
+  - How do I effectively compose concurrency primitives, and when would I _not_ want to use channels?
+  - What is `uint` good for? Should I use it to restrict my user to positive values? Why not?
 
 The tour should be someplace they can revisit upon finishing the first run-through
 to dive more deeply into some of the more interesting choices in language design.
@@ -340,9 +341,9 @@
 both a frontend and a backend environment,
 but WASM is fast becoming a first-order platform,
 and there are so many places we could go with that.
-We could provide something like [[https://github.com/gopherjs/vecty][vecty]]
-in [[https://goplay.space/][The Go Play Space]],
-or perhaps [[https://gioui.org/][Gio]], targeting WASM, for people to get
+We could provide something like [vecty](https://github.com/gopherjs/vecty)
+in [The Go Play Space](https://goplay.space/),
+or perhaps [Gio](https://gioui.org/), targeting WASM, for people to get
 started programming in the browser right away, inspiring their imagination,
 and provide them a migration path out of our playground into
 a terminal and onto GitHub.
@@ -354,7 +355,7 @@
 learning about their journey and their process,
 and shaping the future of Go education with their input.
 
-* Learning Platforms (report by Ronna Steinberg)
+## Learning Platforms (report by Ronna Steinberg)
 
 We discussed what a learning platform for Go should look like
 and how we can combine global resources to effectively teach the language.
@@ -385,7 +386,7 @@
 (If you are interested in helping in educational efforts for Go,
 please email Carmen Andoh candoh@google.com.)
 
-* Thank You!
+## Thank You!
 
 Thanks to all the attendees for the excellent discussions on contributor day,
 and thanks especially to Lynn, Paul, Daniel, Andy, and Ronna
diff --git a/content/contributors-summit.article b/content/contributors-summit.article
index a213674..33d41ed 100644
--- a/content/contributors-summit.article
+++ b/content/contributors-summit.article
@@ -1,10 +1,11 @@
-Contributors Summit
+# Contributors Summit
 3 Aug 2017
 Tags: community
+Summary: The day before GopherCon, a group of Go team members and contributors gathered in Denver to discuss and plan for the future of the Go project. This was the first ever event of its kind, a major milestone for the Go project. The event comprised a morning session revolving around focused discussions on a theme, and an afternoon session made up of round table discussions in small break-out groups.
 
 Sam Whited
 
-* Introduction
+## Introduction
 
 The day before GopherCon, a group of Go team members and contributors gathered
 in Denver to discuss and plan for the future of the Go project.
@@ -13,7 +14,7 @@
 theme, and an afternoon session made up of round table discussions in small
 break-out groups.
 
-** Compiler and runtime
+### Compiler and runtime
 
 The compiler and runtime session started out with a discussion about refactoring
 `gc` and related tools into importable packages.
@@ -42,9 +43,9 @@
 I learned a lot about the current state of the world, the problems, and where
 people want to go from here.
 
-** Dependency management
+### Dependency management
 
-After a quick update from the [[https://github.com/golang/dep][dep]] team on the
+After a quick update from the [dep](https://github.com/golang/dep) team on the
 status of the project, the dependency management session gravitated towards how
 the Go world will work once dep (or something dep-like) becomes the primary
 means of package management.
@@ -64,10 +65,10 @@
 There are many good options for making the Go tooling easier to use, and
 discussion will likely continue on the mailing lists.
 
-** The standard library
+### The standard library
 
 The discussions we had around the future of the Go language are mostly covered
-in Russ Cox's blog post: [[https://blog.golang.org//toward-go2][Toward Go 2]], so
+in Russ Cox's blog post: [Toward Go 2](https://blog.golang.org//toward-go2), so
 let's move on to the standard library session.
 
 As a contributor to the standard library and subrepos, this session was
@@ -88,15 +89,15 @@
 For instance, it would be nice if `io.Reader` accepted a context so that
 blocking read operations could be canceled.
 
-More [[https://golang.org/wiki/experiencereports][experience reports]] are
+More [experience reports](https://golang.org/wiki/experiencereports) are
 necessary before we can determine what will change in the standard library.
 
-** Tooling and editors
+### Tooling and editors
 
 A language server for editors to use was a hot topic in the tooling session,
 with a number of people advocating for IDE and tool developers to adopt a common
 "Go Language Server" to index and display information about code and packages.
-Microsoft's [[https://www.github.com/Microsoft/language-server-protocol][Language Server Protocol]]
+Microsoft's [Language Server Protocol](https://www.github.com/Microsoft/language-server-protocol)
 was suggested as a good starting point because of its wide support in editors
 and IDEs.
 
@@ -107,7 +108,7 @@
 experience reports from the community will be required before such an API can be
 designed.
 
-** The contributor experience
+### The contributor experience
 
 The final session of the day was on the contributor experience.
 The first discussion was all about how the current Gerrit workflow could be made
@@ -121,7 +122,7 @@
 Hopefully we'll see improvements to these and many more areas of the
 contribution process in the coming weeks and months!
 
-** Breakout sessions
+### Breakout sessions
 
 In the afternoon, participants broke out into smaller groups to have more
 in-depth discussions about some of the topics from the morning session.
@@ -129,7 +130,7 @@
 For example, one group worked on identifying the useful parts of an experience
 report and a list of existing literature documenting Go user experiences,
 resulting in the experience report
-[[https://golang.org/wiki/experiencereports][wiki page]].
+[wiki page](https://golang.org/wiki/experiencereports).
 
 Another group considered the future of errors in Go.
 Many Go users are initially confused by, or don't understand the fact that
@@ -139,7 +140,7 @@
 these issues in upcoming Go releases, but also ways error handling could be
 improved in Go 2.
 
-* Community
+## Community
 
 Outside of the technical discussions, the summit also provided an opportunity
 for a group of people from all over the world who often talk and work together
@@ -151,7 +152,7 @@
 for discussions both about Go and a little general socialization, which really
 helped to put faces to the names that review our code every day.
 
-As Russ discussed in [[https://blog.golang.org//toward-go2][Toward Go 2]],
+As Russ discussed in [Toward Go 2](https://blog.golang.org//toward-go2),
 communicating effectively requires knowing your audience.
 Having a broad sample of Go contributors in a room together helped us all to
 understand the Go audience better and start many productive discussions about
diff --git a/content/cover.article b/content/cover.article
index 40ed1d9..e4ac0bf 100644
--- a/content/cover.article
+++ b/content/cover.article
@@ -1,21 +1,22 @@
-The cover story
+# The cover story
 2 Dec 2013
 Tags: tools, coverage, testing
+Summary: From the beginning of the project, Go was designed with tools in mind. Those tools include some of the most iconic pieces of Go technology such as the documentation presentation tool [godoc](https://golang.org/cmd/godoc), the code formatting tool [gofmt](https://golang.org/cmd/gofmt), and the API rewriter [gofix](https://golang.org/cmd/fix). Perhaps most important of all is the [`go` command](https://golang.org/cmd/go), the program that automatically installs, builds, and tests Go programs using nothing more than the source code as the build specification.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 From the beginning of the project, Go was designed with tools in mind.
 Those tools include some of the most iconic pieces of Go technology such as
 the documentation presentation tool
-[[https://golang.org/cmd/godoc][godoc]],
+[godoc](https://golang.org/cmd/godoc),
 the code formatting tool
-[[https://golang.org/cmd/gofmt][gofmt]],
+[gofmt](https://golang.org/cmd/gofmt),
 and the API rewriter
-[[https://golang.org/cmd/fix][gofix]].
+[gofix](https://golang.org/cmd/fix).
 Perhaps most important of all is the
-[[https://golang.org/cmd/go][`go` command]],
+[`go` command](https://golang.org/cmd/go),
 the program that automatically installs, builds, and tests Go programs
 using nothing more than the source code as the build specification.
 
@@ -23,10 +24,10 @@
 unusual approach to the way it generates coverage statistics, an approach
 that builds on the technology laid down by godoc and friends.
 
-* Support for tools
+## Support for tools
 
 First, some background: What does it mean for a
-[[https://talks.golang.org/2012/splash.article#TOC_17.][language to support good tooling]]?
+[language to support good tooling](https://talks.golang.org/2012/splash.article#TOC_17.)?
 It means that the language makes it easy to write good tools and that its ecosystem
 supports the construction of tools of all flavors.
 
@@ -50,7 +51,7 @@
 One example is the gofix tool, which automates the
 rewriting of code to use new language features or updated libraries.
 Gofix let us make fundamental changes to the language and libraries in the
-[[https://blog.golang.org/the-path-to-go-1][run-up to Go 1.0]],
+[run-up to Go 1.0](https://blog.golang.org/the-path-to-go-1),
 with the confidence that users could just run the tool to update their source to the newest version.
 
 Inside Google, we have used gofix to make sweeping changes in a huge code repository that would be almost
@@ -63,7 +64,7 @@
 All these items build on each other, making the Go environment
 more productive by automating many tasks.
 
-* Test coverage
+## Test coverage
 
 Test coverage is a term that describes how much of a package's code is exercised by running the package's tests.
 If executing the test suite causes 80% of the package's source statements to be run, we say that the test coverage is 80%.
@@ -71,7 +72,7 @@
 The program that provides test coverage in Go 1.2 is the latest to exploit the tooling support in the Go ecosystem.
 
 The usual way to compute test coverage is to instrument the binary.
-For instance, the GNU [[http://gcc.gnu.org/onlinedocs/gcc/Gcov.html][gcov]] program sets breakpoints at branches
+For instance, the GNU [gcov](http://gcc.gnu.org/onlinedocs/gcc/Gcov.html) program sets breakpoints at branches
 executed by the binary.
 As each branch executes, the breakpoint is cleared and the target statements of the branch are marked as 'covered'.
 
@@ -90,7 +91,7 @@
 information.
 However If you're a user of gc, the more commonly used Go compiler suite, until Go 1.2 you were out of luck.
 
-* Test coverage for Go
+## Test coverage for Go
 
 For the new test coverage tool for Go, we took a different approach that avoids dynamic debugging.
 The idea is simple: Rewrite the package's source code before compilation to add instrumentation,
@@ -135,7 +136,7 @@
 Its run-time overhead is therefore modest, adding only about 3% when running a typical (more realistic) test.
 That makes it reasonable to include test coverage as part of the standard development pipeline.
 
-* Viewing the results
+## Viewing the results
 
 The test coverage for our example was poor.
 To discover why, we ask `go` `test` to write a "coverage profile" for us, a file that holds
@@ -177,7 +178,7 @@
 And we can see exactly which ones they are, which makes it easy to
 improve our test coverage.
 
-* Heat maps
+## Heat maps
 
 A big advantage of this source-level approach to test coverage is that it's
 easy to instrument the code in different ways.
@@ -187,14 +188,14 @@
 The `go` `test` command accepts a `-covermode` flag to set the coverage mode
 to one of three settings:
 
-- set:    did each statement run?
-- count:  how many times did each statement run?
-- atomic: like count, but counts precisely in parallel programs
+  - set:    did each statement run?
+  - count:  how many times did each statement run?
+  - atomic: like count, but counts precisely in parallel programs
 
 The default is 'set', which we've already seen.
 The `atomic` setting is needed only when accurate counts are required
 when running parallel algorithms. It uses atomic operations from the
-[[https://golang.org/pkg/sync/atomic/][sync/atomic]] package,
+[sync/atomic](https://golang.org/pkg/sync/atomic/) package,
 which can be quite expensive.
 For most purposes, though, the `count` mode works fine and, like
 the default `set` mode, is very cheap.
@@ -256,7 +257,7 @@
 That's a lot of information about the execution of the function,
 information that might be useful in profiling.
 
-* Basic blocks
+## Basic blocks
 
 You might have noticed that the counts in the previous example
 were not what you expected on the lines with closing braces.
@@ -287,7 +288,7 @@
 instrumentation right but the presentation is line-based and
 can therefore miss some nuances.
 
-* The big picture
+## The big picture
 
 That's the story about test coverage in Go 1.2.
 A new tool with an interesting implementation enables not only
diff --git a/content/debugging-go-code-status-report.article b/content/debugging-go-code-status-report.article
index 9da89e1..e253a10 100644
--- a/content/debugging-go-code-status-report.article
+++ b/content/debugging-go-code-status-report.article
@@ -1,10 +1,11 @@
-Debugging Go code (a status report)
+# Debugging Go code (a status report)
 2 Nov 2010
 Tags: debug, gdb
+Summary: When it comes to debugging, nothing beats a few strategic print statements to inspect variables or a well-placed panic to obtain a stack trace. However, sometimes you’re missing either the patience or the source code, and in those cases a good debugger can be invaluable. That's why over the past few releases we have been improving the support in Go’s gc linker (6l, 8l) for GDB, the GNU debugger.
 
 Luuk van Dijk
 
-* Introduction
+##
 
 When it comes to debugging, nothing beats a few strategic print statements
 to inspect variables or a well-placed panic to obtain a stack trace.
@@ -19,42 +20,42 @@
 FreeBSD) or Mach-O (Mac OS X) binaries.
 The DWARF code is rich enough to let you do the following:
 
-- load a Go program in GDB version 7.x,
-- list all Go, C, and assembly source files by line (parts of the Go runtime are written in C and assembly),
-- set breakpoints by line and step through the code,
-- print stack traces and inspect stack frames, and
-- find the addresses and print the contents of most variables.
+  - load a Go program in GDB version 7.x,
+  - list all Go, C, and assembly source files by line (parts of the Go runtime are written in C and assembly),
+  - set breakpoints by line and step through the code,
+  - print stack traces and inspect stack frames, and
+  - find the addresses and print the contents of most variables.
 
 There are still some inconveniences:
 
-- The emitted DWARF code is unreadable by the GDB version 6.x that ships with Mac OS X.
-  We would gladly accept patches to make the DWARF output compatible with
-  the standard OS X GDB,
-  but until that’s fixed you’ll need to download,
-  build, and install GDB 7.x to use it under OS X.
-  The source can be found at [[http://sourceware.org/gdb/download/][http://sourceware.org/gdb/download/]].
-  Due to the particulars of OS X you’ll need to install the binary on a
-  local file system with `chgrp`procmod` and `chmod`g+s`.
-- Names are qualified with a package name and,
-  as GDB doesn't understand Go packages, you must reference each item by its full name.
-  For example, the variable named `v` in package `main` must be referred to
-  as `'main.v'`, in single quotes.
-  A consequence of this is that tab completion of variable and function names does not work.
-- Lexical scoping information is somewhat obfuscated.
-  If there are multiple variables of the same name,
-  the nth instance will have a suffix of the form ‘#n’.
-  We plan to fix this, but it will require some changes to the data exchanged
-  between the compiler and linker.
-- Slice and string variables are represented as their underlying structure
-  in the runtime library.
-  They will look something like `{data`=`0x2aaaaab3e320,`len`=`1,`cap`=`1}.` For slices,
-  you must dereference the data pointer to inspect the elements.
+  - The emitted DWARF code is unreadable by the GDB version 6.x that ships with Mac OS X.
+    We would gladly accept patches to make the DWARF output compatible with
+    the standard OS X GDB,
+    but until that’s fixed you’ll need to download,
+    build, and install GDB 7.x to use it under OS X.
+    The source can be found at [http://sourceware.org/gdb/download/](http://sourceware.org/gdb/download/).
+    Due to the particulars of OS X you’ll need to install the binary on a
+    local file system with `chgrp procmod` and `chmod g+s`.
+  - Names are qualified with a package name and,
+    as GDB doesn't understand Go packages, you must reference each item by its full name.
+    For example, the variable named `v` in package `main` must be referred to
+    as `'main.v'`, in single quotes.
+    A consequence of this is that tab completion of variable and function names does not work.
+  - Lexical scoping information is somewhat obfuscated.
+    If there are multiple variables of the same name,
+    the nth instance will have a suffix of the form ‘#n’.
+    We plan to fix this, but it will require some changes to the data exchanged
+    between the compiler and linker.
+  - Slice and string variables are represented as their underlying structure
+    in the runtime library.
+    They will look something like `{data = 0x2aaaaab3e320, len = 1, cap = 1}.` For slices,
+    you must dereference the data pointer to inspect the elements.
 
 Some things don't work yet:
 
-- Channel, function, interface, and map variables cannot be inspected.
-- Only Go variables are annotated with type information; the runtime's C variables are not.
-- Windows and ARM binaries do not contain DWARF debugging information and, as such, cannot be inspected with GDB.
+  - Channel, function, interface, and map variables cannot be inspected.
+  - Only Go variables are annotated with type information; the runtime's C variables are not.
+  - Windows and ARM binaries do not contain DWARF debugging information and, as such, cannot be inspected with GDB.
 
 Over the coming months we intend to address these issues,
 either by changing the compiler and linker or by using the Python extensions to GDB.
diff --git a/content/debugging-go-programs-with-gnu-debugger.article b/content/debugging-go-programs-with-gnu-debugger.article
index 2df3997..e5308cb 100644
--- a/content/debugging-go-programs-with-gnu-debugger.article
+++ b/content/debugging-go-programs-with-gnu-debugger.article
@@ -1,13 +1,14 @@
-Debugging Go programs with the GNU Debugger
+# Debugging Go programs with the GNU Debugger
 30 Oct 2011
 Tags: debug, gdb, technical
+Summary: Last year we [reported](https://blog.golang.org/2010/11/debugging-go-code-status-report.html) that Go's [gc](https://golang.org/cmd/gc/)/[ld](https://golang.org/cmd/6l/) toolchain produces DWARFv3 debugging information that can be read by the GNU Debugger (GDB). Since then, work has continued steadily on improving support for debugging Go code with GDB. Among the improvements are the ability to inspect goroutines and to print native Go data types, including structs, slices, strings, maps, interfaces, and channels.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-Last year we [[https://blog.golang.org/2010/11/debugging-go-code-status-report.html][reported]]
-that Go's [[https://golang.org/cmd/gc/][gc]]/[[https://golang.org/cmd/6l/][ld]]
+Last year we [reported](https://blog.golang.org/2010/11/debugging-go-code-status-report.html)
+that Go's [gc](https://golang.org/cmd/gc/)/[ld](https://golang.org/cmd/6l/)
 toolchain produces DWARFv3 debugging information that can be read by the GNU Debugger (GDB).
 Since then, work has continued steadily on improving support for debugging Go code with GDB.
 Among the improvements are the ability to inspect goroutines and to print
@@ -15,4 +16,4 @@
 including structs, slices, strings, maps,
 interfaces, and channels.
 
-To learn more about Go and GDB, see the [[https://golang.org/doc/debugging_with_gdb.html][Debugging with GDB]] article.
+To learn more about Go and GDB, see the [Debugging with GDB](https://golang.org/doc/debugging_with_gdb.html) article.
diff --git a/content/debugging-what-you-deploy.article b/content/debugging-what-you-deploy.article
index 4685715..79543a7 100644
--- a/content/debugging-what-you-deploy.article
+++ b/content/debugging-what-you-deploy.article
@@ -1,10 +1,11 @@
-Debugging what you deploy in Go 1.12
+# Debugging what you deploy in Go 1.12
 21 Mar 2019
 Tags: debug, technical
+Summary: Go 1.11 and Go 1.12 make significant progress toward allowing developers to debug the same optimized binaries that they deploy to production.
 
 David Chase
 
-* Introduction
+## Introduction
 
 Go 1.11 and Go 1.12 make significant progress toward allowing developers
 to debug the same optimized binaries that they deploy to production.
@@ -23,32 +24,32 @@
 optimized binaries (the default setting of the Go compiler).
 Improvements include
 
-- More accurate value inspection, in particular for arguments at function entry;
-- More precisely identifying statement boundaries so that stepping is less
-  jumpy and breakpoints more often land where the programmer expects;
-- And preliminary support for Delve to call Go functions (goroutines and
-  garbage collection make this trickier than it is in C and C++).
+  - More accurate value inspection, in particular for arguments at function entry;
+  - More precisely identifying statement boundaries so that stepping is less
+    jumpy and breakpoints more often land where the programmer expects;
+  - And preliminary support for Delve to call Go functions (goroutines and
+    garbage collection make this trickier than it is in C and C++).
 
-* Debugging optimized code with Delve
+## Debugging optimized code with Delve
 
-[[https://github.com/go-delve/delve][Delve]] is a debugger for Go on x86
+[Delve](https://github.com/go-delve/delve) is a debugger for Go on x86
 supporting both Linux and macOS.
 Delve is aware of goroutines and other Go features and provides one of the
 best Go debugging experiences.
-Delve is also the debugging engine behind [[https://www.jetbrains.com/go/][GoLand]],
-[[https://code.visualstudio.com/][VS Code]],
-and [[https://github.com/fatih/vim-go][Vim]].
+Delve is also the debugging engine behind [GoLand](https://www.jetbrains.com/go/),
+[VS Code](https://code.visualstudio.com/),
+and [Vim](https://github.com/fatih/vim-go).
 
-Delve normally rebuilds the code it is debugging with `-gcflags`"all=-N`-l"`,
+Delve normally rebuilds the code it is debugging with `-gcflags "all=-N -l"`,
 which disables inlining and most optimizations.
 To debug optimized code with delve, first build the optimized binary,
-then use `dlv`exec`your_program` to debug it.
+then use `dlv exec your_program` to debug it.
 Or, if you have a core file from a crash,
-you can examine it with `dlv`core`your_program`your_core`.
+you can examine it with `dlv core your_program your_core`.
 With 1.12 and the latest Delve releases, you should be able to examine many variables,
 even in optimized binaries.
 
-* Improved value inspection
+## Improved value inspection
 
 When debugging optimized binaries produced by Go 1.10,
 variable values were usually completely unavailable.
@@ -59,7 +60,7 @@
 can track variables as they move in and out of registers and reconstruct
 complex objects that are split across different registers and stack slots.
 
-* Improved stepping
+## Improved stepping
 
 This shows an example of stepping through a simple function in a debugger in 1.10,
 with flaws (skipped and repeated lines) highlighted by red arrows.
@@ -74,7 +75,7 @@
 As a result, in Go 1.12, stepping through this code stops on every line
 and does so in the order you would expect.
 
-* Function calls
+## Function calls
 
 Function call support in Delve is still under development, but simple cases work.  For example:
 
@@ -83,7 +84,7 @@
 	Values returned:
 		~r1: 8
 
-* The path forward
+## The path forward
 
 Go 1.12 is a step toward a better debugging experience for optimized binaries
 and we have plans to improve it even further.
@@ -102,13 +103,13 @@
 the order of stepping around loops, and generally trying to follow source
 order where possible.
 
-* A note on macOS support
+## A note on macOS support
 
 Go 1.11 started compressing debug information to reduce binary sizes.
 This is natively supported by Delve, but neither LLDB nor GDB support compressed
 debug info on macOS.
 If you are using LLDB or GDB, there are two workarounds:
 build binaries with `-ldflags=-compressdwarf=false`,
-or use [[https://godoc.org/golang.org/x/tools/cmd/splitdwarf][splitdwarf]]
-(`go`get`golang.org/x/tools/cmd/splitdwarf`) to decompress the debug information
+or use [splitdwarf](https://godoc.org/golang.org/x/tools/cmd/splitdwarf)
+(`go get golang.org/x/tools/cmd/splitdwarf`) to decompress the debug information
 in an existing binary.
diff --git a/content/defer-panic-and-recover.article b/content/defer-panic-and-recover.article
index 2c95aa3..e3773ba 100644
--- a/content/defer-panic-and-recover.article
+++ b/content/defer-panic-and-recover.article
@@ -1,10 +1,11 @@
-Defer, Panic, and Recover
+# Defer, Panic, and Recover
 4 Aug 2010
 Tags: defer, panic, recover, technical, function
+Summary: Go has the usual mechanisms for control flow: if, for, switch, goto. It also has the go statement to run code in a separate goroutine. Here I'd like to discuss some of the less common ones: defer, panic, and recover.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Go has the usual mechanisms for control flow:
 if, for, switch, goto.
@@ -12,7 +13,7 @@
 Here I'd like to discuss some of the less common ones:
 defer, panic, and recover.
 
-A *defer*statement* pushes a function call onto a list.
+A **defer statement** pushes a function call onto a list.
 The list of saved calls is executed after the surrounding function returns.
 Defer is commonly used to simplify functions that perform various clean-up actions.
 
@@ -64,7 +65,7 @@
 
 The behavior of defer statements is straightforward and predictable. There are three simple rules:
 
-1. _A_deferred_function's_arguments_are_evaluated_when_the_defer_statement_is_evaluated._
+1. _A deferred function's arguments are evaluated when the defer statement is evaluated._
 
 In this example, the expression "i" is evaluated when the Println call is deferred.
 The deferred call will print "0" after the function returns.
@@ -76,7 +77,7 @@
 	    return
 	}
 
-2. _Deferred_function_calls_are_executed_in_Last_In_First_Out_order_after_the_surrounding_function_returns._
+2. _Deferred function calls are executed in Last In First Out order after the surrounding function returns._
 
 This function prints "3210":
 
@@ -86,7 +87,7 @@
 	    }
 	}
 
-3. _Deferred_functions_may_read_and_assign_to_the_returning_function's_named_return_values._
+3. _Deferred functions may read and assign to the returning function's named return values._
 
 In this example, a deferred function increments the return value i _after_
 the surrounding function returns.
@@ -99,7 +100,7 @@
 
 This is convenient for modifying the error return value of a function; we will see an example of this shortly.
 
-*Panic* is a built-in function that stops the ordinary flow of control and begins _panicking_.
+**Panic** is a built-in function that stops the ordinary flow of control and begins _panicking_.
 When the function F calls panic, execution of F stops,
 any deferred functions in F are executed normally,
 and then F returns to its caller.
@@ -110,7 +111,7 @@
 They can also be caused by runtime errors,
 such as out-of-bounds array accesses.
 
-*Recover* is a built-in function that regains control of a panicking goroutine.
+**Recover** is a built-in function that regains control of a panicking goroutine.
 Recover is only useful inside deferred functions.
 During normal execution, a call to recover will return nil and have no other effect.
 If the current goroutine is panicking, a call to recover will capture the
@@ -189,19 +190,19 @@
 	panic PC=0x2a9cd8
 	[stack trace omitted]
 
-For a real-world example of *panic* and *recover*,
-see the [[https://golang.org/pkg/encoding/json/][json package]] from the
+For a real-world example of **panic** and **recover**,
+see the [json package](https://golang.org/pkg/encoding/json/) from the
 Go standard library.
 It encodes an interface with a set of recursive functions.
 If an error occurs when traversing the value,
 panic is called to unwind the stack to the top-level function call,
 which recovers from the panic and returns an appropriate error value (see
-the 'error' and 'marshal' methods of the encodeState type in [[https://golang.org/src/pkg/encoding/json/encode.go][encode.go]]).
+the 'error' and 'marshal' methods of the encodeState type in [encode.go](https://golang.org/src/pkg/encoding/json/encode.go)).
 
 The convention in the Go libraries is that even when a package uses panic internally,
 its external API still presents explicit error return values.
 
-Other uses of *defer* (beyond the file.Close example given earlier) include releasing a mutex:
+Other uses of **defer** (beyond the file.Close example given earlier) include releasing a mutex:
 
 	mu.Lock()
 	defer mu.Unlock()
diff --git a/content/developer-experience.article b/content/developer-experience.article
index 4122127..16889bf 100644
--- a/content/developer-experience.article
+++ b/content/developer-experience.article
@@ -1,9 +1,10 @@
-Introducing the Developer Experience Working Group
+# Introducing the Developer Experience Working Group
 10 Apr 2017
+Summary: Over the last several years, Go's audience has shifted from early adopters to mainstream users. Today, our users come from a wide variety of backgrounds, experiences, and expectations. The needs of users are growing faster than the Go project can currently address them. To streamline the experience for first-time Go users, we've created the Developer eXperience Working Group (DXWG).
 
 The Developer Experience Working Group
 
-* Introducing the Developer Experience Working Group
+##
 
 Over the last several years, Go's audience has shifted from early
 adopters to mainstream users. Today, our users come from a wide
@@ -14,11 +15,11 @@
 
 For the next three months, this group will work together on delivering:
 
-- improvements to the Go installation experience
-- better guidelines to help new users
-- guides on tooling and developer environments (editors and IDEs)
-- running user studies to systematically analyze and measure friction points
-- improvements to the [[https://tour.golang.org/][Go Tour]] and [[https://play.golang.org/][Go Playground]]
+  - improvements to the Go installation experience
+  - better guidelines to help new users
+  - guides on tooling and developer environments (editors and IDEs)
+  - running user studies to systematically analyze and measure friction points
+  - improvements to the [Go Tour](https://tour.golang.org/) and [Go Playground](https://play.golang.org/)
 
 A secondary goal of the working group is to better understand how to
 involve the Go community in charting Go’s future. We hope that working
@@ -35,5 +36,5 @@
 code, writing documentation, sharing feedback and experiences
 (user stories), reviewing contributions, and more. If you are
 interested in any of our current areas of focus, please subscribe to the
-[[https://groups.google.com/forum/#!forum/golang-devexp][golang-devexp]]
+[golang-devexp](https://groups.google.com/forum/#!forum/golang-devexp)
 mailing list.
diff --git a/content/docker.article b/content/docker.article
index 2ec5cc3..397431b 100644
--- a/content/docker.article
+++ b/content/docker.article
@@ -1,36 +1,37 @@
-Deploying Go servers with Docker
+# Deploying Go servers with Docker
 26 Sep 2014
+Summary: This week Docker [announced](https://blog.docker.com/2014/09/docker-hub-official-repos-announcing-language-stacks/) official base images for Go and other major languages, giving programmers a trusted and easy way to build containers for their Go programs.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-This week Docker [[https://blog.docker.com/2014/09/docker-hub-official-repos-announcing-language-stacks/][announced]]
+This week Docker [announced](https://blog.docker.com/2014/09/docker-hub-official-repos-announcing-language-stacks/)
 official base images for Go and other major languages,
 giving programmers a trusted and easy way to build containers for their Go programs.
 
 In this article we'll walk through a recipe for creating a Docker container for
 a simple Go web application and deploying that container to Google Compute Engine.
 If you're not familiar with Docker, you should read
-[[https://docs.docker.com/engine/understanding-docker/][Understanding Docker]]
+[Understanding Docker](https://docs.docker.com/engine/understanding-docker/)
 before reading on.
 
-* The demo app
+## The demo app
 
 For our demonstration we will use the
-[[https://godoc.org/github.com/golang/example/outyet][outyet]] program from the
-[[https://github.com/golang/example][Go examples repository]],
+[outyet](https://godoc.org/github.com/golang/example/outyet) program from the
+[Go examples repository](https://github.com/golang/example),
 a simple web server that reports whether the next version of Go has been released
-(designed to power sites like [[http://isgo1point4.outyet.org/][isgo1point4.outyet.org]]).
+(designed to power sites like [isgo1point4.outyet.org](http://isgo1point4.outyet.org/)).
 It has no dependencies outside the standard library and requires no additional
 data files at run time; for a web server, it's about as simple as it gets.
 
 Use "go get" to fetch and install outyet in your
-[[https://golang.org/doc/code.html#Workspaces][workspace]]:
+[workspace](https://golang.org/doc/code.html#Workspaces):
 
 	$ go get github.com/golang/example/outyet
 
-* Write a Dockerfile
+## Write a Dockerfile
 
 Replace a file named `Dockerfile` in the `outyet` directory with the following contents:
 
@@ -54,12 +55,12 @@
 
 This `Dockerfile` specifies how to construct a container that runs `outyet`,
 starting with the basic dependencies (a Debian system with Go installed;
-the [[https://registry.hub.docker.com/_/golang/][official `golang` docker image]]),
+the [official `golang` docker image](https://registry.hub.docker.com/_/golang/)),
 adding the `outyet` package source, building it, and then finally running it.
 
 The `ADD`, `RUN`, and `ENTRYPOINT` steps are common tasks for any Go project.
 To simplify this, there is an
-[[https://github.com/docker-library/golang/blob/9ff2ccca569f9525b023080540f1bb55f6b59d7f/1.3.1/onbuild/Dockerfile][`onbuild` variant]]
+[`onbuild` variant](https://github.com/docker-library/golang/blob/9ff2ccca569f9525b023080540f1bb55f6b59d7f/1.3.1/onbuild/Dockerfile)
 of the `golang` image that automatically copies the package source, fetches the
 application dependencies, builds the program, and configures it to run on
 startup.
@@ -69,7 +70,7 @@
 	FROM golang:onbuild
 	EXPOSE 8080
 
-* Build and run the image
+## Build and run the image
 
 Invoke Docker from the `outyet` package directory to build an image using the `Dockerfile`:
 
@@ -96,31 +97,31 @@
 
 (If your docker daemon is running on another machine (or in a virtual machine),
 you should replace `localhost` with the address of that machine. If you're
-using [[http://boot2docker.io/][boot2docker]] on OS X or Windows you can find
-that address with `boot2docker`ip`.)
+using [boot2docker](http://boot2docker.io/) on OS X or Windows you can find
+that address with `boot2docker ip`.)
 
 Now that we've verified that the image works, shut down the running container
 from another terminal window:
 
 	$ docker stop test
 
-* Create a repository on Docker Hub
+## Create a repository on Docker Hub
 
-[[https://hub.docker.com/][Docker Hub]], the container registry from which we
+[Docker Hub](https://hub.docker.com/), the container registry from which we
 pulled the `golang` image earlier, offers a feature called
-[[http://docs.docker.com/docker-hub/builds/][Automated Builds]] that builds
+[Automated Builds](http://docs.docker.com/docker-hub/builds/) that builds
 images from a GitHub or BitBucket repository.
 
-By committing [[https://github.com/golang/example/blob/master/outyet/Dockerfile][the Dockerfile]]
+By committing [the Dockerfile](https://github.com/golang/example/blob/master/outyet/Dockerfile)
 to the repository and creating an
-[[https://registry.hub.docker.com/u/adg1/outyet/][automated build]]
+[automated build](https://registry.hub.docker.com/u/adg1/outyet/)
 for it, anyone with Docker installed can download and run our image with a
 single command. (We will see the utility of this in the next section.)
 
 To set up an Automated Build, commit the Dockerfile to your repo on
-[[https://github.com/][GitHub]] or [[https://bitbucket.org/][BitBucket]],
+[GitHub](https://github.com/) or [BitBucket](https://bitbucket.org/),
 create an account on Docker Hub, and follow the instructions for
-[[http://docs.docker.com/docker-hub/builds/][creating an Automated Build]].
+[creating an Automated Build](http://docs.docker.com/docker-hub/builds/).
 
 When you're done, you can run your container using the name of the automated build:
 
@@ -128,15 +129,15 @@
 
 (Replace `goexample/outyet` with the name of the automated build you created.)
 
-* Deploy the container to Google Compute Engine
+## Deploy the container to Google Compute Engine
 
 Google provides
-[[https://developers.google.com/compute/docs/containers/container_vms][container-optimized Google Compute Engine images]]
+[container-optimized Google Compute Engine images](https://developers.google.com/compute/docs/containers/container_vms)
 that make it easy to spin up a virtual machine running an arbitrary Docker container.
 On startup, a program running on the instance reads a configuration file that
 specifies which container to run, fetches the container image, and runs it.
 
-Create a [[https://cloud.google.com/compute/docs/containers/container_vms#container_manifest][containers.yaml]]
+Create a [containers.yaml](https://cloud.google.com/compute/docs/containers/container_vms#container_manifest)
 file that specifies the docker image to run and the ports to expose:
 
 	version: v1beta2
@@ -152,7 +153,7 @@
 the default port for serving HTTP traffic. And, again, you should replace
 `goexample/outyet` with the name of your Automated Build.)
 
-Use the [[https://cloud.google.com/sdk/#Quick_Start][gcloud tool]]
+Use the [gcloud tool](https://cloud.google.com/sdk/#Quick_Start)
 to create a VM instance running the container:
 
 	$ gcloud compute instances create outyet \
@@ -176,7 +177,7 @@
 
 The `--zone` and `--machine-type` flags specify the zone in which to run the VM
 and the type of machine to run. (To see a list of machine types and the zones,
-run `gcloud`compute`machine-types`list`.)
+run `gcloud compute machine-types list`.)
 
 Once this has completed, the gcloud command should print some information about
 the instance. In the output, locate the `networkInterfaces` section to find the
@@ -185,17 +186,17 @@
 yet?" page.
 
 (To see what's happening on the new VM instance you can ssh into it with
-`gcloud`compute`ssh`outyet`. From there, try `sudo`docker`ps` to see which
+`gcloud compute ssh outyet`. From there, try `sudo docker ps` to see which
 Docker containers are running.)
 
-* Learn more
+## Learn more
 
 This is just the tip of the iceberg—there's a lot more you can do with Go, Docker, and Google Compute Engine.
 
-To learn more about Docker, see their [[https://docs.docker.com/][extensive documentation]].
+To learn more about Docker, see their [extensive documentation](https://docs.docker.com/).
 
-To learn more about Docker and Go, see the [[https://registry.hub.docker.com/_/golang/][official `golang` Docker Hub repository]] and Kelsey Hightower's [[https://medium.com/@kelseyhightower/optimizing-docker-images-for-static-binaries-b5696e26eb07][Optimizing Docker Images for Static Go Binaries]].
+To learn more about Docker and Go, see the [official `golang` Docker Hub repository](https://registry.hub.docker.com/_/golang/) and Kelsey Hightower's [Optimizing Docker Images for Static Go Binaries](https://medium.com/@kelseyhightower/optimizing-docker-images-for-static-binaries-b5696e26eb07).
 
-To learn more about Docker and [[http://cloud.google.com/compute][Google Compute Engine]],
-see the [[https://cloud.google.com/compute/docs/containers/container_vms][Container-optimized VMs page]]
-and the [[https://registry.hub.docker.com/u/google/docker-registry/][google/docker-registry Docker Hub repository]].
+To learn more about Docker and [Google Compute Engine](http://cloud.google.com/compute),
+see the [Container-optimized VMs page](https://cloud.google.com/compute/docs/containers/container_vms)
+and the [google/docker-registry Docker Hub repository](https://registry.hub.docker.com/u/google/docker-registry/).
diff --git a/content/error-handling-and-go.article b/content/error-handling-and-go.article
index 07d84d5..709b016 100644
--- a/content/error-handling-and-go.article
+++ b/content/error-handling-and-go.article
@@ -1,10 +1,11 @@
-Error handling and Go
+# Error handling and Go
 12 Jul 2011
 Tags: error, interface, type, technical
+Summary: If you have written any Go code you have probably encountered the built-in `error` type. Go code uses `error` values to indicate an abnormal state. For example, the `os.Open` function returns a non-nil `error` value when it fails to open a file.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 If you have written any Go code you have probably encountered the built-in `error` type.
 Go code uses `error` values to indicate an abnormal state.
@@ -16,17 +17,17 @@
 The following code uses `os.Open` to open a file.
 If an error occurs it calls `log.Fatal` to print the error message and stop.
 
-	    f, err := os.Open("filename.ext")
-	    if err != nil {
-	        log.Fatal(err)
-	    }
-	    // do something with the open *File f
+	f, err := os.Open("filename.ext")
+	if err != nil {
+	    log.Fatal(err)
+	}
+	// do something with the open *File f
 
 You can get a lot done in Go knowing just this about the `error` type,
 but in this article we'll take a closer look at `error` and discuss some
 good practices for error handling in Go.
 
-* The error type
+## The error type
 
 The `error` type is an interface type. An `error` variable represents any
 value that can describe itself as a string.
@@ -37,10 +38,10 @@
 	}
 
 The `error` type, as with all built in types,
-is [[https://golang.org/doc/go_spec.html#Predeclared_identifiers][predeclared]]
-in the [[https://golang.org/doc/go_spec.html#Blocks][universe block]].
+is [predeclared](https://golang.org/doc/go_spec.html#Predeclared_identifiers)
+in the [universe block](https://golang.org/doc/go_spec.html#Blocks).
 
-The most commonly-used `error` implementation is the [[https://golang.org/pkg/errors/][errors]]
+The most commonly-used `error` implementation is the [errors](https://golang.org/pkg/errors/)
 package's unexported `errorString` type.
 
 	// errorString is a trivial implementation of error.
@@ -76,12 +77,12 @@
 square root of...") by calling the `error`'s `Error` method,
 or by just printing it:
 
-	    f, err := Sqrt(-1)
-	    if err != nil {
-	        fmt.Println(err)
-	    }
+	f, err := Sqrt(-1)
+	if err != nil {
+	    fmt.Println(err)
+	}
 
-The [[https://golang.org/pkg/fmt/][fmt]] package formats an `error` value by calling its `Error()`string` method.
+The [fmt](https://golang.org/pkg/fmt/) package formats an `error` value by calling its `Error() string` method.
 
 It is the error implementation's responsibility to summarize the context.
 The error returned by `os.Open` formats as "open /etc/passwd:
@@ -92,9 +93,9 @@
 It formats a string according to `Printf`'s rules and returns it as an `error`
 created by `errors.New`.
 
-	    if f < 0 {
-	        return 0, fmt.Errorf("math: square root of negative number %g", f)
-	    }
+	if f < 0 {
+	    return 0, fmt.Errorf("math: square root of negative number %g", f)
+	}
 
 In many cases `fmt.Errorf` is good enough,
 but since `error` is an interface, you can use arbitrary data structures as error values,
@@ -111,12 +112,12 @@
 	    return fmt.Sprintf("math: square root of negative number %g", float64(f))
 	}
 
-A sophisticated caller can then use a [[https://golang.org/doc/go_spec.html#Type_assertions][type assertion]]
+A sophisticated caller can then use a [type assertion](https://golang.org/doc/go_spec.html#Type_assertions)
 to check for a `NegativeSqrtError` and handle it specially,
 while callers that just pass the error to `fmt.Println` or `log.Fatal` will
 see no change in behavior.
 
-As another example, the [[https://golang.org/pkg/encoding/json/][json]]
+As another example, the [json](https://golang.org/pkg/encoding/json/)
 package specifies a `SyntaxError` type that the `json.Decode` function returns
 when it encounters a syntax error parsing a JSON blob.
 
@@ -130,20 +131,20 @@
 The `Offset` field isn't even shown in the default formatting of the error,
 but callers can use it to add file and line information to their error messages:
 
-	    if err := dec.Decode(&val); err != nil {
-	        if serr, ok := err.(*json.SyntaxError); ok {
-	            line, col := findLine(f, serr.Offset)
-	            return fmt.Errorf("%s:%d:%d: %v", f.Name(), line, col, err)
-	        }
-	        return err
+	if err := dec.Decode(&val); err != nil {
+	    if serr, ok := err.(*json.SyntaxError); ok {
+	        line, col := findLine(f, serr.Offset)
+	        return fmt.Errorf("%s:%d:%d: %v", f.Name(), line, col, err)
 	    }
+	    return err
+	}
 
-(This is a slightly simplified version of some [[https://github.com/camlistore/go4/blob/03efcb870d84809319ea509714dd6d19a1498483/jsonconfig/eval.go#L123-L135][actual code]]
-from the [[http://camlistore.org][Camlistore]] project.)
+(This is a slightly simplified version of some [actual code](https://github.com/camlistore/go4/blob/03efcb870d84809319ea509714dd6d19a1498483/jsonconfig/eval.go#L123-L135)
+from the [Camlistore](http://camlistore.org) project.)
 
 The `error` interface requires only a `Error` method;
 specific error implementations might have additional methods.
-For instance, the [[https://golang.org/pkg/net/][net]] package returns errors of type `error`,
+For instance, the [net](https://golang.org/pkg/net/) package returns errors of type `error`,
 following the usual convention, but some of the error implementations have
 additional methods defined by the `net.Error` interface:
 
@@ -160,15 +161,15 @@
 For instance, a web crawler might sleep and retry when it encounters a temporary
 error and give up otherwise.
 
-	        if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
-	            time.Sleep(1e9)
-	            continue
-	        }
-	        if err != nil {
-	            log.Fatal(err)
-	        }
+	if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
+	    time.Sleep(1e9)
+	    continue
+	}
+	if err != nil {
+	    log.Fatal(err)
+	}
 
-* Simplifying repetitive error handling
+## Simplifying repetitive error handling
 
 In Go, error handling is important. The language's design and conventions
 encourage you to explicitly check for errors where they occur (as distinct
@@ -176,7 +177,7 @@
 In some cases this makes Go code verbose,
 but fortunately there are some techniques you can use to minimize repetitive error handling.
 
-Consider an [[https://cloud.google.com/appengine/docs/go/][App Engine]]
+Consider an [App Engine](https://cloud.google.com/appengine/docs/go/)
 application with an HTTP handler that retrieves a record from the datastore
 and formats it with a template.
 
@@ -222,7 +223,7 @@
 	}
 
 This is simpler than the original version,
-but the [[https://golang.org/pkg/net/http/][http]] package doesn't understand
+but the [http](https://golang.org/pkg/net/http/) package doesn't understand
 functions that return `error`.
 To fix this we can implement the `http.Handler` interface's `ServeHTTP`
 method on `appHandler`:
@@ -237,7 +238,7 @@
 returned error (if any) to the user.
 Notice that the method's receiver, `fn`, is a function.
 (Go can do that!) The method invokes the function by calling the receiver
-in the expression `fn(w,`r)`.
+in the expression `fn(w, r)`.
 
 Now when registering `viewRecord` with the http package we use the `Handle`
 function (instead of `HandleFunc`) as `appHandler` is an `http.Handler`
@@ -266,7 +267,7 @@
 	type appHandler func(http.ResponseWriter, *http.Request) *appError
 
 (It's usually a mistake to pass back the concrete type of an error rather than `error`,
-for reasons discussed in [[https://golang.org/doc/go_faq.html#nil_error][the Go FAQ]],
+for reasons discussed in [the Go FAQ](https://golang.org/doc/go_faq.html#nil_error),
 but it's the right thing to do here because `ServeHTTP` is the only place
 that sees the value and uses its contents.)
 
@@ -304,20 +305,20 @@
 
 It doesn't end there; we can further improve the error handling in our application. Some ideas:
 
-- give the error handler a pretty HTML template,
+  - give the error handler a pretty HTML template,
 
-- make debugging easier by writing the stack trace to the HTTP response when the user is an administrator,
+  - make debugging easier by writing the stack trace to the HTTP response when the user is an administrator,
 
-- write a constructor function for `appError` that stores the stack trace for easier debugging,
+  - write a constructor function for `appError` that stores the stack trace for easier debugging,
 
-- recover from panics inside the `appHandler`,
-  logging the error to the console as "Critical," while telling the user "a
-  serious error has occurred." This is a nice touch to avoid exposing the
-  user to inscrutable error messages caused by programming errors.
-  See the [[https://golang.org/doc/articles/defer_panic_recover.html][Defer, Panic, and Recover]]
-  article for more details.
+  - recover from panics inside the `appHandler`,
+    logging the error to the console as "Critical," while telling the user "a
+    serious error has occurred." This is a nice touch to avoid exposing the
+    user to inscrutable error messages caused by programming errors.
+    See the [Defer, Panic, and Recover](https://golang.org/doc/articles/defer_panic_recover.html)
+    article for more details.
 
-* Conclusion
+## Conclusion
 
 Proper error handling is an essential requirement of good software.
 By employing the techniques described in this post you should be able to
diff --git a/content/errors-are-values.article b/content/errors-are-values.article
index 0876d7a..2d78aa7 100644
--- a/content/errors-are-values.article
+++ b/content/errors-are-values.article
@@ -1,9 +1,10 @@
-Errors are values
+# Errors are values
 12 Jan 2015
+Summary: A common point of discussion among Go programmers, especially those new to the language, is how to handle errors. The conversation often turns into a lament at the number of times the sequence
 
 Rob Pike
 
-* Introduction
+##
 
 A common point of discussion among Go programmers,
 especially those new to the language, is how to handle errors.
@@ -33,7 +34,7 @@
 
 Regardless of whether this explanation fits,
 it is clear that these Go programmers miss a fundamental point about errors:
-_Errors_are_values._
+_Errors are values._
 
 Values can be programmed, and since errors are values, errors can be programmed.
 
@@ -43,8 +44,8 @@
 eliminating much of the boilerplate that arises if every error is checked with a rote if statement.
 
 Here's a simple example from the `bufio` package's
-[[https://golang.org/pkg/bufio/#Scanner][`Scanner`]] type.
-Its [[https://golang.org/pkg/bufio/#Scanner.Scan][`Scan`]] method performs the underlying I/O,
+[`Scanner`](https://golang.org/pkg/bufio/#Scanner) type.
+Its [`Scan`](https://golang.org/pkg/bufio/#Scanner.Scan) method performs the underlying I/O,
 which can of course lead to an error.
 Yet the `Scan` method does not expose an error at all.
 Instead, it returns a boolean, and a separate method, to be run at the end of the scan,
@@ -86,7 +87,7 @@
 
 Under the covers what's happening, of course,
 is that as soon as `Scan` encounters an I/O error, it records it and returns `false`.
-A separate method, [[https://golang.org/pkg/bufio/#Scanner.Err][`Err`]],
+A separate method, [`Err`](https://golang.org/pkg/bufio/#Scanner.Err),
 reports the error value when the client asks.
 Trivial though this is, it's not the same as putting
 
@@ -102,7 +103,7 @@
 it's about using the language to handle errors with grace.
 
 The topic of repetitive error-checking code arose when I attended the autumn 2014 GoCon in Tokyo.
-An enthusiastic gopher, who goes by [[https://twitter.com/jxck_][`@jxck_`]] on Twitter,
+An enthusiastic gopher, who goes by [`@jxck_`](https://twitter.com/jxck_) on Twitter,
 echoed the familiar lament about error checking.
 He had some code that looked schematically like this:
 
@@ -198,12 +199,12 @@
 And much more.
 
 In fact, this pattern appears often in the standard library.
-The [[https://golang.org/pkg/archive/zip/][`archive/zip`]] and
-[[https://golang.org/pkg/net/http/][`net/http`]] packages use it.
-More salient to this discussion, the [[https://golang.org/pkg/bufio/][`bufio` package's `Writer`]]
+The [`archive/zip`](https://golang.org/pkg/archive/zip/) and
+[`net/http`](https://golang.org/pkg/net/http/) packages use it.
+More salient to this discussion, the [`bufio` package's `Writer`](https://golang.org/pkg/bufio/)
 is actually an implementation of the `errWriter` idea.
 Although `bufio.Writer.Write` returns an error,
-that is mostly about honoring the [[https://golang.org/pkg/io/#Writer][`io.Writer`]] interface.
+that is mostly about honoring the [`io.Writer`](https://golang.org/pkg/io/#Writer) interface.
 The `Write` method of `bufio.Writer` behaves just like our `errWriter.write`
 method above, with `Flush` reporting the error, so our example could be written like this:
 
@@ -231,5 +232,5 @@
 
 But remember: Whatever you do, always check your errors!
 
-Finally, for the full story of my interaction with @jxck_, including a little video he recorded,
-visit [[http://jxck.hatenablog.com/entry/golang-error-handling-lesson-by-rob-pike][his blog]].
+Finally, for the full story of my interaction with @jxck\_, including a little video he recorded,
+visit [his blog](http://jxck.hatenablog.com/entry/golang-error-handling-lesson-by-rob-pike).
diff --git a/content/examples.article b/content/examples.article
index dc24423..16614d3 100644
--- a/content/examples.article
+++ b/content/examples.article
@@ -1,12 +1,13 @@
-Testable Examples in Go
+# Testable Examples in Go
 7 May 2015
 Tags: godoc, testing
+Summary: Godoc [examples](https://golang.org/pkg/testing/#hdr-Examples) are snippets of Go code that are displayed as package documentation and that are verified by running them as tests. They can also be run by a user visiting the godoc web page for the package and clicking the associated "Run" button.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-Godoc [[https://golang.org/pkg/testing/#hdr-Examples][examples]] are snippets of
+Godoc [examples](https://golang.org/pkg/testing/#hdr-Examples) are snippets of
 Go code that are displayed as package documentation and that are verified by
 running them as tests.
 They can also be run by a user visiting the godoc web page for the package
@@ -16,12 +17,12 @@
 will not go out of date as the API changes.
 
 The standard library includes many such examples
-(see the [[https://golang.org/pkg/strings/#Contains][`strings` package]],
+(see the [`strings` package](https://golang.org/pkg/strings/#Contains),
 for instance).
 
 This article explains how to write your own example functions.
 
-* Examples are tests
+## Examples are tests
 
 Examples are compiled (and optionally executed) as part of a package's test
 suite.
@@ -31,8 +32,8 @@
 Unlike normal test functions, though, example functions take no arguments
 and begin with the word `Example` instead of `Test`.
 
-The [[https://godoc.org/github.com/golang/example/stringutil/][`stringutil` package]]
-is part of the [[https://github.com/golang/example][Go example repository]].
+The [`stringutil` package](https://godoc.org/github.com/golang/example/stringutil/)
+is part of the [Go example repository](https://github.com/golang/example).
 Here's an example that demonstrates its `Reverse` function:
 
 	package stringutil_test
@@ -65,7 +66,7 @@
 	PASS
 	ok  	github.com/golang/example/stringutil	0.009s
 
-* Output comments
+## Output comments
 
 What does it mean that the `ExampleReverse` function "passes"?
 
@@ -110,7 +111,7 @@
 run as unit tests, such as that which accesses the network,
 while guaranteeing the example at least compiles.
 
-* Example function names
+## Example function names
 
 Godoc uses a naming convention to associate an example function with a
 package-level identifier.
@@ -130,11 +131,11 @@
 	func ExampleReverse_second()
 	func ExampleReverse_third()
 
-* Larger examples
+## Larger examples
 
 Sometimes we need more than just a function to write a good example.
 
-For instance, to demonstrate the [[https://golang.org/pkg/sort/][`sort` package]]
+For instance, to demonstrate the [`sort` package](https://golang.org/pkg/sort/)
 we should show an implementation of `sort.Interface`.
 Since methods cannot be declared inside a function body, the example must
 include some context in addition to the example function.
@@ -189,10 +190,10 @@
 	}
 
 A package can contain multiple whole file examples; one example per file.
-Take a look at the [[https://golang.org/src/sort/][`sort` package's source code]]
+Take a look at the [`sort` package's source code](https://golang.org/src/sort/)
 to see this in practice.
 
-* Conclusion
+## Conclusion
 
 Godoc examples are a great way to write and maintain code as documentation.
 They also present editable, working, runnable examples your users can build on.
diff --git a/content/experiment.article b/content/experiment.article
index 7255f3e..d93e976 100644
--- a/content/experiment.article
+++ b/content/experiment.article
@@ -1,10 +1,11 @@
-Experiment, Simplify, Ship
-01 Aug 2019
+# Experiment, Simplify, Ship
+1 Aug 2019
 Tags: community, go2, proposals
+Summary: This is the blog post version of my talk last week at Gophercon 2019.
 
 Russ Cox
 
-* Introduction
+## Introduction
 
 This is the blog post version of my talk last week at Gophercon 2019.
 
@@ -34,13 +35,13 @@
 And so on.
 And so on.
 
-* The Four R’s of Simplifying
+## The Four R’s of Simplifying
 
 During this process, there are four main ways that we can simplify
 the overall experience of writing Go programs:
 reshaping, redefining, removing, and restricting.
 
-*Simplify*by*Reshaping*
+**Simplify by Reshaping**
 
 The first way we simplify is by reshaping what exists into a new form,
 one that ends up being simpler overall.
@@ -94,7 +95,7 @@
 The new structure also created space for other interesting experiments,
 which we’ll see later.
 
-*Simplify*by*Redefining*
+**Simplify by Redefining**
 
 A second way we simplify is by redefining
 functionality we already have,
@@ -117,7 +118,7 @@
 	var more string
 	b = append(b, more...) // ok later
 
-*Simplify*by*Removing*
+**Simplify by Removing**
 
 A third way we simplify is by removing functionality
 when it has turned out to be less useful
@@ -142,7 +143,7 @@
 making it confusing to need to decide which form to use.
 Removing them simplified the language without reducing its power.
 
-*Simplify*by*Restricting*
+**Simplify by Restricting**
 
 We can also simplify by restricting what is allowed.
 From day one, Go has restricted the encoding of Go source files:
@@ -163,7 +164,7 @@
 and led to successful experiments like
 `goimports`, `gorename`, and many others.
 
-* Go Development Process
+## Go Development Process
 
 This cycle of experiment and simplify is a good model for what we’ve been doing the past ten years.
 but it has a problem:
@@ -229,7 +230,7 @@
 of what will be shipping soon in Go 1.13
 for error handling.
 
-* Errors
+## Errors
 
 It is hard enough to write a program
 that works the right way in all cases
@@ -250,7 +251,7 @@
 with the technical detour I promised focusing
 on the Go 1.13 error value changes.
 
-*Error*Values*
+**Error Values**
 
 Error values had to start somewhere.
 Here is the `Read` function from the first version of the `os` package:
@@ -262,7 +263,7 @@
 
 There was no `File` type yet, and also no error type.
 `Read` and the other functions in the package
-returned an `errno`int64` directly from the underlying Unix system call.
+returned an `errno int64` directly from the underlying Unix system call.
 
 This code was checked in on September 10, 2008 at 12:14pm.
 Like everything back then, it was an experiment,
@@ -308,13 +309,13 @@
 and as a result we have experimented a lot with how
 best to implement and use errors.
 
-*Errors*Are*Values*
+**Errors Are Values**
 
 Making `error` a simple interface
 and allowing many different implementations
 means we have the entire Go language
 available to define and inspect errors.
-We like to say that [[https://blog.golang.org/errors-are-values][errors are values]],
+We like to say that [errors are values](https://blog.golang.org/errors-are-values),
 the same as any other Go value.
 
 Here’s an example.
@@ -341,7 +342,7 @@
 In this case, on this system, `ECONNREFUSED` is number 61.
 Code that gets an error from a function
 can test whether the error is `ECONNREFUSED`
-using ordinary [[https://golang.org/ref/spec#Comparison_operators][value equality]].
+using ordinary [value equality](https://golang.org/ref/spec#Comparison_operators).
 
 Moving up a level,
 in package `os`,
@@ -430,7 +431,7 @@
 		return err == syscall.EADDRNOTAVAIL
 	}
 
-A [[https://golang.org/ref/spec#Type_assertions][type assertion]] peels away any `net.OpError` wrapping.
+A [type assertion](https://golang.org/ref/spec#Type_assertions) peels away any `net.OpError` wrapping.
 And then a second type assertion peels away any `os.SyscallError` wrapping.
 And then the function checks the unwrapped error for equality with `EADDRNOTAVAIL`.
 
@@ -451,11 +452,11 @@
 additional functionality that an error might provide,
 leading to many packages,
 such as
-[[https://godoc.org/github.com/pkg/errors][github.com/pkg/errors]],
-[[https://godoc.org/gopkg.in/errgo.v2][gopkg.in/errgo.v2]],
-[[https://godoc.org/github.com/hashicorp/errwrap][github.com/hashicorp/errwrap]],
-[[https://godoc.org/upspin.io/errors][upspin.io/errors]],
-[[https://godoc.org/github.com/spacemonkeygo/errors][github.com/spacemonkeygo/errors]],
+[github.com/pkg/errors](https://godoc.org/github.com/pkg/errors),
+[gopkg.in/errgo.v2](https://godoc.org/gopkg.in/errgo.v2),
+[github.com/hashicorp/errwrap](https://godoc.org/github.com/hashicorp/errwrap),
+[upspin.io/errors](https://godoc.org/upspin.io/errors),
+[github.com/spacemonkeygo/errors](https://godoc.org/github.com/spacemonkeygo/errors),
 and more.
 
 One problem with unconstrained experimentation,
@@ -467,7 +468,7 @@
 in the form of agreed-upon optional interfaces,
 so that different implementations could interoperate.
 
-*Unwrap*
+**Unwrap**
 
 The most commonly-added functionality
 in these packages is some method that can be
@@ -561,7 +562,7 @@
 	   ...
 	}
 
-*To*Unwrap*Or*Not*To*Unwrap?*
+**To Unwrap Or Not To Unwrap?**
 
 Whether to make it possible to unwrap an error is an API decision,
 the same way that whether to export a struct field is an API decision.
@@ -610,11 +611,11 @@
 but implementations with unexported error fields do not,
 and existing uses of `fmt.Errorf` with `%v` still use `%v`, not `%w`.
 
-*Error*Value*Printing*(Abandoned)*
+**Error Value Printing (Abandoned)**
 
 Along with the design draft for Unwrap,
 we also published a
-[[https://golang.org/design/go2draft-error-printing][design draft for an optional method for richer error printing]],
+[design draft for an optional method for richer error printing](https://golang.org/design/go2draft-error-printing),
 including stack frame information
 and support for localized, translated errors.
 
@@ -641,14 +642,14 @@
 As a result of this community discussion,
 we abandoned this printing design.
 
-*Error*Syntax*
+**Error Syntax**
 
 That was error values.
 Let’s look briefly at error syntax,
 another abandoned experiment.
 
 Here is some code from
-[[https://go.googlesource.com/go/+/go1.12/src/compress/lzw/writer.go#209][`compress/lzw/writer.go`]] in the standard library:
+[`compress/lzw/writer.go`](https://go.googlesource.com/go/+/go1.12/src/compress/lzw/writer.go#209) in the standard library:
 
 	// Write the savedCode if valid.
 	if e.savedCode != invalidCode {
@@ -675,7 +676,7 @@
 If you were debugging this code, how long would it take to notice that?
 
 At Gophercon last year we
-[[https://golang.org/design/go2draft-error-handling][presented a draft design]]
+[presented a draft design](https://golang.org/design/go2draft-error-handling)
 for a new control flow construct marked by the keyword `check`.
 `Check` consumes the error result from a function call or expression.
 If the error is non-nil, the `check` returns that error.
@@ -723,18 +724,18 @@
 
 In essence, `check` was a short way to write the `if` statement,
 and `handle` was like
-[[https://golang.org/ref/spec#Defer_statements][`defer`]] but only for error return paths.
+[`defer`](https://golang.org/ref/spec#Defer_statements) but only for error return paths.
 In contrast to exceptions in other languages,
 this design retained Go’s important property that
 every potential failing call was marked explicitly in the code,
-now using the `check` keyword instead of `if`err`!=`nil`.
+now using the `check` keyword instead of `if err != nil`.
 
 The big problem with this design
 was that `handle` overlapped too much,
 and in confusing ways, with `defer`.
 
 In May we posted
-[[https://golang.org/design/32437-try-builtin][a new design with three simplifications]]:
+[a new design with three simplifications](https://golang.org/design/32437-try-builtin):
 to avoid the confusion with `defer`, the design dropped `handle` in favor of just using `defer`;
 to match a similar idea in Rust and Swift, the design renamed `check` to `try`;
 and to allow experimentation in a way that existing parsers like `gofmt` would recognize,
@@ -777,7 +778,7 @@
 That’s everything about error handling,
 which was one of the main focuses for this year.
 
-* Generics
+## Generics
 
 Now for something a little less controversial: generics.
 
@@ -820,7 +821,7 @@
 
 Last year we started exploring and experimenting again,
 and we presented a
-[[https://github.com/golang/proposal/blob/master/design/go2draft-contracts.md][new design]],
+[new design](https://github.com/golang/proposal/blob/master/design/go2draft-contracts.md),
 based on the idea of a contract,
 at Gophercon last summer.
 We’ve continued to experiment and simplify,
@@ -838,15 +839,15 @@
 At Gophercon 2019, Ian Lance Taylor talked about
 why we might want to add generics to Go
 and briefly previewed the latest design draft.
-For details, see his blog post “[[https://blog.golang.org/why-generics][Why Generics?]]”
+For details, see his blog post “[Why Generics?](https://blog.golang.org/why-generics)”
 
-* Dependencies
+## Dependencies
 
 The third big topic we identified for Go 2 was dependency management.
 
 In 2010 we published a tool called `goinstall`,
 which we called
-“[[https://groups.google.com/forum/#!msg/golang-nuts/8JFwR3ESjjI/cy7qZzN7Lw4J][an experiment in package installation]].”
+“[an experiment in package installation](https://groups.google.com/forum/#!msg/golang-nuts/8JFwR3ESjjI/cy7qZzN7Lw4J).”
 It downloaded dependencies and stored them in your
 Go distribution tree, in GOROOT.
 
@@ -863,7 +864,7 @@
 but simplified Go development overall,
 by separating your Go distribution from your Go libraries.
 
-*Compatibility*
+**Compatibility**
 
 The `goinstall` experiment intentionally left out
 an explicit concept of package versioning.
@@ -871,7 +872,7 @@
 We did this so we could focus on the other
 design problems for package installation.
 
-`Goinstall` became `go`get` as part of Go 1.
+`Goinstall` became `go get` as part of Go 1.
 When people asked about versions,
 we encouraged them to experiment by
 creating additional tools, and they did.
@@ -879,7 +880,7 @@
 to provide their USERS
 with the same backwards compatibility
 we did for the Go 1 libraries.
-Quoting [[https://golang.org/doc/faq#get_version][the Go FAQ]]:
+Quoting [the Go FAQ](https://golang.org/doc/faq#get_version):
 
 .html experiment/div-quote.html
 
@@ -905,7 +906,7 @@
 One of the most interesting experiments
 was started by Gustavo Niemeyer.
 He created a Git redirector called
-[[https://gopkg.in][`gopkg.in`]],
+[`gopkg.in`](https://gopkg.in),
 which provided different import paths
 for different API versions,
 to help package authors
@@ -915,21 +916,21 @@
 
 For example,
 the Go source code in the GitHub repository
-[[https://github.com/go-yaml/yaml][go-yaml/yaml]]
+[go-yaml/yaml](https://github.com/go-yaml/yaml)
 has different APIs
 in the v1 and v2 semantic version tags.
 The `gopkg.in` server provides these with
 different import paths
-[[https://godoc.org/gopkg.in/yaml.v1][gopkg.in/yaml.v1]]
+[gopkg.in/yaml.v1](https://godoc.org/gopkg.in/yaml.v1)
 and
-[[https://godoc.org/gopkg.in/yaml.v2][gopkg.in/yaml.v2]].
+[gopkg.in/yaml.v2](https://godoc.org/gopkg.in/yaml.v2).
 
 The convention of providing backwards compatibility,
 so that a newer version of a package can be used
 in place of an older version,
-is what makes `go`get`’s very simple rule—“always download the latest copy”—work well even today.
+is what makes `go get`’s very simple rule—“always download the latest copy”—work well even today.
 
-*Versioning*And*Vendoring*
+**Versioning And Vendoring**
 
 But in production contexts you need to be more precise
 about dependency versions, to make builds reproducible.
@@ -958,7 +959,7 @@
 Shipping vendor directories in the `go` command
 led to more experimentation with vendoring itself,
 and we realized that we had introduced a few problems.
-The most serious was that we lost _package_uniqueness_.
+The most serious was that we lost _package uniqueness_.
 Before, during any given build,
 an import path
 might appear in lots of different packages,
@@ -998,7 +999,7 @@
 likely breaking their respective users.
 Convergence did not happen.
 
-*Dep*
+**Dep**
 
 At Gophercon in 2016, we started an effort
 to define a single tool to manage dependencies.
@@ -1069,7 +1070,7 @@
 The dep experiment helped us
 appreciate that convention better,
 and we gave it a name:
-the _import_compatibility_rule_:
+the _import compatibility rule_:
 
 .html experiment/div-quote.html
 
@@ -1078,7 +1079,7 @@
 
 .html experiment/div-end.html
 
-*Go*Modules*
+**Go Modules**
 
 We took what worked well in the dep experiment
 and what we learned about what didn’t work well,
@@ -1099,7 +1100,7 @@
 Go modules are now integrated with the `go` command,
 which avoids needing to copy around vendor directories at all.
 
-*Replacing*GOPATH*
+**Replacing GOPATH**
 
 With Go modules comes the end of GOPATH as a
 global name space.
@@ -1144,21 +1145,21 @@
 Everything needs updating for this new convention.
 
 Most development tools use the
-[[https://godoc.org/go/build][`go/build`]] package to find and load Go source code.
+[`go/build`](https://godoc.org/go/build) package to find and load Go source code.
 We’ve kept that package working,
 but the API did not anticipate modules,
 and the workarounds we added to avoid API changes
 are slower than we’d like.
 We’ve published a replacement,
-[[https://godoc.org/golang.org/x/tools/go/packages][`golang.org/x/tools/go/packages`]].
+[`golang.org/x/tools/go/packages`](https://godoc.org/golang.org/x/tools/go/packages).
 Developer tools should now use that instead.
 It supports both GOPATH and Go modules,
 and it is faster and easier to use.
 In a release or two we may move it into the standard library,
-but for now [[https://godoc.org/golang.org/x/tools/go/packages][`golang.org/x/tools/go/packages`]]
+but for now [`golang.org/x/tools/go/packages`](https://godoc.org/golang.org/x/tools/go/packages)
 is stable and ready for use.
 
-*Go*Module*Proxies*
+**Go Module Proxies**
 
 One of the ways modules simplify Go development
 is by separating the concept of a group of packages
@@ -1167,7 +1168,7 @@
 
 When we talked to Go users about dependencies,
 almost everyone using Go at their companies
-asked how to route `go`get` package fetches
+asked how to route `go get` package fetches
 through their own servers,
 to better control what code can be used.
 And even open-source developers were concerned
@@ -1186,18 +1187,18 @@
 Companies can now easily run their own module proxy,
 with custom rules about what is allowed
 and where cached copies are stored.
-The open-source [[https://docs.gomods.io][Athens project]] has built just such a proxy,
+The open-source [Athens project](https://docs.gomods.io) has built just such a proxy,
 and Aaron Schlesinger gave a talk about it at Gophercon 2019.
 (We’ll add a link here when the video becomes available.)
 
 And for individual developers and open source teams,
-the Go team at Google has [[https://groups.google.com/forum/#!topic/golang-announce/0wo8cOhGuAI][launched a proxy]] that serves
+the Go team at Google has [launched a proxy](https://groups.google.com/forum/#!topic/golang-announce/0wo8cOhGuAI) that serves
 as a public mirror of all open-source Go packages,
 and Go 1.13 will use that proxy by default when in module mode.
 Katie Hockman gave a talk about this system at Gophercon 2019.
 (We’ll add a link here when the video becomes available.)
 
-*Go*Modules*Status*
+**Go Modules Status**
 
 Go 1.11 introduced modules as an experimental, opt-in preview.
 We keep experimenting and simplifying.
@@ -1229,10 +1230,10 @@
 And if you can’t,
 please let us know what’s not working for you
 or what’s too complex,
-by [[https://golang.org/issue/new][filing a bug report]],
+by [filing a bug report](https://golang.org/issue/new),
 and we will experiment and simplify.
 
-* Tools
+## Tools
 
 Error handling, generics, and dependency management
 are going to take a few more years at least,
@@ -1265,7 +1266,7 @@
 development helpers into a single tool,
 now called `gopls` (pronounced “go, please”).
 `Gopls` speaks the
-[[https://langserver.org/][Language Server Protocol, LSP]],
+[Language Server Protocol, LSP](https://langserver.org/),
 and works with any integrated development environment
 or text editor with LSP support,
 which is essentially everything at this point.
@@ -1277,10 +1278,10 @@
 Rebecca Stambler gave a talk with more details about `gopls` and IDEs at Gophercon 2019.
 (We’ll add a link here when the video becomes available.)
 
-After `gopls`, we also have ideas for reviving `go`fix` in an
-extensible way and for making `go`vet` even more helpful.
+After `gopls`, we also have ideas for reviving `go fix` in an
+extensible way and for making `go vet` even more helpful.
 
-* Coda
+## Coda
 
 .html experiment/div-indent.html
 .image experiment/expsimp2.png _ 326
diff --git a/content/first-class-functions-in-go-and-new-go.article b/content/first-class-functions-in-go-and-new-go.article
index 29cab3a..a6f6728 100644
--- a/content/first-class-functions-in-go-and-new-go.article
+++ b/content/first-class-functions-in-go-and-new-go.article
@@ -1,17 +1,18 @@
-"First Class Functions in Go"
+# "First Class Functions in Go"
 30 Jun 2011
 Tags: codewalk, function, technical
+Summary: Programmers new to Go are often surprised by its support for function types, functions as values, and closures. The [First Class Functions in Go](https://golang.org/doc/codewalk/functions/) code walk demonstrates these features with a simulation of the dice game [Pig](http://en.wikipedia.org/wiki/Pig_(dice)). It is a pretty program that uses the language to great effect, and a fun read for Go beginners and veterans alike.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Programmers new to Go are often surprised by its support for function types,
 functions as values, and closures.
-The [[https://golang.org/doc/codewalk/functions/][First Class Functions in Go]]
+The [First Class Functions in Go](https://golang.org/doc/codewalk/functions/)
 code walk demonstrates these features with a simulation of the dice game
-[[http://en.wikipedia.org/wiki/Pig_(dice)][Pig]].
+[Pig](http://en.wikipedia.org/wiki/Pig_(dice)).
 It is a pretty program that uses the language to great effect,
 and a fun read for Go beginners and veterans alike.
 
-More resources are available at [[https://golang.org/doc/docs.html][golang.org]].
+More resources are available at [golang.org](https://golang.org/doc/docs.html).
diff --git a/content/first-go-program.article b/content/first-go-program.article
index 7554e03..de0507f 100644
--- a/content/first-go-program.article
+++ b/content/first-go-program.article
@@ -1,25 +1,26 @@
-The first Go program
+# The first Go program
 18 Jul 2013
 Tags: history
+Summary: Brad Fitzpatrick and I (Andrew Gerrand) recently started restructuring [godoc](https://golang.org/cmd/godoc/), and it occurred to me that it is one of the oldest Go programs. Robert Griesemer started writing it back in early 2009, and we're still using it today.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Brad Fitzpatrick and I (Andrew Gerrand) recently started restructuring
-[[https://golang.org/cmd/godoc/][godoc]], and it occurred to me that it is one
+[godoc](https://golang.org/cmd/godoc/), and it occurred to me that it is one
 of the oldest Go programs.
 Robert Griesemer started writing it back in early 2009,
 and we're still using it today.
 
-When I [[https://twitter.com/enneff/status/357403054632484865][tweeted]] about
-this, Dave Cheney replied with an [[https://twitter.com/davecheney/status/357406479415914497][interesting question]]:
+When I [tweeted](https://twitter.com/enneff/status/357403054632484865) about
+this, Dave Cheney replied with an [interesting question](https://twitter.com/davecheney/status/357406479415914497):
 what is the oldest Go program? Rob Pike dug into his mail and found it
 in an old message to Robert and Ken Thompson.
 
 What follows is the first Go program. It was written by Rob in February 2008,
 when the team was just Rob, Robert, and Ken. They had a solid feature list
-(mentioned in [[https://commandcenter.blogspot.com.au/2012/06/less-is-exponentially-more.html][this blog post]])
+(mentioned in [this blog post](https://commandcenter.blogspot.com.au/2012/06/less-is-exponentially-more.html))
 and a rough language specfication. Ken had just finished the first working version of
 a Go compiler (it didn't produce native code, but rather transliterated Go code
 to C for fast prototyping) and it was time to try writing a program with it.
@@ -47,11 +48,11 @@
 .code first-go-program/slist.go
 
 The program parses and prints an
-[[https://en.wikipedia.org/wiki/S-expression][S-expression]].
+[S-expression](https://en.wikipedia.org/wiki/S-expression).
 It takes no user input and has no imports, relying only on the built-in
 `print` facility for output.
 It was written literally the first day there was a
-[[https://golang.org/change/8b8615138da3][working but rudimentary compiler]].
+[working but rudimentary compiler](https://golang.org/change/8b8615138da3).
 Much of the language wasn't implemented and some of it wasn't even specified.
 
 Still, the basic flavor of the language today is recognizable in this program.
@@ -115,7 +116,7 @@
 For instance, Rob called his method receivers `this`, but now we use shorter
 context-specific names. There are hundreds of more significant examples
 and to this day we're still discovering better ways to write Go code.
-(Check out the [[https://github.com/golang/glog][glog package]]'s clever trick for
-[[https://github.com/golang/glog/blob/c6f9652c7179652e2fd8ed7002330db089f4c9db/glog.go#L893][handling verbosity levels]].)
+(Check out the [glog package](https://github.com/golang/glog)'s clever trick for
+[handling verbosity levels](https://github.com/golang/glog/blob/c6f9652c7179652e2fd8ed7002330db089f4c9db/glog.go#L893).)
 
 I wonder what we'll learn tomorrow.
diff --git a/content/fosdem14.article b/content/fosdem14.article
index dd73c87..5817dd3 100644
--- a/content/fosdem14.article
+++ b/content/fosdem14.article
@@ -1,12 +1,13 @@
-Go talks at FOSDEM 2014
+# Go talks at FOSDEM 2014
 24 Feb 2014
 Tags: fosdem, youtube, talk
+Summary: At [FOSDEM](http://fosdem.org/) on the 2nd of February 2014 members of the Go community presented a series of talks in the Go Devroom. The day was a huge success, with 13 great talks presented to a consistently jam-packed room.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-At [[http://fosdem.org/][FOSDEM]] on the 2nd of February 2014 members of the Go
+At [FOSDEM](http://fosdem.org/) on the 2nd of February 2014 members of the Go
 community presented a series of talks in the Go Devroom. The day was a huge
 success, with 13 great talks presented to a consistently jam-packed room.
 
@@ -14,15 +15,15 @@
 videos are presented below.
 
 The complete series of talks is available
-[[http://www.youtube.com/playlist?list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH][as a YouTube playlist]].
+[as a YouTube playlist](http://www.youtube.com/playlist?list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH).
 (You can also get them directly at the
-[[http://video.fosdem.org/2014/K4601/Sunday/][FOSDEM video archive]].)
+[FOSDEM video archive](http://video.fosdem.org/2014/K4601/Sunday/).)
 
-* Scaling with Go: YouTube's Vitess
+## Scaling with Go: YouTube's Vitess
 
 Google Engineer Sugu Sougoumarane described how he and his
-team built [[https://github.com/youtube/vitess][Vitess]] in Go to help scale
-[[https://youtube.com][YouTube]].
+team built [Vitess](https://github.com/youtube/vitess) in Go to help scale
+[YouTube](https://youtube.com).
 
 Vitess is a set of servers and tools primarily developed in Go.
 It helps scale MySQL databases for the web, and is currently used as a
@@ -34,11 +35,11 @@
 
 .iframe //www.youtube.com/embed/qATTTSg6zXk 310 550
 
-The slides for the talk are [[https://github.com/youtube/vitess/blob/master/doc/Vitess2014.pdf?raw=true][available here]].
+The slides for the talk are [available here](https://github.com/youtube/vitess/blob/master/doc/Vitess2014.pdf?raw=true).
 
-* Camlistore
+## Camlistore
 
-[[http://camlistore.org/][Camlistore]] is designed to be "your personal storage
+[Camlistore](http://camlistore.org/) is designed to be "your personal storage
 system for life, putting you in control, and designed to last." It's open
 source, under nearly 4 years of active development, and extremely flexible.  In
 this talk, Brad Fitzpatrick and Mathieu Lonjaret explain why they built it,
@@ -46,7 +47,7 @@
 
 .iframe //www.youtube.com/embed/yvjeIZgykiA 310 550
 
-* Write your own Go compiler
+## Write your own Go compiler
 
 Elliot Stoneham explains the potential for Go as a portable language and
 reviews the Go tools that make that such an exciting possibility.
@@ -61,11 +62,11 @@
 
 .iframe //www.youtube.com/embed/Qe8Dq7V3hXY 310 550
 
-* More
+## More
 
 There were many more great talks, so please check out the complete series
-[[http://www.youtube.com/playlist?list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH][as a YouTube playlist]].
-In particular, the [[http://www.youtube.com/watch?v=cwpI5ONWGxc&list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH&index=7][lightning talks]] were a lot of fun.
+[as a YouTube playlist](http://www.youtube.com/playlist?list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH).
+In particular, the [lightning talks](http://www.youtube.com/watch?v=cwpI5ONWGxc&list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH&index=7) were a lot of fun.
 
 I would like to give my personal thanks to the excellent speakers, Mathieu
 Lonjaret for managing the video gear, and to the FOSDEM staff for making all
diff --git a/content/from-zero-to-go-launching-on-google.article b/content/from-zero-to-go-launching-on-google.article
index c0ef417..e0f6904 100644
--- a/content/from-zero-to-go-launching-on-google.article
+++ b/content/from-zero-to-go-launching-on-google.article
@@ -1,16 +1,17 @@
-From zero to Go: launching on the Google homepage in 24 hours
+# From zero to Go: launching on the Google homepage in 24 hours
 13 Dec 2011
 Tags: appengine, google, guest
+Summary: _This article was written by Reinaldo Aguiar, a software engineer from the Search team at Google. He shares his experience developing his first Go program and launching it to an audience of millions - all in one day!_
 
 Reinaldo Aguiar
 
-* Introduction
+## Introduction
 
-_This_article_was_written_by_Reinaldo_Aguiar,_a_software_engineer_from_the_Search_team_at_Google._He_shares_his_experience_developing_his_first_Go_program_and_launching_it_to_an_audience_of_millions_-_all_in_one_day!_
+_This article was written by Reinaldo Aguiar, a software engineer from the Search team at Google. He shares his experience developing his first Go program and launching it to an audience of millions - all in one day!_
 
 I was recently given the opportunity to collaborate on a small but highly
 visible "20% project":
-the [[http://www.google.com/logos/2011/thanksgiving.html][Thanksgiving 2011 Google Doodle]].
+the [Thanksgiving 2011 Google Doodle](http://www.google.com/logos/2011/thanksgiving.html).
 The doodle features a turkey produced by randomly combining different styles of head,
 wings, feathers and legs.
 The user can customize it by clicking on the different parts of the turkey.
@@ -37,8 +38,8 @@
 Image manipulation tasks are CPU-bound, so performance is the deciding factor in this case.
 
 To make an informed decision we ran a test.
-We quickly prepared a couple of equivalent demo apps for the new [[http://code.google.com/appengine/docs/python/python27/newin27.html][Python 2.7 runtime]]
-(which provides [[http://www.pythonware.com/products/pil/][PIL]],
+We quickly prepared a couple of equivalent demo apps for the new [Python 2.7 runtime](http://code.google.com/appengine/docs/python/python27/newin27.html)
+(which provides [PIL](http://www.pythonware.com/products/pil/),
 a C-based imaging library) and the Go runtime.
 Each app generates an image composed of several small images,
 encodes the image as a JPEG, and sends the JPEG data as the HTTP response.
@@ -55,7 +56,7 @@
 How fast can a person with no Go experience pick it up and build something
 that performs and scales?
 
-* Design
+## Design
 
 The approach was to encode the state of the turkey in the URL, drawing and encoding the snapshot on the fly.
 
@@ -81,7 +82,7 @@
 There's no point serving an error page because the user will never see it -
 the browser is almost certainly loading this URL into an image tag.
 
-* Implementation
+## Implementation
 
 In the package scope we declare some data structures to describe the elements of the turkey,
 the location of the corresponding images,
@@ -122,7 +123,7 @@
 location and size of each layout element within the image.
 
 Loading the images from disk on each request would be wasteful repetition,
-so we load all 106 images (13 * 8 elements + 1 background + 1 default) into
+so we load all 106 images (13 \* 8 elements + 1 background + 1 default) into
 global variables upon receipt of the first request.
 
 	var (
@@ -157,15 +158,15 @@
 
 Requests are handled in a straightforward sequence:
 
-- Parse the request URL, decoding the decimal value of each character in the path.
+  - Parse the request URL, decoding the decimal value of each character in the path.
 
-- Make a copy of the background image as the base for the final image.
+  - Make a copy of the background image as the base for the final image.
 
-- Draw each image element onto the background image using the layoutMap to determine where they should be drawn.
+  - Draw each image element onto the background image using the layoutMap to determine where they should be drawn.
 
-- Encode the image as a JPEG
+  - Encode the image as a JPEG
 
-- Return the image to user by writing the JPEG directly to the HTTP response writer.
+  - Return the image to user by writing the JPEG directly to the HTTP response writer.
 
 Should any error occur, we serve the defaultImage to the user and log the
 error to the App Engine dashboard for later analysis.
@@ -227,9 +228,9 @@
 	}
 
 For brevity, I've omitted several helper functions from these code listings.
-See the [[http://code.google.com/p/go-thanksgiving/source/browse/][source code]] for the full scoop.
+See the [source code](http://code.google.com/p/go-thanksgiving/source/browse/) for the full scoop.
 
-* Performance
+## Performance
 
 .image from-zero-to-go-launching-on-google_image02.png
 
@@ -240,7 +241,7 @@
 This is wicked fast, considering that our request handler is doing image
 manipulation and encoding on the fly.
 
-* Conclusions
+## Conclusions
 
 I found Go's syntax to be intuitive, simple and clean.
 I have worked a lot with interpreted languages in the past,
@@ -248,7 +249,7 @@
 writing this app felt more like working with a dynamic,
 interpreted language.
 
-The development server provided with the [[http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go][SDK]]
+The development server provided with the [SDK](http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go)
 quickly recompiles the program after any change,
 so I could iterate as fast as I would with an interpreted language.
 It's dead simple, too - it took less than a minute to set up my development environment.
@@ -261,14 +262,14 @@
 making it easier to learn good style and conventions.
 
 In writing this application I used just three resources:
-App Engine's [[http://code.google.com/appengine/docs/go/gettingstarted/helloworld.html][Hello World Go example]],
-[[https://golang.org/pkg/][the Go packages documentation]],
-and [[https://blog.golang.org/2011/09/go-imagedraw-package.html][a blog post showcasing the Draw package]].
+App Engine's [Hello World Go example](http://code.google.com/appengine/docs/go/gettingstarted/helloworld.html),
+[the Go packages documentation](https://golang.org/pkg/),
+and [a blog post showcasing the Draw package](https://blog.golang.org/2011/09/go-imagedraw-package.html).
 Thanks to the rapid iteration made possible by the development server and
 the language itself,
 I was able to pick up the language and build a super fast,
 production ready, doodle generator in less than 24 hours.
 
-Download the full app source code (including images) at [[http://code.google.com/p/go-thanksgiving/source/browse/][the Google Code project]].
+Download the full app source code (including images) at [the Google Code project](http://code.google.com/p/go-thanksgiving/source/browse/).
 
 Special thanks go to Guillermo Real and Ryan Germick who designed the doodle.
diff --git a/content/gccgo-in-gcc-471.article b/content/gccgo-in-gcc-471.article
index 6c90a93..a11a21a 100644
--- a/content/gccgo-in-gcc-471.article
+++ b/content/gccgo-in-gcc-471.article
@@ -1,12 +1,13 @@
-Gccgo in GCC 4.7.1
+# Gccgo in GCC 4.7.1
 11 Jul 2012
 Tags: release
+Summary: The Go language has always been defined by a [spec](https://golang.org/ref/spec), not an implementation. The Go team has written two different compilers that implement that spec: gc and gccgo. Having two different implementations helps ensure that the spec is complete and correct: when the compilers disagree, we fix the spec, and change one or both compilers accordingly. Gc is the original compiler, and the go tool uses it by default. Gccgo is a different implementation with a different focus, and in this post we’ll take a closer look at it.
 
 Ian Lance Taylor
 
-* Introduction
+##
 
-The Go language has always been defined by a [[https://golang.org/ref/spec][spec]],
+The Go language has always been defined by a [spec](https://golang.org/ref/spec),
 not an implementation.
 The Go team has written two different compilers that implement that spec: gc and gccgo.
 Having two different implementations helps ensure that the spec is complete and correct:
@@ -53,13 +54,13 @@
 Gccgo distributions do not yet include a version of the go command.
 However, if you install the go command from a standard Go release,
 it already supports gccgo via the `-compiler` option:
-go build `-compiler`gccgo`myprog`.
+go build `-compiler gccgo myprog`.
 The tools used for calls between Go and C/C++,
 cgo and SWIG, also support gccgo.
 
 We have put the Go frontend under the same BSD license as the rest of the Go
 tools.  You can download the source code for the frontend at the
-[[https://github.com/golang/gofrontend][gofrontend project]].
+[gofrontend project](https://github.com/golang/gofrontend).
 Note that when the Go frontend is linked with the GCC backend to make gccgo,
 GCC’s GPL license takes precedence.
 
diff --git a/content/gcdk-whats-new-in-march-2019.article b/content/gcdk-whats-new-in-march-2019.article
index 29bff99..cf66124 100644
--- a/content/gcdk-whats-new-in-march-2019.article
+++ b/content/gcdk-whats-new-in-march-2019.article
@@ -1,11 +1,12 @@
-What's new in the Go Cloud Development Kit
+# What's new in the Go Cloud Development Kit
 4 Mar 2019
+Summary: Last July, we [introduced](https://blog.golang.org/go-cloud) the [Go Cloud Development Kit](https://gocloud.dev) (previously referred to as simply "Go Cloud"), an open source project building libraries and tools to improve the experience of developing for the cloud with Go. We've made a lot of progress since then -- thank you to early contributors! We look forward to growing the Go CDK community of users and contributors, and are excited to work closely with early adopters.
 
 The Go Cloud Development Kit team at Google, Twitter #GoCDK
 
-* Introduction
+## Introduction
 
-Last July, we [[https://blog.golang.org/go-cloud][introduced]] the [[https://gocloud.dev][Go Cloud Development Kit]]
+Last July, we [introduced](https://blog.golang.org/go-cloud) the [Go Cloud Development Kit](https://gocloud.dev)
 (previously referred to as simply "Go Cloud"),
 an open source project building libraries and tools to improve the experience
 of developing for the cloud with Go.
@@ -13,7 +14,7 @@
 We look forward to growing the Go CDK community of users and contributors,
 and are excited to work closely with early adopters.
 
-* Portable APIs
+## Portable APIs
 
 Our first initiative is a set of portable APIs for common cloud services.
 You write your application using these APIs,
@@ -23,10 +24,10 @@
 
 These portable APIs are a great fit if any of the following are true:
 
-- You develop cloud applications locally.
-- You have on-premise applications that you want to run in the cloud (permanently, or as part of a migration).
-- You want portability across multiple clouds.
-- You are creating a new Go application that will use cloud services.
+  - You develop cloud applications locally.
+  - You have on-premise applications that you want to run in the cloud (permanently, or as part of a migration).
+  - You want portability across multiple clouds.
+  - You are creating a new Go application that will use cloud services.
 
 Unlike traditional approaches where you would need to write new application
 code for each cloud provider,
@@ -36,43 +37,43 @@
 
 Our current set of APIs includes:
 
-- [[https://godoc.org/gocloud.dev/blob][blob]],
-  for persistence of blob data.
-  Supported providers include: AWS S3, Google Cloud Storage (GCS),
-  Azure Storage, the filesystem, and in-memory.
-- [[https://godoc.org/gocloud.dev/pubsub][pubsub]] for publishing/subscribing
-  of messages to a topic.
-  Supported providers include: Amazon SNS/SQS,
-  Google Pub/Sub, Azure Service Bus, RabbitMQ, and in-memory.
-- [[https://godoc.org/gocloud.dev/runtimevar][runtimevar]],
-  for watching external configuration variables.
-  Supported providers include AWS Parameter Store,
-  Google Runtime Configurator, etcd, and the filesystem.
-- [[https://godoc.org/gocloud.dev/secrets][secrets]],
-  for encryption/decryption.
-  Supported providers include AWS KMS, GCP KMS,
-  Hashicorp Vault, and local symmetric keys.
-- Helpers for connecting to cloud SQL providers. Supported providers include AWS RDS and Google Cloud SQL.
-- We are also working on a document storage API (e.g. MongoDB, DynamoDB, Firestore).
+  - [blob](https://godoc.org/gocloud.dev/blob),
+    for persistence of blob data.
+    Supported providers include: AWS S3, Google Cloud Storage (GCS),
+    Azure Storage, the filesystem, and in-memory.
+  - [pubsub](https://godoc.org/gocloud.dev/pubsub) for publishing/subscribing
+    of messages to a topic.
+    Supported providers include: Amazon SNS/SQS,
+    Google Pub/Sub, Azure Service Bus, RabbitMQ, and in-memory.
+  - [runtimevar](https://godoc.org/gocloud.dev/runtimevar),
+    for watching external configuration variables.
+    Supported providers include AWS Parameter Store,
+    Google Runtime Configurator, etcd, and the filesystem.
+  - [secrets](https://godoc.org/gocloud.dev/secrets),
+    for encryption/decryption.
+    Supported providers include AWS KMS, GCP KMS,
+    Hashicorp Vault, and local symmetric keys.
+  - Helpers for connecting to cloud SQL providers. Supported providers include AWS RDS and Google Cloud SQL.
+  - We are also working on a document storage API (e.g. MongoDB, DynamoDB, Firestore).
 
-* Feedback
+## Feedback
 
-We hope you're as excited about the Go CDK as we are -- check out our [[https://godoc.org/gocloud.dev][godoc]],
-walk through our [[https://github.com/google/go-cloud/tree/master/samples/tutorial][tutorial]],
+We hope you're as excited about the Go CDK as we are -- check out our [godoc](https://godoc.org/gocloud.dev),
+walk through our [tutorial](https://github.com/google/go-cloud/tree/master/samples/tutorial),
 and use the Go CDK in your application(s).
 We'd love to hear your ideas for other APIs and API providers you'd like to see.
 
 If you're digging into Go CDK please share your experiences with us:
 
-- What went well?
-- Were there any pain points using the APIs?
-- Are there any features missing in the API you used?
-- Suggestions for documentation improvements.
+  - What went well?
+  - Were there any pain points using the APIs?
+  - Are there any features missing in the API you used?
+  - Suggestions for documentation improvements.
 
 To send feedback, you can:
 
-- Submit issues to our public [[https://github.com/google/go-cloud/issues/new/choose][GitHub repository]].
-- Email [[mailto:go-cdk-feedback@google.com][go-cdk-feedback@google.com]].
-- Post to our [[https://groups.google.com/forum/#!forum/go-cloud][public Google group]].
+  - Submit issues to our public [GitHub repository](https://github.com/google/go-cloud/issues/new/choose).
+  - Email [go-cdk-feedback@google.com](mailto:go-cdk-feedback@google.com).
+  - Post to our [public Google group](https://groups.google.com/forum/#!forum/go-cloud).
 
 Thanks!
diff --git a/content/generate.article b/content/generate.article
index a1fa9fd..3f601cf 100644
--- a/content/generate.article
+++ b/content/generate.article
@@ -1,10 +1,11 @@
-Generating code
+# Generating code
 22 Dec 2014
 Tags: programming, technical
+Summary: A property of universal computation—Turing completeness—is that a computer program can write a computer program. This is a powerful idea that is not appreciated as often as it might be, even though it happens frequently. It's a big part of the definition of a compiler, for instance. It's also how the `go` `test` command works: it scans the packages to be tested, writes out a Go program containing a test harness customized for the package, and then compiles and runs it. Modern computers are so fast this expensive-sounding sequence can complete in a fraction of a second.
 
 Rob Pike
 
-* Generating code
+##
 
 A property of universal computation—Turing completeness—is that a computer program can write a computer program.
 This is a powerful idea that is not appreciated as often as it might be, even though it happens frequently.
@@ -15,7 +16,7 @@
 Modern computers are so fast this expensive-sounding sequence can complete in a fraction of a second.
 
 There are lots of other examples of programs that write programs.
-[[https://godoc.org/golang.org/x/tools/cmd/goyacc][Yacc]], for instance, reads in a description of a grammar and writes out a program to parse that grammar.
+[Yacc](https://godoc.org/golang.org/x/tools/cmd/goyacc), for instance, reads in a description of a grammar and writes out a program to parse that grammar.
 The protocol buffer "compiler" reads an interface description and emits structure definitions,
 methods, and other support code.
 Configuration tools of all sorts work like this too, examining metadata or the environment
@@ -30,7 +31,7 @@
 
 Until now, that is.
 
-The [[https://blog.golang.org/go1.4][latest Go release]], 1.4,
+The [latest Go release](https://blog.golang.org/go1.4), 1.4,
 includes a new command that makes it easier to run such tools.
 It's called `go` `generate`, and it works by scanning for special comments in Go source code
 that identify general commands to run.
@@ -75,7 +76,7 @@
 Every time `gopher.y` is modified, just rerun `go` `generate` to regenerate the parser.
 
 For more details about how `go` `generate` works, including options, environment variables,
-and so on, see the [[https://golang.org/s/go1.4-generate][design document]].
+and so on, see the [design document](https://golang.org/s/go1.4-generate).
 
 Go generate does nothing that couldn't be done with Make or some other build mechanism,
 but it comes with the `go` tool—no extra installation required—and fits nicely into the Go ecosystem.
@@ -94,7 +95,7 @@
 	$ go get golang.org/x/tools/cmd/stringer
 
 Here's an example from the documentation for
-[[https://godoc.org/golang.org/x/tools/cmd/stringer][`stringer`]].
+[`stringer`](https://godoc.org/golang.org/x/tools/cmd/stringer).
 Imagine we have some code that contains a set of integer constants defining different types of pills:
 
 	package painkiller
diff --git a/content/getthee-to-go-meetup.article b/content/getthee-to-go-meetup.article
index 6f12947..69f9261 100644
--- a/content/getthee-to-go-meetup.article
+++ b/content/getthee-to-go-meetup.article
@@ -1,15 +1,16 @@
-Get thee to a Go meetup
+# Get thee to a Go meetup
 27 Feb 2013
 Tags: community, talk
+Summary: Last week, David Symonds and I each gave talks at Sydney's Go meetup, [golang-syd](http://www.meetup.com/golang-syd/). Dave spoke about [Go API design in the context of Protocol Buffers](http://talks.godoc.org/github.com/dsymonds/talks/2013-feb-golang-syd/golang-syd.slide), and I discussed some neat tricks in the construction of [a small command-line program](http://talks.godoc.org/github.com/nf/streak/talk.slide). The presentations were short but provoked some good questions and interesting discussion. Of the 50-odd attendees, most were regular Go programmers and a fair chunk write Go code professionally. It was a fun night.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Last week, David Symonds and I each gave talks at Sydney's Go meetup,
-[[http://www.meetup.com/golang-syd/][golang-syd]].
-Dave spoke about [[http://talks.godoc.org/github.com/dsymonds/talks/2013-feb-golang-syd/golang-syd.slide][Go API design in the context of Protocol Buffers]],
-and I discussed some neat tricks in the construction of [[http://talks.godoc.org/github.com/nf/streak/talk.slide][a small command-line program]].
+[golang-syd](http://www.meetup.com/golang-syd/).
+Dave spoke about [Go API design in the context of Protocol Buffers](http://talks.godoc.org/github.com/dsymonds/talks/2013-feb-golang-syd/golang-syd.slide),
+and I discussed some neat tricks in the construction of [a small command-line program](http://talks.godoc.org/github.com/nf/streak/talk.slide).
 The presentations were short but provoked some good questions and interesting discussion.
 Of the 50-odd attendees, most were regular Go programmers and a fair chunk
 write Go code professionally. It was a fun night.
@@ -19,13 +20,13 @@
 Despair not, however, as there are likely some people in your area who either
 run a Go meetup or want to start one.
 
-The Go wiki lists [[https://golang.org/wiki/GoUserGroups][Go user groups]] around the world,
+The Go wiki lists [Go user groups](https://golang.org/wiki/GoUserGroups) around the world,
 so if there's one nearby you should consider going along to the next event.
 
 If not, why not start your own? To gauge interest,
-ask around in the [[https://plus.google.com/communities/114112804251407510571][Go+ Community]] and
-the [[http://groups.google.com/group/golang-nuts][golang-nuts mailing list]], and
-take a look at this [[http://golang.meetup.com/all/][list of people]] waiting
+ask around in the [Go+ Community](https://plus.google.com/communities/114112804251407510571) and
+the [golang-nuts mailing list](http://groups.google.com/group/golang-nuts), and
+take a look at this [list of people](http://golang.meetup.com/all/) waiting
 for a Go meetup in their area.
 Once you have a few people interested - and at least one person willing
 to present something - pick a venue and set a date.
diff --git a/content/getting-to-know-go-community.article b/content/getting-to-know-go-community.article
index fc2db7a..b6e8b92 100644
--- a/content/getting-to-know-go-community.article
+++ b/content/getting-to-know-go-community.article
@@ -1,10 +1,11 @@
-Getting to know the Go community
+# Getting to know the Go community
 21 Dec 2011
 Tags: community
+Summary: Over the past couple of years Go has attracted a lot of users and contributors, and I've had a great time meeting and talking with many of you. However, for every Gopher I know there are dozens I know nothing about. In order to address this imbalance I've prepared a survey for Go users everywhere.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Over the past couple of years Go has attracted a lot of users and contributors,
 and I've had a great time meeting and talking with many of you.
@@ -16,7 +17,7 @@
 Among other things, this data will help myself and the rest of the Go team
 plan future Go events and schedule conference appearances.
 
-Please take a minute to [[https://docs.google.com/spreadsheet/viewform?hl=en_US&formkey=dFdxOTU1Mm92VFA3eHdkekFPamJjUnc6MQ#gid=0][complete the survey now]].
+Please take a minute to [complete the survey now](https://docs.google.com/spreadsheet/viewform?hl=en_US&formkey=dFdxOTU1Mm92VFA3eHdkekFPamJjUnc6MQ#gid=0).
 
 Thanks!
 
diff --git a/content/gif-decoder-exercise-in-go-interfaces.article b/content/gif-decoder-exercise-in-go-interfaces.article
index 9d58e57..12719c7 100644
--- a/content/gif-decoder-exercise-in-go-interfaces.article
+++ b/content/gif-decoder-exercise-in-go-interfaces.article
@@ -1,10 +1,11 @@
-A GIF decoder: an exercise in Go interfaces
+# A GIF decoder: an exercise in Go interfaces
 25 May 2011
 Tags: gif, gopher, image, interface, lagomorph, lzw, moustache, rodent, technical
+Summary: At the Google I/O conference in San Francisco on May 10, 2011, we announced that the Go language is now available on Google App Engine. Go is the first language to be made available on App Engine that compiles directly to machine code, which makes it a good choice for CPU-intensive tasks such as image manipulation.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 At the Google I/O conference in San Francisco on May 10,
 2011, we announced that the Go language is now available on Google App Engine.
@@ -12,7 +13,7 @@
 directly to machine code,
 which makes it a good choice for CPU-intensive tasks such as image manipulation.
 
-In that vein, we demonstrated a program called [[http://moustach-io.appspot.com/][Moustachio]]
+In that vein, we demonstrated a program called [Moustachio](http://moustach-io.appspot.com/)
 that makes it easy to improve a picture such as this one:
 
 .image gif-decoder-exercise-in-go-interfaces_image00.jpg
@@ -23,7 +24,7 @@
 
 All the graphical processing, including rendering the antialiased moustache,
 is done by a Go program running on App Engine.
-(The source is available at [[http://code.google.com/p/appengine-go/source/browse/example/moustachio/][the appengine-go project]].)
+(The source is available at [the appengine-go project](http://code.google.com/p/appengine-go/source/browse/example/moustachio/).)
 
 Although most images on the web—at least those likely to be moustachioed—are JPEGs,
 there are countless other formats floating around,
@@ -35,7 +36,7 @@
 make some problems easier to solve.
 The rest of this blog post describes a couple of instances.
 
-* The GIF format
+## The GIF format
 
 First, a quick tour of the GIF format.  A GIF image file is _paletted_,
 that is, each pixel value is an index into a fixed color map that is included in the file.
@@ -61,12 +62,12 @@
 
 .image gif-decoder-exercise-in-go-interfaces_image03.gif
 
-* Deblocking the pixel data
+## Deblocking the pixel data
 
 To decode GIF pixel data in Go, we can use the LZW decompressor from the
 `compress/lzw` package.
 It has a NewReader function that returns an object that,
-as [[https://golang.org/pkg/compress/lzw/#NewReader][the documentation]] says,
+as [the documentation](https://golang.org/pkg/compress/lzw/#NewReader) says,
 "satisfies reads by decompressing the data read from r":
 
 	func NewReader(r io.Reader, order Order, litWidth int) io.ReadCloser
@@ -149,7 +150,7 @@
 In this case, it means `blockReader` type's `Read` method never does any allocations.
 It also means we don't need to keep a count around (it's implicit in the slice length),
 and the built-in `copy` function guarantees we never copy more than we should.
-(For more about slices, see [[https://blog.golang.org/2011/01/go-slices-usage-and-internals.html][this post from the Go Blog]].)
+(For more about slices, see [this post from the Go Blog](https://blog.golang.org/2011/01/go-slices-usage-and-internals.html).)
 
 Given the `blockReader` type, we can unblock the image data stream just
 by wrapping the input reader,
@@ -160,7 +161,7 @@
 This wrapping turns a block-delimited GIF image stream into a simple stream
 of bytes accessible by calls to the `Read` method of the `blockReader`.
 
-* Connecting the pieces
+## Connecting the pieces
 
 With `blockReader` implemented and the LZW compressor available from the library,
 we have all the pieces we need to decode the image data stream.
@@ -192,7 +193,7 @@
 just as we built the `blockReader` inside the call to `NewReader`,
 but that might be packing too much into a single line of code.
 
-* Conclusion
+## Conclusion
 
 Go's interfaces make it easy to construct software by assembling piece parts
 like this to restructure data.
@@ -209,4 +210,4 @@
 
 .image gif-decoder-exercise-in-go-interfaces_image01.gif
 
-The GIF format is defined at [[http://www.w3.org/Graphics/GIF/spec-gif89a.txt][http://www.w3.org/Graphics/GIF/spec-gif89a.txt]].
+The GIF format is defined at [http://www.w3.org/Graphics/GIF/spec-gif89a.txt](http://www.w3.org/Graphics/GIF/spec-gif89a.txt).
diff --git a/content/go-11-is-released.article b/content/go-11-is-released.article
index 7f55938..d16d1f3 100644
--- a/content/go-11-is-released.article
+++ b/content/go-11-is-released.article
@@ -1,10 +1,11 @@
-Go 1.1 is released
+# Go 1.1 is released
 13 May 2013
 Tags: release
+Summary: It is our great pleasure to announce the release of Go 1.1.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 It is our great pleasure to announce the release of Go 1.1.
 
@@ -26,21 +27,21 @@
 
 There are some minor changes to the language itself,
 two of which are worth singling out here:
-the [[https://golang.org/doc/go1.1#return][changes to return requirements]] will
+the [changes to return requirements](https://golang.org/doc/go1.1#return) will
 lead to more succinct and correct programs,
-and the introduction of [[https://golang.org/doc/go1.1#method_values][method values]] provides
+and the introduction of [method values](https://golang.org/doc/go1.1#method_values) provides
 an expressive way to bind a method to its receiver as a function value.
 
 Concurrent programming is safer in Go 1.1 with the addition of a race
 detector for finding memory synchronization errors in your programs.
 We will discuss the race detector more in an upcoming article,
-but for now [[https://golang.org/doc/articles/race_detector.html][the manual]] is
+but for now [the manual](https://golang.org/doc/articles/race_detector.html) is
 a great place to get started.
 
 The tools and standard library have been improved and expanded.
-You can read the full story in the [[https://golang.org/doc/go1.1][release notes]].
+You can read the full story in the [release notes](https://golang.org/doc/go1.1).
 
-As per our [[https://golang.org/doc/go1compat.html][compatibility guidelines]],
+As per our [compatibility guidelines](https://golang.org/doc/go1compat.html),
 Go 1.1 remains compatible with Go 1.0 and we recommend all Go users upgrade to the new release.
 
 All this would not have been possible without the help of our contributors from
@@ -51,6 +52,6 @@
 Rémy Oudompheng, Dave Cheney, Mikio Hara,
 Alex Brainman, Jan Ziak, and Daniel Morsing for their outstanding contributions.
 
-To grab the new release, follow the usual [[https://golang.org/doc/install][installation instructions]]. Happy hacking!
+To grab the new release, follow the usual [installation instructions](https://golang.org/doc/install). Happy hacking!
 
-_Thanks_to_Renée_French_for_the_gopher!_
+_Thanks to Renée French for the gopher!_
diff --git a/content/go-and-google-app-engine.article b/content/go-and-google-app-engine.article
index ec0f3ca..a1daad1 100644
--- a/content/go-and-google-app-engine.article
+++ b/content/go-and-google-app-engine.article
@@ -1,6 +1,7 @@
-Go and Google App Engine
+# Go and Google App Engine
 10 May 2011
 Tags: appengine, release
+Summary: Google’s App Engine provides a reliable, scalable, easy way to build and deploy applications for the web. Over a hundred thousand apps are hosted at appspot.com and custom domains using the App Engine infrastructure. Originally written for Python apps, in 2009 the system added a Java runtime. And today, at Google I/O, we’re thrilled to announce that Go will be next. It’s marked as an experimental App Engine feature for now, because it’s early days, but both the App Engine and Go teams are very excited about this milestone.
 
 David Symonds
 
@@ -8,7 +9,7 @@
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Google’s App Engine provides a reliable,
 scalable, easy way to build and deploy applications for the web.
@@ -21,7 +22,7 @@
 excited about this milestone.
 
 By early days, we mean that it’s still rolling out.
-As of today, the App Engine SDK for Go is [[http://code.google.com/p/googleappengine/downloads/list][available for download]],
+As of today, the App Engine SDK for Go is [available for download](http://code.google.com/p/googleappengine/downloads/list),
 and we will soon enable deployment of Go apps into the App Engine hosting infrastructure.
 Today, through the SDK, you’ll be able to write web apps,
 learn about the APIs (and the language, if it’s new to you),
@@ -44,8 +45,8 @@
 The runtime provides the full Go language and almost all the standard libraries,
 except for a few things that don’t make sense in the App Engine environment.
 For instance, there is no `unsafe` package and the `syscall` package is trimmed.
-(The implementation uses an expanded version of the setup in the [[https://golang.org/doc/play/][Go Playground]]
-on [[https://golang.org/][golang.org]].)
+(The implementation uses an expanded version of the setup in the [Go Playground](https://golang.org/doc/play/)
+on [golang.org](https://golang.org/).)
 
 Also, although goroutines and channels are present,
 when a Go app runs on App Engine only one thread is run in a given instance.
@@ -59,15 +60,15 @@
 Go on App Engine makes it possible to deploy efficient,
 CPU-intensive web applications.
 
-If you want to know more, read the [[http://code.google.com/appengine/docs/go/][documentation]]
-(start with “[[http://code.google.com/appengine/docs/go/gettingstarted/][Getting Started]]”).
-The libraries and SDK are open source, hosted at [[http://code.google.com/p/appengine-go/][http://code.google.com/p/appengine-go/]].
-We’ve created a new [[http://groups.google.com/group/google-appengine-go][google-appengine-go]] mailing list;
+If you want to know more, read the [documentation](http://code.google.com/appengine/docs/go/)
+(start with “[Getting Started](http://code.google.com/appengine/docs/go/gettingstarted/)”).
+The libraries and SDK are open source, hosted at [http://code.google.com/p/appengine-go/](http://code.google.com/p/appengine-go/).
+We’ve created a new [google-appengine-go](http://groups.google.com/group/google-appengine-go) mailing list;
 feel free to contact us there with App Engine-specific questions.
-The [[http://code.google.com/p/googleappengine/issues/list][issue tracker for App Engine]]
+The [issue tracker for App Engine](http://code.google.com/p/googleappengine/issues/list)
 is the place for reporting issues related to the new Go SDK.
 
-The Go App Engine SDK is [[http://code.google.com/p/googleappengine/downloads/list][available]]
+The Go App Engine SDK is [available](http://code.google.com/p/googleappengine/downloads/list)
 for Linux and Mac OS X (10.5 or greater);
 we hope a Windows version will also be available soon.
 
diff --git a/content/go-and-google-cloud-platform.article b/content/go-and-google-cloud-platform.article
index 2da1591..9ab506d 100644
--- a/content/go-and-google-cloud-platform.article
+++ b/content/go-and-google-cloud-platform.article
@@ -1,42 +1,43 @@
-Go and the Google Cloud Platform
+# Go and the Google Cloud Platform
 12 Jun 2013
+Summary: In 2011 we announced the [Go runtime for App Engine](https://developers.google.com/appengine/docs/go/overview). Since then, we have continued to improve the Go App Engine experience, and generally improved Go support for the Google Cloud Platform. For instance, the [google-api-go-client](http://code.google.com/p/google-api-go-client) provides a Go interface to a range of Google's public APis, including Compute Engine, Cloud Storage, BigQuery, Drive, and many more.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-In 2011 we announced the [[https://developers.google.com/appengine/docs/go/overview][Go runtime for App Engine]].
+In 2011 we announced the [Go runtime for App Engine](https://developers.google.com/appengine/docs/go/overview).
 Since then, we have continued to improve the Go App Engine experience,
 and generally improved Go support for the Google Cloud Platform.
-For instance, the [[http://code.google.com/p/google-api-go-client][google-api-go-client]] provides
+For instance, the [google-api-go-client](http://code.google.com/p/google-api-go-client) provides
 a Go interface to a range of Google's public APis,
 including Compute Engine, Cloud Storage, BigQuery,
 Drive, and many more.
 
 Learn more by watching these talks from Google I/O this year:
 
-* High Performance Apps with Go on App Engine
+## High Performance Apps with Go on App Engine
 
-_The_Go_runtime_for_App_Engine_is_a_high_performance_engine_for_
-_running_web_applications._It_produces_fast_responses,_
-_starts_instances_in_a_fraction_of_a_second,_makes_the_most_use_
-_of_instance_hours,_and_allows_your_app_to_do_serious_processing_
-_at_full_machine_speed._
-_Come_along_to_hear_how_to_fully_exploit_the_power_of_Go_on_App_
-_Engine_and_make_your_web_applications_the_best_they_can_be._
+_The Go runtime for App Engine is a high performance engine for_
+_running web applications. It produces fast responses,_
+_starts instances in a fraction of a second, makes the most use_
+_of instance hours, and allows your app to do serious processing_
+_at full machine speed._
+_Come along to hear how to fully exploit the power of Go on App_
+_Engine and make your web applications the best they can be._
 
 .iframe //www.youtube.com/embed/fc25ihfXhbg 309 549
 
-* All the Ships in the World
+## All the Ships in the World
 
 Visualizing Data with Google Cloud and Maps
 
-_Tens_of_thousands_of_ships_report_their_position_at_least_once_
-_every_5_minutes,_24_hours_a_day._
-_Visualizing_that_quantity_of_data_and_serving_it_out_to_large_
-_numbers_of_people_takes_lots_of_power_both_in_the_browser_and_on_the_server._
-_This_session_will_explore_the_use_of_Maps,_
-_App_Engine,_Go,_Compute_Engine,_BigQuery,_Cloud_Storage,_
-_and_WebGL_to_do_massive_data_visualization._
+_Tens of thousands of ships report their position at least once_
+_every 5 minutes, 24 hours a day._
+_Visualizing that quantity of data and serving it out to large_
+_numbers of people takes lots of power both in the browser and on the server._
+_This session will explore the use of Maps,_
+_App Engine, Go, Compute Engine, BigQuery, Cloud Storage,_
+_and WebGL to do massive data visualization._
 
 .iframe //www.youtube.com/embed/MT7cd4M9vzs 309 549
diff --git a/content/go-app-engine-sdk-155-released.article b/content/go-app-engine-sdk-155-released.article
index 2666a77..8a60c9d 100644
--- a/content/go-app-engine-sdk-155-released.article
+++ b/content/go-app-engine-sdk-155-released.article
@@ -1,20 +1,21 @@
-Go App Engine SDK 1.5.5 released
+# Go App Engine SDK 1.5.5 released
 11 Oct 2011
 Tags: appengine, gofix, release
+Summary: Today we released version 1.5.5 the Go App Engine SDK. You can download it from the [App Engine downloads page](http://code.google.com/appengine/downloads.html).
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Today we released version 1.5.5 the Go App Engine SDK.
-You can download it from the [[http://code.google.com/appengine/downloads.html][App Engine downloads page]].
+You can download it from the [App Engine downloads page](http://code.google.com/appengine/downloads.html).
 
 This release includes changes and improvements to the App Engine APIs and
-brings the supporting Go tool chain to [[https://golang.org/doc/devel/release.html#r60][release.r60.2]]
+brings the supporting Go tool chain to [release.r60.2](https://golang.org/doc/devel/release.html#r60)
 (the current stable release).
-Also included in this release are the [[https://golang.org/cmd/godoc/][godoc]],
-[[https://golang.org/cmd/gofmt/][gofmt]],
-and [[https://golang.org/cmd/gofix/][gofix]] tools from the Go tool chain.
+Also included in this release are the [godoc](https://golang.org/cmd/godoc/),
+[gofmt](https://golang.org/cmd/gofmt/),
+and [gofix](https://golang.org/cmd/gofix/) tools from the Go tool chain.
 They can be found in the root directory of the SDK.
 
 Some changes made in this release are backwards-incompatible,
@@ -26,17 +27,17 @@
 packages and the updated Go standard library.
 To update your apps, run:
 
-	    /path/to/sdk/gofix /path/to/your/app
+	/path/to/sdk/gofix /path/to/your/app
 
 The SDK now includes the appengine package source code,
 so you can use the local godoc to read App Engine API documentation:
 
-	    /path/to/sdk/godoc appengine/datastore Get
+	/path/to/sdk/godoc appengine/datastore Get
 
-*Important*note:* We have deprecated `api_version` 2.
+**Important note:** We have deprecated `api_version` 2.
 Go apps that use `api_version` 2 will stop working after 16 December 2011.
 Please update your apps to use `api_version` 3 before then.
 
-See the [[http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes][release notes]]
+See the [release notes](http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes)
 for a full list of changes.
-Please direct any questions about the new SDK to the [[http://groups.google.com/group/google-appengine-go][Go App Engine discussion group]].
+Please direct any questions about the new SDK to the [Go App Engine discussion group](http://groups.google.com/group/google-appengine-go).
diff --git a/content/go-at-google-io-2011-videos.article b/content/go-at-google-io-2011-videos.article
index 909bfa9..6bd6168 100644
--- a/content/go-at-google-io-2011-videos.article
+++ b/content/go-at-google-io-2011-videos.article
@@ -1,10 +1,11 @@
-Go at Google I/O 2011: videos
+# Go at Google I/O 2011: videos
 23 May 2011
 Tags: appengine, gopher, talk, video
+Summary: The Go team had a great time at Google I/O 2011. It was a pleasure to meet so many programmers who share our enthusiasm for Go, and to share our work of the past few months. For those of you that couldn’t be there in person, you can now watch videos of our two Go presentations on YouTube.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 The Go team had a great time at Google I/O 2011.
 It was a pleasure to meet so many programmers who share our enthusiasm for Go,
@@ -12,21 +13,21 @@
 For those of you that couldn’t be there in person,
 you can now watch videos of our two Go presentations on YouTube.
 
-* Writing Web Apps in Go
+## Writing Web Apps in Go
 
-In “[[http://www.youtube.com/watch?v=-i0hat7pdpk][Writing Web Apps in Go]]”
-we announce the [[https://blog.golang.org/2011/05/go-and-google-app-engine.html][Go runtime for Google App Engine]]
-and walk through the development and deployment of [[http://moustach-io.appspot.com/][Moustachio]],
+In “[Writing Web Apps in Go](http://www.youtube.com/watch?v=-i0hat7pdpk)”
+we announce the [Go runtime for Google App Engine](https://blog.golang.org/2011/05/go-and-google-app-engine.html)
+and walk through the development and deployment of [Moustachio](http://moustach-io.appspot.com/),
 the first Go App Engine app.
 
 .iframe //www.youtube.com/embed/-i0hat7pdpk 349 560
 
-(See the [[https://golang.org/doc/talks/io2011/Writing_Web_Apps_in_Go.pdf][presentation slides]].)
+(See the [presentation slides](https://golang.org/doc/talks/io2011/Writing_Web_Apps_in_Go.pdf).)
 
-The [[https://code.google.com/p/appengine-go/source/browse/example/moustachio][source code]]
-for Moustachio is available as part of [[http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go][the SDK]]
+The [source code](https://code.google.com/p/appengine-go/source/browse/example/moustachio)
+for Moustachio is available as part of [the SDK](http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go)
 along with some other examples,
-such as this [[http://mandelbrot-tiles.appspot.com/][Mandelbrot demo]].
+such as this [Mandelbrot demo](http://mandelbrot-tiles.appspot.com/).
 
 Most important, this talk features the debut of the plush gopher.
 
@@ -34,22 +35,22 @@
 
 For those that didn’t get one at the conference, we hope to make him available for purchase online soon.
 
-* Real World Go
+## Real World Go
 
-“[[http://www.youtube.com/watch?v=7QDVRowyUQA][Real World Go]]”,
-presented at [[http://io-bootcamp.com][I/O Bootcamp]],
+“[Real World Go](http://www.youtube.com/watch?v=7QDVRowyUQA)”,
+presented at [I/O Bootcamp](http://io-bootcamp.com),
 gives a brief introduction to Go and four case studies of its use in solving real problems:
-- [[http://heroku.com][Heroku]] with [[https://github.com/ha/doozerd][Doozer]],
+- [Heroku](http://heroku.com) with [Doozer](https://github.com/ha/doozerd),
   a highly available consistent data store,
 
-- [[http://mroffice.org/telephony.html][MROffice Dialer]], a VOIP system for call centers,
+  - [MROffice Dialer](http://mroffice.org/telephony.html), a VOIP system for call centers,
 
-- [[http://www.atlassian.com][Atlassian]]’s virtual machine cluster management system,
+  - [Atlassian](http://www.atlassian.com)’s virtual machine cluster management system,
 
-- [[http://www.camlistore.org][Camlistore]], a content addressable storage system.
+  - [Camlistore](http://www.camlistore.org), a content addressable storage system.
 
 .iframe //www.youtube.com/embed/7QDVRowyUQA 349 560
 
-(See the [[https://golang.org/doc/talks/io2011/Real_World_Go.pdf][presentation slides]].)
+(See the [presentation slides](https://golang.org/doc/talks/io2011/Real_World_Go.pdf).)
 
 Thanks to everyone who attended our talks and workshops. We look forward to seeing you again soon!
diff --git a/content/go-at-heroku.article b/content/go-at-heroku.article
index 6663b6c..7fe67ef 100644
--- a/content/go-at-heroku.article
+++ b/content/go-at-heroku.article
@@ -1,17 +1,18 @@
-Go at Heroku
+# Go at Heroku
 21 Apr 2011
 Tags: guest
+Summary: _This week’s blog post is written by_ [_Keith Rarick_](http://xph.us/) _and_ [_Blake Mizerany_](http://itsbonus.heroku.com/), _systems engineers at_ [Heroku](http://www.heroku.com/). _In their own words, they "eat, drink, and sleep distributed systems." Here they discuss their experiences using Go._
 
 Keith Rarick
 
 Blake Mizerany
 
-* Introduction
+##
 
-_This_week’s_blog_post_is_written_by_ [[http://xph.us/][_Keith_Rarick_]]
-_and_ [[http://itsbonus.heroku.com/][_Blake_Mizerany_]],
-_systems_engineers_at_ [[http://www.heroku.com/][Heroku]].
-_In_their_own_words,_they_"eat,_drink,_and_sleep_distributed_systems."_Here_they_discuss_their_experiences_using_Go._
+_This week’s blog post is written by_ [_Keith Rarick_](http://xph.us/)
+_and_ [_Blake Mizerany_](http://itsbonus.heroku.com/),
+_systems engineers at_ [Heroku](http://www.heroku.com/).
+_In their own words, they "eat, drink, and sleep distributed systems." Here they discuss their experiences using Go._
 
 A big problem that comes with building distributed systems is the coordination
 of physical servers.
@@ -19,10 +20,10 @@
 This critical data includes locks, configuration data,
 and so on, and it must be consistent and available even during data store failures,
 so we need a data store with solid consistency guarantees.
-Our solution to this problem is [[http://xph.us/2011/04/13/introducing-doozer.html][Doozer]],
+Our solution to this problem is [Doozer](http://xph.us/2011/04/13/introducing-doozer.html),
 a new, consistent, highly-available data store written in Go.
 
-At Doozer's core is [[http://en.wikipedia.org/wiki/Paxos_(computer_science)][Paxos]],
+At Doozer's core is [Paxos](http://en.wikipedia.org/wiki/Paxos_(computer_science)),
 a family of protocols for solving consensus in an unreliable network of unreliable nodes.
 While Paxos is essential to running a fault-tolerant system,
 it is notorious for being difficult to implement.
@@ -36,7 +37,7 @@
 In Doozer, these processes are implemented as goroutines,
 and their communications as channel operations.
 In the same way that garbage collectors improve upon malloc and free,
-we found that [[https://blog.golang.org/2010/07/share-memory-by-communicating.html][goroutines and channels]]
+we found that [goroutines and channels](https://blog.golang.org/2010/07/share-memory-by-communicating.html)
 improve upon the lock-based approach to concurrency.
 These tools let us avoid complex bookkeeping and stay focused on the problem at hand.
 We are still amazed at how few lines of code it took to achieve something
@@ -44,7 +45,7 @@
 
 The standard packages in Go were another big win for Doozer.
 The Go team is very pragmatic about what goes into them.
-For instance, a package we quickly found useful was [[https://golang.org/pkg/websocket/][websocket]].
+For instance, a package we quickly found useful was [websocket](https://golang.org/pkg/websocket/).
 Once we had a working data store, we needed an easy way to introspect it
 and visualize activity.
 Using the websocket package, Keith was able to add the web viewer on his
@@ -52,7 +53,7 @@
 This is a real testament to how well Go mixes systems and application programming.
 
 One of our favorite productivity gains was provided by Go's source formatter:
-[[https://golang.org/cmd/gofmt/][gofmt]].
+[gofmt](https://golang.org/cmd/gofmt/).
 We never argued over where to put a curly-brace,
 tabs vs. spaces, or if we should align assignments.
 We simply agreed that the buck stopped at the default output from gofmt.
diff --git a/content/go-at-io-frequently-asked-questions.article b/content/go-at-io-frequently-asked-questions.article
index 37a09c3..395d066 100644
--- a/content/go-at-io-frequently-asked-questions.article
+++ b/content/go-at-io-frequently-asked-questions.article
@@ -1,10 +1,11 @@
-Go at I/O: Frequently Asked Questions
+# Go at I/O: Frequently Asked Questions
 27 May 2010
 Tags: appengine
+Summary: Among the high-profile product launches at Google I/O last week, our small team gave presentations to packed rooms and met many present and future Go programmers. It was especially gratifying to meet with so many people who, after learning a bit about Go, were excited by the potential benefits (both immediate and long-term) they could gain from using it.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Among the high-profile product launches at Google I/O last week,
 our small team gave presentations to packed rooms and met many present and
@@ -68,6 +69,6 @@
 or came to talk with us at Office Hours.
 We hope to see you again at future events.
 
-The video of [[http://code.google.com/events/io/2010/sessions/go-programming.html][Rob and Russ' talk]]
+The video of [Rob and Russ' talk](http://code.google.com/events/io/2010/sessions/go-programming.html)
 will be uploaded to YouTube within the next week,
 and will then be posted on this blog.
diff --git a/content/go-becomes-more-stable.article b/content/go-becomes-more-stable.article
index 011346b..a9f0dcf 100644
--- a/content/go-becomes-more-stable.article
+++ b/content/go-becomes-more-stable.article
@@ -1,10 +1,11 @@
-Go becomes more stable
+# Go becomes more stable
 16 Mar 2011
 Tags: release
+Summary: The Go project is moving fast. As we learn more about Go we are compelled to change our tools, libraries, and occasionally even the language itself. We permit backward-incompatible changes so that we can learn from, rather than immortalize, our mistakes. We believe flexibility at this stage of Go’s development is essential to the project’s development and, ultimately, its longevity.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 The Go project is moving fast. As we learn more about Go we are compelled
 to change our tools,
@@ -16,7 +17,7 @@
 ultimately, its longevity.
 
 Since Go's launch we have been making releases approximately once a week.
-Accompanying each release are [[https://golang.org/doc/devel/release.html][notes describing what changed]],
+Accompanying each release are [notes describing what changed](https://golang.org/doc/devel/release.html),
 with any backwards-incompatible changes signposted.
 Questions I hear often are "Is Go stable? How can I be sure that I won’t
 have to update my Go code every week?" The answer to those questions are
@@ -37,13 +38,13 @@
 The revision formerly tagged `release.2011-03-07.1` (now `weekly.2011-03-07.1`)
 has been nominated our first stable release,
 and has been given the tag `release.r56`.
-As we tag each stable release we will post an announcement to the new [[http://groups.google.com/group/golang-announce][golang-announce]] mailing list.
-(Why not [[http://groups.google.com/group/golang-announce/subscribe][subscribe now]]?)
+As we tag each stable release we will post an announcement to the new [golang-announce](http://groups.google.com/group/golang-announce) mailing list.
+(Why not [subscribe now](http://groups.google.com/group/golang-announce/subscribe)?)
 
 What’s the upshot of all this? You can continue to keep your Go installation
-updated using `hg`update`release`,
+updated using `hg update release`,
 but now you should only need to update when we tag a new stable release.
 If you wish to stay at the leading edge, you should switch to the weekly
-tag with `hg`update`weekly`.
+tag with `hg update weekly`.
 
 Happy coding!
diff --git a/content/go-brand.article b/content/go-brand.article
index ade49ff..0a7c2d6 100644
--- a/content/go-brand.article
+++ b/content/go-brand.article
@@ -1,10 +1,11 @@
-Go's New Brand
+# Go's New Brand
 26 Apr 2018
 Tags: brand
+Summary: I am delighted to announce the launch of Go’s new look and logo.
 
 Steve Francia
 
-* Introduction
+## Introduction
 
 I am delighted to announce the launch of Go’s new look and logo.
 
@@ -14,11 +15,11 @@
 
 Go’s new brand is about our identity, our values, and our users. Over the past
 several months we have worked with a brand agency to develop a brand guide for
-Go. Our agency, [[http://within.us/][Within]], coordinated with and built upon
+Go. Our agency, [Within](http://within.us/), coordinated with and built upon
 the great foundation that Renee French established. Rest easy, our beloved
 Gopher Mascot remains at the center of our brand.
 
-* New Logo
+## New Logo
 
 Our logo follows the brand’s core philosophy of simplicity over complexity.
 Using a modern, italicized sans-serif typeface combined with three simple motion
@@ -34,7 +35,7 @@
 
 .html go-brand/video.html
 
-* New Brand Guide
+## New Brand Guide
 
 The brand guide establishes the mission, values and voice for the Go project. In
 general terms, a brand guide is a reference tool for establishing a consistent
@@ -46,7 +47,7 @@
 .image go-brand/Go-BB_spread1.jpg
 .image go-brand/Go-BB_spread2.jpg
 
-* New presentation themes
+## New presentation themes
 
 In addition to our brand guide we have also developed a presentation theme. This
 presentation theme will enable us to have a consistent representation of Go in
@@ -62,26 +63,26 @@
 Like this blog and all our gopher images,
 the slide themes are Creative Commons Attribution 3.0 licensed.
 The photos in the slides are all from
-[[https://unsplash.com/][unsplash]] and are released under the unsplash license.
+[unsplash](https://unsplash.com/) and are released under the unsplash license.
 
 Instructions to use slides:
 
-- Open the [[https://golang.org/s/presentation-theme][Go Slide Masters]] presentation on Google slides.
-- File > “Make a Copy” (you may need to login first)
-- Create new slides using the layouts provided in the layouts menu.
-- Use the included example slides to help guide the styling and creation of your presentation.
+  - Open the [Go Slide Masters](https://golang.org/s/presentation-theme) presentation on Google slides.
+  - File > “Make a Copy” (you may need to login first)
+  - Create new slides using the layouts provided in the layouts menu.
+  - Use the included example slides to help guide the styling and creation of your presentation.
 
-** Download
+### Download
 
 The brand guide, logo and themes are copyrighted by the Go authors.
 
 The brand guide contains the guidelines for acceptable logo use.
 
-- [[https://golang.org/s/brandbook][Brand Book (pdf)]]
-- [[https://golang.org/s/logos][Go Logos (zip)]]
-- [[https://golang.org/s/presentation-theme][Go Slide Masters (Google Slides)]]
+  - [Brand Book (pdf)](https://golang.org/s/brandbook)
+  - [Go Logos (zip)](https://golang.org/s/logos)
+  - [Go Slide Masters (Google Slides)](https://golang.org/s/presentation-theme)
 
-* What’s happening next
+## What’s happening next
 
 The website will be getting a refresh based on the new design. Since we are
 making significant changes, we are also taking this opportunity to update our
diff --git a/content/go-cloud.article b/content/go-cloud.article
index 6dff340..65fcce6 100644
--- a/content/go-cloud.article
+++ b/content/go-cloud.article
@@ -1,27 +1,28 @@
-Portable Cloud Programming with Go Cloud
+# Portable Cloud Programming with Go Cloud
 24 Jul 2018
+Summary: Today, the Go team at Google is releasing a new open source project, [Go Cloud](https://github.com/google/go-cloud), a library and tools for developing on the [open cloud](https://cloud.google.com/open-cloud/). With this project, we aim to make Go the language of choice for developers building portable cloud applications.
 
 Eno Compton
 
 Cassandra Salisbury
 
-* Introduction
+## Introduction
 
 Today, the Go team at Google is releasing a new open source project,
-[[https://github.com/google/go-cloud][Go Cloud]],
-a library and tools for developing on the [[https://cloud.google.com/open-cloud/][open cloud]].
+[Go Cloud](https://github.com/google/go-cloud),
+a library and tools for developing on the [open cloud](https://cloud.google.com/open-cloud/).
 With this project, we aim to make Go the language of choice for developers
 building portable cloud applications.
 
 This post explains why we started this project, the details of how Go Cloud works, and how to get involved.
 
-* Why portable cloud programming? Why now?
+## Why portable cloud programming? Why now?
 
-We estimate there are now [[https://research.swtch.com/gophercount][over one million]]
+We estimate there are now [over one million](https://research.swtch.com/gophercount)
 Go developers worldwide.
 Go powers many of the most critical cloud infrastructure projects,
 including Kubernetes, Istio, and Docker.
-Companies like Lyft, Capital One, Netflix and [[https://github.com/golang/go/wiki/GoUsers][many more]]
+Companies like Lyft, Capital One, Netflix and [many more](https://github.com/golang/go/wiki/GoUsers)
 are depending on Go in production.
 Over the years, we've found that developers love Go for cloud development
 because of its efficiency,
@@ -31,8 +32,8 @@
 we have been interviewing teams who work with Go to understand how they
 use the language and how the Go ecosystem can improve further.
 One common theme with many organizations is the need for portability across cloud providers.
-These teams want to deploy robust applications in [[https://en.wikipedia.org/wiki/Cloud_computing#Multicloud][multi-cloud]]
-and [[https://en.wikipedia.org/wiki/Cloud_computing#Hybrid_cloud][hybrid-cloud]] environments,
+These teams want to deploy robust applications in [multi-cloud](https://en.wikipedia.org/wiki/Cloud_computing#Multicloud)
+and [hybrid-cloud](https://en.wikipedia.org/wiki/Cloud_computing#Hybrid_cloud) environments,
 and migrate their workloads between cloud providers without significant
 changes to their code.
 
@@ -51,7 +52,7 @@
 while also preserving the long-term flexibility for multi-cloud and hybrid-cloud architectures.
 Go Cloud applications can also migrate to the cloud providers that best meet their needs.
 
-* What is Go Cloud?
+## What is Go Cloud?
 
 We have identified common services used by cloud applications and have created
 generic APIs to work across cloud providers.
@@ -70,13 +71,13 @@
 Community feedback, from all types of developers at all levels,
 will inform the priority of future APIs in Go Cloud.
 
-* How does it work?
+## How does it work?
 
 At the core of Go Cloud is a collection of generic APIs for portable cloud programming.
 Let's look at an example of using blob storage.
-You can use the generic type [[https://godoc.org/github.com/google/go-cloud/blob#Bucket][`*blob.Bucket`]]
+You can use the generic type [`*blob.Bucket`](https://godoc.org/github.com/google/go-cloud/blob#Bucket)
 to copy a file from a local disk to a cloud provider.
-Let's start by opening an S3 bucket using the included [[https://godoc.org/github.com/google/go-cloud/blob/s3blob][s3blob package]]:
+Let's start by opening an S3 bucket using the included [s3blob package](https://godoc.org/github.com/google/go-cloud/blob/s3blob):
 
 	// setupBucket opens an AWS bucket.
 	func setupBucket(ctx context.Context) (*blob.Bucket, error) {
@@ -121,7 +122,7 @@
 Go Cloud makes swapping out cloud storage a matter of changing the function
 used to open the `*blob.Bucket`.
 The application could instead use Google Cloud Storage by constructing a
-`*blob.Bucket` using [[https://godoc.org/github.com/google/go-cloud/blob/gcsblob#OpenBucket][`gcsblob.OpenBucket`]]
+`*blob.Bucket` using [`gcsblob.OpenBucket`](https://godoc.org/github.com/google/go-cloud/blob/gcsblob#OpenBucket)
 without changing the code that copies the file:
 
 	// setupBucket opens a GCS bucket.
@@ -148,34 +149,34 @@
 
 The setup code needed to access cloud services tends to follow a pattern:
 higher abstractions are constructed from more basic abstractions.
-While you could write this code by hand, Go Cloud automates this with *Wire*,
+While you could write this code by hand, Go Cloud automates this with **Wire**,
 a tool that generates cloud-specific setup code for you.
-The [[https://github.com/google/go-cloud/tree/master/wire][Wire documentation]]
-explains how to install and use the tool and the [[https://github.com/google/go-cloud/tree/master/samples/guestbook][Guestbook sample]]
+The [Wire documentation](https://github.com/google/go-cloud/tree/master/wire)
+explains how to install and use the tool and the [Guestbook sample](https://github.com/google/go-cloud/tree/master/samples/guestbook)
 shows Wire in action.
 
-* How can I get involved and learn more?
+## How can I get involved and learn more?
 
-To get started, we recommend following [[https://github.com/google/go-cloud/tree/master/samples/tutorial][the tutorial]]
+To get started, we recommend following [the tutorial](https://github.com/google/go-cloud/tree/master/samples/tutorial)
 and then trying to build an application yourself.
 If you're already using AWS or GCP, you can try migrating parts of your
 existing application to use Go Cloud.
 If you're using a different cloud provider or an on-premise service,
 you can extend Go Cloud to support it by implementing the driver interfaces
-(like [[https://godoc.org/github.com/google/go-cloud/blob/driver#Bucket][`driver.Bucket`]]).
+(like [`driver.Bucket`](https://godoc.org/github.com/google/go-cloud/blob/driver#Bucket)).
 
 We appreciate any and all input you have about your experience.
-[[https://github.com/google/go-cloud][Go Cloud's]] development is conducted on GitHub.
+[Go Cloud's](https://github.com/google/go-cloud) development is conducted on GitHub.
 We are looking forward to contributions, including pull requests.
-[[https://github.com/google/go-cloud/issues/new][File an issue]] to tell
+[File an issue](https://github.com/google/go-cloud/issues/new) to tell
 us what could be better or what future APIs the project should support.
 For updates and discussion about the project,
-join [[https://groups.google.com/forum/#!forum/go-cloud][the project's mailing list]].
+join [the project's mailing list](https://groups.google.com/forum/#!forum/go-cloud).
 
 The project requires contributors to sign the same Contributor License Agreement
 as that of the Go project.
-Read the [[https://github.com/google/go-cloud/blob/master/CONTRIBUTING.md][contribution guidelines]] for more details.
-Please note, Go Cloud is covered by the Go [[https://github.com/google/go-cloud/blob/master/CODE_OF_CONDUCT.md][Code of Conduct]].
+Read the [contribution guidelines](https://github.com/google/go-cloud/blob/master/CONTRIBUTING.md) for more details.
+Please note, Go Cloud is covered by the Go [Code of Conduct](https://github.com/google/go-cloud/blob/master/CODE_OF_CONDUCT.md).
 
 Thank you for taking the time to learn about Go Cloud.
 We are excited to work with you to make Go the language of choice for developers
diff --git a/content/go-concurrency-patterns-timing-out-and.article b/content/go-concurrency-patterns-timing-out-and.article
index 0789006..09d2502 100644
--- a/content/go-concurrency-patterns-timing-out-and.article
+++ b/content/go-concurrency-patterns-timing-out-and.article
@@ -1,10 +1,11 @@
-Go Concurrency Patterns: Timing out, moving on
+# Go Concurrency Patterns: Timing out, moving on
 23 Sep 2010
 Tags: concurrency, technical
+Summary: Concurrent programming has its own idioms. A good example is timeouts. Although Go's channels do not support them directly, they are easy to implement. Say we want to receive from the channel `ch`, but want to wait at most one second for the value to arrive. We would start by creating a signalling channel and launching a goroutine that sleeps before sending on the channel:
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Concurrent programming has its own idioms.
 A good example is timeouts. Although Go's channels do not support them directly,
@@ -14,22 +15,22 @@
 We would start by creating a signalling channel and launching a goroutine
 that sleeps before sending on the channel:
 
-	    timeout := make(chan bool, 1)
-	    go func() {
-	        time.Sleep(1 * time.Second)
-	        timeout <- true
-	    }()
+	timeout := make(chan bool, 1)
+	go func() {
+	    time.Sleep(1 * time.Second)
+	    timeout <- true
+	}()
 
 We can then use a `select` statement to receive from either `ch` or `timeout`.
 If nothing arrives on `ch` after one second,
 the timeout case is selected and the attempt to read from ch is abandoned.
 
-	    select {
-	    case <-ch:
-	        // a read from ch has occurred
-	    case <-timeout:
-	        // the read from ch has timed out
-	    }
+	select {
+	case <-ch:
+	    // a read from ch has occurred
+	case <-timeout:
+	    // the read from ch has timed out
+	}
 
 The `timeout` channel is buffered with space for 1 value,
 allowing the timeout goroutine to send to the channel and then exit.
@@ -39,7 +40,7 @@
 The `timeout` channel will eventually be deallocated by the garbage collector.
 
 (In this example we used `time.Sleep` to demonstrate the mechanics of goroutines and channels.
-In real programs you should use ` [[https://golang.org/pkg/time/#After][time.After]]`,
+In real programs you should use ` [time.After](https://golang.org/pkg/time/#After)`,
 a function that returns a channel and sends on that channel after the specified duration.)
 
 Let's look at another variation of this pattern.
@@ -71,10 +72,10 @@
 However, if the result arrives before the main function has made it to the receive,
 the send could fail since no one is ready.
 
-This problem is a textbook example of what is known as a [[https://en.wikipedia.org/wiki/Race_condition][race condition]],
+This problem is a textbook example of what is known as a [race condition](https://en.wikipedia.org/wiki/Race_condition),
 but the fix is trivial.
 We just make sure to buffer the channel `ch` (by adding the buffer length
-as the second argument to [[https://golang.org/pkg/builtin/#make][make]]),
+as the second argument to [make](https://golang.org/pkg/builtin/#make)),
 guaranteeing that the first send has a place to put the value.
 This ensures the send will always succeed,
 and the first value to arrive will be retrieved regardless of the order of execution.
diff --git a/content/go-developer-network.article b/content/go-developer-network.article
index 388cfef..a3c9658 100644
--- a/content/go-developer-network.article
+++ b/content/go-developer-network.article
@@ -1,10 +1,11 @@
-The New Go Developer Network
+# The New Go Developer Network
 14 Mar 2019
 Tags: Community
+Summary: A sense of community flourishes when we come together in person. As handles become names and avatars become faces, the smiles are real and true friendship can grow. There is joy in the sharing of knowledge and celebrating the accomplishments of our friends, colleagues, and neighbors. In our rapidly growing Go community this critical role is played by the Go user groups.
 
 GoBridge Leadership Team
 
-* Introduction
+##
 
 A sense of community flourishes when we come together in person. As handles become names
 and avatars become faces, the smiles are real and true friendship can grow. There is joy
@@ -12,13 +13,13 @@
 and neighbors. In our rapidly growing Go community this critical role is played by the
 Go user groups.
 
-To better support our Go user groups worldwide, the Go community leaders at [[https://gobridge.org][GoBridge]]
+To better support our Go user groups worldwide, the Go community leaders at [GoBridge](https://gobridge.org)
 and Google have joined forces to create a new program called the Go Developer Network
 (GDN). The GDN is a collection of Go user groups working together with a shared mission
 to empower developer communities with the knowledge, experience, and wisdom to build
 the next generation of software in Go.
 
-We have partnered with Meetup to create our own [[https://meetup.com/pro/go][Pro Network of Go Developers]]
+We have partnered with Meetup to create our own [Pro Network of Go Developers](https://meetup.com/pro/go)
 providing Go developers a single place to search for local user groups, events, and
 see what other Gophers are doing around the world.
 
@@ -26,7 +27,7 @@
 for that city and be provided with the latest news, information, conduct policies, and
 procedures. GDN groups will have Meetup fees paid by the GDN and will have access to
 special swag and other fun items. Each organizer of a GDN local group will continue to
-own the group and maintain full admin rights. *If*you*currently*run*a*user*group*,
-please fill out this [[https://j.mp/gdn-form][application]] to request to join the GDN.
+own the group and maintain full admin rights. **If you currently run a user group**,
+please fill out this [application](https://j.mp/gdn-form) to request to join the GDN.
 
 We hope you are as excited about the GDN as we are.
diff --git a/content/go-fmt-your-code.article b/content/go-fmt-your-code.article
index 7b560d7..91d41f7 100644
--- a/content/go-fmt-your-code.article
+++ b/content/go-fmt-your-code.article
@@ -1,27 +1,28 @@
-go fmt your code
+# go fmt your code
 23 Jan 2013
 Tags: gofix, gofmt, technical
+Summary: [Gofmt](https://golang.org/cmd/gofmt/) is a tool that automatically formats Go source code.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-[[https://golang.org/cmd/gofmt/][Gofmt]] is a tool that automatically formats Go source code.
+[Gofmt](https://golang.org/cmd/gofmt/) is a tool that automatically formats Go source code.
 
 Gofmt'd code is:
 
-- easier to *write*: never worry about minor formatting concerns while hacking away,
+  - easier to **write**: never worry about minor formatting concerns while hacking away,
 
-- easier to *read*: when all code looks the same you need not mentally convert
-  others' formatting style into something you can understand.
+  - easier to **read**: when all code looks the same you need not mentally convert
+    others' formatting style into something you can understand.
 
-- easier to *maintain*: mechanical changes to the source don't cause unrelated
-  changes to the file's formatting;
-  diffs show only the real changes.
+  - easier to **maintain**: mechanical changes to the source don't cause unrelated
+    changes to the file's formatting;
+    diffs show only the real changes.
 
-- *uncontroversial*: never have a debate about spacing or brace position ever again!
+  - **uncontroversial**: never have a debate about spacing or brace position ever again!
 
-* Format your code
+## Format your code
 
 We recently conducted a survey of Go packages in the wild and found that
 about 70% of them are formatted according to gofmt's rules.
@@ -30,35 +31,35 @@
 
 To format your code, you can use the gofmt tool directly:
 
-	 gofmt -w yourcode.go
+	gofmt -w yourcode.go
 
-Or you can use the "[[https://golang.org/cmd/go/#hdr-Run_gofmt_on_package_sources][go fmt]]" command:
+Or you can use the "[go fmt](https://golang.org/cmd/go/#hdr-Run_gofmt_on_package_sources)" command:
 
-	 go fmt path/to/your/package
+	go fmt path/to/your/package
 
 To help keep your code in the canonical style,
 the Go repository contains hooks for editors and version control systems
 that make it easy to run gofmt on your code.
 
-For Vim users, the [[https://github.com/fatih/vim-go][Vim plugin for Go]]
+For Vim users, the [Vim plugin for Go](https://github.com/fatih/vim-go)
 includes the :Fmt command that runs gofmt on the current buffer.
 
-For emacs users, [[https://github.com/dominikh/go-mode.el][go-mode.el]]
+For emacs users, [go-mode.el](https://github.com/dominikh/go-mode.el)
 provides a gofmt-before-save hook that can be installed by adding this line
 to your .emacs file:
 
-	 (add-hook 'before-save-hook #'gofmt-before-save)
+	(add-hook 'before-save-hook #'gofmt-before-save)
 
-For Eclipse or Sublime Text users, the [[https://github.com/GoClipse/goclipse][GoClipse]]
-and [[https://github.com/DisposaBoy/GoSublime][GoSublime]] projects add
+For Eclipse or Sublime Text users, the [GoClipse](https://github.com/GoClipse/goclipse)
+and [GoSublime](https://github.com/DisposaBoy/GoSublime) projects add
 a gofmt facility to those editors.
 
-And for Git aficionados, the [[https://github.com/golang/go/blob/release-branch.go1.1/misc/git/pre-commit][misc/git/pre-commit script]]
+And for Git aficionados, the [misc/git/pre-commit script](https://github.com/golang/go/blob/release-branch.go1.1/misc/git/pre-commit)
 is a pre-commit hook that prevents incorrectly-formatted Go code from being committed.
-If you use Mercurial, the [[https://bitbucket.org/fhs/hgstyle/overview][hgstyle plugin]]
+If you use Mercurial, the [hgstyle plugin](https://bitbucket.org/fhs/hgstyle/overview)
 provides a gofmt pre-commit hook.
 
-* Mechanical source transformation
+## Mechanical source transformation
 
 One of the greatest virtues of machine-formatted code is that it can be
 transformed mechanically without generating unrelated formatting noise in the diffs.
@@ -70,32 +71,32 @@
 The easiest way to mechanically manipulate Go code is with gofmt's -r flag.
 The flag specifies a rewrite rule of the form
 
-	 pattern -> replacement
+	pattern -> replacement
 
 where both pattern and replacement are valid Go expressions.
 In the pattern, single-character lowercase identifiers serve as wildcards
 matching arbitrary sub-expressions,
 and those expressions are substituted for the same identifiers in the replacement.
 
-For example, this[[https://golang.org/cl/7038051][ recent change]] to the
-Go core rewrote some uses of [[https://golang.org/pkg/bytes/#Compare][bytes.Compare]]
-to use the more efficient [[https://golang.org/pkg/bytes/#Equal][bytes.Equal]].
+For example, this[ recent change](https://golang.org/cl/7038051) to the
+Go core rewrote some uses of [bytes.Compare](https://golang.org/pkg/bytes/#Compare)
+to use the more efficient [bytes.Equal](https://golang.org/pkg/bytes/#Equal).
 The contributor made the change using just two gofmt invocations:
 
-	 gofmt -r 'bytes.Compare(a, b) == 0 -> bytes.Equal(a, b)'
-	 gofmt -r 'bytes.Compare(a, b) != 0 -> !bytes.Equal(a, b)'
+	gofmt -r 'bytes.Compare(a, b) == 0 -> bytes.Equal(a, b)'
+	gofmt -r 'bytes.Compare(a, b) != 0 -> !bytes.Equal(a, b)'
 
-Gofmt also enables [[https://golang.org/cmd/fix/][gofix]],
+Gofmt also enables [gofix](https://golang.org/cmd/fix/),
 which can make arbitrarily complex source transformations.
 Gofix was an invaluable tool during the early days when we regularly made
 breaking changes to the language and libraries.
 For example, before Go 1 the built-in error interface didn't exist and the
 convention was to use the os.Error type.
-When we [[https://golang.org/doc/go1.html#errors][introduced error]],
+When we [introduced error](https://golang.org/doc/go1.html#errors),
 we provided a gofix module that rewrote all references to os.Error and its
-associated helper functions to use error and the new [[https://golang.org/pkg/errors/][errors package]].
+associated helper functions to use error and the new [errors package](https://golang.org/pkg/errors/).
 It would have been daunting to attempt by hand,
 but with the code in a standard format it was relatively easy to prepare,
 execute, and review this change which touched almost all Go code in existence.
 
-For more about gofix, see [[https://blog.golang.org/introducing-gofix][this article]].
+For more about gofix, see [this article](https://blog.golang.org/introducing-gofix).
diff --git a/content/go-fonts.article b/content/go-fonts.article
index f5e0aca..9af33a2 100644
--- a/content/go-fonts.article
+++ b/content/go-fonts.article
@@ -1,5 +1,6 @@
-Go fonts
+# Go fonts
 16 Nov 2016
+Summary: The experimental user interface toolkit being built at [`golang.org/x/exp/shiny`](https://godoc.org/golang.org/x/exp/shiny) includes several text elements, but there is a problem with testing them: What font should be used? Answering this question led us to today's announcement, the release of a family of high-quality [WGL4](https://en.wikipedia.org/wiki/Windows_Glyph_List_4) TrueType fonts, created by the [Bigelow & Holmes](http://bigelowandholmes.typepad.com/) type foundry specifically for the Go project.
 
 Nigel Tao
 
@@ -7,15 +8,15 @@
 
 Rob Pike
 
-* An Announcement
+## An Announcement
 
 The experimental user interface toolkit being built at
-[[https://godoc.org/golang.org/x/exp/shiny][`golang.org/x/exp/shiny`]]
+[`golang.org/x/exp/shiny`](https://godoc.org/golang.org/x/exp/shiny)
 includes several text elements, but there is a problem with testing them:
 What font should be used?
 Answering this question led us to today's announcement,
-the release of a family of high-quality [[https://en.wikipedia.org/wiki/Windows_Glyph_List_4][WGL4]] TrueType fonts,
-created by the [[http://bigelowandholmes.typepad.com/][Bigelow & Holmes]] type foundry specifically for the Go project.
+the release of a family of high-quality [WGL4](https://en.wikipedia.org/wiki/Windows_Glyph_List_4) TrueType fonts,
+created by the [Bigelow & Holmes](http://bigelowandholmes.typepad.com/) type foundry specifically for the Go project.
 
 The font family, called Go (naturally), includes proportional- and fixed-width faces in normal,
 bold, and italic renderings.
@@ -37,7 +38,7 @@
 
 .image go-fonts/go-mono.png _ 600
 
-* How to use them
+## How to use them
 
 If you just want the TTF files, run
 
@@ -49,8 +50,8 @@
 
 	font, err := truetype.Parse(goregular.TTF)
 
-The [[https://godoc.org/github.com/golang/freetype/truetype][`github.com/golang/freetype/truetype`]]
-package provides the [[https://godoc.org/github.com/golang/freetype/truetype#Parse][`truetype.Parse`]] function today.
+The [`github.com/golang/freetype/truetype`](https://godoc.org/github.com/golang/freetype/truetype)
+package provides the [`truetype.Parse`](https://godoc.org/github.com/golang/freetype/truetype#Parse) function today.
 There is also work underway to add a TrueType package under `golang.org/x`
 again licensed under the same open source license as the rest of the Go project's software.
 
@@ -58,14 +59,14 @@
 but for an overview of the fonts' design we asked Chuck Bigelow to provide some background.
 The remainder of this blog post is his response.
 
-* Notes on the fonts, by Chuck Bigelow
+## Notes on the fonts, by Chuck Bigelow
 
 The Go fonts are divided into two sets, Go proportional, which is
 sans-serif, and Go Mono, which is slab-serif.
 
-* Go proportional fonts
+## Go proportional fonts
 
-** Sans-serif
+### Sans-serif
 
 Go proportional fonts are sans-serif, like several popular fonts
 for screen displays. There is some evidence that some sans-serif
@@ -75,7 +76,7 @@
 seriffed faces, at least in the pair tested. [1] (The bracketed numbers
 refer to the references listed at the end of this article.)
 
-** Style
+### Style
 
 Go sans-serif fonts are "humanist" rather than "grotesque" in
 style. This is an historical distinction, not an aesthetic judgment.
@@ -91,7 +92,7 @@
 traces of pen-written calligraphy. There is some evidence that
 humanist fonts are more legible than grotesque fonts. [2]
 
-** Italics
+### Italics
 
 Go proportional italics have the same width metrics as the roman
 fonts. Go italics are oblique versions of the romans, with one
@@ -105,7 +106,7 @@
 
 .image go-fonts/abdgpq-proportional.png
 
-** The x-height
+### The x-height
 
 The x-height of a typeface is the height of the lowercase 'x' relative
 to the body size. The x-height of Go fonts is 53.0% of body size, a
@@ -116,7 +117,7 @@
 (particularly x-height) and reading noted that types for reading on
 screens and for small sizes tend to have large x-heights. [4]
 
-** DIN Legibility Standard
+### DIN Legibility Standard
 
 The recent German DIN 1450 legibility standard recommends
 several features for font legibility, including differentiation of
@@ -127,7 +128,7 @@
 b d p q follow the natural asymmetries of legible Renaissance
 handwriting, aiding differentiation to reduce confusion. [5]
 
-** Weights
+### Weights
 
 The Go proportional fonts come in three weights: Normal, Medium,
 and Bold. The Normal weight is strong enough that it maintains
@@ -145,7 +146,7 @@
 bold weight of a normal font. More discussion of the relationship of
 stem thicknesses, weight names, and CSS numbering is in [6].
 
-** WGL4 character set
+### WGL4 character set
 
 The WGL4 character set, originally developed by Microsoft, is often
 used as an informal standard character set. WGL4 includes Western
@@ -154,7 +155,7 @@
 totalling more than 650 characters in all. The Go WGL4 fonts can
 be used to compose a wide range of languages. [7]
 
-** Metric compatibility with Arial and Helvetica
+### Metric compatibility with Arial and Helvetica
 
 The Go sans-serif fonts are nearly metrically compatible with
 standard Helvetica or Arial characters. Texts set in Go occupy
@@ -164,9 +165,9 @@
 wider than corresponding letters in Helvetica or Arial, so some
 texts set in Go may take slightly more space.
 
-* Go Mono fonts
+## Go Mono fonts
 
-** Monospaced
+### Monospaced
 
 Go Mono fonts are monospaced—each letter has the same width as
 the other letters. Monospaced fonts have been used in programming
@@ -177,18 +178,18 @@
 but they did have great mathematicians and a great sense of symmetry
 and pattern that shaped their alphabet.)
 
-** Slab-serif
+### Slab-serif
 
 The Go Mono fonts have slab-shaped serifs, giving them a sturdy
 appearance.
 
-** Style
+### Style
 
 The underlying letter shapes of Go Mono are, like the Go sans-serif fonts,
 derived from humanist handwriting, but the monospacing and slab serifs
 tend to obscure the historical and stylistic connections.
 
-** Italics
+### Italics
 
 Go Mono Italics are oblique versions of the romans, with the exception
 that the italic lowercase 'a' is redesigned as a cursive single-story form
@@ -199,7 +200,7 @@
 
 .image go-fonts/abdgpq-mono.png
 
-** The x-height
+### The x-height
 
 Go Mono fonts have the same x-height as Go sans-serif fonts, 53% of
 the body size. Go Mono looks almost 18% bigger than Courier, which
@@ -207,7 +208,7 @@
 as Courier, so the bigger look is gained with no loss of economy in
 characters per line.
 
-** DIN Legibility Standard
+### DIN Legibility Standard
 
 Go Mono fonts conform to the DIN 1450 standard by differentiating
 zero from capital O; numeral 1 from capital I (eye) and lowercase l (ell);
@@ -215,7 +216,7 @@
 bowls of b d p q follow the natural asymmetries of legible Renaissance
 handwriting, aiding differentiation and reducing confusion.
 
-** Weights
+### Weights
 
 Go Mono fonts have two weights: Normal and Bold. The normal weight
 stem is the same as in Go Normal and thus maintains clarity on backlit
@@ -226,7 +227,7 @@
 monospaced normal, the bold Mono appears slightly bolder than the
 proportional Go Bold, as more black pixels are put into the same area.)
 
-** Metric compatibility with popular monospaced fonts
+### Metric compatibility with popular monospaced fonts
 
 Go Mono is metrically compatible with Courier and other monospaced
 fonts that match the "Pica" typewriter type widths of 10 characters per
@@ -234,7 +235,7 @@
 per inch. The TrueType fonts are scalable, of course, so Go Mono can
 be set at any size.
 
-** WGL4 character set
+### WGL4 character set
 
 The Go Mono fonts offer the WGL4 character set often used as an
 informal standard character set. WGL4 includes Western and Eastern
@@ -242,7 +243,7 @@
 additional symbols, signs, and graphical characters. The 650+ characters
 of the Go WGL4 sets can be used for a wide range of languages.
 
-* References
+## References
 
 [1] Morris, R. A., Aquilante, K., Yager, D., & Bigelow, C.
 (2002, May). P‐13: Serifs Slow RSVP Reading at Very Small Sizes,
@@ -286,12 +287,12 @@
 Swiss German, Taita, Teso, Turkish, Turkmen, Upper Sorbian, Vunjo,
 Walser, Welsh, Zulu
 
-* Jabberwocky in Go Regular
+## Jabberwocky in Go Regular
 
-From [[https://en.wikipedia.org/wiki/Jabberwocky]]:
+From [en.wikipedia.org/wiki/Jabberwocky](https://en.wikipedia.org/wiki/Jabberwocky):
 
 .image go-fonts/go-font-jabberwocky.png _ 500
 
-There is no Greek version listed. Instead, a pangram from [[http://clagnut.com/blog/2380/#Greek]]:
+There is no Greek version listed. Instead, a pangram from [clagnut.com/blog/2380/#Greek](http://clagnut.com/blog/2380/#Greek):
 
 .image go-fonts/go-font-greek.png _ 530
diff --git a/content/go-for-app-engine-is-now-generally.article b/content/go-for-app-engine-is-now-generally.article
index d1a2ac1..d4ba483 100644
--- a/content/go-for-app-engine-is-now-generally.article
+++ b/content/go-for-app-engine-is-now-generally.article
@@ -1,34 +1,35 @@
-Go for App Engine is now generally available
+# Go for App Engine is now generally available
 21 Jul 2011
 Tags: appengine, release
+Summary: The Go and App Engine teams are excited to announce that the Go runtime for App Engine is now generally available. This means you can take that Go app you've been working on (or meaning to work on) and deploy it to App Engine right now with the new [1.5.2 SDK](http://code.google.com/appengine/downloads.html).
 
 Andrew Gerrand
 
-* Introduction
+##
 
 The Go and App Engine teams are excited to announce that the Go runtime
 for App Engine is now generally available.
 This means you can take that Go app you've been working on (or meaning to
-work on) and deploy it to App Engine right now with the new [[http://code.google.com/appengine/downloads.html][1.5.2 SDK]].
+work on) and deploy it to App Engine right now with the new [1.5.2 SDK](http://code.google.com/appengine/downloads.html).
 
-Since we announced the Go runtime at Google I/O we have continued to [[http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes][improve and extend]]
+Since we announced the Go runtime at Google I/O we have continued to [improve and extend](http://code.google.com/p/googleappengine/wiki/SdkForGoReleaseNotes)
 Go support for the App Engine APIs and have added the Channels API.
 The Go Datastore API now supports transactions and ancestor queries, too.
-See the [[https://code.google.com/appengine/docs/go/][Go App Engine documentation]]
+See the [Go App Engine documentation](https://code.google.com/appengine/docs/go/)
 for all the details.
 
 For those who have been using the Go SDK already,
 please note that the 1.5.2 release introduces `api_version` 2.
 This is because the new SDK is based on Go `release.r58.1` (the current
 stable version of Go) and is not backwards compatible with the previous release.
-Existing apps may require changes as per the [[https://golang.org/doc/devel/release.html#r58][r58 release notes]].
+Existing apps may require changes as per the [r58 release notes](https://golang.org/doc/devel/release.html#r58).
 Once you've updated your code, you should redeploy your app with the line
-`api_version:`2` in its `app.yaml` file.
+`api_version: 2` in its `app.yaml` file.
 Apps written against `api_version` 1 will stop working after the 18th of August.
 
 Finally, we owe a huge thanks to our trusted testers and their many bug reports.
 Their help was invaluable in reaching this important milestone.
 
-_The_fastest_way_to_get_started_with_Go_on_App_Engine_is_with_the_ [[http://code.google.com/appengine/docs/go/gettingstarted/][_Getting_Started_guide_]].
+_The fastest way to get started with Go on App Engine is with the_ [_Getting Started guide_](http://code.google.com/appengine/docs/go/gettingstarted/).
 
-_Note_that_the_Go_runtime_is_still_considered_experimental;_it_is_not_as_well-supported_as_the_Python_and_Java_runtimes._
+_Note that the Go runtime is still considered experimental; it is not as well-supported as the Python and Java runtimes._
diff --git a/content/go-image-package.article b/content/go-image-package.article
index 2626864..18eb920 100644
--- a/content/go-image-package.article
+++ b/content/go-image-package.article
@@ -1,22 +1,23 @@
-The Go image package
+# The Go image package
 21 Sep 2011
 Tags: image, libraries, technical
+Summary: The [image](https://golang.org/pkg/image/) and [image/color](https://golang.org/pkg/image/color/) packages define a number of types: `color.Color` and `color.Model` describe colors, `image.Point` and `image.Rectangle` describe basic 2-D geometry, and `image.Image` brings the two concepts together to represent a rectangular grid of colors. A [separate article](https://golang.org/doc/articles/image_draw.html) covers image composition with the [image/draw](https://golang.org/pkg/image/draw/) package.
 
 Nigel Tao
 
-* Introduction
+## Introduction
 
-The [[https://golang.org/pkg/image/][image]] and [[https://golang.org/pkg/image/color/][image/color]]
+The [image](https://golang.org/pkg/image/) and [image/color](https://golang.org/pkg/image/color/)
 packages define a number of types:
 `color.Color` and `color.Model` describe colors,
 `image.Point` and `image.Rectangle` describe basic 2-D geometry,
 and `image.Image` brings the two concepts together to represent a rectangular grid of colors.
-A [[https://golang.org/doc/articles/image_draw.html][separate article]]
-covers image composition with the [[https://golang.org/pkg/image/draw/][image/draw]] package.
+A [separate article](https://golang.org/doc/articles/image_draw.html)
+covers image composition with the [image/draw](https://golang.org/pkg/image/draw/) package.
 
-* Colors and Color Models
+## Colors and Color Models
 
-[[https://golang.org/pkg/image/color/#Color][Color]] is an interface that
+[Color](https://golang.org/pkg/image/color/#Color) is an interface that
 defines the minimal method set of any type that can be considered a color:
 one that can be converted to red, green, blue and alpha values.
 The conversion may be lossy, such as converting from CMYK or YCbCr color spaces.
@@ -39,7 +40,7 @@
 to guarantee that multiplying two values together won't overflow.
 Such multiplications occur when blending two colors according to an alpha
 mask from a third color,
-in the style of [[https://en.wikipedia.org/wiki/Alpha_compositing][Porter and Duff's]] classic algebra:
+in the style of [Porter and Duff's](https://en.wikipedia.org/wiki/Alpha_compositing) classic algebra:
 
 	dstr, dstg, dstb, dsta := dst.RGBA()
 	srcr, srcg, srcb, srca := src.RGBA()
@@ -55,7 +56,7 @@
 
 The image/color package also defines a number of concrete types that implement
 the `Color` interface.
-For example, [[https://golang.org/pkg/image/color/#RGBA][`RGBA`]] is a struct
+For example, [`RGBA`](https://golang.org/pkg/image/color/#RGBA) is a struct
 that represents the classic "8 bits per channel" color.
 
 	type RGBA struct {
@@ -66,16 +67,16 @@
 in the range [0, 255].
 `RGBA` satisfies the `Color` interface by multiplying that value by 0x101
 to generate a 16-bit alpha-premultiplied color in the range [0, 65535].
-Similarly, the [[https://golang.org/pkg/image/color/#NRGBA][`NRGBA`]] struct
+Similarly, the [`NRGBA`](https://golang.org/pkg/image/color/#NRGBA) struct
 type represents an 8-bit non-alpha-premultiplied color,
 as used by the PNG image format.
 When manipulating an `NRGBA`'s fields directly,
 the values are non-alpha-premultiplied, but when calling the `RGBA` method,
 the return values are alpha-premultiplied.
 
-A [[https://golang.org/pkg/image/color/#Model][`Model`]] is simply something
+A [`Model`](https://golang.org/pkg/image/color/#Model) is simply something
 that can convert `Color`s to other `Color`s, possibly lossily.
-For example, the `GrayModel` can convert any `Color` to a desaturated [[https://golang.org/pkg/image/color/#Gray][`Gray`]].
+For example, the `GrayModel` can convert any `Color` to a desaturated [`Gray`](https://golang.org/pkg/image/color/#Gray).
 A `Palette` can convert any `Color` to one from a limited palette.
 
 	type Model interface {
@@ -84,9 +85,9 @@
 
 	type Palette []Color
 
-* Points and Rectangles
+## Points and Rectangles
 
-A [[https://golang.org/pkg/image/#Point][`Point`]] is an (x,
+A [`Point`](https://golang.org/pkg/image/#Point) is an (x,
 y) co-ordinate on the integer grid, with axes increasing right and down.
 It is neither a pixel nor a grid square. A `Point` has no intrinsic width,
 height or color, but the visualizations below use a small colored square.
@@ -97,9 +98,9 @@
 
 .image go-image-package_image-package-01.png
 
-	    p := image.Point{2, 1}
+	p := image.Point{2, 1}
 
-A [[https://golang.org/pkg/image/#Rectangle][`Rectangle`]] is an axis-aligned
+A [`Rectangle`](https://golang.org/pkg/image/#Rectangle) is an axis-aligned
 rectangle on the integer grid,
 defined by its top-left and bottom-right `Point`.
 A `Rectangle` also has no intrinsic color,
@@ -110,11 +111,11 @@
 	    Min, Max Point
 	}
 
-For convenience, `image.Rect(x0,`y0,`x1,`y1)` is equivalent to `image.Rectangle{image.Point{x0,`y0},`image.Point{x1,`y1}}`,
+For convenience, `image.Rect(x0, y0, x1, y1)` is equivalent to `image.Rectangle{image.Point{x0, y0}, image.Point{x1, y1}}`,
 but is much easier to type.
 
 A `Rectangle` is inclusive at the top-left and exclusive at the bottom-right.
-For a `Point`p` and a `Rectangle`r`, `p.In(r)` if and only if `r.Min.X`<=`p.X`&&`p.X`<`r.Max.X`,
+For a `Point p` and a `Rectangle r`, `p.In(r)` if and only if `r.Min.X <= p.X && p.X < r.Max.X`,
 and similarly for `Y`.
 This is analogous to how a slice `s[i0:i1]` is inclusive at the low end
 and exclusive at the high end.
@@ -122,34 +123,34 @@
 
 .image go-image-package_image-package-02.png
 
-	    r := image.Rect(2, 1, 5, 5)
-	    // Dx and Dy return a rectangle's width and height.
-	    fmt.Println(r.Dx(), r.Dy(), image.Pt(0, 0).In(r)) // prints 3 4 false
+	r := image.Rect(2, 1, 5, 5)
+	// Dx and Dy return a rectangle's width and height.
+	fmt.Println(r.Dx(), r.Dy(), image.Pt(0, 0).In(r)) // prints 3 4 false
 
 Adding a `Point` to a `Rectangle` translates the `Rectangle`.
 Points and Rectangles are not restricted to be in the bottom-right quadrant.
 
 .image go-image-package_image-package-03.png
 
-	    r := image.Rect(2, 1, 5, 5).Add(image.Pt(-4, -2))
-	    fmt.Println(r.Dx(), r.Dy(), image.Pt(0, 0).In(r)) // prints 3 4 true
+	r := image.Rect(2, 1, 5, 5).Add(image.Pt(-4, -2))
+	fmt.Println(r.Dx(), r.Dy(), image.Pt(0, 0).In(r)) // prints 3 4 true
 
 Intersecting two Rectangles yields another Rectangle, which may be empty.
 
 .image go-image-package_image-package-04.png
 
-	    r := image.Rect(0, 0, 4, 3).Intersect(image.Rect(2, 2, 5, 5))
-	    // Size returns a rectangle's width and height, as a Point.
-	    fmt.Printf("%#v\n", r.Size()) // prints image.Point{X:2, Y:1}
+	r := image.Rect(0, 0, 4, 3).Intersect(image.Rect(2, 2, 5, 5))
+	// Size returns a rectangle's width and height, as a Point.
+	fmt.Printf("%#v\n", r.Size()) // prints image.Point{X:2, Y:1}
 
 Points and Rectangles are passed and returned by value.
 A function that takes a `Rectangle` argument will be as efficient as a function
 that takes two `Point` arguments,
 or four `int` arguments.
 
-* Images
+## Images
 
-An [[https://golang.org/pkg/image/#Image][Image]] maps every grid square
+An [Image](https://golang.org/pkg/image/#Image) maps every grid square
 in a `Rectangle` to a `Color` from a `Model`.
 "The pixel at (x, y)" refers to the color of the grid square defined by the points (x,
 y), (x+1, y), (x+1, y+1) and (x, y+1).
@@ -180,7 +181,7 @@
 	}
 
 `Image` implementations do not have to be based on an in-memory slice of pixel data.
-For example, a [[https://golang.org/pkg/image/#Uniform][`Uniform`]] is an
+For example, a [`Uniform`](https://golang.org/pkg/image/#Uniform) is an
 `Image` of enormous bounds and uniform color,
 whose in-memory representation is simply that color.
 
@@ -189,7 +190,7 @@
 	}
 
 Typically, though, programs will want an image based on a slice.
-Struct types like [[https://golang.org/pkg/image/#RGBA][`RGBA`]] and [[https://golang.org/pkg/image/#Gray][`Gray`]]
+Struct types like [`RGBA`](https://golang.org/pkg/image/#RGBA) and [`Gray`](https://golang.org/pkg/image/#Gray)
 (which other packages refer to as `image.RGBA` and `image.Gray`) hold slices
 of pixel data and implement the `Image` interface.
 
@@ -203,10 +204,10 @@
 	    Rect Rectangle
 	}
 
-These types also provide a `Set(x,`y`int,`c`color.Color)` method that allows modifying the image one pixel at a time.
+These types also provide a `Set(x, y int, c color.Color)` method that allows modifying the image one pixel at a time.
 
-	    m := image.NewRGBA(image.Rect(0, 0, 640, 480))
-	    m.Set(5, 5, color.RGBA{255, 0, 0, 255})
+	m := image.NewRGBA(image.Rect(0, 0, 640, 480))
+	m.Set(5, 5, color.RGBA{255, 0, 0, 255})
 
 If you're reading or writing a lot of pixel data,
 it can be more efficient, but more complicated,
@@ -220,23 +221,23 @@
 
 .image go-image-package_image-package-05.png
 
-	    m0 := image.NewRGBA(image.Rect(0, 0, 8, 5))
-	    m1 := m0.SubImage(image.Rect(1, 2, 5, 5)).(*image.RGBA)
-	    fmt.Println(m0.Bounds().Dx(), m1.Bounds().Dx()) // prints 8, 4
-	    fmt.Println(m0.Stride == m1.Stride)             // prints true
+	m0 := image.NewRGBA(image.Rect(0, 0, 8, 5))
+	m1 := m0.SubImage(image.Rect(1, 2, 5, 5)).(*image.RGBA)
+	fmt.Println(m0.Bounds().Dx(), m1.Bounds().Dx()) // prints 8, 4
+	fmt.Println(m0.Stride == m1.Stride)             // prints true
 
 For low-level code that works on an image's `Pix` field,
 be aware that ranging over `Pix` can affect pixels outside an image's bounds.
 In the example above, the pixels covered by `m1.Pix` are shaded in blue.
-Higher-level code, such as the `At` and `Set` methods or the [[https://golang.org/pkg/image/draw/][image/draw package]],
+Higher-level code, such as the `At` and `Set` methods or the [image/draw package](https://golang.org/pkg/image/draw/),
 will clip their operations to the image's bounds.
 
-* Image Formats
+## Image Formats
 
 The standard package library supports a number of common image formats,
 such as GIF, JPEG and PNG.
 If you know the format of a source image file,
-you can decode from an [[https://golang.org/pkg/io/#Reader][`io.Reader`]] directly.
+you can decode from an [`io.Reader`](https://golang.org/pkg/io/#Reader) directly.
 
 	import (
 	 "image/jpeg"
@@ -254,7 +255,7 @@
 	}
 
 If you have image data of unknown format,
-the [[https://golang.org/pkg/image/#Decode][`image.Decode`]] function can detect the format.
+the [`image.Decode`](https://golang.org/pkg/image/#Decode) function can detect the format.
 The set of recognized formats is constructed at run time and is not limited
 to those in the standard package library.
 An image format package typically registers its format in an init function,
diff --git a/content/go-imagedraw-package.article b/content/go-imagedraw-package.article
index a28bc5d..9e24c14 100644
--- a/content/go-imagedraw-package.article
+++ b/content/go-imagedraw-package.article
@@ -1,12 +1,13 @@
-The Go image/draw package
+# The Go image/draw package
 29 Sep 2011
 Tags: draw, image, libraries, technical
+Summary: [Package image/draw](https://golang.org/pkg/image/draw/) defines only one operation: drawing a source image onto a destination image, through an optional mask image. This one operation is surprisingly versatile and can perform a number of common image manipulation tasks elegantly and efficiently.
 
 Nigel Tao
 
-* Introduction
+## Introduction
 
-[[https://golang.org/pkg/image/draw/][Package image/draw]] defines only one operation:
+[Package image/draw](https://golang.org/pkg/image/draw/) defines only one operation:
 drawing a source image onto a destination image,
 through an optional mask image.
 This one operation is surprisingly versatile and can perform a number of
@@ -16,12 +17,12 @@
 library and the X Render extension.
 The model is based on the classic "Compositing Digital Images" paper by Porter and Duff,
 with an additional mask parameter:
-`dst`=`(src`IN`mask)`OP`dst`.
-For a fully opaque mask, this reduces to the original Porter-Duff formula: `dst`=`src`OP`dst`.
+`dst = (src IN mask) OP dst`.
+For a fully opaque mask, this reduces to the original Porter-Duff formula: `dst = src OP dst`.
 In Go, a nil mask image is equivalent to an infinitely sized,
 fully opaque mask image.
 
-The Porter-Duff paper presented [[http://www.w3.org/TR/SVGCompositing/examples/compop-porterduff-examples.png][12 different composition operators]],
+The Porter-Duff paper presented [12 different composition operators](http://www.w3.org/TR/SVGCompositing/examples/compop-porterduff-examples.png),
 but with an explicit mask, only 2 of these are needed in practice:
 source-over-destination and source.
 In Go, these operators are represented by the `Over` and `Src` constants.
@@ -34,7 +35,7 @@
 For fully opaque source and mask images, the two operators produce the same output,
 but the `Src` operator is usually faster.
 
-* Geometric Alignment
+## Geometric Alignment
 
 Composition requires associating destination pixels with source and mask pixels.
 Obviously, this requires destination, source and mask images,
@@ -59,10 +60,10 @@
 
 .image go-imagedraw-package_20.png
 
-The [[https://golang.org/pkg/image/draw/#DrawMask][`DrawMask`]] function
+The [`DrawMask`](https://golang.org/pkg/image/draw/#DrawMask) function
 takes seven arguments,
 but an explicit mask and mask-point are usually unnecessary,
-so the [[https://golang.org/pkg/image/draw/#Draw][`Draw`]] function takes five:
+so the [`Draw`](https://golang.org/pkg/image/draw/#Draw) function takes five:
 
 	// Draw calls DrawMask with a nil mask.
 	func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)
@@ -70,14 +71,14 @@
 	 mask image.Image, mp image.Point, op Op)
 
 The destination image must be mutable, so the image/draw package defines
-a [[https://golang.org/pkg/image/draw/#Image][`draw.Image`]] interface which has a `Set` method.
+a [`draw.Image`](https://golang.org/pkg/image/draw/#Image) interface which has a `Set` method.
 
 	type Image interface {
 	    image.Image
 	    Set(x, y int, c color.Color)
 	}
 
-* Filling a Rectangle
+## Filling a Rectangle
 
 To fill a rectangle with a solid color, use an `image.Uniform` source.
 The `ColorImage` type re-interprets a `Color` as a practically infinite-sized
@@ -86,42 +87,42 @@
 there is no need for an explicit "repeat bit" in Go's slice-based image types;
 the concept is subsumed by `Uniform`.
 
-	    // image.ZP is the zero point -- the origin.
-	    draw.Draw(dst, r, &image.Uniform{c}, image.ZP, draw.Src)
+	// image.ZP is the zero point -- the origin.
+	draw.Draw(dst, r, &image.Uniform{c}, image.ZP, draw.Src)
 
 To initialize a new image to all-blue:
 
-	    m := image.NewRGBA(image.Rect(0, 0, 640, 480))
-	    blue := color.RGBA{0, 0, 255, 255}
-	    draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src)
+	m := image.NewRGBA(image.Rect(0, 0, 640, 480))
+	blue := color.RGBA{0, 0, 255, 255}
+	draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src)
 
 To reset an image to transparent (or black,
 if the destination image's color model cannot represent transparency),
 use `image.Transparent`, which is an `image.Uniform`:
 
-	    draw.Draw(m, m.Bounds(), image.Transparent, image.ZP, draw.Src)
+	draw.Draw(m, m.Bounds(), image.Transparent, image.ZP, draw.Src)
 
 .image go-imagedraw-package_2a.png
 
-* Copying an Image
+## Copying an Image
 
 To copy from a rectangle `sr` in the source image to a rectangle starting
 at a point `dp` in the destination,
 convert the source rectangle into the destination image's co-ordinate space:
 
-	    r := image.Rectangle{dp, dp.Add(sr.Size())}
-	    draw.Draw(dst, r, src, sr.Min, draw.Src)
+	r := image.Rectangle{dp, dp.Add(sr.Size())}
+	draw.Draw(dst, r, src, sr.Min, draw.Src)
 
 Alternatively:
 
-	    r := sr.Sub(sr.Min).Add(dp)
-	    draw.Draw(dst, r, src, sr.Min, draw.Src)
+	r := sr.Sub(sr.Min).Add(dp)
+	draw.Draw(dst, r, src, sr.Min, draw.Src)
 
-To copy the entire source image, use `sr`=`src.Bounds()`.
+To copy the entire source image, use `sr = src.Bounds()`.
 
 .image go-imagedraw-package_2b.png
 
-* Scrolling an Image
+## Scrolling an Image
 
 Scrolling an image is just copying an image to itself,
 with different destination and source rectangles.
@@ -129,16 +130,16 @@
 just as Go's built-in copy function can handle overlapping destination and source slices.
 To scroll an image m by 20 pixels:
 
-	    b := m.Bounds()
-	    p := image.Pt(0, 20)
-	    // Note that even though the second argument is b,
-	    // the effective rectangle is smaller due to clipping.
-	    draw.Draw(m, b, m, b.Min.Add(p), draw.Src)
-	    dirtyRect := b.Intersect(image.Rect(b.Min.X, b.Max.Y-20, b.Max.X, b.Max.Y))
+	b := m.Bounds()
+	p := image.Pt(0, 20)
+	// Note that even though the second argument is b,
+	// the effective rectangle is smaller due to clipping.
+	draw.Draw(m, b, m, b.Min.Add(p), draw.Src)
+	dirtyRect := b.Intersect(image.Rect(b.Min.X, b.Max.Y-20, b.Max.X, b.Max.Y))
 
 .image go-imagedraw-package_2c.png
 
-* Converting an Image to RGBA
+## Converting an Image to RGBA
 
 The result of decoding an image format might not be an `image.RGBA`:
 decoding a GIF results in an `image.Paletted`,
@@ -146,13 +147,13 @@
 and the result of decoding a PNG depends on the image data.
 To convert any image to an `image.RGBA`:
 
-	    b := src.Bounds()
-	    m := image.NewRGBA(image.Rect(0, 0, b.Dx(), b.Dy()))
-	    draw.Draw(m, m.Bounds(), src, b.Min, draw.Src)
+	b := src.Bounds()
+	m := image.NewRGBA(image.Rect(0, 0, b.Dx(), b.Dy()))
+	draw.Draw(m, m.Bounds(), src, b.Min, draw.Src)
 
 .image go-imagedraw-package_2d.png
 
-* Drawing Through a Mask
+## Drawing Through a Mask
 
 To draw an image through a circular mask with center `p` and radius `r`:
 
@@ -181,21 +182,21 @@
 
 .image go-imagedraw-package_2e.png
 
-* Drawing Font Glyphs
+## Drawing Font Glyphs
 
 To draw a font glyph in blue starting from a point `p`,
-draw with an `image.ColorImage` source and an `image.Alpha`mask`.
+draw with an `image.ColorImage` source and an `image.Alpha mask`.
 For simplicity, we aren't performing any sub-pixel positioning or rendering,
 or correcting for a font's height above a baseline.
 
-	    src := &image.Uniform{color.RGBA{0, 0, 255, 255}}
-	    mask := theGlyphImageForAFont()
-	    mr := theBoundsFor(glyphIndex)
-	    draw.DrawMask(dst, mr.Sub(mr.Min).Add(p), src, image.ZP, mask, mr.Min, draw.Over)
+	src := &image.Uniform{color.RGBA{0, 0, 255, 255}}
+	mask := theGlyphImageForAFont()
+	mr := theBoundsFor(glyphIndex)
+	draw.DrawMask(dst, mr.Sub(mr.Min).Add(p), src, image.ZP, mask, mr.Min, draw.Over)
 
 .image go-imagedraw-package_2f.png
 
-* Performance
+## Performance
 
 The image/draw package implementation demonstrates how to provide an image
 manipulation function that is both general purpose,
diff --git a/content/go-maps-in-action.article b/content/go-maps-in-action.article
index 9298c0d..42aaa47 100644
--- a/content/go-maps-in-action.article
+++ b/content/go-maps-in-action.article
@@ -1,23 +1,24 @@
-Go maps in action
+# Go maps in action
 6 Feb 2013
 Tags: map, technical
+Summary: One of the most useful data structures in computer science is the hash table. Many hash table implementations exist with varying properties, but in general they offer fast lookups, adds, and deletes. Go provides a built-in map type that implements a hash table.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 One of the most useful data structures in computer science is the hash table.
 Many hash table implementations exist with varying properties,
 but in general they offer fast lookups, adds, and deletes.
 Go provides a built-in map type that implements a hash table.
 
-* Declaration and initialization
+## Declaration and initialization
 
 A Go map type looks like this:
 
 	map[KeyType]ValueType
 
-where `KeyType` may be any type that is [[https://golang.org/ref/spec#Comparison_operators][comparable]]
+where `KeyType` may be any type that is [comparable](https://golang.org/ref/spec#Comparison_operators)
 (more on this later),
 and `ValueType` may be any type at all, including another map!
 
@@ -41,7 +42,7 @@
 In this article we will focus on the _use_ of maps,
 not their implementation.
 
-* Working with maps
+## Working with maps
 
 Go provides a familiar syntax for working with maps. This statement sets the key `"route"` to the value `66`:
 
@@ -51,7 +52,7 @@
 
 	i := m["route"]
 
-If the requested key doesn't exist, we get the value type's _zero_value_.
+If the requested key doesn't exist, we get the value type's _zero value_.
 In this case the value type is `int`, so the zero value is `0`:
 
 	j := m["root"]
@@ -99,7 +100,7 @@
 
 	m = map[string]int{}
 
-* Exploiting zero values
+## Exploiting zero values
 
 It can be convenient that a map retrieval yields a zero value when the key is not present.
 
@@ -137,10 +138,10 @@
 these last two examples will work even if nobody likes cheese or bacon (however
 unlikely that may be).
 
-* Key types
+## Key types
 
 As mentioned earlier, map keys may be of any type that is comparable.
-The [[https://golang.org/ref/spec#Comparison_operators][language spec]]
+The [language spec](https://golang.org/ref/spec#Comparison_operators)
 defines this precisely,
 but in short, comparable types are boolean,
 numeric, string, pointer, channel, and interface types,
@@ -193,13 +194,13 @@
 
 	n := hits[Key{"/ref/spec", "ch"}]
 
-* Concurrency
+## Concurrency
 
-[[https://golang.org/doc/faq#atomic_maps][Maps are not safe for concurrent use]]:
+[Maps are not safe for concurrent use](https://golang.org/doc/faq#atomic_maps):
 it's not defined what happens when you read and write to them simultaneously.
 If you need to read from and write to a map from concurrently executing goroutines,
 the accesses must be mediated by some kind of synchronization mechanism.
-One common way to protect maps is with [[https://golang.org/pkg/sync/#RWMutex][sync.RWMutex]].
+One common way to protect maps is with [sync.RWMutex](https://golang.org/pkg/sync/#RWMutex).
 
 This statement declares a `counter` variable that is an anonymous struct
 containing a map and an embedded `sync.RWMutex`.
@@ -222,7 +223,7 @@
 	counter.m["some_key"]++
 	counter.Unlock()
 
-* Iteration order
+## Iteration order
 
 When iterating over a map with a range loop,
 the iteration order is not specified and is not guaranteed to be the same
diff --git a/content/go-one-year-ago-today.article b/content/go-one-year-ago-today.article
index 5282a5c..777bf12 100644
--- a/content/go-one-year-ago-today.article
+++ b/content/go-one-year-ago-today.article
@@ -1,10 +1,11 @@
-Go: one year ago today
+# Go: one year ago today
 10 Nov 2010
 Tags: birthday
+Summary: On the 10th of November 2009 we launched the Go project: an open-source programming language with a focus on simplicity and efficiency. The intervening year has seen a great many developments both in the Go project itself and in its community.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 On the 10th of November 2009 we launched the Go project:
 an open-source programming language with a focus on simplicity and efficiency.
@@ -22,14 +23,14 @@
 a chord with a broad cross-section of the programming community.
 
 That cross-section grew to become a dedicated community of enthusiastic Go coders.
-Our [[http://groups.google.com/group/golang-nuts][mailing list]] has over 3,800 members,
+Our [mailing list](http://groups.google.com/group/golang-nuts) has over 3,800 members,
 with around 1,500 posts each month.
-The project has over 130 [[https://golang.org/CONTRIBUTORS][contributors]]
+The project has over 130 [contributors](https://golang.org/CONTRIBUTORS)
 (people who have submitted code or documentation),
 and of the 2,800 commits since launch almost one third were contributed
 by programmers outside the core team.
 To get all that code into shape, nearly 14,000 emails were exchanged on
-our [[http://groups.google.com/group/golang-dev][development mailing list]].
+our [development mailing list](http://groups.google.com/group/golang-dev).
 
 Those numbers reflect a labor whose fruits are evident in the project’s code base.
 The compilers have improved substantially,
@@ -42,27 +43,27 @@
 recently reaching the milestone of passing all tests.
 
 The Go tool set has been expanded and improved.
-The Go documentation tool, [[https://golang.org/cmd/godoc/][godoc]],
+The Go documentation tool, [godoc](https://golang.org/cmd/godoc/),
 now supports the documentation of other source trees (you can browse and
-search your own code) and provides a [[https://golang.org/doc/codewalk/]["code walk"]]
+search your own code) and provides a ["code walk"](https://golang.org/doc/codewalk/)
 interface for presenting tutorial materials (among many more improvements).
-[[https://golang.org/cmd/goinstall/][Goinstall]] ,
+[Goinstall](https://golang.org/cmd/goinstall/) ,
 a new package management tool, allows users to install and update external
 packages with a single command.
-[[https://golang.org/cmd/gofmt/][Gofmt]],
+[Gofmt](https://golang.org/cmd/gofmt/),
 the Go pretty-printer, now makes syntactic simplifications where possible.
-[[https://golang.org/misc/goplay/][Goplay]],
+[Goplay](https://golang.org/misc/goplay/),
 a web-based “compile-as-you-type” tool,
 is a convenient way to experiment with Go for those times when you don’t
-have access to the [[https://golang.org/doc/play/][Go Playground]].
+have access to the [Go Playground](https://golang.org/doc/play/).
 
 The standard library has grown by over 42,000 lines of code and includes
-20 new [[https://golang.org/pkg/][packages]].
-Among the additions are the [[https://golang.org/pkg/image/jpeg/][jpeg]],
-[[https://golang.org/pkg/rpc/jsonrpc/][jsonrpc]],
-[[https://golang.org/pkg/mime/][mime]], [[https://golang.org/pkg/netchan/][netchan]],
-and [[https://golang.org/pkg/smtp/][smtp]] packages,
-as well as a slew of new [[https://golang.org/pkg/crypto/][cryptography]] packages.
+20 new [packages](https://golang.org/pkg/).
+Among the additions are the [jpeg](https://golang.org/pkg/image/jpeg/),
+[jsonrpc](https://golang.org/pkg/rpc/jsonrpc/),
+[mime](https://golang.org/pkg/mime/), [netchan](https://golang.org/pkg/netchan/),
+and [smtp](https://golang.org/pkg/smtp/) packages,
+as well as a slew of new [cryptography](https://golang.org/pkg/crypto/) packages.
 More generally, the standard library has been continuously refined and revised
 as our understanding of Go’s idioms deepens.
 
@@ -70,29 +71,29 @@
 Recent improvements to the DWARF output of the gc compilers make the GNU debugger,
 GDB, useful for Go binaries, and we’re actively working on making that
 debugging information more complete.
-(See the [[https://blog.golang.org/2010/11/debugging-go-code-status-report.html][ recent blog post]] for details.)
+(See the [ recent blog post](https://blog.golang.org/2010/11/debugging-go-code-status-report.html) for details.)
 
 It’s now easier than ever to link against existing libraries written in
 languages other than Go.
-Go support is in the most recent [[http://www.swig.org/][SWIG]] release,
+Go support is in the most recent [SWIG](http://www.swig.org/) release,
 version 2.0.1, making it easier to link against C and C++ code,
-and our [[https://golang.org/cmd/cgo/][cgo]] tool has seen many fixes and improvements.
+and our [cgo](https://golang.org/cmd/cgo/) tool has seen many fixes and improvements.
 
-[[https://golang.org/doc/gccgo_install.html][Gccgo]],
+[Gccgo](https://golang.org/doc/gccgo_install.html),
 the Go front end for the GNU C Compiler, has kept pace with the gc compiler
 as a parallel Go implementation.
 It now has a working garbage collector, and has been accepted into the GCC core.
-We’re now working toward making [[http://code.google.com/p/gofrontend/][gofrontend]]
+We’re now working toward making [gofrontend](http://code.google.com/p/gofrontend/)
 available as a BSD-licensed Go compiler front end,
 fully decoupled from GCC.
 
 Outside the Go project itself Go is starting to be used to build real software.
-There are more than 200 Go programs and libraries listed on our [[http://godashboard.appspot.com/project][Project dashboard]],
-and hundreds more on [[http://code.google.com/hosting/search?q=label:Go][Google Code]]
-and [[https://github.com/search?q=language:Go][Github]].
+There are more than 200 Go programs and libraries listed on our [Project dashboard](http://godashboard.appspot.com/project),
+and hundreds more on [Google Code](http://code.google.com/hosting/search?q=label:Go)
+and [Github](https://github.com/search?q=language:Go).
 On our mailing list and IRC channel you can find coders from around the
 world who use Go for their programming projects.
-(See our [[https://blog.golang.org/2010/10/real-go-projects-smarttwitter-and-webgo.html][guest blog post]]
+(See our [guest blog post](https://blog.golang.org/2010/10/real-go-projects-smarttwitter-and-webgo.html)
 from last month for a real-world example.) Internally at Google there are
 several teams that choose Go for building production software,
 and we have received reports from other companies that are developing sizable systems in Go.
@@ -105,30 +106,30 @@
 Since the launch we have made a number of language changes,
 many of which were driven by feedback from the community.
 
-- Semicolons are now optional in almost all instances. [[https://golang.org/doc/go_spec.html#Semicolons][spec]]
-- The new built-in functions `copy` and `append` make management of slices
-  more efficient and straightforward.
-  [[https://golang.org/doc/go_spec.html#Appending_and_copying_slices][spec]]
-- The upper and lower bounds may be omitted when making a sub-slice.
-  This means that `s[:]` is shorthand for `s[0:len(s)]`.
-  [[https://golang.org/doc/go_spec.html#Slices][spec]]
-- The new built-in function `recover` complements `panic` and `defer` as
-  an error handling mechanism.
-  [[https://blog.golang.org/2010/08/defer-panic-and-recover.html][blog]],
-  [[https://golang.org/doc/go_spec.html#Handling_panics][spec]]
-- The new complex number types (`complex`,
-  `complex64`, and `complex128`) simplify certain mathematical operations.
-  [[https://golang.org/doc/go_spec.html#Complex_numbers][spec]],
-  [[https://golang.org/doc/go_spec.html#Imaginary_literals][spec]]
-- The composite literal syntax permits the omission of redundant type information
-  (when specifying two-dimensional arrays, for example).
-  [[https://golang.org/doc/devel/release.html#2010-10-27][release.2010-10-27]],
-  [[https://golang.org/doc/go_spec.html#Composite_literals][spec]]
-- A general syntax for variable function arguments (`...T`) and their propagation
-  (`v...`) is now specified.
-  [[https://golang.org/doc/go_spec.html#Function_Types][spec]],
-  [[https://golang.org/doc/go_spec.html#Passing_arguments_to_..._parameters][ spec]],
-  [[https://golang.org/doc/devel/release.html#2010-09-29][release.2010-09-29]]
+  - Semicolons are now optional in almost all instances. [spec](https://golang.org/doc/go_spec.html#Semicolons)
+  - The new built-in functions `copy` and `append` make management of slices
+    more efficient and straightforward.
+    [spec](https://golang.org/doc/go_spec.html#Appending_and_copying_slices)
+  - The upper and lower bounds may be omitted when making a sub-slice.
+    This means that `s[:]` is shorthand for `s[0:len(s)]`.
+    [spec](https://golang.org/doc/go_spec.html#Slices)
+  - The new built-in function `recover` complements `panic` and `defer` as
+    an error handling mechanism.
+    [blog](https://blog.golang.org/2010/08/defer-panic-and-recover.html),
+    [spec](https://golang.org/doc/go_spec.html#Handling_panics)
+  - The new complex number types (`complex`,
+    `complex64`, and `complex128`) simplify certain mathematical operations.
+    [spec](https://golang.org/doc/go_spec.html#Complex_numbers),
+    [spec](https://golang.org/doc/go_spec.html#Imaginary_literals)
+  - The composite literal syntax permits the omission of redundant type information
+    (when specifying two-dimensional arrays, for example).
+    [release.2010-10-27](https://golang.org/doc/devel/release.html#2010-10-27),
+    [spec](https://golang.org/doc/go_spec.html#Composite_literals)
+  - A general syntax for variable function arguments (`...T`) and their propagation
+    (`v...`) is now specified.
+    [spec](https://golang.org/doc/go_spec.html#Function_Types),
+    [ spec](https://golang.org/doc/go_spec.html#Passing_arguments_to_..._parameters),
+    [release.2010-09-29](https://golang.org/doc/devel/release.html#2010-09-29)
 
 Go is certainly ready for production use,
 but there is still room for improvement.
@@ -141,6 +142,6 @@
 A lot has happened in a year; it’s been both thrilling and satisfying.
 We hope that this coming year will be even more fruitful than the last.
 
-_If_you’ve_been_meaning_to_get_[back]_into_Go,_now_is_a_great_time_to_do_so!_Check_out_the_
-[[https://golang.org/doc/docs.html][_Documentation_]] _and_ [[https://golang.org/doc/install.html][_Getting_Started_]]
-_pages_for_more_information,_or_just_go_nuts_in_the_ [[https://golang.org/doc/play/][_Go_Playground_]].
+_If you’ve been meaning to get [back] into Go, now is a great time to do so! Check out the_
+[_Documentation_](https://golang.org/doc/docs.html) _and_ [_Getting Started_](https://golang.org/doc/install.html)
+_pages for more information, or just go nuts in the_ [_Go Playground_](https://golang.org/doc/play/).
diff --git a/content/go-programming-language-turns-two.article b/content/go-programming-language-turns-two.article
index 5b20144..3abba3b 100644
--- a/content/go-programming-language-turns-two.article
+++ b/content/go-programming-language-turns-two.article
@@ -1,10 +1,11 @@
-The Go Programming Language turns two
+# The Go Programming Language turns two
 10 Nov 2011
 Tags: appengine, community, gopher
+Summary: Two years ago a small team at Google went public with their fledgling project - the Go Programming Language. They presented a language spec, two compilers, a modest standard library, some novel tools, and plenty of accurate (albeit succinct) documentation. They watched with excitement as programmers around the world began to play with Go. The team continued to iterate and improve on what they had built, and were gradually joined by dozens - and then hundreds - of programmers from the open source community. The Go Authors went on to produce lots of libraries, new tools, and reams of [documentation](https://golang.org/doc/docs.html). They celebrated a successful year in the public eye with a [blog post](https://blog.golang.org/2010/11/go-one-year-ago-today.html) last November that concluded "Go is certainly ready for production use, but there is still room for improvement. Our focus for the immediate future is making Go programs faster and more efficient in the context of high performance systems."
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Two years ago a small team at Google went public with their fledgling project -
 the Go Programming Language.
@@ -16,8 +17,8 @@
 and were gradually joined by dozens - and then hundreds - of programmers
 from the open source community.
 The Go Authors went on to produce lots of libraries,
-new tools, and reams of [[https://golang.org/doc/docs.html][documentation]].
-They celebrated a successful year in the public eye with a [[https://blog.golang.org/2010/11/go-one-year-ago-today.html][blog post]]
+new tools, and reams of [documentation](https://golang.org/doc/docs.html).
+They celebrated a successful year in the public eye with a [blog post](https://blog.golang.org/2010/11/go-one-year-ago-today.html)
 last November that concluded "Go is certainly ready for production use,
 but there is still room for improvement.
 Our focus for the immediate future is making Go programs faster and more
@@ -27,35 +28,35 @@
 and Go is faster and more stable than ever.
 Careful tuning of Go's code generators, concurrency primitives,
 garbage collector, and core libraries have increased the performance of Go programs,
-and native support for [[https://blog.golang.org/2011/06/profiling-go-programs.html][profiling]]
-and [[http://blog.golang.org/2011/10/debugging-go-programs-with-gnu-debugger.html][debugging]]
+and native support for [profiling](https://blog.golang.org/2011/06/profiling-go-programs.html)
+and [debugging](http://blog.golang.org/2011/10/debugging-go-programs-with-gnu-debugger.html)
 makes it easier to detect and remove performance issues in user code.
-Go is also now easier to learn with [[http://tour.golang.org/][A Tour of Go]],
+Go is also now easier to learn with [A Tour of Go](http://tour.golang.org/),
 an interactive tutorial you can take from the comfort of your web browser.
 
-This year we introduced the experimental [[http://code.google.com/appengine/docs/go/][Go runtime]]
+This year we introduced the experimental [Go runtime](http://code.google.com/appengine/docs/go/)
 for Google's App Engine platform,
 and we have been steadily increasing the Go runtime's support for App Engine's APIs.
-Just this week we released [[http://code.google.com/appengine/downloads.html][version 1.6.0]]
+Just this week we released [version 1.6.0](http://code.google.com/appengine/downloads.html)
 of the Go App Engine SDK,
-which includes support for [[http://code.google.com/appengine/docs/go/backends/overview.html][backends]]
+which includes support for [backends](http://code.google.com/appengine/docs/go/backends/overview.html)
 (long-running processes),
 finer control over datastore indexes, and various other improvements.
 Today, the Go runtime is near feature parity with - and is a viable alternative
 to - the Python and Java runtimes.
-In fact, we now serve [[https://golang.org/][golang.org]] by running a version
-of [[https://golang.org/cmd/godoc/][godoc]] on the App Engine service.
+In fact, we now serve [golang.org](https://golang.org/) by running a version
+of [godoc](https://golang.org/cmd/godoc/) on the App Engine service.
 
 While 2010 was a year of discovery and experimentation,
 2011 was a year of fine tuning and planning for the future.
-This year we issued several "[[https://golang.org/doc/devel/release.html][release]]"
+This year we issued several "[release](https://golang.org/doc/devel/release.html)"
 versions of Go that were more reliable and better supported than weekly snapshots.
-We also introduced [[https://golang.org/cmd/gofix/][gofix]] to take the
+We also introduced [gofix](https://golang.org/cmd/gofix/) to take the
 pain out of migrating to newer releases.
-Furthermore, last month we announced a [[https://blog.golang.org/2011/10/preview-of-go-version-1.html][plan for Go version 1]] -
+Furthermore, last month we announced a [plan for Go version 1](https://blog.golang.org/2011/10/preview-of-go-version-1.html) -
 a release that will be supported for years to come.
 Work toward Go 1 is already underway and you can observe our progress by
-the latest weekly snapshot at [[http://weekly.golang.org/pkg/][weekly.golang.org]].
+the latest weekly snapshot at [weekly.golang.org](http://weekly.golang.org/pkg/).
 
 The plan is to launch Go 1 in early 2012.
 We hope to bring the Go App Engine runtime out of "experimental" status at the same time.
@@ -63,7 +64,7 @@
 But that's not all. 2011 was an exciting year for the gopher, too.
 He has manifested himself as a plush toy (a highly prized gift at Google
 I/O and other Go talks) and in vinyl form (received by every attendee at
-OSCON and now available at the [[http://www.googlestore.com/Fun/Go+Gopher+Figurine.axd][Google Store]]).
+OSCON and now available at the [Google Store](http://www.googlestore.com/Fun/Go+Gopher+Figurine.axd)).
 
 .image go-programming-language-turns-two_gophers.jpg
 
@@ -71,4 +72,4 @@
 
 .image go-programming-language-turns-two_costume.jpg
 
-Photograph by [[https://plus.google.com/106640494112897458359/posts][Chris Nokleberg]].
+Photograph by [Chris Nokleberg](https://plus.google.com/106640494112897458359/posts).
diff --git a/content/go-programming-session-video-from.article b/content/go-programming-session-video-from.article
index 1b3e505..8f3799e 100644
--- a/content/go-programming-session-video-from.article
+++ b/content/go-programming-session-video-from.article
@@ -1,10 +1,11 @@
-Go Programming session video from Google I/O
+# Go Programming session video from Google I/O
 6 Jun 2010
 Tags: video, talk
+Summary: Below is the video of the talk given by Rob Pike and Russ Cox at Google I/O 2010.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Below is the video of the talk given by Rob Pike and Russ Cox at Google I/O 2010.
 
diff --git a/content/go-slices-usage-and-internals.article b/content/go-slices-usage-and-internals.article
index f200f54..1c37b7f 100644
--- a/content/go-slices-usage-and-internals.article
+++ b/content/go-slices-usage-and-internals.article
@@ -1,10 +1,11 @@
-Go Slices: usage and internals
+# Go Slices: usage and internals
 5 Jan 2011
 Tags: slice, technical
+Summary: Go's slice type provides a convenient and efficient means of working with sequences of typed data. Slices are analogous to arrays in other languages, but have some unusual properties. This article will look at what slices are and how they are used.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 Go's slice type provides a convenient and efficient means of working with
 sequences of typed data.
@@ -12,7 +13,7 @@
 but have some unusual properties.
 This article will look at what slices are and how they are used.
 
-* Arrays
+## Arrays
 
 The slice type is an abstraction built on top of Go's array type,
 and so to understand slices we must first understand arrays.
@@ -57,7 +58,7 @@
 
 In both cases, the type of `b` is `[2]string`.
 
-* Slices
+## Slices
 
 Arrays have their place, but they're a bit inflexible,
 so you don't see them too often in Go code.
@@ -117,7 +118,7 @@
 	x := [3]string{"Лайка", "Белка", "Стрелка"}
 	s := x[:] // a slice referencing the storage of x
 
-* Slice internals
+## Slice internals
 
 A slice is a descriptor of an array segment.
 It consists of a pointer to the array, the length of the segment,
@@ -125,7 +126,7 @@
 
 .image go-slices-usage-and-internals_slice-struct.png
 
-Our variable `s`, created earlier by `make([]byte,`5)`, is structured like this:
+Our variable `s`, created earlier by `make([]byte, 5)`, is structured like this:
 
 .image go-slices-usage-and-internals_slice-1.png
 
@@ -165,7 +166,7 @@
 just as when indexing outside the bounds of a slice or array.
 Similarly, slices cannot be re-sliced below zero to access earlier elements in the array.
 
-* Growing slices (the copy and append functions)
+## Growing slices (the copy and append functions)
 
 To increase the capacity of a slice one must create a new,
 larger slice and copy the contents of the original slice into it.
@@ -265,7 +266,7 @@
 	    return p
 	}
 
-* A possible "gotcha"
+## A possible "gotcha"
 
 As mentioned earlier, re-slicing a slice doesn't make a copy of the underlying array.
 The full array will be kept in memory until it is no longer referenced.
@@ -302,13 +303,13 @@
 A more concise version of this function could be constructed by using `append`.
 This is left as an exercise for the reader.
 
-* Further Reading
+## Further Reading
 
-[[https://golang.org/doc/effective_go.html][Effective Go]] contains an in-depth
-treatment of [[https://golang.org/doc/effective_go.html#slices][slices]]
-and [[https://golang.org/doc/effective_go.html#arrays][arrays]],
-and the Go [[https://golang.org/doc/go_spec.html][language specification]]
-defines [[https://golang.org/doc/go_spec.html#Slice_types][slices]] and
-their [[https://golang.org/doc/go_spec.html#Length_and_capacity][associated]]
-[[https://golang.org/doc/go_spec.html#Making_slices_maps_and_channels][helper]]
-[[https://golang.org/doc/go_spec.html#Appending_and_copying_slices][functions]].
+[Effective Go](https://golang.org/doc/effective_go.html) contains an in-depth
+treatment of [slices](https://golang.org/doc/effective_go.html#slices)
+and [arrays](https://golang.org/doc/effective_go.html#arrays),
+and the Go [language specification](https://golang.org/doc/go_spec.html)
+defines [slices](https://golang.org/doc/go_spec.html#Slice_types) and
+their [associated](https://golang.org/doc/go_spec.html#Length_and_capacity)
+[helper](https://golang.org/doc/go_spec.html#Making_slices_maps_and_channels)
+[functions](https://golang.org/doc/go_spec.html#Appending_and_copying_slices).
diff --git a/content/go-turns-three.article b/content/go-turns-three.article
index be3cd2f..53d15b9 100644
--- a/content/go-turns-three.article
+++ b/content/go-turns-three.article
@@ -1,13 +1,14 @@
-Go turns three
+# Go turns three
 10 Nov 2012
 Tags: community, birthday
+Summary: The Go open source project is [three years old today](http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html).
 
 Russ Cox
 
-* Introduction
+##
 
 The Go open source project is
-[[http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html][three years old today]].
+[three years old today](http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html).
 
 It's great to look at how far Go has come in those three years.
 When we launched, Go was an idea backed by two implementations that worked on Linux and OS X.
@@ -16,26 +17,26 @@
 
 Since the open source launch,
 we've been joined by
-[[https://tip.golang.org/CONTRIBUTORS][hundreds of external contributors]],
+[hundreds of external contributors](https://tip.golang.org/CONTRIBUTORS),
 who have extended and improved Go in myriad ways,
 including writing a Windows port from scratch.
 We added a package management system
-[[https://groups.google.com/d/msg/golang-nuts/8JFwR3ESjjI/cy7qZzN7Lw4J][goinstall]],
+[goinstall](https://groups.google.com/d/msg/golang-nuts/8JFwR3ESjjI/cy7qZzN7Lw4J),
 which eventually became the
-[[https://golang.org/cmd/go/][go command]].
+[go command](https://golang.org/cmd/go/).
 We also added
-[[https://blog.golang.org/2011/07/go-for-app-engine-is-now-generally.html][support for Go on App Engine]].
-Over the past year we've also given [[https://golang.org/doc/#talks][many talks]], created an [[http://tour.golang.org/][interactive introductory tour]]
-and recently we added support for [[https://golang.org/pkg/strings/#pkg-examples][executable examples in package documentation]].
+[support for Go on App Engine](https://blog.golang.org/2011/07/go-for-app-engine-is-now-generally.html).
+Over the past year we've also given [many talks](https://golang.org/doc/#talks), created an [interactive introductory tour](http://tour.golang.org/)
+and recently we added support for [executable examples in package documentation](https://golang.org/pkg/strings/#pkg-examples).
 
 Perhaps the most important development in the past year
 was the launch of the first stable version,
-[[https://blog.golang.org/2012/03/go-version-1-is-released.html][Go 1]].
+[Go 1](https://blog.golang.org/2012/03/go-version-1-is-released.html).
 People who write Go 1 programs can now be confident that their programs will
 continue to compile and run without change, in many environments,
 on a time scale of years.
 As part of the Go 1 launch we spent months cleaning up the
-[[https://golang.org/doc/go1.html][language and libraries]]
+[language and libraries](https://golang.org/doc/go1.html)
 to make it something that will age well.
 
 We're working now toward the release of Go 1.1 in 2013. There will be some
@@ -49,28 +50,28 @@
 
 We use Go at Google in a variety of ways, many of them invisible to the outside world.
 A few visible ones include
-[[https://groups.google.com/d/msg/golang-nuts/BNUNbKSypE0/E4qSfpx9qI8J][serving Chrome and other downloads]],
-[[http://code.google.com/p/vitess/][scaling MySQL database at YouTube]],
+[serving Chrome and other downloads](https://groups.google.com/d/msg/golang-nuts/BNUNbKSypE0/E4qSfpx9qI8J),
+[scaling MySQL database at YouTube](http://code.google.com/p/vitess/),
 and of course running the
-[[https://golang.org/][Go home page]]
-on [[https://developers.google.com/appengine/docs/go/overview][App Engine]].
+[Go home page](https://golang.org/)
+on [App Engine](https://developers.google.com/appengine/docs/go/overview).
 Last year's
-[[https://blog.golang.org/2011/12/from-zero-to-go-launching-on-google.html][Thanksgiving Doodle]]
+[Thanksgiving Doodle](https://blog.golang.org/2011/12/from-zero-to-go-launching-on-google.html)
 and the recent
-[[http://www.jamwithchrome.com/technology][Jam with Chrome]]
+[Jam with Chrome](http://www.jamwithchrome.com/technology)
 site are also served by Go programs.
 
 Other companies and projects are using Go too, including
-[[http://www.quora.com/Go-programming-language/Is-Google-Go-ready-for-production-use/answer/Kunal-Anand][BBC Worldwide]],
-[[http://dave.cheney.net/wp-content/uploads/2012/08/august-go-meetup.pdf][Canonical]],
-[[http://blog.cloudflare.com/go-at-cloudflare][CloudFlare]],
-[[https://blog.golang.org/2011/04/go-at-heroku.html][Heroku]],
-[[https://plus.google.com/114945221884326152379/posts/d1SVaqkRyTL][Novartis]],
-[[http://backstage.soundcloud.com/2012/07/go-at-soundcloud/][SoundCloud]],
-[[http://sorcery.smugmug.com/2012/04/06/deriving-json-types-in-go/][SmugMug]],
-[[https://blog.golang.org/2011/12/building-stathat-with-go.html][StatHat]],
-[[https://tinkercad.com/about/jobs][Tinkercad]],
+[BBC Worldwide](http://www.quora.com/Go-programming-language/Is-Google-Go-ready-for-production-use/answer/Kunal-Anand),
+[Canonical](http://dave.cheney.net/wp-content/uploads/2012/08/august-go-meetup.pdf),
+[CloudFlare](http://blog.cloudflare.com/go-at-cloudflare),
+[Heroku](https://blog.golang.org/2011/04/go-at-heroku.html),
+[Novartis](https://plus.google.com/114945221884326152379/posts/d1SVaqkRyTL),
+[SoundCloud](http://backstage.soundcloud.com/2012/07/go-at-soundcloud/),
+[SmugMug](http://sorcery.smugmug.com/2012/04/06/deriving-json-types-in-go/),
+[StatHat](https://blog.golang.org/2011/12/building-stathat-with-go.html),
+[Tinkercad](https://tinkercad.com/about/jobs),
 and
-[[https://golang.org/wiki/GoUsers][many others]].
+[many others](https://golang.org/wiki/GoUsers).
 
 Here's to many more years of productive programming in Go.
diff --git a/content/go-updates-in-app-engine-171.article b/content/go-updates-in-app-engine-171.article
index c51a026..20f9de4 100644
--- a/content/go-updates-in-app-engine-171.article
+++ b/content/go-updates-in-app-engine-171.article
@@ -1,43 +1,44 @@
-Go updates in App Engine 1.7.1
+# Go updates in App Engine 1.7.1
 22 Aug 2012
 Tags: appengine, release
+Summary: This week we released version 1.7.1 of the App Engine SDK. It includes some significant updates specific to the App Engine runtime for Go.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 This week we released version 1.7.1 of the App Engine SDK.
 It includes some significant updates specific to the App Engine runtime for Go.
 
-The [[https://developers.google.com/appengine/docs/go/memcache/reference][memcache package]] has
-had some additions to its [[https://developers.google.com/appengine/docs/go/memcache/reference#Codec][Codec]] convenience type.
+The [memcache package](https://developers.google.com/appengine/docs/go/memcache/reference) has
+had some additions to its [Codec](https://developers.google.com/appengine/docs/go/memcache/reference#Codec) convenience type.
 The SetMulti, AddMulti, CompareAndSwap, and CompareAndSwapMulti methods
-make it easier to store and update encoded data in the [[https://developers.google.com/appengine/docs/go/memcache/overview][Memcache Service]].
+make it easier to store and update encoded data in the [Memcache Service](https://developers.google.com/appengine/docs/go/memcache/overview).
 
-The [[https://developers.google.com/appengine/docs/go/tools/uploadingdata][bulkloader tool]] can
+The [bulkloader tool](https://developers.google.com/appengine/docs/go/tools/uploadingdata) can
 now be used with Go apps,
 allowing users to upload and download datastore records in bulk.
 This is useful for backups and offline processing,
 and a great help when migrating Python or Java apps to the Go runtime.
 
-The [[https://developers.google.com/appengine/docs/go/images/overview][Images Service]] is
+The [Images Service](https://developers.google.com/appengine/docs/go/images/overview) is
 now available to Go users.
-The new [[https://developers.google.com/appengine/docs/go/images/reference][appengine/image package]] supports serving
+The new [appengine/image package](https://developers.google.com/appengine/docs/go/images/reference) supports serving
 images directly from Blobstore and resizing or cropping those images on the fly.
 Note that this is not the full image service as provided by the Python and Java SDKs,
-as much of the equivalent functionality is available in the [[https://golang.org/pkg/image/][standard Go image package]] and
-external packages such as [[http://code.google.com/p/graphics-go/][graphics-go]].
+as much of the equivalent functionality is available in the [standard Go image package](https://golang.org/pkg/image/) and
+external packages such as [graphics-go](http://code.google.com/p/graphics-go/).
 
-The new [[https://developers.google.com/appengine/docs/go/backends/runtime#RunInBackground][runtime.RunInBackground]] function
+The new [runtime.RunInBackground](https://developers.google.com/appengine/docs/go/backends/runtime#RunInBackground) function
 allows backend requests to spawn a new request independent of the initial request.
 These can run in the background as long as the backend stays alive.
 
 Finally, we have filled in some missing functionality:
-the [[https://developers.google.com/appengine/docs/go/xmpp/reference][xmpp package]] now
+the [xmpp package](https://developers.google.com/appengine/docs/go/xmpp/reference) now
 supports sending presence updates and chat invitations and retrieving the
 presence state of another user,
-and the [[https://developers.google.com/appengine/docs/go/users/reference][user package]] supports
+and the [user package](https://developers.google.com/appengine/docs/go/users/reference) supports
 authenticating clients with OAuth.
 
-You can grab the new SDK from the [[https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go][App Engine downloads page]] and
-browse the [[https://developers.google.com/appengine/docs/go][updated documentation]].
+You can grab the new SDK from the [App Engine downloads page](https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go) and
+browse the [updated documentation](https://developers.google.com/appengine/docs/go).
diff --git a/content/go-version-1-is-released.article b/content/go-version-1-is-released.article
index 7267bf3..354db2d 100644
--- a/content/go-version-1-is-released.article
+++ b/content/go-version-1-is-released.article
@@ -1,10 +1,11 @@
-Go version 1 is released
+# Go version 1 is released
 28 Mar 2012
 Tags: release, go1
+Summary: Today marks a major milestone in the development of the Go programming language. We're announcing Go version 1, or Go 1 for short, which defines a language and a set of core libraries to provide a stable foundation for creating reliable products, projects, and publications.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 .image go-version-1-is-released_gophermega.jpg
 
@@ -29,7 +30,7 @@
 Code that compiles in Go 1 should, with few exceptions,
 continue to compile and run throughout the lifetime of that version,
 even as we issue updates and bug fixes such as Go version 1.1, 1.2, and so on.
-The [[https://golang.org/doc/go1compat.html][Go 1 compatibility document]]
+The [Go 1 compatibility document](https://golang.org/doc/go1compat.html)
 explains the compatibility guidelines in more detail.
 
 Go 1 is a representation of Go as it is used today,
@@ -40,28 +41,28 @@
 but not released because they were backwards-incompatible.
 Go 1 incorporates these changes, which provide significant improvements
 to the language and libraries but sometimes introduce incompatibilities for old programs.
-Fortunately, the [[https://golang.org/cmd/go/#Run_go_tool_fix_on_packages][go fix]]
+Fortunately, the [go fix](https://golang.org/cmd/go/#Run_go_tool_fix_on_packages)
 tool can automate much of the work needed to bring programs up to the Go 1 standard.
 
-Go 1 introduces changes to the language (such as new types for [[https://golang.org/doc/go1.html#rune][Unicode characters]]
-and [[https://golang.org/doc/go1.html#errors][errors]]) and the standard
-library (such as the new [[https://golang.org/doc/go1.html#time][time package]]
-and renamings in the [[https://golang.org/doc/go1.html#strconv][strconv package]]).
+Go 1 introduces changes to the language (such as new types for [Unicode characters](https://golang.org/doc/go1.html#rune)
+and [errors](https://golang.org/doc/go1.html#errors)) and the standard
+library (such as the new [time package](https://golang.org/doc/go1.html#time)
+and renamings in the [strconv package](https://golang.org/doc/go1.html#strconv)).
 Also, the package hierarchy has been rearranged to group related items together,
 such as moving the networking facilities,
-for instance the [[https://golang.org/pkg/net/rpc/][rpc package]],
+for instance the [rpc package](https://golang.org/pkg/net/rpc/),
 into subdirectories of net.
-A complete list of changes is documented in the [[https://golang.org/doc/go1.html][Go 1 release notes]].
+A complete list of changes is documented in the [Go 1 release notes](https://golang.org/doc/go1.html).
 That document is an essential reference for programmers migrating code from
 earlier versions of Go.
 
-We also restructured the Go tool suite around the new [[https://golang.org/doc/go1.html#cmd_go][go command]],
+We also restructured the Go tool suite around the new [go command](https://golang.org/doc/go1.html#cmd_go),
 a program for fetching, building, installing and maintaining Go code.
 The go command eliminates the need for Makefiles to write Go code because
 it uses the Go program source itself to derive the build instructions.
 No more build scripts!
 
-Finally, the release of Go 1 triggers a new release of the [[https://developers.google.com/appengine/docs/go][Google App Engine SDK]].
+Finally, the release of Go 1 triggers a new release of the [Google App Engine SDK](https://developers.google.com/appengine/docs/go).
 A similar process of revision and stabilization has been applied to the
 App Engine libraries,
 providing a base for developers to build programs for App Engine that will run for years.
@@ -71,4 +72,4 @@
 We thank everyone who helped make this happen.
 
 There has never been a better time to be a Go programmer.
-Everything you need to get started is at [[https://golang.org/][golang.org]].
+Everything you need to get started is at [golang.org](https://golang.org/).
diff --git a/content/go-videos-from-google-io-2012.article b/content/go-videos-from-google-io-2012.article
index e9c17f9..d42a55d 100644
--- a/content/go-videos-from-google-io-2012.article
+++ b/content/go-videos-from-google-io-2012.article
@@ -1,35 +1,36 @@
-Go videos from Google I/O 2012
+# Go videos from Google I/O 2012
 2 Jul 2012
 Tags: talk, video, concurrency, appengine, ethos
+Summary: Phew! Google I/O is over for another year, and what an event it was. Thanks to our guest speakers and everyone who attended the four Go sessions. It was a lot of fun.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 Phew! Google I/O is over for another year, and what an event it was. Thanks to our guest speakers and everyone who attended the four Go sessions. It was a lot of fun.
 
 Here are the session videos:
 
-*Go*concurrency*patterns* by Rob Pike
+**Go concurrency patterns** by Rob Pike
 
-_Concurrency_is_the_key_to_designing_high_performance_network_services._Go's_concurrency_primitives_(goroutines_and_channels)_provide_a_simple_and_efficient_means_of_expressing_concurrent_execution._In_this_talk_we_see_how_tricky_concurrency_problems_can_be_solved_gracefully_with_simple_Go_code._
+_Concurrency is the key to designing high performance network services. Go's concurrency primitives (goroutines and channels) provide a simple and efficient means of expressing concurrent execution. In this talk we see how tricky concurrency problems can be solved gracefully with simple Go code._
 
 .iframe //www.youtube.com/embed/f6kdp27TYZs 304 540
 
-* Go in production
+## Go in production
 
-_Since_Go's_release_in_2009_many_companies_(besides_Google,_of_course)_have_used_the_language_to_build_cool_stuff._In_this_session_Gustavo_Niemeyer_(Canonical),_Keith_Rarick_(Heroku),_Evan_Shaw_(Iron.io),_and_Patrick_Crosby_(StatHat)_share_their_first-hand_experience_using_Go_in_production_environments._
+_Since Go's release in 2009 many companies (besides Google, of course) have used the language to build cool stuff. In this session Gustavo Niemeyer (Canonical), Keith Rarick (Heroku), Evan Shaw (Iron.io), and Patrick Crosby (StatHat) share their first-hand experience using Go in production environments._
 
 .iframe //www.youtube.com/embed/kKQLhGZVN4A 304 540
 
-* Meet the Go team
+## Meet the Go team
 
-_A_panel_discussion_with_David_Symonds,_Robert_Griesemer,_Rob_Pike,_Ken_Thompson,_Andrew_Gerrand,_and_Brad_Fitzpatrick._
+_A panel discussion with David Symonds, Robert Griesemer, Rob Pike, Ken Thompson, Andrew Gerrand, and Brad Fitzpatrick._
 
 .iframe //www.youtube.com/embed/sln-gJaURzk 304 540
 
-*Computing*Map*Tiles*with*Go*on*App*Engine* by Chris Broadfoot and Andrew Gerrand
+**Computing Map Tiles with Go on App Engine** by Chris Broadfoot and Andrew Gerrand
 
-_In_this_talk_we_use_the_Maps_API_and_Go_on_App_Engine_to_build_an_app_to_build_custom_tile_sets_for_Google_Maps._The_app_demonstrates_using_Go's_suitability_for_computation_in_the_cloud_and_App_Engine's_key_scalability_features,_such_as_Task_Queues_and_Backends._
+_In this talk we use the Maps API and Go on App Engine to build an app to build custom tile sets for Google Maps. The app demonstrates using Go's suitability for computation in the cloud and App Engine's key scalability features, such as Task Queues and Backends._
 
 .iframe //www.youtube.com/embed/sPagpg0b7no 304 540
diff --git a/content/go-whats-new-in-march-2010.article b/content/go-whats-new-in-march-2010.article
index ad019e5..1de4c7d 100644
--- a/content/go-whats-new-in-march-2010.article
+++ b/content/go-whats-new-in-march-2010.article
@@ -1,9 +1,10 @@
-Go: What's New in March 2010
+# Go: What's New in March 2010
 18 Mar 2010
+Summary: Welcome to the official Go Blog. We, the Go team, hope to use this blog to keep the world up-to-date on the development of the Go programming language and the growing ecosystem of libraries and applications surrounding it.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Welcome to the official Go Blog. We, the Go team,
 hope to use this blog to keep the world up-to-date on the development of
@@ -16,47 +17,47 @@
 compilers, packages, tools, and documentation.
 The compilers now produce code that is in some cases between 2x and an order
 of magnitude faster than at release.
-We have put together some graphs of a selection of [[http://godashboard.appspot.com/benchmarks][Benchmarks]],
-and the [[http://godashboard.appspot.com/][Build Status]] page tracks the
+We have put together some graphs of a selection of [Benchmarks](http://godashboard.appspot.com/benchmarks),
+and the [Build Status](http://godashboard.appspot.com/) page tracks the
 reliability of each changeset submitted to the repository.
 
 We have made syntax changes to make the language more concise,
 regular, and flexible.
-Semicolons have been [[http://groups.google.com/group/golang-nuts/t/5ee32b588d10f2e9][almost entirely removed]] from the language.
-The [[https://golang.org/doc/go_spec.html#Function_types][...T syntax]]
+Semicolons have been [almost entirely removed](http://groups.google.com/group/golang-nuts/t/5ee32b588d10f2e9) from the language.
+The [...T syntax](https://golang.org/doc/go_spec.html#Function_types)
 makes it simpler to handle an arbitrary number of typed function parameters.
 The syntax x[lo:] is now shorthand for x[lo:len(x)].
 Go also now natively supports complex numbers.
-See the [[https://golang.org/doc/devel/release.html][release notes]] for more.
+See the [release notes](https://golang.org/doc/devel/release.html) for more.
 
-[[https://golang.org/cmd/godoc/][Godoc]] now provides better support for
+[Godoc](https://golang.org/cmd/godoc/) now provides better support for
 third-party libraries,
-and a new tool - [[https://golang.org/cmd/goinstall][goinstall]] - has been
+and a new tool - [goinstall](https://golang.org/cmd/goinstall) - has been
 released to make it easy to install them.
 Additionally, we've started working on a package tracking system to make
 it easier to find what you need.
-You can view the beginnings of this on the [[http://godashboard.appspot.com/package][Packages page]].
+You can view the beginnings of this on the [Packages page](http://godashboard.appspot.com/package).
 
-More than 40,000 lines of code have been added to [[https://golang.org/pkg/][the standard library]],
+More than 40,000 lines of code have been added to [the standard library](https://golang.org/pkg/),
 including many entirely new packages, a sizable portion written by external contributors.
 
 Speaking of third parties, since launch a vibrant community has flourished
-on our [[http://groups.google.com/group/golang-nuts/][mailing list]] and
+on our [mailing list](http://groups.google.com/group/golang-nuts/) and
 irc channel (#go-nuts on freenode).
-We have officially added [[https://golang.org/CONTRIBUTORS][more than 50 people]] to the project.
+We have officially added [more than 50 people](https://golang.org/CONTRIBUTORS) to the project.
 Their contributions range from bug fixes and documentation corrections to
 core packages and support for additional operating systems (Go is now supported under FreeBSD,
-and a [[http://code.google.com/p/go/wiki/WindowsPort][Windows port]] is underway).
+and a [Windows port](http://code.google.com/p/go/wiki/WindowsPort) is underway).
 We regard these community contributions our greatest success so far.
 
-We've received some good reviews, too.  This [[http://www.pcworld.idg.com.au/article/337773/google_go_captures_developers_imaginations/][recent article in PC World]]
+We've received some good reviews, too.  This [recent article in PC World](http://www.pcworld.idg.com.au/article/337773/google_go_captures_developers_imaginations/)
 summarized the enthusiasm surrounding the project.
 Several bloggers have begun documenting their experiences in the language
-(see [[http://golang.tumblr.com/][here]],
-[[http://www.infi.nl/blog/view/id/47][here]],
-and [[http://freecella.blogspot.com/2010/01/gospecify-basic-setup-of-projects.html][here]]
+(see [here](http://golang.tumblr.com/),
+[here](http://www.infi.nl/blog/view/id/47),
+and [here](http://freecella.blogspot.com/2010/01/gospecify-basic-setup-of-projects.html)
 for example)  The general reaction of our users has been very positive;
-one first-timer remarked [[https://groups.google.com/group/golang-nuts/browse_thread/thread/5fabdd59f8562ed2]["I came away extremely impressed. Go walks an elegant line between simplicity and power."]]
+one first-timer remarked ["I came away extremely impressed. Go walks an elegant line between simplicity and power."](https://groups.google.com/group/golang-nuts/browse_thread/thread/5fabdd59f8562ed2)
 
 As to the future: we have listened to the myriad voices telling us what they need,
 and are now focused on getting Go ready for the prime time.
diff --git a/content/go-wins-2010-bossie-award.article b/content/go-wins-2010-bossie-award.article
index fa79e54..0ca4067 100644
--- a/content/go-wins-2010-bossie-award.article
+++ b/content/go-wins-2010-bossie-award.article
@@ -1,13 +1,14 @@
-Go Wins 2010 Bossie Award
+# Go Wins 2010 Bossie Award
 6 Sep 2010
+Summary: The Go project has been awarded a [Bossie Award](http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-application-development-software-140&current=2&last=1) for "best open source application development software." The [Bossie Awards](http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-software-the-year-115) have been given each year since 2007 by [InfoWorld](http://infoworld.com/) to recognize the best Open Source projects. Their citation reads:
 
 Andrew Gerrand
 
-* Introduction
+##
 
-The Go project has been awarded a [[http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-application-development-software-140&current=2&last=1][Bossie Award]]
-for "best open source application development software." The [[http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-software-the-year-115][Bossie Awards]]
-have been given each year since 2007 by [[http://infoworld.com/][InfoWorld]]
+The Go project has been awarded a [Bossie Award](http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-application-development-software-140&current=2&last=1)
+for "best open source application development software." The [Bossie Awards](http://www.infoworld.com/d/open-source/bossie-awards-2010-the-best-open-source-software-the-year-115)
+have been given each year since 2007 by [InfoWorld](http://infoworld.com/)
 to recognize the best Open Source projects.
 Their citation reads:
 
diff --git a/content/go.dev.article b/content/go.dev.article
index 8dc0cd1..3e5d1fd 100644
--- a/content/go.dev.article
+++ b/content/go.dev.article
@@ -1,10 +1,11 @@
-Go.dev: a new hub for Go developers
+# Go.dev: a new hub for Go developers
 13 Nov 2019
+Summary: Over the last two years, as we’ve spoken with users at companies of all sizes, we’ve heard three questions repeatedly: who else is using Go, what do they use it for, and how can I find useful Go packages?
 
 Steve Francia and Julie Qiu
 julieqiu@golang.org
 
-* Introduction
+##
 
 Over the last two years,
 as we’ve spoken with users at companies of all sizes,
@@ -13,26 +14,26 @@
 what do they use it for,
 and how can I find useful Go packages?
 
-Today we are launching [[https://go.dev][go.dev]], a new hub for Go developers,
+Today we are launching [go.dev](https://go.dev), a new hub for Go developers,
 to help answer those questions.
 There you will find a wealth of learning resources to get started with the language,
 featured use cases, and case studies of companies using Go.
 
 .image go.dev/home.png _ 850
 
-(Note that [[https://golang.org/][golang.org]] is still the home for the
+(Note that [golang.org](https://golang.org/) is still the home for the
 open source Go project and the Go distribution.
 Go.dev is a companion site to provide these supporting resources.)
 
-Clicking on Explore brings you to [[https://pkg.go.dev/][pkg.go.dev]],
+Clicking on Explore brings you to [pkg.go.dev](https://pkg.go.dev/),
 a central source of information about Go packages and modules.
-Like [[https://godoc.org/][godoc.org]], pkg.go.dev serves Go documentation.
+Like [godoc.org](https://godoc.org/), pkg.go.dev serves Go documentation.
 However, it also understands modules and has information
 about all versions of a package, including
-[[https://pkg.go.dev/std?tab=versions][all releases of the standard library]]!
+[all releases of the standard library](https://pkg.go.dev/std?tab=versions)!
 And it detects and displays licenses and has a better search algorithm.
 You can follow
-[[https://golang.org/issue/33654][Go issue 33654]] for future developments.
+[Go issue 33654](https://golang.org/issue/33654) for future developments.
 
 .image go.dev/http.png _ 850
 
@@ -42,4 +43,4 @@
 If you have any ideas, suggestions or issues,
 please let us know via the “Share Feedback” and “Report an Issue” links at the bottom of every page.
 Or you can send your bugs, ideas, feature requests, and questions to
-[[mailto:go-discovery-feedback@google.com][go-discovery-feedback@google.com]].
+[go-discovery-feedback@google.com](mailto:go-discovery-feedback@google.com).
diff --git a/content/go1.10.article b/content/go1.10.article
index 8bcf044..e0e9ce0 100644
--- a/content/go1.10.article
+++ b/content/go1.10.article
@@ -1,34 +1,35 @@
-Go 1.10 is released
+# Go 1.10 is released
 16 Feb 2018
+Summary: Happy Friday, happy weekend! Today the Go team is happy to announce the release of Go 1.10. You can get it from the [download page](https://golang.org/dl/).
 
 Brad Fitzpatrick
 bradfitz@golang.org
 
-* Introduction
+##
 
 Happy Friday, happy weekend! Today the Go team is happy to announce the release of Go 1.10.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 
-See the [[https://golang.org/doc/go1.10][Go 1.10 release notes]] for all the details.
+See the [Go 1.10 release notes](https://golang.org/doc/go1.10) for all the details.
 
 The most exciting part of this release for many people will probably
 be that the `go` tool now does
-[[https://golang.org/doc/go1.10#build][automatic caching of build & test results]].
-Of course, one of the hundreds of smaller changes may be *your* favorite.
+[automatic caching of build & test results](https://golang.org/doc/go1.10#build).
+Of course, one of the hundreds of smaller changes may be **your** favorite.
 
 To celebrate the release, Go User Groups around the world are holding
-[[https://github.com/golang/go/wiki/Go-1.10-Release-Party][release parties]].
+[release parties](https://github.com/golang/go/wiki/Go-1.10-Release-Party).
 See if there's one in your area, or feel free to organize one!
 
 Thanks to everyone who contributed to this release and everyone who
 helped test the Go 1.10 betas and release candidates to ensure a perfect,
 bug-free final release. However, if you do notice any bugs or unexpected
 changes not noted in the release notes, be sure to
-[[https://golang.org/issues/new][file a bug]].
+[file a bug](https://golang.org/issues/new).
 
 Enjoy the weekend, and enjoy the new release!
 
 P.S. Many of this year's Go conferences are accepting talk proposals
 this month. We always love to see new speakers and encourage you to
 think about proposing a talk. For more information, see
-[[https://golang.org/wiki/NewSpeakers][golang.org/wiki/NewSpeakers]].
+[golang.org/wiki/NewSpeakers](https://golang.org/wiki/NewSpeakers).
diff --git a/content/go1.11.article b/content/go1.11.article
index 558d7cf..e9af576 100644
--- a/content/go1.11.article
+++ b/content/go1.11.article
@@ -1,38 +1,39 @@
-Go 1.11 is released
+# Go 1.11 is released
 24 Aug 2018
+Summary: Who says releasing on Friday is a bad idea?
 
 Andrew Bonventre
 andybons@golang.org
 
-* Introduction
+##
 
 Who says releasing on Friday is a bad idea?
 
 Today the Go team is happy to announce the release of Go 1.11.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 
 There are many changes and improvements to the toolchain,
 runtime, and libraries, but two features stand out as being especially exciting:
 modules and WebAssembly support.
 
-This release adds preliminary support for a [[https://golang.org/doc/go1.11#modules][new concept called “modules,”]]
+This release adds preliminary support for a [new concept called “modules,”](https://golang.org/doc/go1.11#modules)
 an alternative to GOPATH with integrated support for versioning and package distribution.
 Module support is considered experimental,
 and there are still a few rough edges to smooth out,
-so please make liberal use of the [[https://golang.org/issue/new][issue tracker]].
+so please make liberal use of the [issue tracker](https://golang.org/issue/new).
 
-Go 1.11 also adds an experimental port to [[https://golang.org/doc/go1.11#wasm][WebAssembly]] (`js/wasm`).
+Go 1.11 also adds an experimental port to [WebAssembly](https://golang.org/doc/go1.11#wasm) (`js/wasm`).
 This allows programmers to compile Go programs to a binary format compatible with four major web browsers.
-You can read more about WebAssembly (abbreviated “Wasm”) at [[https://webassembly.org/][webassembly.org]]
-and see [[https://golang.org/wiki/WebAssembly][this wiki page]] on how to
+You can read more about WebAssembly (abbreviated “Wasm”) at [webassembly.org](https://webassembly.org/)
+and see [this wiki page](https://golang.org/wiki/WebAssembly) on how to
 get started with using Wasm with Go.
-Special thanks to [[https://github.com/neelance][Richard Musiol]] for contributing the WebAssembly port!
+Special thanks to [Richard Musiol](https://github.com/neelance) for contributing the WebAssembly port!
 
 We also want to thank everyone who contributed to this release by writing code,
 filing bugs, providing feedback, and/or testing the betas and release candidates.
 Your contributions and diligence helped to ensure that Go 1.11 is as bug-free as possible.
-That said, if you do notice any problems, please [[https://golang.org/issues/new][file an issue]].
+That said, if you do notice any problems, please [file an issue](https://golang.org/issues/new).
 
-For more detail about the changes in Go 1.11, see the [[https://golang.org/doc/go1.11][release notes]].
+For more detail about the changes in Go 1.11, see the [release notes](https://golang.org/doc/go1.11).
 
 Have a wonderful weekend and enjoy the release!
diff --git a/content/go1.12.article b/content/go1.12.article
index 70e45ed..549c25e 100644
--- a/content/go1.12.article
+++ b/content/go1.12.article
@@ -1,20 +1,21 @@
-Go 1.12 is released
+# Go 1.12 is released
 25 Feb 2019
+Summary: Today the Go team is happy to announce the release of Go 1.12. You can get it from the [download page](https://golang.org/dl/).
 
 Andrew Bonventre
 andybons@golang.org
 
-* Introduction
+##
 
 Today the Go team is happy to announce the release of Go 1.12.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 
-For details about the changes in Go 1.12, see the [[https://golang.org/doc/go1.12][*Go*1.12*release*notes*]].
+For details about the changes in Go 1.12, see the [**Go 1.12 release notes**](https://golang.org/doc/go1.12).
 
-Some of the highlights include [[https://golang.org/doc/go1.12#tls_1_3][opt-in support for TLS 1.3]], [[https://golang.org/doc/go1.12#modules][improved modules support]] (in preparation [[/modules2019][for being the default in Go 1.13]]), support for `windows/arm`, and [[https://golang.org/doc/go1.12#darwin][improved macOS & iOS forwards compatibility.]]
+Some of the highlights include [opt-in support for TLS 1.3](https://golang.org/doc/go1.12#tls_1_3), [improved modules support](https://golang.org/doc/go1.12#modules) (in preparation [for being the default in Go 1.13](/modules2019)), support for `windows/arm`, and [improved macOS & iOS forwards compatibility.](https://golang.org/doc/go1.12#darwin)
 
 As always, we also want to thank everyone who contributed to this release by writing code, filing bugs, providing feedback, and/or testing the betas and release candidates.
 Your contributions and diligence helped to ensure that Go 1.12 is as stable as possible.
-That said, if you do notice any problems, please [[https://golang.org/issues/new][file an issue]].
+That said, if you do notice any problems, please [file an issue](https://golang.org/issues/new).
 
 Enjoy the new release!
diff --git a/content/go1.13-errors.article b/content/go1.13-errors.article
index a3aa755..9935d06 100644
--- a/content/go1.13-errors.article
+++ b/content/go1.13-errors.article
@@ -1,12 +1,13 @@
-Working with Errors in Go 1.13
+# Working with Errors in Go 1.13
 17 Oct 2019
 Tags: errors, technical
+Summary: Go’s treatment of [errors as values](https://blog.golang.org/errors-are-values) has served us well over the last decade. Although the standard library’s support for errors has been minimal—just the `errors.New` and `fmt.Errorf` functions, which produce errors that contain only a message—the built-in `error` interface allows Go programmers to add whatever information they desire. All it requires is a type that implements an `Error` method:
 
 Damien Neil and Jonathan Amsterdam
 
-* Introduction
+## Introduction
 
-Go’s treatment of [[https://blog.golang.org/errors-are-values][errors as values]]
+Go’s treatment of [errors as values](https://blog.golang.org/errors-are-values)
 has served us well over the last decade. Although the standard library’s support
 for errors has been minimal—just the `errors.New` and `fmt.Errorf` functions,
 which produce errors that contain only a message—the built-in `error` interface
@@ -25,7 +26,7 @@
 information includes another, lower-level error to provide additional context.
 
 The pattern of one error containing another is so pervasive in Go code that,
-after [[https://golang.org/issue/29934][extensive discussion]], Go 1.13 added
+after [extensive discussion](https://golang.org/issue/29934), Go 1.13 added
 explicit support for it. This post describes the additions to the standard
 library that provide that support: three new functions in the `errors` package,
 and a new formatting verb for `fmt.Errorf`.
@@ -33,9 +34,9 @@
 Before describing the changes in detail, let's review how errors are examined
 and constructed in previous versions of the language.
 
-* Errors before Go 1.13
+## Errors before Go 1.13
 
-** Examining errors
+### Examining errors
 
 Go errors are values. Programs make decisions based on those values in a few
 ways. The most common is to compare an error to `nil` to see if an operation
@@ -67,7 +68,7 @@
 		// e.Name wasn't found
 	}
 
-** Adding information
+### Adding information
 
 Frequently a function passes an error up the call stack while adding information
 to it, like a brief description of what was happening when the error occurred. A
@@ -98,9 +99,9 @@
 
 The `os.PathError` type in the standard library is another example of one error which contains another.
 
-* Errors in Go 1.13
+## Errors in Go 1.13
 
-** The Unwrap method
+### The Unwrap method
 
 Go 1.13 introduces new features to the `errors` and `fmt` standard library
 packages to simplify working with errors that contain other errors. The most
@@ -115,9 +116,9 @@
 	func (e *QueryError) Unwrap() error { return e.Err }
 
 The result of unwrapping an error may itself have an `Unwrap` method; we call
-the sequence of errors produced by repeated unwrapping the _error_chain_.
+the sequence of errors produced by repeated unwrapping the _error chain_.
 
-** Examining errors with Is and As
+### Examining errors with Is and As
 
 The Go 1.13 `errors` package includes two new functions for examining errors: `Is` and `As`.
 
@@ -159,7 +160,7 @@
 `Unwrap` method. It is usually better to use `errors.Is` or `errors.As`,
 however, since these functions will examine the entire chain in a single call.
 
-** Wrapping errors with %w
+### Wrapping errors with %w
 
 As mentioned earlier, it is common to use the `fmt.Errorf` function to add additional information to an error.
 
@@ -183,7 +184,7 @@
 	...
 	if errors.Is(err, ErrPermission) ...
 
-** Whether to Wrap
+### Whether to Wrap
 
 When adding additional context to an error, either with `fmt.Errorf` or by
 implementing a custom type, you need to decide whether the new error should wrap
@@ -204,9 +205,9 @@
 errors is a violation of abstraction. For example, if the `LookupUser` function
 of your package `pkg` uses Go's `database/sql` package, then it may encounter a
 `sql.ErrNoRows` error. If you return that error with
-`fmt.Errorf("accessing`DB:`%v",`err)`
+`fmt.Errorf("accessing DB: %v", err)`
 then a caller cannot look inside to find the `sql.ErrNoRows`. But if
-the function instead returns `fmt.Errorf("accessing`DB:`%w",`err)`, then a
+the function instead returns `fmt.Errorf("accessing DB: %w", err)`, then a
 caller could reasonably write
 
 	err := pkg.LookupUser(...)
@@ -224,7 +225,7 @@
 information so they can make more informed decisions, or to withhold that
 information to preserve an abstraction layer.
 
-* Customizing error tests with Is and As methods
+## Customizing error tests with Is and As methods
 
 The `errors.Is` function examines each error in a chain for a match with a
 target value. By default, an error matches the target if the two are equal. In
@@ -232,7 +233,7 @@
 implementing an `Is` _method_.
 
 As an example, consider this error inspired by the
-[[https://commandcenter.blogspot.com/2017/12/error-handling-in-upspin.html][Upspin error package]]
+[Upspin error package](https://commandcenter.blogspot.com/2017/12/error-handling-in-upspin.html)
 which compares an error against a template, considering only fields which are
 non-zero in the template:
 
@@ -256,7 +257,7 @@
 
 The `errors.As` function similarly consults an `As` method when present.
 
-* Errors and package APIs
+## Errors and package APIs
 
 A package which returns errors (and most do) should describe what properties of
 those errors programmers may rely on. A well-designed package will also avoid
@@ -326,7 +327,7 @@
 		// ...
 	}
 
-* Conclusion
+## Conclusion
 
 Although the changes we’ve discussed amount to just three functions and a
 formatting verb, we hope they will go a long way toward improving how errors are
@@ -334,6 +335,6 @@
 will become commonplace, helping programs to make better decisions and helping
 programmers to find bugs more quickly.
 
-As Russ Cox said in his [[https://blog.golang.org/experiment][GopherCon 2019 keynote]],
+As Russ Cox said in his [GopherCon 2019 keynote](https://blog.golang.org/experiment),
 on the path to Go 2 we experiment, simplify and ship. Now that we’ve
 shipped these changes, we look forward to the experiments that will follow.
diff --git a/content/go1.13.article b/content/go1.13.article
index 231dda2..1e7f56b 100644
--- a/content/go1.13.article
+++ b/content/go1.13.article
@@ -1,24 +1,25 @@
-Go 1.13 is released
-03 Sep 2019
+# Go 1.13 is released
+3 Sep 2019
+Summary: Today the Go team is very happy to announce the release of Go 1.13. You can get it from the [download page](https://golang.org/dl).
 
 Andrew Bonventre
 
-* Introduction
+##
 
-Today the Go team is very happy to announce the release of Go 1.13. You can get it from the [[https://golang.org/dl][download page]].
+Today the Go team is very happy to announce the release of Go 1.13. You can get it from the [download page](https://golang.org/dl).
 
 Some of the highlights include:
 
-- The `go` command now downloads and authenticates modules [[https://golang.org/doc/go1.13#introduction][using the Go module mirror and Go checksum database by default]]
-- [[https://golang.org/doc/go1.13#language][Improvements to number literals]]
-- [[https://golang.org/doc/go1.13#error_wrapping][Error wrapping]]
-- [[https://golang.org/doc/go1.13#tls_1_3][TLS 1.3 on by default]]
-- [[https://golang.org/doc/go1.13#modules][Improved modules support]]
+  - The `go` command now downloads and authenticates modules [using the Go module mirror and Go checksum database by default](https://golang.org/doc/go1.13#introduction)
+  - [Improvements to number literals](https://golang.org/doc/go1.13#language)
+  - [Error wrapping](https://golang.org/doc/go1.13#error_wrapping)
+  - [TLS 1.3 on by default](https://golang.org/doc/go1.13#tls_1_3)
+  - [Improved modules support](https://golang.org/doc/go1.13#modules)
 
-For the complete list of changes and more information about the improvements above, see the [[https://golang.org/doc/go1.13][*Go*1.13*release*notes*]].
+For the complete list of changes and more information about the improvements above, see the [**Go 1.13 release notes**](https://golang.org/doc/go1.13).
 
 We want to thank everyone who contributed to this release by writing code, filing bugs, providing feedback, and/or testing the beta and release candidates.
 Your contributions and diligence helped to ensure that Go 1.13 is as stable as possible.
-That said, if you notice any problems, please [[https://golang.org/issue/new][file an issue]].
+That said, if you notice any problems, please [file an issue](https://golang.org/issue/new).
 
 We hope you enjoy the new release!
diff --git a/content/go1.14.article b/content/go1.14.article
index 1e5f448..93c28c1 100644
--- a/content/go1.14.article
+++ b/content/go1.14.article
@@ -1,25 +1,26 @@
-Go 1.14 is released
+# Go 1.14 is released
 25 Feb 2020
+Summary: Today the Go team is very happy to announce the release of Go 1.14. You can get it from the [download page](https://golang.org/dl).
 
 Alex Rakoczy
 
-* Introduction
+##
 
-Today the Go team is very happy to announce the release of Go 1.14. You can get it from the [[https://golang.org/dl][download page]].
+Today the Go team is very happy to announce the release of Go 1.14. You can get it from the [download page](https://golang.org/dl).
 
 Some of the highlights include:
 
-- Module support in the `go` command is now ready for production use. We encourage all users to [[https://golang.org/doc/go1.14#introduction][migrate to `go` modules for dependency management]].
-- [[https://golang.org/doc/go1.14#language][Embedding interfaces with overlapping method sets]]
-- [[https://golang.org/doc/go1.14#runtime][Improved defer performance]]
-- [[https://golang.org/doc/go1.14#runtime][Goroutines are asynchronously preemptible]]
-- [[https://golang.org/doc/go1.14#runtime][The page allocator is more efficient]]
-- [[https://golang.org/doc/go1.14#runtime][Internal timers are more efficient]]
+  - Module support in the `go` command is now ready for production use. We encourage all users to [migrate to `go` modules for dependency management](https://golang.org/doc/go1.14#introduction).
+  - [Embedding interfaces with overlapping method sets](https://golang.org/doc/go1.14#language)
+  - [Improved defer performance](https://golang.org/doc/go1.14#runtime)
+  - [Goroutines are asynchronously preemptible](https://golang.org/doc/go1.14#runtime)
+  - [The page allocator is more efficient](https://golang.org/doc/go1.14#runtime)
+  - [Internal timers are more efficient](https://golang.org/doc/go1.14#runtime)
 
-For the complete list of changes and more information about the improvements above, see the [[https://golang.org/doc/go1.14][*Go*1.14*release*notes*]].
+For the complete list of changes and more information about the improvements above, see the [**Go 1.14 release notes**](https://golang.org/doc/go1.14).
 
 We want to thank everyone who contributed to this release by writing code, filing bugs, providing feedback, and/or testing the beta and release candidate.
 Your contributions and diligence helped to ensure that Go 1.14 is as stable as possible.
-That said, if you notice any problems, please [[https://golang.org/issue/new][file an issue]].
+That said, if you notice any problems, please [file an issue](https://golang.org/issue/new).
 
 We hope you enjoy the new release!
diff --git a/content/go1.15-proposals.article b/content/go1.15-proposals.article
index 367bc7b..288e648 100644
--- a/content/go1.15-proposals.article
+++ b/content/go1.15-proposals.article
@@ -1,15 +1,16 @@
-Proposals for Go 1.15
+# Proposals for Go 1.15
 28 Jan 2020
 Tags: go1.15, proposals, community, language, vet
+Summary: We are close to the Go 1.14 release, planned for February assuming all goes well, with an RC1 candidate almost ready. Per the process outlined in the [Go 2, here we come!](https://blog.golang.org/go2-here-we-come) blog post, it is again the time in our development and release cycle to consider if and what language or library changes we might want to include for our next release, Go 1.15, scheduled for August of this year.
 
 Robert Griesemer, for the Go team
 gri@golang.org
 
-* Status
+## Status
 
 We are close to the Go 1.14 release, planned for February assuming all goes
 well, with an RC1 candidate almost ready. Per the process outlined in the
-[[https://blog.golang.org/go2-here-we-come][Go 2, here we come!]] blog post,
+[Go 2, here we come!](https://blog.golang.org/go2-here-we-come) blog post,
 it is again the time in our development and release cycle to consider if and
 what language or library changes we might want to include for our next release,
 Go 1.15, scheduled for August of this year.
@@ -19,7 +20,7 @@
 better with each day, and we are also making progress on the generics front
 (more on that later this year). Our attempt seven months ago at providing a
 better error handling mechanism, the
-[[https://golang.org/issue/32437][`try` proposal]], met good support
+[`try` proposal](https://golang.org/issue/32437), met good support
 but also strong opposition and we decided to abandon it. In its aftermath there
 were many follow-up proposals, but none of them seemed convincing enough,
 clearly superior to the `try` proposal, or less likely to cause similar
@@ -27,7 +28,7 @@
 for now. Perhaps some future insight will help us to improve upon the status
 quo.
 
-* Proposals
+## Proposals
 
 Given that modules and generics are actively being worked on, and with error
 handling changes out of the way for the time being, what other changes should
@@ -42,19 +43,19 @@
 we concentrate on a couple of new `vet` checks and a minor adjustment to the
 language. We have selected the following three proposals:
 
-[[https://golang.org/issue/32479][#32479]].
-Diagnose `string(int)` conversion in `go`vet`.
+[\#32479](https://golang.org/issue/32479).
+Diagnose `string(int)` conversion in `go vet`.
 
 We were planning to get this done for the upcoming Go 1.14 release but we didn’t
 get around to it, so here it is again. The `string(int)` conversion was introduced
 early in Go for convenience, but it is confusing to newcomers (`string(10)` is
 `"\n"` not `"10"`) and not justified anymore now that the conversion is available
 in the `unicode/utf8` package.
-Since [[https://golang.org/issue/3939][removing this conversion]] is
+Since [removing this conversion](https://golang.org/issue/3939) is
 not a backwards-compatible change, we propose to start with a `vet` error instead.
 
-[[https://golang.org/issue/4483][#4483]].
-Diagnose impossible interface-interface type assertions in `go`vet`.
+[\#4483](https://golang.org/issue/4483).
+Diagnose impossible interface-interface type assertions in `go vet`.
 
 Currently, Go permits any type assertion `x.(T)` (and corresponding type switch case)
 where the type of `x` and `T` are interfaces. Yet, if both `x` and `T` have a method
@@ -65,7 +66,7 @@
 backwards-compatible change, thus we also propose to start with a `vet` error
 instead.
 
-[[https://golang.org/issue/28591][#28591]].
+[\#28591](https://golang.org/issue/28591).
 Constant-evaluate index and slice expressions with constant strings and indices.
 
 Currently, indexing or slicing a constant string with a constant index, or indices,
@@ -75,23 +76,23 @@
 and we propose to make the necessary adjustments to the spec and compilers.
 
 (Correction: We found out after posting that this change is not backward-compatible;
-see [[https://golang.org/issue/28591#issuecomment-579993684][comment]] for details.)
+see [comment](https://golang.org/issue/28591#issuecomment-579993684) for details.)
 
-* Timeline
+## Timeline
 
 We believe that none of these three proposals are controversial but there’s
 always a chance that we missed something important. For that reason we plan
 to have the proposals implemented at the beginning of the Go 1.15 release cycle
 (at or shortly after the Go 1.14 release) so that there is plenty of time to
 gather experience and provide feedback. Per the
-[[https://blog.golang.org/go2-here-we-come][proposal evaluation process]],
+[proposal evaluation process](https://blog.golang.org/go2-here-we-come),
 the final decision will be made at the end of the development cycle, at the
 beginning of May, 2020.
 
-* And one more thing...
+## And one more thing...
 
 We receive many more language change proposals
-([[https://github.com/golang/go/labels/LanguageChange][issues labeled LanguageChange]])
+([issues labeled LanguageChange](https://github.com/golang/go/labels/LanguageChange))
 than we can review thoroughly. For instance, just for error handling alone,
 there are 57 issues, of which five are currently still open. Since the cost
 of making a language change, no matter how small, is high and the benefits
@@ -100,11 +101,11 @@
 feedback. This is unsatisfactory for all parties involved. If you have spent a
 lot of time and effort outlining your idea in detail, it would be nice to not
 have it immediately rejected. On the flip side, because the general
-[[https://github.com/golang/proposal/blob/master/README.md][proposal process]]
+[proposal process](https://github.com/golang/proposal/blob/master/README.md)
 is deliberately simple, it is very easy to create language change proposals
 that are only marginally explored, causing the review committee significant
 amounts of work. To improve this experience for everybody we are adding a new
-[[https://github.com/golang/proposal/blob/master/go2-language-changes.md][questionnaire]]
+[questionnaire](https://github.com/golang/proposal/blob/master/go2-language-changes.md)
 for language changes: filling out that template will help reviewers evaluate
 proposals more efficiently because they don’t need to try to answer those
 questions themselves. And hopefully it will also provide better guidance for
diff --git a/content/go1.3.article b/content/go1.3.article
index af191aa..ea5c012 100644
--- a/content/go1.3.article
+++ b/content/go1.3.article
@@ -1,57 +1,58 @@
-Go 1.3 is released
+# Go 1.3 is released
 18 Jun 2014
+Summary: Today we are happy to announce the release of [Go 1.3](https://golang.org/doc/go1.3). This release comes six months after our last major release and provides better performance, improved tools, support for running Go in new environments, and more. All Go users should upgrade to Go 1.3. You can grab the release from our [downloads page](https://golang.org/dl/) and find the full list of improvements and fixes in the [release notes](https://golang.org/doc/go1.3). What follows are some highlights.
 
 Andrew Gerrand
 
-* Go 1.3 is released
+##
 
-Today we are happy to announce the release of [[https://golang.org/doc/go1.3][Go 1.3]].
+Today we are happy to announce the release of [Go 1.3](https://golang.org/doc/go1.3).
 This release comes six months after our last major release and provides better
 performance, improved tools, support for running Go in new environments, and more.
 All Go users should upgrade to Go 1.3.
-You can grab the release from our [[https://golang.org/dl/][downloads page]] and
+You can grab the release from our [downloads page](https://golang.org/dl/) and
 find the full list of improvements and fixes in the
-[[https://golang.org/doc/go1.3][release notes]].
+[release notes](https://golang.org/doc/go1.3).
 What follows are some highlights.
 
-[[https://godoc.org/code.google.com/p/go.tools/cmd/godoc][Godoc]],
+[Godoc](https://godoc.org/code.google.com/p/go.tools/cmd/godoc),
 the Go documentation server, now performs static analysis.
 When enabled with the -analysis flag, analysis results are presented
 in both the source and package documentation views, making it easier
 than ever to navigate and understand Go programs.
-See [[https://golang.org/lib/godoc/analysis/help.html][the documentation]] for the details.
+See [the documentation](https://golang.org/lib/godoc/analysis/help.html) for the details.
 
 The gc toolchain now supports the Native Client (NaCl) execution sandbox on the
 32- and 64-bit Intel architectures.
 This permits the safe execution of untrusted code, useful in environments such as the
-[[https://blog.golang.org/playground][Playground]].
-To set up NaCl on your system see the [[https://golang.org/wiki/NativeClient][NativeClient wiki page]].
+[Playground](https://blog.golang.org/playground).
+To set up NaCl on your system see the [NativeClient wiki page](https://golang.org/wiki/NativeClient).
 
 Also included in this release is experimental support for the DragonFly BSD,
 Plan 9, and Solaris operating systems. To use Go on these systems you must
-[[https://golang.org/doc/install/source][install from source]].
+[install from source](https://golang.org/doc/install/source).
 
 Changes to the runtime have improved the
-[[https://golang.org/doc/go1.3#performance][performance]] of Go binaries,
+[performance](https://golang.org/doc/go1.3#performance) of Go binaries,
 with an improved garbage collector, a new
-[[https://golang.org/s/contigstacks]["contiguous" goroutine stack management strategy]],
+["contiguous" goroutine stack management strategy](https://golang.org/s/contigstacks),
 a faster race detector, and improvements to the regular expression engine.
 
-As part of the general [[https://golang.org/s/go13linker][overhaul]] of the Go
+As part of the general [overhaul](https://golang.org/s/go13linker) of the Go
 linker, the compilers and linkers have been refactored. The instruction
 selection phase that was part of the linker has been moved to the compiler.
 This can speed up incremental builds for large projects.
 
-The [[https://golang.org/doc/go1.3#garbage_collector][garbage collector]] is now
+The [garbage collector](https://golang.org/doc/go1.3#garbage_collector) is now
 precise when examining stacks (collection of the heap has been precise since Go
 1.1), meaning that a non-pointer value such as an integer will never be
 mistaken for a pointer and prevent unused memory from being reclaimed. This
 change affects code that uses package unsafe; if you have unsafe code you
-should read the [[https://golang.org/doc/go1.3#garbage_collector][release notes]]
+should read the [release notes](https://golang.org/doc/go1.3#garbage_collector)
 carefully to see if your code needs updating.
 
 We would like to thank the many people who contributed to this release;
 it would not have been possible without your help.
 
 So, what are you waiting for?
-Head on over to the [[https://golang.org/dl/][downloads page]] and start hacking.
+Head on over to the [downloads page](https://golang.org/dl/) and start hacking.
diff --git a/content/go1.4.article b/content/go1.4.article
index d106b35..ac5fbc0 100644
--- a/content/go1.4.article
+++ b/content/go1.4.article
@@ -1,22 +1,23 @@
-Go 1.4 is released
+# Go 1.4 is released
 10 Dec 2014
+Summary: Today we announce Go 1.4, the fifth major stable release of Go, arriving six months after our previous major release [Go 1.3](https://blog.golang.org/go1.3). It contains a small language change, support for more operating systems and processor architectures, and improvements to the tool chain and libraries. As always, Go 1.4 keeps the promise of compatibility, and almost everything will continue to compile and run without change when moved to 1.4. For the full details, see the [Go 1.4 release notes](https://golang.org/doc/go1.4).
 
 Andrew Gerrand
 adg@golang.org
 
-* Introduction
+##
 
 Today we announce Go 1.4, the fifth major stable release of Go, arriving six
-months after our previous major release [[https://blog.golang.org/go1.3][Go 1.3]].
+months after our previous major release [Go 1.3](https://blog.golang.org/go1.3).
 It contains a small language change, support for more operating systems
 and processor architectures, and improvements to the tool chain and libraries.
 As always, Go 1.4 keeps the promise of compatibility, and almost everything
 will continue to compile and run without change when moved to 1.4.
-For the full details, see the [[https://golang.org/doc/go1.4][Go 1.4 release notes]].
+For the full details, see the [Go 1.4 release notes](https://golang.org/doc/go1.4).
 
 The most notable new feature in this release is official support for Android.
 Using the support in the core and the libraries in the
-[[https://godoc.org/golang.org/x/mobile][golang.org/x/mobile]] repository,
+[golang.org/x/mobile](https://godoc.org/golang.org/x/mobile) repository,
 it is now possible to write simple Android apps using only Go code.
 At this stage, the support libraries are still nascent and under heavy development.
 Early adopters should expect a bumpy ride, but we welcome the community to get involved.
@@ -24,41 +25,41 @@
 The language change is a tweak to the syntax of for-range loops.
 You may now write "for range s {" to loop over each item from s,
 without having to assign the value, loop index, or map key.
-See the [[https://golang.org/doc/go1.4#forrange][release notes]] for details.
+See the [release notes](https://golang.org/doc/go1.4#forrange) for details.
 
 The go command has a new subcommand, go generate, to automate the running of
 tools to generate source code before compilation.
 For example, it can be used to automate the generation of String methods for
 typed constants using the
-[[https://godoc.org/golang.org/x/tools/cmd/stringer/][new stringer tool]].
-For more information, see the [[https://golang.org/s/go1.4-generate][design document]].
+[new stringer tool](https://godoc.org/golang.org/x/tools/cmd/stringer/).
+For more information, see the [design document](https://golang.org/s/go1.4-generate).
 
 Most programs will run about the same speed or slightly faster in 1.4 than in
 1.3; some will be slightly slower.
 There are many changes, making it hard to be precise about what to expect.
-See the [[https://golang.org/doc/go1.4#performance][release notes]] for more discussion.
+See the [release notes](https://golang.org/doc/go1.4#performance) for more discussion.
 
 And, of course, there are many more improvements and bug fixes.
 
 In case you missed it, a few weeks ago the sub-repositories were moved to new locations.
 For example, the go.tools packages are now imported from "golang.org/x/tools".
-See the [[https://groups.google.com/d/msg/golang-announce/eD8dh3T9yyA/HDOEU_ZSmvAJ][announcement post]] for details.
+See the [announcement post](https://groups.google.com/d/msg/golang-announce/eD8dh3T9yyA/HDOEU_ZSmvAJ) for details.
 
 This release also coincides with the project's move from Mercurial to Git (for
 source control), Rietveld to Gerrit (for code review), and Google Code to
 Github (for issue tracking and wiki).
 The move affects the core Go repository and its sub-repositories.
 You can find the canonical Git repositories at
-[[https://go.googlesource.com][go.googlesource.com]],
+[go.googlesource.com](https://go.googlesource.com),
 and the issue tracker and wiki at the
-[[https://github.com/golang/go][golang/go GitHub repo]].
+[golang/go GitHub repo](https://github.com/golang/go).
 
 While development has already moved over to the new infrastructure,
 for the 1.4 release we still recommend that users who
-[[https://golang.org/doc/install/source][install from source]]
+[install from source](https://golang.org/doc/install/source)
 use the Mercurial repositories.
 
 For App Engine users, Go 1.4 is now available for beta testing.
-See [[https://groups.google.com/d/msg/google-appengine-go/ndtQokV3oFo/25wV1W9JtywJ][the announcement]] for details.
+See [the announcement](https://groups.google.com/d/msg/google-appengine-go/ndtQokV3oFo/25wV1W9JtywJ) for details.
 
 From all of us on the Go team, please enjoy Go 1.4, and have a happy holiday season.
diff --git a/content/go1.5.article b/content/go1.5.article
index 4abff05..a3e2fcd 100644
--- a/content/go1.5.article
+++ b/content/go1.5.article
@@ -1,42 +1,43 @@
-Go 1.5 is released
+# Go 1.5 is released
 19 Aug 2015
+Summary: Today the Go project is proud to release Go 1.5, the sixth major stable release of Go.
 
 Andrew Gerrand
 adg@golang.org
 
-* Introduction
+##
 
 Today the Go project is proud to release Go 1.5,
 the sixth major stable release of Go.
 
 This release includes significant changes to the implementation.
-The compiler tool chain was [[https://golang.org/doc/go1.5#c][translated from C to Go]],
+The compiler tool chain was [translated from C to Go](https://golang.org/doc/go1.5#c),
 removing the last vestiges of C code from the Go code base.
-The garbage collector was [[https://golang.org/doc/go1.5#gc][completely redesigned]],
-yielding a [[https://talks.golang.org/2015/go-gc.pdf][dramatic reduction]]
+The garbage collector was [completely redesigned](https://golang.org/doc/go1.5#gc),
+yielding a [dramatic reduction](https://talks.golang.org/2015/go-gc.pdf)
 in garbage collection pause times.
 Related improvements to the scheduler allowed us to change the default
-[[https://golang.org/pkg/runtime/#GOMAXPROCS][GOMAXPROCS]] value
+[GOMAXPROCS](https://golang.org/pkg/runtime/#GOMAXPROCS) value
 (the number of concurrently executing goroutines)
 from 1 to the number of logical CPUs.
 Changes to the linker enable distributing Go packages as shared libraries to
 link into Go programs, and building Go packages into archives or shared
 libraries that may be linked into or loaded by C programs
-([[https://golang.org/s/execmodes][design doc]]).
+([design doc](https://golang.org/s/execmodes)).
 
-The release also includes [[https://golang.org/doc/go1.5#go_command][improvements to the developer tools]].
-Support for [[https://golang.org/s/go14internal]["internal" packages]]
+The release also includes [improvements to the developer tools](https://golang.org/doc/go1.5#go_command).
+Support for ["internal" packages](https://golang.org/s/go14internal)
 permits sharing implementation details between packages.
-[[https://golang.org/s/go15vendor][Experimental support]] for "vendoring"
+[Experimental support](https://golang.org/s/go15vendor) for "vendoring"
 external dependencies is a step toward a standard mechanism for managing
 dependencies in Go programs.
-The new "[[https://golang.org/cmd/trace/][go tool trace]]" command enables the
+The new "[go tool trace](https://golang.org/cmd/trace/)" command enables the
 visualisation of  program traces generated by new tracing infrastructure in the
 runtime.
-The new "[[https://golang.org/cmd/go/#hdr-Show_documentation_for_package_or_symbol][go doc]]"
+The new "[go doc](https://golang.org/cmd/go/#hdr-Show_documentation_for_package_or_symbol)"
 command provides an improved command-line interface for viewing Go package documentation.
 
-There are also several [[https://golang.org/doc/go1.5#ports][new operating system and architecture ports]].
+There are also several [new operating system and architecture ports](https://golang.org/doc/go1.5#ports).
 The more mature new ports are darwin/arm,
 darwin/arm64 (Apple's iPhone and iPad devices),
 and linux/arm64.
@@ -44,34 +45,34 @@
 (IBM 64-bit PowerPC, big and little endian).
 
 The new darwin/arm64 port and external linking features fuel the
-[[https://godoc.org/golang.org/x/mobile][Go mobile project]], an experiment to
+[Go mobile project](https://godoc.org/golang.org/x/mobile), an experiment to
 see how Go might be used for building apps on Android and iOS devices.
 (The Go mobile work itself is not part of this release.)
 
 The only language change is very minor,
-[[https://golang.org/doc/go1.5#language][the lifting of a restriction in the map literal syntax]]
+[the lifting of a restriction in the map literal syntax](https://golang.org/doc/go1.5#language)
 to make them more succinct and consistent with slice literals.
 
 The standard library saw many additions and improvements, too.
-The flag package now shows [[https://golang.org/doc/go1.5#flag][cleaner usage messages]].
-The math/big package now provides a [[https://golang.org/pkg/math/big/#Float][Float]]
+The flag package now shows [cleaner usage messages](https://golang.org/doc/go1.5#flag).
+The math/big package now provides a [Float](https://golang.org/pkg/math/big/#Float)
 type for computing with arbitrary-precision floating point numbers.
-An [[https://golang.org/doc/go1.5#net][improvement]] to the DNS resolver on
+An [improvement](https://golang.org/doc/go1.5#net) to the DNS resolver on
 Linux and BSD systems has removed the cgo requirement for programs that do name
 lookups.
-The [[https://golang.org/pkg/go/types/][go/types]] package has been
-[[https://golang.org/doc/go1.5#go_types][moved]] to the standard library from
-the [[https://godoc.org/golang.org/x/tools][golang.org/x/tools]] repository.
-(The new [[https://golang.org/pkg/go/constant/][go/constant]] and
-[[https://golang.org/pkg/go/importer/][go/importer]] packages are also a result
+The [go/types](https://golang.org/pkg/go/types/) package has been
+[moved](https://golang.org/doc/go1.5#go_types) to the standard library from
+the [golang.org/x/tools](https://godoc.org/golang.org/x/tools) repository.
+(The new [go/constant](https://golang.org/pkg/go/constant/) and
+[go/importer](https://golang.org/pkg/go/importer/) packages are also a result
 of this move.)
 The reflect package has added the
-[[https://golang.org/pkg/reflect/#ArrayOf][ArrayOf]] and
-[[https://golang.org/pkg/reflect/#FuncOf][FuncOf]] functions, analogous to the
-existing [[https://golang.org/pkg/reflect/#SliceOf][SliceOf]] function.
+[ArrayOf](https://golang.org/pkg/reflect/#ArrayOf) and
+[FuncOf](https://golang.org/pkg/reflect/#FuncOf) functions, analogous to the
+existing [SliceOf](https://golang.org/pkg/reflect/#SliceOf) function.
 And, of course, there is the usual
-[[https://golang.org/doc/go1.5#minor_library_changes][list of smaller fixes and improvements]].
+[list of smaller fixes and improvements](https://golang.org/doc/go1.5#minor_library_changes).
 
-For the full story, see the [[https://golang.org/doc/go1.5][detailed release notes]].
+For the full story, see the [detailed release notes](https://golang.org/doc/go1.5).
 Or if you just can't wait to get started,
-head over to the [[https://golang.org/dl/][downloads page]] to get Go 1.5 now.
+head over to the [downloads page](https://golang.org/dl/) to get Go 1.5 now.
diff --git a/content/go1.6.article b/content/go1.6.article
index a9fd603..4ecd9f8 100644
--- a/content/go1.6.article
+++ b/content/go1.6.article
@@ -1,38 +1,39 @@
-Go 1.6 is released
+# Go 1.6 is released
 17 Feb 2016
+Summary: Today we release [Go version 1.6](https://golang.org/doc/go1.6), the seventh major stable release of Go. You can grab it right now from the [download page](https://golang.org/dl/). Although [the release of Go 1.5](https://blog.golang.org/go1.5) six months ago contained dramatic implementation changes, this release is more incremental.
 
 Andrew Gerrand
 adg@golang.org
 
-* Introduction
+##
 
-Today we release [[https://golang.org/doc/go1.6][Go version 1.6]],
+Today we release [Go version 1.6](https://golang.org/doc/go1.6),
 the seventh major stable release of Go.
-You can grab it right now from the [[https://golang.org/dl/][download page]].
-Although [[https://blog.golang.org/go1.5][the release of Go 1.5]] six months ago
+You can grab it right now from the [download page](https://golang.org/dl/).
+Although [the release of Go 1.5](https://blog.golang.org/go1.5) six months ago
 contained dramatic implementation changes,
 this release is more incremental.
 
-The most significant change is support for [[https://http2.github.io/][HTTP/2]]
-in the [[https://golang.org/pkg/net/http/][net/http package]].
+The most significant change is support for [HTTP/2](https://http2.github.io/)
+in the [net/http package](https://golang.org/pkg/net/http/).
 HTTP/2 is a new protocol, a follow-on to HTTP that has already seen
 widespread adoption by browser vendors and major websites.
-In Go 1.6, support for HTTP/2 is [[https://golang.org/doc/go1.6#http2][enabled by default]]
+In Go 1.6, support for HTTP/2 is [enabled by default](https://golang.org/doc/go1.6#http2)
 for both servers and clients when using HTTPS,
-bringing [[https://http2.github.io/faq/][the benefits]] of the new protocol
+bringing [the benefits](https://http2.github.io/faq/) of the new protocol
 to a wide range of Go projects,
-such as the popular [[https://caddyserver.com/download][Caddy web server]].
+such as the popular [Caddy web server](https://caddyserver.com/download).
 
 The template packages have learned some new tricks,
-with support for [[https://golang.org/pkg/text/template/#hdr-Text_and_spaces][trimming spaces around template actions]]
+with support for [trimming spaces around template actions](https://golang.org/pkg/text/template/#hdr-Text_and_spaces)
 to produce cleaner template output,
-and the introduction of the [[https://golang.org/pkg/text/template/#hdr-Actions][`{{block}}` action]]
+and the introduction of the [`{{block}}` action](https://golang.org/pkg/text/template/#hdr-Actions)
 that can be used to create templates that build on other templates.
-A [[https://github.com/golang/example/tree/master#template-godoc][new template example program]] demonstrates these new features.
+A [new template example program](https://github.com/golang/example/tree/master#template-godoc) demonstrates these new features.
 
-Go 1.5 introduced [[https://golang.org/s/go15vendor][experimental support]]
+Go 1.5 introduced [experimental support](https://golang.org/s/go15vendor)
 for a “vendor” directory that was enabled by an environment variable.
-In Go 1.6, the feature is now [[https://golang.org/doc/go1.6#go_command][enabled by default]].
+In Go 1.6, the feature is now [enabled by default](https://golang.org/doc/go1.6#go_command).
 Source trees that contain a directory named “vendor” that is not used in accordance with the new feature
 will require changes to avoid broken builds (the simplest fix is to rename the directory).
 
@@ -40,25 +41,25 @@
 As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently.
 If the runtime detects this condition, it prints a diagnosis and crashes the program.
 The best way to find out more about the problem is to run it under the
-[[https://blog.golang.org/race-detector][race detector]],
+[race detector](https://blog.golang.org/race-detector),
 which will more reliably identify the race and give more detail.
 
 The runtime has also changed how it prints program-ending panics.
 It now prints only the stack of the panicking goroutine, rather than all existing goroutines.
 This behavior can be configured using the
-[[https://golang.org/pkg/runtime/#hdr-Environment_Variables][GOTRACEBACK]] environment variable
-or by calling the [[https://golang.org/pkg/runtime/debug/#SetTraceback][debug.SetTraceback]] function.
+[GOTRACEBACK](https://golang.org/pkg/runtime/#hdr-Environment_Variables) environment variable
+or by calling the [debug.SetTraceback](https://golang.org/pkg/runtime/debug/#SetTraceback) function.
 
 Users of cgo should be aware of major changes to the rules for sharing pointers between Go and C code.
 The rules are designed to ensure that such C code can coexist with Go's garbage collector
 and are checked during program execution, so code may require changes to avoid crashes.
-See the [[https://golang.org/doc/go1.6#cgo][release notes]] and
-[[https://golang.org/cmd/cgo/#hdr-Passing_pointers][cgo documentation]] for the details.
+See the [release notes](https://golang.org/doc/go1.6#cgo) and
+[cgo documentation](https://golang.org/cmd/cgo/#hdr-Passing_pointers) for the details.
 
 The compiler, linker, and go command have a new `-msan` flag
 analogous to `-race` and only available on linux/amd64,
 that enables interoperation with the
-[[http://clang.llvm.org/docs/MemorySanitizer.html][Clang MemorySanitizer]].
+[Clang MemorySanitizer](http://clang.llvm.org/docs/MemorySanitizer.html).
 This is useful for testing a program containing suspect C or C++ code.
 You might like to try it while testing your cgo code with the new pointer rules.
 
@@ -68,24 +69,24 @@
 With regard to the performance of the compiler tool chain,
 build times should be similar to those of Go 1.5.
 
-The algorithm inside [[https://golang.org/pkg/sort/#Sort][sort.Sort]]
+The algorithm inside [sort.Sort](https://golang.org/pkg/sort/#Sort)
 was improved to run about 10% faster,
 but the change may break programs that expect a specific ordering
 of equal but distinguishable elements.
 Such programs should refine their `Less` methods to indicate the desired ordering
-or use [[https://golang.org/pkg/sort/#Stable][sort.Stable]]
+or use [sort.Stable](https://golang.org/pkg/sort/#Stable)
 to preserve the input order for equal values.
 
 And, of course, there are many more additions, improvements, and fixes.
-You can find them all in the comprehensive [[https://golang.org/doc/go1.6][release notes]].
+You can find them all in the comprehensive [release notes](https://golang.org/doc/go1.6).
 
 To celebrate the release,
-[[https://github.com/golang/go/wiki/Go-1.6-release-party][Go User Groups around the world]]
+[Go User Groups around the world](https://github.com/golang/go/wiki/Go-1.6-release-party)
 are holding release parties on the 17th of February.
 Online, the Go contributors are hosting a question and answer session
-on the [[https://reddit.com/r/golang][golang subreddit]] for the next 24 hours.
+on the [golang subreddit](https://reddit.com/r/golang) for the next 24 hours.
 If you have questions about the project, the release, or just Go in general,
-then please [[https://www.reddit.com/r/golang/comments/46bd5h/ama_we_are_the_go_contributors_ask_us_anything/][join the discussion]].
+then please [join the discussion](https://www.reddit.com/r/golang/comments/46bd5h/ama_we_are_the_go_contributors_ask_us_anything/).
 
 Thanks to everyone that contributed to the release.
 Happy hacking.
diff --git a/content/go1.7-binary-size.article b/content/go1.7-binary-size.article
index 8b7c2fc..6c1dae1 100644
--- a/content/go1.7-binary-size.article
+++ b/content/go1.7-binary-size.article
@@ -1,10 +1,11 @@
-Smaller Go 1.7 binaries
+# Smaller Go 1.7 binaries
 18 Aug 2016
+Summary: Go was designed for writing servers. That is how it is most widely used today, and as a result a lot of work on the runtime and compiler is focused on issues that matter to servers: latency, ease of deployment, precise garbage collection, fast startup time, performance.
 
 David Crawshaw
 crawshaw@golang.org
 
-* Introduction
+## Introduction
 
 Go was designed for writing servers.
 That is how it is most widely used today, and as a result a lot of
@@ -15,13 +16,13 @@
 As Go gets used for a wider variety of programs, there are new issues that must be considered.
 One of these is binary size.
 It has been on the radar for a long time
-(issue [[https://golang.org/issue/6853][#6853]] was filed over two
+(issue [\#6853](https://golang.org/issue/6853) was filed over two
 years ago), but the growing interest in using Go for
 deploying binaries on smaller devices — such as the Raspberry Pi or
 mobile devices — means it received some attention for the Go 1.7
 release.
 
-* Work done in Go 1.7
+## Work done in Go 1.7
 
 Three significant changes in Go 1.7 affect binary size.
 
@@ -41,7 +42,7 @@
 interface.
 Similarly the linker can discard other exported methods, those that are only
 accessible through reflection, if the corresponding
-[[https://golang.org/pkg/reflect/#Value.Call][reflection features]]
+[reflection features](https://golang.org/pkg/reflect/#Value.Call)
 are not used anywhere in the program.
 That change shrinks binaries by 5–20%.
 
@@ -61,9 +62,9 @@
 dependencies. For example, the HTTP client no longer links in the entire HTTP
 server.
 The full list of changes can be found in issue
-[[https://golang.org/issue/6853][#6853]].
+[\#6853](https://golang.org/issue/6853).
 
-* Results
+## Results
 
 Typical programs, ranging from tiny toys to large production programs,
 are about 30% smaller when built with Go 1.7.
@@ -99,7 +100,7 @@
 Big downloads make for a poor user experience, so the reduction here
 is good news.
 
-* Future Work
+## Future Work
 
 Several changes to the run-time type information were too late for the
 Go 1.7 freeze, but will hopefully make it into 1.8, further shrinking
@@ -108,7 +109,7 @@
 These changes are all conservative, reducing binary size without increasing
 build time, startup time, overall execution time, or memory usage.
 We could take more radical steps to reduce binary size: the
-[[http://upx.sourceforge.net/][upx]] tool for compressing executables
+[upx](http://upx.sourceforge.net/) tool for compressing executables
 shrinks binaries by another 50% at the cost of increased startup time
 and potentially increased memory use.
 For extremely small systems (the kind that might live on a keychain)
diff --git a/content/go1.7.article b/content/go1.7.article
index 251dd8e..f976c10 100644
--- a/content/go1.7.article
+++ b/content/go1.7.article
@@ -1,63 +1,64 @@
-Go 1.7 is released
+# Go 1.7 is released
 15 Aug 2016
+Summary: Today we are happy to announce the release of Go 1.7. You can get it from the [download page](https://golang.org/dl/). There are several significant changes in this release: a port for [Linux on IBM z Systems](https://en.wikipedia.org/wiki/IBM_System_z) (s390x), compiler improvements, the addition of the [context](https://golang.org/pkg/context/) package, and support for [hierarchical tests and benchmarks](https://golang.org/pkg/testing/#hdr-Subtests_and_Sub_benchmarks).
 
 Chris Broadfoot
 cbro@golang.org
 
-* Introduction
+##
 
 Today we are happy to announce the release of Go 1.7.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 There are several significant changes in this release: a port for
-[[https://en.wikipedia.org/wiki/IBM_System_z][Linux on IBM z Systems]] (s390x),
-compiler improvements, the addition of the [[https://golang.org/pkg/context/][context]] package,
-and support for [[https://golang.org/pkg/testing/#hdr-Subtests_and_Sub_benchmarks][hierarchical tests and benchmarks]].
+[Linux on IBM z Systems](https://en.wikipedia.org/wiki/IBM_System_z) (s390x),
+compiler improvements, the addition of the [context](https://golang.org/pkg/context/) package,
+and support for [hierarchical tests and benchmarks](https://golang.org/pkg/testing/#hdr-Subtests_and_Sub_benchmarks).
 
-A new compiler back end, based on [[https://en.wikipedia.org/wiki/Static_single_assignment_form][static single-assignment]] form (SSA),
+A new compiler back end, based on [static single-assignment](https://en.wikipedia.org/wiki/Static_single_assignment_form) form (SSA),
 has been under development for the past year.
 By representing a program in SSA form, a compiler may perform advanced optimizations more easily.
 This new back end generates more compact, more efficient code that includes
 optimizations like
-[[https://en.wikipedia.org/wiki/Bounds-checking_elimination][bounds check elimination]] and
-[[https://en.wikipedia.org/wiki/Common_subexpression_elimination][common subexpression elimination]].
-We observed a 5–35% speedup across our [[https://golang.org/test/bench/go1/][benchmarks]].
+[bounds check elimination](https://en.wikipedia.org/wiki/Bounds-checking_elimination) and
+[common subexpression elimination](https://en.wikipedia.org/wiki/Common_subexpression_elimination).
+We observed a 5–35% speedup across our [benchmarks](https://golang.org/test/bench/go1/).
 For now, the new backend is only available for the 64-bit x86 platform ("amd64"),
 but we’re planning to convert more architecture backends to SSA in future releases.
 
 The compiler front end uses a new, more compact export data format, and
 processes import declarations more efficiently.
-While these [[https://golang.org/doc/go1.7#compiler][changes across the compiler toolchain]] are mostly invisible,
-users have [[http://dave.cheney.net/2016/04/02/go-1-7-toolchain-improvements][observed]]
+While these [changes across the compiler toolchain](https://golang.org/doc/go1.7#compiler) are mostly invisible,
+users have [observed](http://dave.cheney.net/2016/04/02/go-1-7-toolchain-improvements)
 a significant speedup in compile time and a reduction in binary size by as much as 20–30%.
 
 Programs should run a bit faster due to speedups in the garbage collector and optimizations in the standard library.
 Programs with many idle goroutines will experience much shorter garbage collection pauses than in Go 1.6.
 
-Over the past few years, the [[https://godoc.org/golang.org/x/net/context/][golang.org/x/net/context]]
+Over the past few years, the [golang.org/x/net/context](https://godoc.org/golang.org/x/net/context/)
 package has proven to be essential to many Go applications.
 Contexts are used to great effect in applications related to networking, infrastructure, and microservices
-(such as [[http://kubernetes.io/][Kubernetes]] and [[https://www.docker.com/][Docker]]).
+(such as [Kubernetes](http://kubernetes.io/) and [Docker](https://www.docker.com/)).
 They make it easy to enable cancelation, timeouts, and passing request-scoped data.
 To make use of contexts within the standard library and to encourage more extensive use,
-the package has been moved from the [[https://godoc.org/golang.org/x/net/context/][x/net]] repository
-to the standard library as the [[https://golang.org/pkg/context/][context]] package.
+the package has been moved from the [x/net](https://godoc.org/golang.org/x/net/context/) repository
+to the standard library as the [context](https://golang.org/pkg/context/) package.
 Support for contexts has been added to the
-[[https://golang.org/pkg/net/][net]],
-[[https://golang.org/pkg/net/http/][net/http]], and
-[[https://golang.org/pkg/os/exec/][os/exec]] packages.
-For more information about contexts, see the [[https://golang.org/pkg/context][package documentation]]
-and the Go blog post [[https://blog.golang.org/context][_Go_Concurrency_Patterns:_Context_]].
+[net](https://golang.org/pkg/net/),
+[net/http](https://golang.org/pkg/net/http/), and
+[os/exec](https://golang.org/pkg/os/exec/) packages.
+For more information about contexts, see the [package documentation](https://golang.org/pkg/context)
+and the Go blog post [_Go Concurrency Patterns: Context_](https://blog.golang.org/context).
 
-Go 1.5 introduced experimental support for a [[https://golang.org/cmd/go/#hdr-Vendor_Directories]["vendor" directory]],
+Go 1.5 introduced experimental support for a ["vendor" directory](https://golang.org/cmd/go/#hdr-Vendor_Directories),
 enabled by the `GO15VENDOREXPERIMENT` environment variable.
 Go 1.6 enabled this behavior by default, and in Go 1.7, this switch has been removed and the "vendor" behavior is always enabled.
 
 Go 1.7 includes many more additions, improvements, and fixes.
 Find the complete set of changes, and details of the points above, in the
-[[https://golang.org/doc/go1.7.html][Go 1.7 release notes]].
+[Go 1.7 release notes](https://golang.org/doc/go1.7.html).
 
 Finally, the Go team would like thank everyone who contributed to the release.
 170 people contributed to this release, including 140 from the Go community.
 These contributions ranged from changes to the compiler and linker, to the standard library, to documentation, and code reviews.
 We welcome contributions; if you'd like to get involved, check out the
-[[https://golang.org/doc/contribute.html][contribution guidelines]].
+[contribution guidelines](https://golang.org/doc/contribute.html).
diff --git a/content/go1.8.article b/content/go1.8.article
index 58ab44e..6608417 100644
--- a/content/go1.8.article
+++ b/content/go1.8.article
@@ -1,48 +1,49 @@
-Go 1.8 is released
+# Go 1.8 is released
 16 Feb 2017
+Summary: Today the Go team is happy to announce the release of Go 1.8. You can get it from the [download page](https://golang.org/dl/). There are significant performance improvements and changes across the standard library.
 
 Chris Broadfoot
 cbro@golang.org
 
-* Introduction
+##
 
 Today the Go team is happy to announce the release of Go 1.8.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 There are significant performance improvements and changes across the standard library.
 
-The compiler back end introduced in [[https://blog.golang.org/go1.7][Go 1.7]] for 64-bit x86 is now used
-on all architectures, and those architectures should see significant [[https://golang.org/doc/go1.8#compiler][performance improvements]].
+The compiler back end introduced in [Go 1.7](https://blog.golang.org/go1.7) for 64-bit x86 is now used
+on all architectures, and those architectures should see significant [performance improvements](https://golang.org/doc/go1.8#compiler).
 For instance, the CPU time required by our benchmark programs was reduced by 20-30% on 32-bit ARM systems.
 There are also some modest performance improvements in this release for 64-bit x86 systems.
 The compiler and linker have been made faster.
 Compile times should be improved by about 15% over Go 1.7.
 There is still more work to be done in this area: expect faster compilation speeds in future releases.
 
-Garbage collection pauses should be [[https://golang.org/doc/go1.8#gc][significantly shorter]],
+Garbage collection pauses should be [significantly shorter](https://golang.org/doc/go1.8#gc),
 usually under 100 microseconds and often as low as 10 microseconds.
 
-The HTTP server adds support for [[https://golang.org/doc/go1.8#h2push][HTTP/2 Push]],
+The HTTP server adds support for [HTTP/2 Push](https://golang.org/doc/go1.8#h2push),
 allowing servers to preemptively send responses to a client.
 This is useful for minimizing network latency by eliminating roundtrips.
-The HTTP server also adds support for [[https://golang.org/doc/go1.8#http_shutdown][graceful shutdown]],
+The HTTP server also adds support for [graceful shutdown](https://golang.org/doc/go1.8#http_shutdown),
 allowing servers to minimize downtime by shutting down only after serving all requests that are in flight.
 
-[[https://golang.org/pkg/context/][Contexts]] (added to the standard library in Go 1.7)
+[Contexts](https://golang.org/pkg/context/) (added to the standard library in Go 1.7)
 provide a cancelation and timeout mechanism.
-Go 1.8 [[https://golang.org/doc/go1.8#more_context][adds]] support for contexts in more parts of the standard library,
-including the [[https://golang.org/pkg/database/sql][`database/sql`]] and [[https://golang.org/pkg/net][`net`]] packages
-and [[http://beta.golang.org/pkg/net/http/#Server.Shutdown][`Server.Shutdown`]] in the `net/http` package.
+Go 1.8 [adds](https://golang.org/doc/go1.8#more_context) support for contexts in more parts of the standard library,
+including the [`database/sql`](https://golang.org/pkg/database/sql) and [`net`](https://golang.org/pkg/net) packages
+and [`Server.Shutdown`](http://beta.golang.org/pkg/net/http/#Server.Shutdown) in the `net/http` package.
 
-It's now much simpler to sort slices using the newly added [[https://golang.org/pkg/sort/#Slice][`Slice`]]
+It's now much simpler to sort slices using the newly added [`Slice`](https://golang.org/pkg/sort/#Slice)
 function in the `sort` package. For example, to sort a slice of structs by their `Name` field:
 
 	sort.Slice(s, func(i, j int) bool { return s[i].Name < s[j].Name })
 
 Go 1.8 includes many more additions, improvements, and fixes.
 Find the complete set of changes, and more information about the improvements listed above, in the
-[[https://golang.org/doc/go1.8.html][Go 1.8 release notes]].
+[Go 1.8 release notes](https://golang.org/doc/go1.8.html).
 
-To celebrate the release, Go User Groups around the world are holding [[https://github.com/golang/go/wiki/Go-1.8-release-party][release parties]] this week.
+To celebrate the release, Go User Groups around the world are holding [release parties](https://github.com/golang/go/wiki/Go-1.8-release-party) this week.
 Release parties have become a tradition in the Go community, so if you missed out this time, keep an eye out when 1.9 nears.
 
 Thank you to over 200 contributors who helped with this release.
diff --git a/content/go1.9.article b/content/go1.9.article
index 8cf8ab4..ec6f176 100644
--- a/content/go1.9.article
+++ b/content/go1.9.article
@@ -1,13 +1,14 @@
-Go 1.9 is released
+# Go 1.9 is released
 24 Aug 2017
+Summary: Today the Go team is happy to announce the release of Go 1.9. You can get it from the [download page](https://golang.org/dl/). There are many changes to the language, standard library, runtime, and tooling. This post covers the most significant visible ones. Most of the engineering effort put into this release went to improvements of the runtime and tooling, which makes for a less exciting announcement, but nonetheless a great release.
 
 Francesc Campoy
 campoy@golang.org
 
-* Introduction
+##
 
 Today the Go team is happy to announce the release of Go 1.9.
-You can get it from the [[https://golang.org/dl/][download page]].
+You can get it from the [download page](https://golang.org/dl/).
 There are many changes to the language, standard library, runtime, and tooling.
 This post covers the most significant visible ones.
 Most of the engineering effort put into this release went to improvements of the runtime and tooling,
@@ -20,22 +21,22 @@
 
 This declaration introduces an alias name `T1` for the type `T2`, in the same way that `byte` has
 always been an alias for `uint8`.
-The [[https://golang.org/design/18130-type-alias][type alias design document]] and
-[[https://talks.golang.org/2016/refactor.article][an article on refactoring]] cover this addition in more detail.
+The [type alias design document](https://golang.org/design/18130-type-alias) and
+[an article on refactoring](https://talks.golang.org/2016/refactor.article) cover this addition in more detail.
 
-The new [[https://golang.org/pkg/math/bits][math/bits]] package provides bit counting and manipulation functions
+The new [math/bits](https://golang.org/pkg/math/bits) package provides bit counting and manipulation functions
 for unsigned integers, implemented by special CPU instructions when possible.
 For example, on x86-64 systems, `bits.TrailingZeros(x)` uses the
-[[https://pdos.csail.mit.edu/6.828/2010/readings/i386/BSF.htm][BSF]] instruction.
+[BSF](https://pdos.csail.mit.edu/6.828/2010/readings/i386/BSF.htm) instruction.
 
-The `sync` package has added a new [[https://golang.org/pkg/sync#Map][Map]] type, safe for concurrent access.
+The `sync` package has added a new [Map](https://golang.org/pkg/sync#Map) type, safe for concurrent access.
 You can read more about it from its documentation and learn more about why it was created from this
-[[https://www.youtube.com/watch?v=C1EtfDnsdDs][GopherCon 2017 lightning talk]]
-([[https://github.com/gophercon/2017-talks/blob/master/lightningtalks/BryanCMills-AnOverviewOfSyncMap/An%20Overview%20of%20sync.Map.pdf][slides]]).
+[GopherCon 2017 lightning talk](https://www.youtube.com/watch?v=C1EtfDnsdDs)
+([slides](https://github.com/gophercon/2017-talks/blob/master/lightningtalks/BryanCMills-AnOverviewOfSyncMap/An%20Overview%20of%20sync.Map.pdf)).
 It is not a general replacement for Go's map type; please see the documentation to learn when it should be used.
 
 The `testing` package also has an addition. The new `Helper` method, added to both
-[[https://golang.org/pkg/testing#T.Helper][testing.T]] and [[https://golang.org/pkg/testing#B.Helper][testing.B]],
+[testing.T](https://golang.org/pkg/testing#T.Helper) and [testing.B](https://golang.org/pkg/testing#B.Helper),
 marks the calling function as a test helper function.
 When the testing package prints file and line information, it shows the location of the call to a helper function
 instead of a line in the helper function itself.
@@ -55,14 +56,14 @@
 	f()
 	elapsed := time.Since(start)
 
-See the [[http://beta.golang.org/pkg/time/#hdr-Monotonic_Clocks][package docs]] and
-[[https://github.com/golang/proposal/blob/master/design/12914-monotonic.md][design document]] for details.
+See the [package docs](http://beta.golang.org/pkg/time/#hdr-Monotonic_Clocks) and
+[design document](https://github.com/golang/proposal/blob/master/design/12914-monotonic.md) for details.
 
 Finally, as part of the efforts to make the Go compiler faster, Go 1.9 compiles functions in a package concurrently.
 
 Go 1.9 includes many more additions, improvements, and fixes. Find the complete set of changes,
 and more information about the improvements listed above, in the
-[[https://golang.org/doc/go1.9][Go 1.9 release notes]].
+[Go 1.9 release notes](https://golang.org/doc/go1.9).
 
 To celebrate the release, Go User Groups around the world are holding
-[[https://github.com/golang/cowg/blob/master/events/2017-08-go1.9-release-party.md][release parties]].
\ No newline at end of file
+[release parties](https://github.com/golang/cowg/blob/master/events/2017-08-go1.9-release-party.md).
diff --git a/content/go12.article b/content/go12.article
index 2516a77..4ba73c1 100644
--- a/content/go12.article
+++ b/content/go12.article
@@ -1,46 +1,47 @@
-Go 1.2 is released
+# Go 1.2 is released
 1 Dec 2013
 Tags: release
+Summary: We are pleased to announce the release of Go 1.2, the latest stable version of the Go Programming Language.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 We are pleased to announce the release of Go 1.2, the latest stable version of
 the Go Programming Language.
 
 Binary distributions may be downloaded from the
-[[https://golang.org/doc/install][usual place]] or if you prefer to
-[[https://golang.org/doc/install/source][compile from source]] you should use
+[usual place](https://golang.org/doc/install) or if you prefer to
+[compile from source](https://golang.org/doc/install/source) you should use
 the `release` or `go1.2` tags.
 
 This new release comes nearly seven months after the release of Go 1.1 in May,
 a much shorter period than the 14 months between 1.1 and 1.0.
 We anticipate a comparable interval between future major releases.
 
-[[https://golang.org/doc/go1.2][Go 1.2]] includes a couple of minor
+[Go 1.2](https://golang.org/doc/go1.2) includes a couple of minor
 language changes, several improvements to the language implementation and
 tools, some performance improvements, and many additions and
 (backward-compatible) changes to the standard library.
 
-Please read the [[https://golang.org/doc/go1.2][release notes]] for all
+Please read the [release notes](https://golang.org/doc/go1.2) for all
 the details, as some changes may affect the behavior of existing (buggy) programs.
 What follows is the highlights of the release.
 
-A new [[https://golang.org/doc/go1.2#three_index][three-index slice syntax]]
+A new [three-index slice syntax](https://golang.org/doc/go1.2#three_index)
 adds the ability to specify capacity as well as length. This allows the
 programmer to pass a slice value that can only access a limited portion of the
 underlying array, a technique that previously required the use of the unsafe
 package.
 
 A major new feature of the tool chain is the facility to compute and display
-[[https://golang.org/doc/go1.2#cover][test coverage results]].
-See the [[https://golang.org/cmd/go/#hdr-Description_of_testing_flags][`go`test`]]
-and [[https://godoc.org/code.google.com/p/go.tools/cmd/cover/][cover tool]]
+[test coverage results](https://golang.org/doc/go1.2#cover).
+See the [`go test`](https://golang.org/cmd/go/#hdr-Description_of_testing_flags)
+and [cover tool](https://godoc.org/code.google.com/p/go.tools/cmd/cover/)
 documentation for details. Later this week we will publish an article that
 discusses this new feature in detail.
 
-Goroutines are now [[https://golang.org/doc/go1.2#preemption][pre-emptively scheduled]],
+Goroutines are now [pre-emptively scheduled](https://golang.org/doc/go1.2#preemption),
 in that the scheduler is invoked occasionally upon entry to a function.
 This can prevent busy goroutines from starving other goroutines on the same
 thread.
@@ -49,21 +50,21 @@
 performance of some programs. (The old size had a tendency to introduce
 expensive stack-segment switching in performance-critical sections.)
 On the other end, new restrictions on
-[[https://golang.org/doc/go1.2#stack_size][stack sizes]] and
-[[https://golang.org/doc/go1.2#thread_limit][the number of operating system threads]]
+[stack sizes](https://golang.org/doc/go1.2#stack_size) and
+[the number of operating system threads](https://golang.org/doc/go1.2#thread_limit)
 should prevent misbehaving programs from consuming all the resources of a
 machine. (These limits may be adjusted using new functions in the
-[[https://golang.org/pkg/runtime/debug][`runtime/debug` package]].)
+[`runtime/debug` package](https://golang.org/pkg/runtime/debug).)
 
-Finally, among the [[https://golang.org/doc/go1.2#library][many changes to the standard library]],
+Finally, among the [many changes to the standard library](https://golang.org/doc/go1.2#library),
 significant changes include
-the new [[https://golang.org/doc/go1.2#encoding][`encoding` package]],
-[[https://golang.org/doc/go1.2#fmt_indexed_arguments][indexed arguments]] in `Printf` format strings, and
-some [[https://golang.org/doc/go1.2#text_template][convenient additions]] to the template packages.
+the new [`encoding` package](https://golang.org/doc/go1.2#encoding),
+[indexed arguments](https://golang.org/doc/go1.2#fmt_indexed_arguments) in `Printf` format strings, and
+some [convenient additions](https://golang.org/doc/go1.2#text_template) to the template packages.
 
-As part of the release, the [[http://play.golang.org/][Go Playground]] has been
+As part of the release, the [Go Playground](http://play.golang.org/) has been
 updated to Go 1.2. This also affects services that use the Playground, such as
-[[http://tour.golang.org/][the Go Tour]] and this blog.
+[the Go Tour](http://tour.golang.org/) and this blog.
 The update also adds the ability to use threads and the `os`, `net`, and
 `unsafe` packages inside the sandbox, making it more like a real Go environment.
 
@@ -71,7 +72,7 @@
 submitted bug reports to the 116 (!) contributors who committed more than 1600
 changes to the core: Your help is invaluable to the project. Thank you!
 
-_This_blog_post_is_the_first_of_the_
-[[http://blog.gopheracademy.com/day-01-go-1.2][Go Advent Calendar]],
-_a_series_of_daily_articles_presented_by_the_
-[[http://gopheracademy.com/][Gopher Academy]] _from_December_1_to_25._
+_This blog post is the first of the_
+[Go Advent Calendar](http://blog.gopheracademy.com/day-01-go-1.2),
+_a series of daily articles presented by the_
+[Gopher Academy](http://gopheracademy.com/) _from December 1 to 25._
diff --git a/content/go15gc.article b/content/go15gc.article
index 56f7568..96b5cd9 100644
--- a/content/go15gc.article
+++ b/content/go15gc.article
@@ -1,10 +1,11 @@
-Go GC: Prioritizing low latency and simplicity
+# Go GC: Prioritizing low latency and simplicity
 31 Aug 2015
+Summary: Go is building a garbage collector (GC) not only for 2015 but for 2025 and beyond: A GC that supports today’s software development and scales along with new software and hardware throughout the next decade. Such a future has no place for stop-the-world GC pauses, which have been an impediment to broader uses of safe and secure languages such as Go.
 
 Richard Hudson
 rlh@golang.org
 
-* The Setup
+## The Setup
 
 Go is building a garbage collector (GC) not only for 2015 but for 2025 and
 beyond: A GC that supports today’s software development and scales along with
@@ -14,13 +15,13 @@
 
 Go 1.5, the first glimpse of this future, achieves GC latencies well below the
 10 millisecond goal we set a year ago. We presented some impressive numbers
-in [[https://talks.golang.org/2015/go-gc.pdf][a talk at Gophercon]].
+in [a talk at Gophercon](https://talks.golang.org/2015/go-gc.pdf).
 The latency improvements have generated a lot of attention;
 Robin Verlangen’s blog post
-[[https://medium.com/@robin.verlangen/billions-of-request-per-day-meet-go-1-5-362bfefa0911][_Billions_of_requests_per_day_meet_Go_1.5_]]
+[_Billions of requests per day meet Go 1.5_](https://medium.com/@robin.verlangen/billions-of-request-per-day-meet-go-1-5-362bfefa0911)
 validates our direction with end to end results.
 We also particularly enjoyed
-[[https://twitter.com/inconshreveable/status/620650786662555648][Alan Shreve’s production server graphs]]
+[Alan Shreve’s production server graphs](https://twitter.com/inconshreveable/status/620650786662555648)
 and his "Holy 85% reduction" comment.
 
 Today 16 gigabytes of RAM costs $100 and CPUs come with many cores, each with
@@ -33,12 +34,12 @@
 supports. This blog post gives a high-level overview of what we have done for
 the Go 1.5 collector.
 
-* The Embellishment
+## The Embellishment
 
 To create a garbage collector for the next decade, we turned to an algorithm
 from decades ago. Go's new garbage collector is a _concurrent_, _tri-color_,
 _mark-sweep_ collector, an idea first proposed by
-[[http://dl.acm.org/citation.cfm?id=359655][Dijkstra in 1978]].
+[Dijkstra in 1978](http://dl.acm.org/citation.cfm?id=359655).
 This is a deliberate divergence from most "enterprise" grade garbage collectors
 of today, and one that we believe is well suited to the properties of modern
 hardware and the latency requirements of modern software.
@@ -58,7 +59,7 @@
 maintain the invariant that no black object points to a white object, lest the
 garbage collector lose track of an object installed in a part of the heap it
 has already visited. Maintaining this invariant is the job of the
-_write_barrier_, which is a small function run by the mutator whenever a
+_write barrier_, which is a small function run by the mutator whenever a
 pointer in the heap is modified. Go’s write barrier colors the now-reachable
 object grey if it is currently white, ensuring that the garbage collector will
 eventually scan it for pointers.
@@ -102,7 +103,7 @@
 team can focus on improving the runtime based on feedback from real customer
 applications.
 
-* The Punchline
+## The Punchline
 
 Go 1.5’s GC ushers in a future where stop-the-world pauses are no longer a
 barrier to moving to a safe and secure language. It is a future where
@@ -110,5 +111,5 @@
 more powerful the GC will not be an impediment to better, more scalable
 software. It’s a good place to be for the next decade and beyond.
 For more details about the 1.5 GC and how we eliminated latency issues see the
-[[https://www.youtube.com/watch?v=aiv1JOfMjm0][Go GC: Latency Problem Solved presentation]]
-or [[https://talks.golang.org/2015/go-gc.pdf][the slides]].
+[Go GC: Latency Problem Solved presentation](https://www.youtube.com/watch?v=aiv1JOfMjm0)
+or [the slides](https://talks.golang.org/2015/go-gc.pdf).
diff --git a/content/go2-here-we-come.article b/content/go2-here-we-come.article
index 0f749de..c7927ae 100644
--- a/content/go2-here-we-come.article
+++ b/content/go2-here-we-come.article
@@ -1,14 +1,15 @@
-Go 2, here we come!
+# Go 2, here we come!
 29 Nov 2018
 Tags: go2, proposals, community
+Summary: At GopherCon 2017, Russ Cox officially started the thought process on the next big version of Go with his talk [The Future of Go](https://www.youtube.com/watch?v=0Zbh_vmAKvk) ([blog post](https://blog.golang.org/toward-go2)). We have called this future language informally Go 2, even though we understand now that it will arrive in incremental steps rather than with a big bang and a single major release. Still, Go 2 is a useful moniker, if only to have a way to talk about that future language, so let’s keep using it for now.
 
 Robert Griesemer
 
-* Background
+## Background
 
 At GopherCon 2017, Russ Cox officially started the thought process on the
-next big version of Go with his talk [[https://www.youtube.com/watch?v=0Zbh_vmAKvk][The Future of Go]]
-([[https://blog.golang.org/toward-go2][blog post]]). We have
+next big version of Go with his talk [The Future of Go](https://www.youtube.com/watch?v=0Zbh_vmAKvk)
+([blog post](https://blog.golang.org/toward-go2)). We have
 called this future language informally Go 2, even though we understand now
 that it will arrive in incremental steps rather than with a big bang and a
 single major release. Still, Go 2 is a useful moniker, if only to have a way
@@ -21,7 +22,7 @@
 learned a lot about the language and libraries that we didn’t know in the
 beginning, and that was only possible through feedback from the Go community.
 
-In 2015 we introduced the [[https://golang.org/s/proposal][proposal process]]
+In 2015 we introduced the [proposal process](https://golang.org/s/proposal)
 to gather a specific kind of feedback: proposals for language and library
 changes. A committee composed of senior Go team members has been reviewing,
 categorizing, and deciding on incoming proposals on a regular basis. That
@@ -33,28 +34,28 @@
 
 It is now time to act on the Go 2 proposals, but to do this we first need a plan.
 
-* Status
+## Status
 
 At the time of writing, there are around 120
-[[https://github.com/golang/go/issues?page=1&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2&utf8=%E2%9C%93][open issues labeled Go 2 proposal]].
+[open issues labeled Go 2 proposal](https://github.com/golang/go/issues?page=1&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2&utf8=%E2%9C%93).
 Each of them proposes a significant library or language change, often one
 that does not satisfy the existing
-[[https://golang.org/doc/go1compat][Go 1 compatibility guarantee]].
+[Go 1 compatibility guarantee](https://golang.org/doc/go1compat).
 Ian Lance Taylor and I
 have been working through these proposals and categorized them
-([[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3AGo2Cleanup][Go2Cleanup]],
-[[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3ANeedsDecision][NeedsDecision]],
+([Go2Cleanup](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3AGo2Cleanup),
+[NeedsDecision](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3ANeedsDecision),
 etc.) to get an idea of what’s there and to make it easier to
 proceed with them. We also merged related proposals and closed the ones which
 seemed clearly out of the scope of Go, or were otherwise unactionable.
 
 Ideas from the remaining proposals will likely influence Go 2’s libraries
 and languages. Two major themes have emerged early on: support for better
-error handling, and generics. [[https://blog.golang.org/go2draft][Draft designs]]
+error handling, and generics. [Draft designs](https://blog.golang.org/go2draft)
 for these two areas have been
 published at this year’s GopherCon, and more exploration is needed.
 
-But what about the rest? We are [[https://blog.golang.org/toward-go2][constrained]]
+But what about the rest? We are [constrained](https://blog.golang.org/toward-go2)
 by the fact that we now have
 millions of Go programmers and a large body of Go code, and we need to
 bring it all along, lest we risk a split ecosystem. That means we cannot
@@ -62,19 +63,19 @@
 carefully. To make progress, we are implementing a new proposal evaluation
 process for these significant potential changes.
 
-* Proposal evaluation process
+## Proposal evaluation process
 
 The purpose of the proposal evaluation process is to collect feedback on
 a small number of select proposals such that a final decision can be made.
 The process runs more or less in parallel to a release cycle and consists
 of the following steps:
 
-1. _Proposal_selection_. The Go team selects a small number of
-[[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3AGo2+label%3AProposal][Go 2 proposals]]
+1. _Proposal selection_. The Go team selects a small number of
+[Go 2 proposals](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3AGo2+label%3AProposal)
 that seem worth considering for acceptance, without making a final decision.
 See below for more on the selection criteria.
 
-2. _Proposal_feedback_. The Go team sends out an announcement listing the selected
+2. _Proposal feedback_. The Go team sends out an announcement listing the selected
 proposals. The announcement explains to the community the tentative intent to
 move forward with the selected proposals and to collect feedback for each
 of them. This gives the community a chance to make suggestions and express
@@ -84,12 +85,12 @@
 The target for these significant language and library changes is to have
 them ready to submit on day 1 of an upcoming release cycle.
 
-4. _Implementation_feedback_. During the development cycle, the Go team and
+4. _Implementation feedback_. During the development cycle, the Go team and
 community have a chance to experiment with the new features and collect
 further feedback.
 
-5. _Launch_decision_. At the end of the three month
-[[https://github.com/golang/go/wiki/Go-Release-Cycle][development cycle]]
+5. _Launch decision_. At the end of the three month
+[development cycle](https://github.com/golang/go/wiki/Go-Release-Cycle)
 (just when starting the three month repo freeze before a release), and
 based on the experience and feedback gathered during the release cycle,
 the Go team makes the final decision about whether to ship each change.
@@ -106,15 +107,15 @@
 proposals, there are simply too many of them. That’s where the selection
 criteria come into play.
 
-* Proposal selection criteria
+## Proposal selection criteria
 
 A proposal must at the very least:
 
-1. _address_an_important_issue_for_many_people_,
+1. _address an important issue for many people_,
 
-2. _have_minimal_impact_on_everybody_else_, and
+2. _have minimal impact on everybody else_, and
 
-3. _come_with_a_clear_and_well-understood_solution_.
+3. _come with a clear and well-understood solution_.
 
 Requirement 1 ensures that any changes we make help as many Go developers
 as possible (make their code more robust, easier to write, more likely to
@@ -131,7 +132,7 @@
 solution. That’s fine, it just means that the proposal needs to go back to
 the drawing board before it can be considered.
 
-* Proposals
+## Proposals
 
 We feel that this is a good plan that should serve us well but it is important
 to understand that this is only a starting point. As the process is used we will
@@ -146,14 +147,14 @@
 With all that said, we propose the following selection of Go 2 proposals for
 the Go 1.13 release (step 1 in the proposal evaluation process):
 
-1. [[https://github.com/golang/go/issues/20706][_#20706_]] _General_Unicode_identifiers_based_on_ [[http://unicode.org/reports/tr31/][_Unicode_TR31_]]:
+1. [_\#20706_](https://github.com/golang/go/issues/20706) _General Unicode identifiers based on_ [_Unicode TR31_](http://unicode.org/reports/tr31/):
 This addresses an important issue for Go programmers using non-Western alphabets
 and should have little if any impact on anyone else. There are normalization
 questions which we need to answer and where community feedback will be
 important, but after that the implementation path is well understood.
 Note that identifier export rules will not be affected by this.
 
-2. [[https://github.com/golang/go/issues/19308][_#19308_]], [[https://github.com/golang/go/issues/28493][_#28493_]] _Binary_integer_literals_and_support_for___in_number_literals_:
+2. [_\#19308_](https://github.com/golang/go/issues/19308), [_\#28493_](https://github.com/golang/go/issues/28493) _Binary integer literals and support for \_ in number literals_:
 These are relatively minor changes that seem hugely popular among many
 programmers. They may not quite reach the threshold of solving an
 “important issue” (hexadecimal numbers have worked well so far) but they
@@ -162,14 +163,14 @@
 don’t care about binary integer literals or number formatting, and the
 implementation is well understood.
 
-3. [[https://github.com/golang/go/issues/19113][_#19113_]] _Permit_signed_integers_as_shift_counts_:
+3. [_\#19113_](https://github.com/golang/go/issues/19113) _Permit signed integers as shift counts_:
 An estimated 38% of all non-constant shifts require an (artificial) uint
 conversion (see the issue for a more detailed break-down). This proposal
 will clean up a lot of code, get shift expressions better in sync with index
 expressions and the built-in functions cap and len. It will mostly have a
 positive impact on code. The implementation is well understood.
 
-* Next steps
+## Next steps
 
 With this blog post we have executed the first step and started the second
 step of the proposal evaluation process. It’s now up to you, the
diff --git a/content/go2-next-steps.article b/content/go2-next-steps.article
index 07f6abe..5a13d60 100644
--- a/content/go2-next-steps.article
+++ b/content/go2-next-steps.article
@@ -1,10 +1,11 @@
-Next steps toward Go 2
+# Next steps toward Go 2
 26 Jun 2019
 Tags: go2, proposals, community
+Summary: We’re well on the way towards the release of Go 1.13, hopefully in early August of this year. This is the first release that will include concrete changes to the language (rather than just minor adjustments to the spec), after a longer moratorium on any such changes.
 
 Robert Griesemer, for the Go team
 
-* Status
+## Status
 
 We’re well on the way towards the release of Go 1.13,
 hopefully in early August of this year.
@@ -15,17 +16,17 @@
 To arrive at these language changes,
 we started out with a small set of viable proposals,
 selected from the much larger list of
-[[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3AGo2+label%3AProposal][Go 2 proposals]],
+[Go 2 proposals](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3AGo2+label%3AProposal),
 per the new proposal evaluation process outlined
 in the
-“[[https://blog.golang.org/go2-here-we-come][Go 2, here we come!]]” blog post.
+“[Go 2, here we come!](https://blog.golang.org/go2-here-we-come)” blog post.
 We wanted our initial selection of proposals
 to be relatively minor and mostly uncontroversial,
 to have a reasonably high chance of having them
 make it through the process.
 The proposed changes had to be backward-compatible
 to be minimally disruptive since
-[[https://blog.golang.org/using-go-modules][modules]],
+[modules](https://blog.golang.org/using-go-modules),
 which eventually will allow module-specific language version selection,
 are not the default build mode quite yet.
 In short, this initial round of changes was more about
@@ -33,30 +34,30 @@
 with the new process, rather than tackling big issues.
 
 Our
-[[https://blog.golang.org/go2-here-we-come][original list of proposals]] –
-[[https://golang.org/issue/20706][general Unicode identifiers]],
-[[https://golang.org/issue/19308][binary integer literals]],
-[[https://golang.org/issue/28493][separators for number literals]],
-[[https://golang.org/issue/19113][signed integer shift counts]] –
+[original list of proposals](https://blog.golang.org/go2-here-we-come) –
+[general Unicode identifiers](https://golang.org/issue/20706),
+[binary integer literals](https://golang.org/issue/19308),
+[separators for number literals](https://golang.org/issue/28493),
+[signed integer shift counts](https://golang.org/issue/19113) –
 got both trimmed and expanded.
 The general Unicode identifiers didn’t make the cut
 as we didn’t have a concrete design document in place in time.
 The proposal for binary integer literals was expanded significantly
 and led to a comprehensive overhaul and modernization of
-[[https://golang.org/design/19308-number-literals][Go’s number literal syntax]].
+[Go’s number literal syntax](https://golang.org/design/19308-number-literals).
 And we added the Go 2 draft design proposal on
-[[https://golang.org/design/go2draft-error-inspection][error inspection]],
+[error inspection](https://golang.org/design/go2draft-error-inspection),
 which has been
-[[https://golang.org/issue/29934#issuecomment-489682919][partially accepted]].
+[partially accepted](https://golang.org/issue/29934#issuecomment-489682919).
 
 With these initial changes in place for Go 1.13,
 it’s now time to look forward to Go 1.14
 and determine what we want to tackle next.
 
-* Proposals for Go 1.14
+## Proposals for Go 1.14
 
 The goals we have for Go today are the same as in 2007: to
-[[https://blog.golang.org/toward-go2][make software development scale]].
+[make software development scale](https://blog.golang.org/toward-go2).
 The three biggest hurdles on this path to improved scalability for Go are
 package and version management,
 better error handling support,
@@ -66,14 +67,14 @@
 support for package and version management is being addressed.
 This leaves better error handling support and generics.
 We have been working on both of these and presented
-[[https://golang.org/design/go2draft][draft designs]]
+[draft designs](https://golang.org/design/go2draft)
 at last year’s GopherCon in Denver.
 Since then we have been iterating those designs.
 For error handling, we have published a concrete,
 significantly revised and simplified proposal (see below).
 For generics, we are making progress, with a talk
 (“Generics in Go” by Ian Lance Taylor)
-[[https://www.gophercon.com/agenda/session/49028][coming up]]
+[coming up](https://www.gophercon.com/agenda/session/49028)
 at this year’s GopherCon in San Diego,
 but we have not reached the concrete proposal stage yet.
 
@@ -81,9 +82,9 @@
 improvements to the language.
 For Go 1.14, we have selected the following proposals:
 
-[[https://golang.org/issue/32437][#32437]].
+[\#32437](https://golang.org/issue/32437).
 A built-in Go error check function, “try”
-([[https://golang.org/design/32437-try-builtin][design doc]]).
+([design doc](https://golang.org/design/32437-try-builtin)).
 
 This is our concrete proposal for improved error handling.
 While the proposed, fully backwards-compatible language extension
@@ -91,20 +92,20 @@
 This proposal has already attracted an enormous amount of comments,
 and it’s not easy to follow up.
 We recommend starting with the
-[[https://golang.org/issue/32437#issue-452239211][initial comment]]
+[initial comment](https://golang.org/issue/32437#issue-452239211)
 for a quick outline and then to read the detailed design doc.
 The initial comment contains a couple of links leading to summaries
 of the feedback so far.
 Please follow the feedback recommendations
 (see the “Next steps” section below) before posting.
 
-[[https://golang.org/issue/6977][#6977]].
+[\#6977](https://golang.org/issue/6977).
 Allow embedding overlapping interfaces
-([[https://golang.org/design/6977-overlapping-interfaces][design doc]]).
+([design doc](https://golang.org/design/6977-overlapping-interfaces)).
 
 This is an old, backwards-compatible proposal for making interface embedding more tolerant.
 
-[[https://golang.org/issue/32479][#32479]] Diagnose `string(int)` conversion in `go`vet`.
+[\#32479](https://golang.org/issue/32479) Diagnose `string(int)` conversion in `go vet`.
 
 The `string(int)` conversion was introduced early in Go for convenience,
 but it is confusing to newcomers (`string(10)` is `"\n"` not `"10"`)
@@ -113,16 +114,16 @@
 Since removing this conversion is not a backwards-compatible change,
 we propose to start with a `vet` error instead.
 
-[[https://golang.org/issue/32466][#32466]] Adopt crypto principles
-([[https://golang.org/design/cryptography-principles][design doc]]).
+[\#32466](https://golang.org/issue/32466) Adopt crypto principles
+([design doc](https://golang.org/design/cryptography-principles)).
 
 This is a request for feedback on a set of design principles for
 cryptographic libraries that we would like to adopt.
 See also the related
-[[https://golang.org/issue/32716][proposal to remove SSLv3 support]]
+[proposal to remove SSLv3 support](https://golang.org/issue/32716)
 from `crypto/tls`.
 
-* Next steps
+## Next steps
 
 We are actively soliciting feedback on all these proposals.
 We are especially interested in fact-based evidence
@@ -142,11 +143,11 @@
 experimental phase with a given proposal,
 we are planning to have all these implemented at the
 start of the
-[[https://golang.org/wiki/Go-Release-Cycle][Go 1.14 cycle]]
+[Go 1.14 cycle](https://golang.org/wiki/Go-Release-Cycle)
 (beginning of August, 2019)
 so that they can be evaluated in practice.
 Per the
-[[https://blog.golang.org/go2-here-we-come][proposal evaluation process]],
+[proposal evaluation process](https://blog.golang.org/go2-here-we-come),
 the final decision will be
 made at the end of the development cycle (beginning of November, 2019).
 
diff --git a/content/go2draft.article b/content/go2draft.article
index e1e4715..ed6e9b9 100644
--- a/content/go2draft.article
+++ b/content/go2draft.article
@@ -1,18 +1,19 @@
-Go 2 Draft Designs
+# Go 2 Draft Designs
 28 Aug 2018
 Tags: community, video
+Summary: Yesterday, at our annual Go contributor summit, attendees got a sneak peek at preliminary _drafts_ of possible designs for changes to error handling and generics. [The development of Go 2](https://blog.golang.org/toward-go2) was announced last year and we are excited to share updates with you today.
 
-* Introduction
+##
 
 Yesterday, at our annual Go contributor summit,
 attendees got a sneak peek at preliminary _drafts_ of
 possible designs for changes to error handling and generics.
-[[https://blog.golang.org/toward-go2][The development of Go 2]] was announced last year and we are excited to share updates with you today.
+[The development of Go 2](https://blog.golang.org/toward-go2) was announced last year and we are excited to share updates with you today.
 
 For a quick overview, watch this short message we just played at Gophercon 2018:
 
 .iframe //www.youtube.com/embed/6wIP3rO6On8 315 560
 
 We invite everyone in the Go community to
-[[https://go.googlesource.com/proposal/+/master/design/go2draft.md][learn more about the designs]]
+[learn more about the designs](https://go.googlesource.com/proposal/+/master/design/go2draft.md)
 and help us improve them.
diff --git a/content/gobs-of-data.article b/content/gobs-of-data.article
index 21a9dca..965a98c 100644
--- a/content/gobs-of-data.article
+++ b/content/gobs-of-data.article
@@ -1,23 +1,24 @@
-Gobs of data
+# Gobs of data
 24 Mar 2011
 Tags: gob, json, protobuf, xml, technical
+Summary: To transmit a data structure across a network or to store it in a file, it must be encoded and then decoded again. There are many encodings available, of course: [JSON](http://www.json.org/), [XML](http://www.w3.org/XML/), Google's [protocol buffers](http://code.google.com/p/protobuf), and more. And now there's another, provided by Go's [gob](https://golang.org/pkg/encoding/gob/) package.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 To transmit a data structure across a network or to store it in a file,
 it must be encoded and then decoded again.
 There are many encodings available, of course:
-[[http://www.json.org/][JSON]], [[http://www.w3.org/XML/][XML]],
-Google's [[http://code.google.com/p/protobuf][protocol buffers]], and more.
-And now there's another, provided by Go's [[https://golang.org/pkg/encoding/gob/][gob]] package.
+[JSON](http://www.json.org/), [XML](http://www.w3.org/XML/),
+Google's [protocol buffers](http://code.google.com/p/protobuf), and more.
+And now there's another, provided by Go's [gob](https://golang.org/pkg/encoding/gob/) package.
 
 Why define a new encoding? It's a lot of work and redundant at that.
 Why not just use one of the existing formats? Well,
 for one thing, we do!
-Go has [[https://golang.org/pkg/][packages]] supporting all the encodings
-just mentioned (the [[http://github.com/golang/protobuf][protocol buffer package]]
+Go has [packages](https://golang.org/pkg/) supporting all the encodings
+just mentioned (the [protocol buffer package](http://github.com/golang/protobuf)
 is in a separate repository but it's one of the most frequently downloaded).
 And for many purposes, including communicating with tools and systems written in other languages,
 they're the right choice.
@@ -29,7 +30,7 @@
 language-independent encoding cannot.
 At the same time, there are lessons to be learned from the existing systems.
 
-* Goals
+## Goals
 
 The gob package was designed with a number of goals in mind.
 
@@ -55,7 +56,7 @@
 
 There were also some things to learn from our experiences with Google protocol buffers.
 
-* Protocol buffer misfeatures
+## Protocol buffer misfeatures
 
 Protocol buffers had a major effect on the design of gobs,
 but have three features that were deliberately avoided.
@@ -102,7 +103,7 @@
 
 So gobs end up looking like a sort of generalized, simplified protocol buffer. How do they work?
 
-* Values
+## Values
 
 The encoded gob data isn't about types like `int8` and `uint16`.
 Instead, somewhat analogous to constants in Go,
@@ -167,18 +168,18 @@
 such as small integers, have a lot of zeros at the low end that we can avoid transmitting.
 
 One nice feature of gobs that Go makes possible is that they allow you to
-define your own encoding by having your type satisfy the [[https://golang.org/pkg/encoding/gob/#GobEncoder][GobEncoder]]
-and [[https://golang.org/pkg/encoding/gob/#GobDecoder][GobDecoder]] interfaces,
-in a manner analogous to the [[https://golang.org/pkg/encoding/json/][JSON]]
-package's [[https://golang.org/pkg/encoding/json/#Marshaler][Marshaler]]
-and [[https://golang.org/pkg/encoding/json/#Unmarshaler][Unmarshaler]] and
-also to the [[https://golang.org/pkg/fmt/#Stringer][Stringer]] interface
-from [[https://golang.org/pkg/fmt/][package fmt]].
+define your own encoding by having your type satisfy the [GobEncoder](https://golang.org/pkg/encoding/gob/#GobEncoder)
+and [GobDecoder](https://golang.org/pkg/encoding/gob/#GobDecoder) interfaces,
+in a manner analogous to the [JSON](https://golang.org/pkg/encoding/json/)
+package's [Marshaler](https://golang.org/pkg/encoding/json/#Marshaler)
+and [Unmarshaler](https://golang.org/pkg/encoding/json/#Unmarshaler) and
+also to the [Stringer](https://golang.org/pkg/fmt/#Stringer) interface
+from [package fmt](https://golang.org/pkg/fmt/).
 This facility makes it possible to represent special features,
 enforce constraints, or hide secrets when you transmit data.
-See the [[https://golang.org/pkg/encoding/gob/][documentation]] for details.
+See the [documentation](https://golang.org/pkg/encoding/gob/) for details.
 
-* Types on the wire
+## Types on the wire
 
 The first time you send a given type, the gob package includes in the data
 stream a description of that type.
@@ -212,7 +213,7 @@
 for the set of bootstrap types,
 which is a well-defined starting point.
 
-* Compiling a machine
+## Compiling a machine
 
 The first time you encode a value of a given type,
 the gob package builds a little interpreted machine specific to that data type.
@@ -237,13 +238,13 @@
 Once that decoding machine is built, though,
 it's again a reflectionless engine that uses unsafe methods to get maximum speed.
 
-* Use
+## Use
 
 There's a lot going on under the hood, but the result is an efficient,
 easy-to-use encoding system for transmitting data.
 Here's a complete example showing differing encoded and decoded types.
 Note how easy it is to send and receive values;
-all you need to do is present values and variables to the [[https://golang.org/pkg/encoding/gob/][gob package]]
+all you need to do is present values and variables to the [gob package](https://golang.org/pkg/encoding/gob/)
 and it does all the work.
 
 	package main
@@ -286,16 +287,16 @@
 	    fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
 	}
 
-You can compile and run this example code in the [[http://play.golang.org/p/_-OJV-rwMq][Go Playground]].
+You can compile and run this example code in the [Go Playground](http://play.golang.org/p/_-OJV-rwMq).
 
-The [[https://golang.org/pkg/net/rpc/][rpc package]] builds on gobs to turn
+The [rpc package](https://golang.org/pkg/net/rpc/) builds on gobs to turn
 this encode/decode automation into transport for method calls across the network.
 That's a subject for another article.
 
-* Details
+## Details
 
-The [[https://golang.org/pkg/encoding/gob/][gob package documentation]],
-especially the file [[https://golang.org/src/pkg/encoding/gob/doc.go][doc.go]],
+The [gob package documentation](https://golang.org/pkg/encoding/gob/),
+especially the file [doc.go](https://golang.org/src/pkg/encoding/gob/doc.go),
 expands on many of the details described here and includes a full worked
 example showing how the encoding represents data.
 If you are interested in the innards of the gob implementation,
diff --git a/content/godoc-documenting-go-code.article b/content/godoc-documenting-go-code.article
index 89df534..e75b105 100644
--- a/content/godoc-documenting-go-code.article
+++ b/content/godoc-documenting-go-code.article
@@ -1,10 +1,11 @@
-Godoc: documenting Go code
+# Godoc: documenting Go code
 31 Mar 2011
 Tags: godoc, technical
+Summary: The Go project takes documentation seriously. Documentation is a huge part of making software accessible and maintainable. Of course it must be well-written and accurate, but it also must be easy to write and to maintain. Ideally, it should be coupled to the code itself so the documentation evolves along with the code. The easier it is for programmers to produce good documentation, the better for everyone.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 The Go project takes documentation seriously.
 Documentation is a huge part of making software accessible and maintainable.
@@ -15,7 +16,7 @@
 The easier it is for programmers to produce good documentation,
 the better for everyone.
 
-To that end, we have developed the [[https://golang.org/cmd/godoc/][godoc]] documentation tool.
+To that end, we have developed the [godoc](https://golang.org/cmd/godoc/) documentation tool.
 This article describes godoc's approach to documentation,
 and explains how you can use our conventions and tools to write good documentation
 for your own projects.
@@ -24,10 +25,10 @@
 as HTML or plain text.
 The end result is documentation tightly coupled with the code it documents.
 For example, through godoc's web interface you can navigate from a function's
-[[https://golang.org/pkg/strings/#HasPrefix][documentation]] to its [[https://golang.org/src/pkg/strings/strings.go#L493][implementation]] with one click.
+[documentation](https://golang.org/pkg/strings/#HasPrefix) to its [implementation](https://golang.org/src/pkg/strings/strings.go#L493) with one click.
 
-Godoc is conceptually related to Python's [[http://www.python.org/dev/peps/pep-0257/][Docstring]]
-and Java's [[http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html][Javadoc]],
+Godoc is conceptually related to Python's [Docstring](http://www.python.org/dev/peps/pep-0257/)
+and Java's [Javadoc](http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html),
 but its design is simpler.
 The comments read by godoc are not language constructs (as with Docstring)
 nor must they have their own machine-readable syntax (as with Javadoc).
@@ -39,7 +40,7 @@
 write a regular comment directly preceding its declaration,
 with no intervening blank line.
 Godoc will then present that comment as text alongside the item it documents.
-For example, this is the documentation for the `fmt` package's [[https://golang.org/pkg/fmt/#Fprint][`Fprint`]] function:
+For example, this is the documentation for the `fmt` package's [`Fprint`](https://golang.org/pkg/fmt/#Fprint) function:
 
 	// Fprint formats using the default formats for its operands and writes to w.
 	// Spaces are added between operands when neither is a string.
@@ -54,29 +55,29 @@
 such as when they extract the first line or sentence.
 
 Comments on package declarations should provide general package documentation.
-These comments can be short, like the [[https://golang.org/pkg/sort/][`sort`]]
+These comments can be short, like the [`sort`](https://golang.org/pkg/sort/)
 package's brief description:
 
 	// Package sort provides primitives for sorting slices and user-defined
 	// collections.
 	package sort
 
-They can also be detailed like the [[https://golang.org/pkg/encoding/gob/][gob package]]'s overview.
+They can also be detailed like the [gob package](https://golang.org/pkg/encoding/gob/)'s overview.
 That package uses another convention for packages that need large amounts
 of introductory documentation:
 the package comment is placed in its own file,
-[[https://golang.org/src/pkg/encoding/gob/doc.go][doc.go]],
+[doc.go](https://golang.org/src/pkg/encoding/gob/doc.go),
 which contains only those comments and a package clause.
 
 When writing package comments of any size,
-keep in mind that their first sentence will appear in godoc's [[https://golang.org/pkg/][package list]].
+keep in mind that their first sentence will appear in godoc's [package list](https://golang.org/pkg/).
 
 Comments that are not adjacent to a top-level declaration are omitted from godoc's output,
 with one notable exception.
 Top-level comments that begin with the word `"BUG(who)”` are recognized as known bugs,
 and included in the "Bugs” section of the package documentation.
 The "who” part should be the user name of someone who could provide more information.
-For example, this is a known issue from the [[https://golang.org/pkg/bytes/#pkg-note-BUG][bytes package]]:
+For example, this is a known issue from the [bytes package](https://golang.org/pkg/bytes/#pkg-note-BUG):
 
 	// BUG(r): The rule Title uses for word boundaries does not handle Unicode punctuation properly.
 
@@ -86,17 +87,17 @@
 To signal that an identifier should not be used, add a paragraph to its doc
 comment that begins with "Deprecated:" followed by some information about the
 deprecation.
-There are a few examples [[https://golang.org/search?q=Deprecated:][in the standard library]].
+There are a few examples [in the standard library](https://golang.org/search?q=Deprecated:).
 
 There are a few formatting rules that Godoc uses when converting comments to HTML:
 
-- Subsequent lines of text are considered part of the same paragraph;
-  you must leave a blank line to separate paragraphs.
+  - Subsequent lines of text are considered part of the same paragraph;
+    you must leave a blank line to separate paragraphs.
 
-- Pre-formatted text must be indented relative to the surrounding comment
-  text (see gob's [[https://golang.org/src/pkg/encoding/gob/doc.go][doc.go]] for an example).
+  - Pre-formatted text must be indented relative to the surrounding comment
+    text (see gob's [doc.go](https://golang.org/src/pkg/encoding/gob/doc.go) for an example).
 
-- URLs will be converted to HTML links; no special markup is necessary.
+  - URLs will be converted to HTML links; no special markup is necessary.
 
 Note that none of these rules requires you to do anything out of the ordinary.
 
@@ -108,5 +109,5 @@
 Any Go packages installed inside `$GOROOT/src/pkg` and any `GOPATH` work
 spaces will already be accessible via godoc's command-line and HTTP interfaces,
 and you can specify additional paths for indexing via the `-path` flag or
-just by running `"godoc`."` in the source directory.
-See the [[https://golang.org/cmd/godoc/][godoc documentation]] for more details.
+just by running `"godoc ."` in the source directory.
+See the [godoc documentation](https://golang.org/cmd/godoc/) for more details.
diff --git a/content/gopher.article b/content/gopher.article
index 3084655..edb1a18 100644
--- a/content/gopher.article
+++ b/content/gopher.article
@@ -1,12 +1,13 @@
-The Go Gopher
+# The Go Gopher
 24 Mar 2014
 Tags: gopher
+Summary: The Go gopher is an iconic mascot and one of the most distinctive features of the Go project. In this post we'll talk about its origins, evolution, and behavior.
 
 Rob Pike
 
 Andrew Gerrand
 
-* The Go Gopher
+##
 
 .image gopher/header.jpg
 
@@ -15,20 +16,20 @@
 evolution, and behavior.
 
 About 15 years ago—long before the Go project—the gopher first appeared as
-a promotion for the [[https://wfmu.org/][WFMU radio station]] in New Jersey.
-[[http://reneefrench.blogspot.com][Renee French]] was commissioned to
+a promotion for the [WFMU radio station](https://wfmu.org/) in New Jersey.
+[Renee French](http://reneefrench.blogspot.com) was commissioned to
 design a T-shirt for an annual fundraiser and out came the gopher.
 
 .image gopher/wfmu.jpg
 
 The gopher next made an appearance at Bell Labs,
-as Bob Flandrena's [[https://research.swtch.com/face][avatar]] in the Bell Labs mail system.
+as Bob Flandrena's [avatar](https://research.swtch.com/face) in the Bell Labs mail system.
 Other Renee drawings became avatars for ken, r, rsc, and others.
-(Of course, Peter Weinberger's was his own [[http://spinroot.com/pico/pjw.html][iconic face]].)
+(Of course, Peter Weinberger's was his own [iconic face](http://spinroot.com/pico/pjw.html).)
 
 .image gopher/avatars.png
 
-Another Bell Labs activity led to Renee creating [[https://9p.io/plan9/glenda.html][Glenda]],
+Another Bell Labs activity led to Renee creating [Glenda](https://9p.io/plan9/glenda.html),
 the Plan 9 mascot, a distant cousin of the WFMU gopher.
 
 .image gopher/glenda.png
@@ -45,9 +46,9 @@
 
 (The gopher has no name, and is called just the "Go gopher".)
 
-For the [[https://www.youtube.com/watch?v=-i0hat7pdpk#t=24m40s][launch]]
-of the [[https://developers.google.com/appengine/docs/go][Go App Engine runtime]] at
-Google I/O 2011 we engaged [[http://squishable.com][Squishable]] to manufacture the plush gophers.
+For the [launch](https://www.youtube.com/watch?v=-i0hat7pdpk#t=24m40s)
+of the [Go App Engine runtime](https://developers.google.com/appengine/docs/go) at
+Google I/O 2011 we engaged [Squishable](http://squishable.com) to manufacture the plush gophers.
 This was the first time the gopher was colored blue and appeared in three dimensions.
 The first prototype was kinda hairy:
 
@@ -58,7 +59,7 @@
 .image gopher/plush.jpg
 
 Around the same time, Renee roughed out a gopher in clay.
-This inspired a refined sculpture that became a vinyl figurine made by [[http://www.kidrobot.com/][Kidrobot]].
+This inspired a refined sculpture that became a vinyl figurine made by [Kidrobot](http://www.kidrobot.com/).
 The vinyls were first distributed at OSCON 2011.
 
 .image gopher/vinyl.jpg
@@ -70,7 +71,7 @@
 
 The Go gopher is a character; a unique creation. Not any old gopher, just as Snoopy is not any old cartoon dog.
 
-The [[https://golang.org/doc/gopher/][gopher images]] are Creative Commons
+The [gopher images](https://golang.org/doc/gopher/) are Creative Commons
 Attribution 3.0 licensed.
 That means you can play with the images but you must give credit to their
 creator (Renee French) wherever they are used.
@@ -87,14 +88,14 @@
 accept no substitutes!
 But how can you get one? Their natural habitat is near high concentrations of Go programmers,
 and their worldwide population is growing.
-They may be purchased from the [[https://www.googlemerchandisestore.com/Google+Redesign/Fun/Go+Gopher+Blue+Squishable.axd?cid=1399][Google Store]],
+They may be purchased from the [Google Store](https://www.googlemerchandisestore.com/Google+Redesign/Fun/Go+Gopher+Blue+Squishable.axd?cid=1399),
 although the supply can be irregular.
-(These elusive creatures have been spotted in all [[http://www.flickr.com/photos/pinkhamsters/sets/72157627910426064/][kinds]] [[https://plus.google.com/107966629974328136037/posts/TcFA9zHzQB8][of]] [[https://twitter.com/goroutine][places]].)
+(These elusive creatures have been spotted in all [kinds](http://www.flickr.com/photos/pinkhamsters/sets/72157627910426064/) [of](https://plus.google.com/107966629974328136037/posts/TcFA9zHzQB8) [places](https://twitter.com/goroutine).)
 
 Perhaps the best way to get a gopher is to catch one in the wild at a Go conference.
-There are two big chances this year: [[http://gophercon.com/][GopherCon]] (Denver,
-April 24-26) and [[http://dotgo.eu][dotGo]] (Paris, October 10).
+There are two big chances this year: [GopherCon](http://gophercon.com/) (Denver,
+April 24-26) and [dotGo](http://dotgo.eu) (Paris, October 10).
 
 .image gopher/portrait.jpg
 
-_(Photo_by_ [[https://twitter.com/noahhlo/status/437395572081688576][_Noah_Lorang_]]_.)_
+_(Photo by_ [_Noah Lorang_](https://twitter.com/noahhlo/status/437395572081688576)_.)_
diff --git a/content/gopherchina.article b/content/gopherchina.article
index bae456e..bbe0690 100644
--- a/content/gopherchina.article
+++ b/content/gopherchina.article
@@ -1,21 +1,22 @@
-GopherChina Trip Report
+# GopherChina Trip Report
 1 Jul 2015
 Tags: community, china
+Summary: We have known for some time that Go is more popular in China than in any other country. According to Google Trends, most [searches for the term “golang”](https://www.google.com/trends/explore#q=golang) come from The People’s Republic than anywhere else. [Others](http://herman.asia/why-is-go-popular-in-china) have speculated on the same observation, yet so far we have had [sparse concrete information](https://news.ycombinator.com/item?id=8872400) about the phenomenon.
 
 Robert Griesemer
 gri@golang.org
 
-* Introduction
+##
 
 We have known for some time that Go is more popular in China than in any other
 country.
-According to Google Trends, most [[https://www.google.com/trends/explore#q=golang][searches for the term “golang”]] come from The People’s Republic than anywhere else.
-[[http://herman.asia/why-is-go-popular-in-china][Others]] have speculated on
+According to Google Trends, most [searches for the term “golang”](https://www.google.com/trends/explore#q=golang) come from The People’s Republic than anywhere else.
+[Others](http://herman.asia/why-is-go-popular-in-china) have speculated on
 the same observation, yet so far we have had
-[[https://news.ycombinator.com/item?id=8872400][sparse concrete information]]
+[sparse concrete information](https://news.ycombinator.com/item?id=8872400)
 about the phenomenon.
 
-The first Go conference in China, [[http://gopherchina.org/][GopherChina]],
+The first Go conference in China, [GopherChina](http://gopherchina.org/),
 seemed like an excellent opportunity to explore the situation by putting some
 Western Gopher feet on Chinese ground. An actual invitation made it real and I
 decided to accept and give a presentation about gofmt’s impact on software
@@ -23,23 +24,23 @@
 
 .image gopherchina/image04.jpg
 
-_Hello,_Shanghai!_
+_Hello, Shanghai!_
 
 The conference took place over an April weekend in Shanghai, in the
-[[https://www.google.com/maps/place/Puruan+Bldg,+Pudong,+Shanghai,+China][Puruan Building]]
+[Puruan Building](https://www.google.com/maps/place/Puruan+Bldg,+Pudong,+Shanghai,+China)
 of the Shanghai Pudong Software Park, easily reachable by subway within an hour
 or less from Shanghai’s more central parts.
-Modelled after [[http://www.gophercon.com][GopherCon]], the conference was
+Modelled after [GopherCon](http://www.gophercon.com), the conference was
 single-track, with all talks presented in a conference room that fit about 400
 attendees.
-It was organized by volunteers, lead by [[https://github.com/astaxie][Asta Xie]],
+It was organized by volunteers, lead by [Asta Xie](https://github.com/astaxie),
 and with robust sponsorship from major industry names. According to the
 organizers, many more people were hoping to attend than could be accommodated
 due to space constraints.
 
 .image gopherchina/image01.jpg
 
-_The_welcoming_committee_with_Asta_Xie_(2nd_from_left),_the_primary_organizer._
+_The welcoming committee with Asta Xie (2nd from left), the primary organizer._
 
 Each attendee received a bag filled with the obligatory GopherChina t-shirt,
 various sponsor-related informational brochures, stickers, and the occasional
@@ -49,7 +50,7 @@
 
 .image gopherchina/image05.jpg
 
-_Go_books!_
+_Go books!_
 
 On first impression, the average attendee seemed pretty young, which made for
 an enthusiastic crowd, and the event appeared well run.
@@ -69,9 +70,9 @@
 As expected, many of the presentations were about web services, backends for
 mobile applications, and so on. Some of the systems appear to be huge by any
 measure.
-For instance, a talk by [[http://gopherchina.org/user/zhouyang][Yang Zhou]]
+For instance, a talk by [Yang Zhou](http://gopherchina.org/user/zhouyang)
 described a large-scale internal messaging system, used by
-[[http://www.360.cn/][Qihoo 360]], a major Chinese software firm, all written
+[Qihoo 360](http://www.360.cn/), a major Chinese software firm, all written
 in Go. The presentation discussed how his team managed to reduce an original
 heap size of 69GB (!) and the resulting long GC pauses of 3-6s to more
 manageable numbers, and how they run millions of goroutines per machine, on a
@@ -80,15 +81,15 @@
 
 .image gopherchina/image03.jpg
 
-_Packed_conference_room_on_Saturday._
+_Packed conference room on Saturday._
 
-In another presentation, [[http://gopherchina.org/user/guofeng][Feng Guo]] from
-[[https://www.daocloud.io/][DaoCloud]] talked about how they use Go in their
+In another presentation, [Feng Guo](http://gopherchina.org/user/guofeng) from
+[DaoCloud](https://www.daocloud.io/) talked about how they use Go in their
 company for what they call the “continuous delivery” of applications. DaoCloud
 takes care of automatically moving software hosted on GitHub (and Chinese
 equivalents) to the cloud. A software developer simply pushes a new version on
 GitHub and DaoCloud takes care of the rest: running tests,
-[[https://www.docker.com/][Dockerizing]] it, and shipping it using your
+[Dockerizing](https://www.docker.com/) it, and shipping it using your
 preferred cloud service provider.
 
 Several speakers were from well-recognized major software firms (I showed the
@@ -100,7 +101,7 @@
 
 Not being an expert in web services myself, in my presentation I veered off the
 general conference theme a bit by talking about
-[[https://golang.org/cmd/gofmt/][gofmt]] and how its widespread use has started
+[gofmt](https://golang.org/cmd/gofmt/) and how its widespread use has started
 to shape expectations not just for Go but other languages as well.
 I presented in English but had my slides translated to Mandarin beforehand. Due
 to the significant language barrier I wasn’t expecting too many questions on my
@@ -110,11 +111,11 @@
 
 .image gopherchina/image06.jpg
 
-_No_social_event_in_China_is_complete_without_fantastic_food._
+_No social event in China is complete without fantastic food._
 
 A couple of days after the conference I visited the 4-year-old startup company
-[[http://www.qiniu.com/][Qiniu]] (“Seven Bulls”), at the invitation of its
-[[http://gopherchina.org/user/xushiwei][CEO]] Wei Hsu, facilitated and
+[Qiniu](http://www.qiniu.com/) (“Seven Bulls”), at the invitation of its
+[CEO](http://gopherchina.org/user/xushiwei) Wei Hsu, facilitated and
 translated with the help of Asta Xie. Qiniu is a cloud-based storage provider
 for mobile applications; Wei Hsu presented at the conference and also happens
 to be the author of one of the first Chinese books on Go (the leftmost one in
@@ -123,7 +124,7 @@
 .image gopherchina/image02.jpg
 .image gopherchina/image00.jpg
 
-_Qiniu_lobby,_engineering._
+_Qiniu lobby, engineering._
 
 Qiniu is an extremely successful all-Go shop, with about 160 employees, serving
 over 150,000 companies and developers, storing over 50 Billion files, and
@@ -144,11 +145,11 @@
 According to Asta Xie, Qiniu is just one of many Go shops in the PRC. Large
 companies such as Alibaba, Baidu, Tencent, and Weibo, are now all using Go in
 one form or another. He pointed out that while Shanghai and neighboring cities
-like [[https://www.google.com/maps/place/Suzhou,+Jiangsu,+China][Suzhou]] are
+like [Suzhou](https://www.google.com/maps/place/Suzhou,+Jiangsu,+China) are
 high-tech centres, even more software developers are found in the Beijing area.
 For 2016,  Asta hopes to organize a larger (1000, perhaps 1500 people)
 successor conference in Beijing.
 
 It appears that we have found the Go users in China: They are everywhere!
 
-_Some_of_the_GopherChina_materials,_including_videos,_are_now_available_alongside_Go_coursework_on_a_ [[http://www.imooc.com/view/407][_3rd_party_site_]].
+_Some of the GopherChina materials, including videos, are now available alongside Go coursework on a_ [_3rd party site_](http://www.imooc.com/view/407).
diff --git a/content/gophercon.article b/content/gophercon.article
index e7d8931..c0f0a47 100644
--- a/content/gophercon.article
+++ b/content/gophercon.article
@@ -1,12 +1,13 @@
-GopherCon 2014 Wrap Up
+# GopherCon 2014 Wrap Up
 28 May 2014
+Summary: In April this year 700 gophers descended upon Denver to attend [GopherCon](http://www.gophercon.com/), the world's first large-scale Go conference, organized entirely by the community. The three day event featured 24 talks and one panel discussion in a single track over two days, followed by an informal "hack day" full of code, conversation, and more than 4 hours (!) of lightning talks.
 
 Andrew Gerrand
 adg@golang.org
 
-* Introduction
+##
 
-In April this year 700 gophers descended upon Denver to attend [[http://www.gophercon.com/][GopherCon]],
+In April this year 700 gophers descended upon Denver to attend [GopherCon](http://www.gophercon.com/),
 the world's first large-scale Go conference, organized entirely by the community.
 The three day event featured 24 talks and one panel discussion in a single track over two days,
 followed by an informal "hack day" full of code, conversation,
@@ -14,24 +15,24 @@
 
 .image gophercon/image02.jpg
 
-A [[http://confreaks.com/events/gophercon2014][complete set of video recordings]] is now available
-(the [[https://github.com/gophercon/2014-talks][slides are here]]).
+A [complete set of video recordings](http://confreaks.com/events/gophercon2014) is now available
+(the [slides are here](https://github.com/gophercon/2014-talks)).
 
 Two keynotes framed the conference:
 
-- Rob Pike's opening talk [[https://www.youtube.com/watch?v=VoS7DsT1rdM]["Hello, Gophers!"]] ([[https://talks.golang.org/2014/hellogophers.slide][slides]])
-  discusses the history of Go by walking through two of the first Go programs.
-- Andrew Gerrand's closing talk [[https://www.youtube.com/watch?v=dKGmK_Z1Zl0]["Go for gophers"]] ([[https://talks.golang.org/2014/go4gophers.slide][slides]]) explains
-  the Go design philosophy through the lens of his personal experience learning the language.
+  - Rob Pike's opening talk ["Hello, Gophers!"](https://www.youtube.com/watch?v=VoS7DsT1rdM) ([slides](https://talks.golang.org/2014/hellogophers.slide))
+    discusses the history of Go by walking through two of the first Go programs.
+  - Andrew Gerrand's closing talk ["Go for gophers"](https://www.youtube.com/watch?v=dKGmK_Z1Zl0) ([slides](https://talks.golang.org/2014/go4gophers.slide)) explains
+    the Go design philosophy through the lens of his personal experience learning the language.
 
 One talk that resonated with members of the Go team was Peter Bourgon's
-[[https://www.youtube.com/watch?v=Y1-RLAl7iOI]["Best practices for Production Environments"]]
-([[http://peter.bourgon.org/go-in-production/][notes]]).
+["Best practices for Production Environments"](https://www.youtube.com/watch?v=Y1-RLAl7iOI)
+([notes](http://peter.bourgon.org/go-in-production/)).
 From deployment to dependency management,
 it answers many frequently asked questions about Go use in the real world
 and is a must-see for anyone serious about building systems in Go.
 
-But, really, you should just [[http://confreaks.com/events/gophercon2014][watch them all]].
+But, really, you should just [watch them all](http://confreaks.com/events/gophercon2014).
 They're great.
 
 The Go Gopher was everywhere.
@@ -40,7 +41,7 @@
 
 .image gophercon/image01.jpg
 
-The gopher was also seen wearing a cape on the side of the incredible [[https://coreos.com/][CoreOS]] bus:
+The gopher was also seen wearing a cape on the side of the incredible [CoreOS](https://coreos.com/) bus:
 
 .image gophercon/image00.jpg
 
@@ -55,4 +56,4 @@
 in to make the event such a success.
 We look forward to GopherCon 2015, which promises to be bigger and better still.
 
-But if you really can't wait, we'll see you at [[http://www.dotgo.eu/][dotGo]] in Paris on the 10th of October!
+But if you really can't wait, we'll see you at [dotGo](http://www.dotgo.eu/) in Paris on the 10th of October!
diff --git a/content/gophercon2015.article b/content/gophercon2015.article
index e41bd70..1176eb3 100644
--- a/content/gophercon2015.article
+++ b/content/gophercon2015.article
@@ -1,10 +1,11 @@
-GopherCon 2015 Roundup
+# GopherCon 2015 Roundup
 28 Jul 2015
 Tags: conference, report, gopher
+Summary: A few weeks ago, Go programmers from around the world descended on Denver, Colorado for GopherCon 2015. The two-day, single-track conference attracted more than 1,250 attendees—nearly double last year's number—and featured 22 talks presented by Go community members.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 A few weeks ago, Go programmers from around the world descended on Denver,
 Colorado for GopherCon 2015. The two-day, single-track conference attracted
@@ -17,57 +18,57 @@
 Today the organizers have posted the videos online so you can now enjoy the
 conference from afar:
 
-[[http://gophercon.com/schedule/8july/][Day 1]]:
+[Day 1](http://gophercon.com/schedule/8july/):
 
-- Go, Open Source, Community — Russ Cox ([[https://www.youtube.com/watch?v=XvZOdpd_9tc][video]])
-  ([[https://blog.golang.org/open-source][text]])
-- Go kit: A Standard Library for Distributed Programming — Peter Bourgon
-  ([[https://www.youtube.com/watch?v=1AjaZi4QuGo][video]]) ([[https://github.com/gophercon/2015-talks/blob/master/Go%20kit/go-kit.pdf][slides]])
-- Delve Into Go — Derek Parker ([[https://www.youtube.com/watch?v=InG72scKPd4][video]])
-  ([[http://go-talks.appspot.com/github.com/derekparker/talks/gophercon-2015/delve-into-go.slide][slides]])
-- How a complete beginner learned Go as her first backend language in 5
-  weeks — Audrey Lim ([[https://www.youtube.com/watch?v=fZh8uCInEfw][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Audrey%20Lim%20-%20How%20a%20Complete%20Beginner%20Picked%20Up%20Go%20as%20Her%20First%20Backend%20Language%20in%205%20weeks/audreylim_slides.pdf][slides]])
-- A Practical Guide to Preventing Deadlocks and Leaks in Go — Richard
-  Fliam ([[https://www.youtube.com/watch?v=3EW1hZ8DVyw][video]])
-- Go GC: Solving the Latency Problem — Rick Hudson ([[https://www.youtube.com/watch?v=aiv1JOfMjm0][video]])
-  ([[https://talks.golang.org/2015/go-gc.pdf][slides]])
-- Simplicity and Go — Katherine Cox-Buday ([[https://www.youtube.com/watch?v=S6mEo_FHZ5Y][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Katherine%20Cox-Buday:%20Simplicity%20%26%20Go/Simplicity%20%26%20Go.pdf][slides]])
-- Rebuilding Parse.com in Go - an opinionated rewrite — Abhishek Kona
-  ([[https://www.youtube.com/watch?v=_f9LS-OWfeA][video]]) ([[https://github.com/gophercon/2015-talks/blob/master/Abhishek%20Kona%20Rewriting%20Parse%20in%20GO/myslides.pdf][slides]])
-- Prometheus: Designing and Implementing a Modern Monitoring Solution in
-  Go — Björn Rabenstein ([[https://www.youtube.com/watch?v=1V7eJ0jN8-E][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Bj%C3%B6rn%20Rabenstein%20-%20Prometheus/slides.pdf][slides]])
-- What Could Go Wrong? — Kevin Cantwell ([[https://www.youtube.com/watch?v=VC3QXZ-x5yI][video]])
-- The Roots of Go — Baishampayan Ghose ([[https://www.youtube.com/watch?v=0hPOopcJ8-E][video]])
-  ([[https://speakerdeck.com/bg/the-roots-of-go][slides]])
+  - Go, Open Source, Community — Russ Cox ([video](https://www.youtube.com/watch?v=XvZOdpd_9tc))
+    ([text](https://blog.golang.org/open-source))
+  - Go kit: A Standard Library for Distributed Programming — Peter Bourgon
+    ([video](https://www.youtube.com/watch?v=1AjaZi4QuGo)) ([slides](https://github.com/gophercon/2015-talks/blob/master/Go%20kit/go-kit.pdf))
+  - Delve Into Go — Derek Parker ([video](https://www.youtube.com/watch?v=InG72scKPd4))
+    ([slides](http://go-talks.appspot.com/github.com/derekparker/talks/gophercon-2015/delve-into-go.slide))
+  - How a complete beginner learned Go as her first backend language in 5
+    weeks — Audrey Lim ([video](https://www.youtube.com/watch?v=fZh8uCInEfw))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Audrey%20Lim%20-%20How%20a%20Complete%20Beginner%20Picked%20Up%20Go%20as%20Her%20First%20Backend%20Language%20in%205%20weeks/audreylim_slides.pdf))
+  - A Practical Guide to Preventing Deadlocks and Leaks in Go — Richard
+    Fliam ([video](https://www.youtube.com/watch?v=3EW1hZ8DVyw))
+  - Go GC: Solving the Latency Problem — Rick Hudson ([video](https://www.youtube.com/watch?v=aiv1JOfMjm0))
+    ([slides](https://talks.golang.org/2015/go-gc.pdf))
+  - Simplicity and Go — Katherine Cox-Buday ([video](https://www.youtube.com/watch?v=S6mEo_FHZ5Y))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Katherine%20Cox-Buday:%20Simplicity%20%26%20Go/Simplicity%20%26%20Go.pdf))
+  - Rebuilding Parse.com in Go - an opinionated rewrite — Abhishek Kona
+    ([video](https://www.youtube.com/watch?v=_f9LS-OWfeA)) ([slides](https://github.com/gophercon/2015-talks/blob/master/Abhishek%20Kona%20Rewriting%20Parse%20in%20GO/myslides.pdf))
+  - Prometheus: Designing and Implementing a Modern Monitoring Solution in
+    Go — Björn Rabenstein ([video](https://www.youtube.com/watch?v=1V7eJ0jN8-E))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Bj%C3%B6rn%20Rabenstein%20-%20Prometheus/slides.pdf))
+  - What Could Go Wrong? — Kevin Cantwell ([video](https://www.youtube.com/watch?v=VC3QXZ-x5yI))
+  - The Roots of Go — Baishampayan Ghose ([video](https://www.youtube.com/watch?v=0hPOopcJ8-E))
+    ([slides](https://speakerdeck.com/bg/the-roots-of-go))
 
-[[http://gophercon.com/schedule/9july/][Day 2]]:
+[Day 2](http://gophercon.com/schedule/9july/):
 
-- The Evolution of Go — Robert Griesemer ([[https://www.youtube.com/watch?v=0ReKdcpNyQg][video]])
-  ([[https://talks.golang.org/2015/gophercon-goevolution.slide][slides]])
-- Static Code Analysis Using SSA — Ben Johnson ([[https://www.youtube.com/watch?v=D2-gaMvWfQY][video]])
-  ([[https://speakerdeck.com/benbjohnson/static-code-analysis-using-ssa][slides]])
-- Go on Mobile — Hana Kim ([[https://www.youtube.com/watch?v=sQ6-HyPxHKg][video]])
-  ([[https://talks.golang.org/2015/gophercon-go-on-mobile.slide][slides]])
-- Go Dynamic Tools — Dmitry Vyukov ([[https://www.youtube.com/watch?v=a9xrxRsIbSU][video]])
-  ([[https://talks.golang.org/2015/dynamic-tools.slide][slides]])
-- Embrace the Interface — Tomás Senart ([[https://www.youtube.com/watch?v=xyDkyFjzFVc][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Tom%C3%A1s%20Senart%20-%20Embrace%20the%20Interface/ETI.pdf][slides]])
-- Uptime: Building Resilient Services with Go — Blake Caldwell ([[https://www.youtube.com/watch?v=PyBJQA4clfc][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Blake%20Caldwell%20-%20Uptime:%20Building%20Resilient%20Services%20with%20Go/2015-GopherCon-Talk-Uptime.pdf][slides]])
-- Cayley: Building a Graph Database — Barak Michener ([[https://www.youtube.com/watch?v=-9kWbPmSyCI][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Barak%20Michener%20-%20Cayley:%20Building%20a%20Graph%20Database/Cayley%20-%20Building%20a%20Graph%20Database.pdf][slides]])
-- Code Generation For The Sake Of Consistency — Sarah Adams ([[https://www.youtube.com/watch?v=kGAgHwfjg1s][video]])
-- The Many Faces of Struct Tags — Sam Helman and Kyle Erf ([[https://www.youtube.com/watch?v=_SCRvMunkdA][video]])
-  ([[https://github.com/gophercon/2015-talks/blob/master/Sam%20Helman%20%26%20Kyle%20Erf%20-%20The%20Many%20Faces%20of%20Struct%20Tags/StructTags.pdf][slides]])
-- Betting the Company on Go and Winning — Kelsey Hightower ([[https://www.youtube.com/watch?v=wqVbLlHqAeY][video]])
-- How Go Was Made — Andrew Gerrand ([[https://www.youtube.com/watch?v=0ht89TxZZnk][video]])
-  ([[https://talks.golang.org/2015/how-go-was-made.slide][slides]])
+  - The Evolution of Go — Robert Griesemer ([video](https://www.youtube.com/watch?v=0ReKdcpNyQg))
+    ([slides](https://talks.golang.org/2015/gophercon-goevolution.slide))
+  - Static Code Analysis Using SSA — Ben Johnson ([video](https://www.youtube.com/watch?v=D2-gaMvWfQY))
+    ([slides](https://speakerdeck.com/benbjohnson/static-code-analysis-using-ssa))
+  - Go on Mobile — Hana Kim ([video](https://www.youtube.com/watch?v=sQ6-HyPxHKg))
+    ([slides](https://talks.golang.org/2015/gophercon-go-on-mobile.slide))
+  - Go Dynamic Tools — Dmitry Vyukov ([video](https://www.youtube.com/watch?v=a9xrxRsIbSU))
+    ([slides](https://talks.golang.org/2015/dynamic-tools.slide))
+  - Embrace the Interface — Tomás Senart ([video](https://www.youtube.com/watch?v=xyDkyFjzFVc))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Tom%C3%A1s%20Senart%20-%20Embrace%20the%20Interface/ETI.pdf))
+  - Uptime: Building Resilient Services with Go — Blake Caldwell ([video](https://www.youtube.com/watch?v=PyBJQA4clfc))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Blake%20Caldwell%20-%20Uptime:%20Building%20Resilient%20Services%20with%20Go/2015-GopherCon-Talk-Uptime.pdf))
+  - Cayley: Building a Graph Database — Barak Michener ([video](https://www.youtube.com/watch?v=-9kWbPmSyCI))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Barak%20Michener%20-%20Cayley:%20Building%20a%20Graph%20Database/Cayley%20-%20Building%20a%20Graph%20Database.pdf))
+  - Code Generation For The Sake Of Consistency — Sarah Adams ([video](https://www.youtube.com/watch?v=kGAgHwfjg1s))
+  - The Many Faces of Struct Tags — Sam Helman and Kyle Erf ([video](https://www.youtube.com/watch?v=_SCRvMunkdA))
+    ([slides](https://github.com/gophercon/2015-talks/blob/master/Sam%20Helman%20%26%20Kyle%20Erf%20-%20The%20Many%20Faces%20of%20Struct%20Tags/StructTags.pdf))
+  - Betting the Company on Go and Winning — Kelsey Hightower ([video](https://www.youtube.com/watch?v=wqVbLlHqAeY))
+  - How Go Was Made — Andrew Gerrand ([video](https://www.youtube.com/watch?v=0ht89TxZZnk))
+    ([slides](https://talks.golang.org/2015/how-go-was-made.slide))
 
-The [[http://gophercon.com/schedule/10july/][hack day]] was also a ton of fun,
-with hours of [[https://www.youtube.com/playlist?list=PL2ntRZ1ySWBeHqlHM8DmvS8axgbrpvF9b][lightning talks]]
+The [hack day](http://gophercon.com/schedule/10july/) was also a ton of fun,
+with hours of [lightning talks](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBeHqlHM8DmvS8axgbrpvF9b)
 and a range of activities from programming robots
 to a Magic: the Gathering tournament.
 
diff --git a/content/gophergala.article b/content/gophergala.article
index af8d477..769e822 100644
--- a/content/gophergala.article
+++ b/content/gophergala.article
@@ -1,23 +1,24 @@
-The Gopher Gala is the first worldwide Go hackathon
+# The Gopher Gala is the first worldwide Go hackathon
 7 Jan 2015
+Summary: The [Gopher Gala](http://gophergala.com/) is the first Go hackathon at a global scale and will take place from January 23rd through the 25th. The event is organized by the community, supported by the Go team, and sponsored by Google among others.
 
 Francesc Campoy
 campoy@golang.org
 
-* Introduction
+##
 
-The [[http://gophergala.com/][Gopher Gala]] is the first Go hackathon at a
+The [Gopher Gala](http://gophergala.com/) is the first Go hackathon at a
 global scale and will take place from January 23rd through the 25th. The event
 is organized by the community, supported by the Go team, and sponsored by
 Google among others.
 
 .image gophergala/fancygopher.jpg _ 300
-.caption _Fancy_Gopher,_by_ [[http://www.reneefrench.com/][_Renée_French_]]
+_Fancy_Gopher,_by_ [[http://www.reneefrench.com/][_Renée_French_]]
 
 You can read about the rules of the hackathon
-[[http://gophergala.com/rules/][here]], but if you know about
-[[http://railsrumble.com/][Rails Rumble]] or
-[[http://nodeknockout.com/][Node Knockout]] you already have a pretty good idea
+[here](http://gophergala.com/rules/), but if you know about
+[Rails Rumble](http://railsrumble.com/) or
+[Node Knockout](http://nodeknockout.com/) you already have a pretty good idea
 of what to expect.
 
 During this event gophers from all around the globe will form teams to build
@@ -25,11 +26,11 @@
 will vote for their favorite applications and the 20 highest voted applications
 will be ranked by a jury of renowned names from the community, including some
 members of the Go core team. More information on the judging phase can be found
-[[http://gophergala.com/judging/][here]].
+[here](http://gophergala.com/judging/).
 
 And in case you needed one more reason to
-[[https://gophers.typeform.com/to/wondM5][get involved]] there will be prizes!
+[get involved](https://gophers.typeform.com/to/wondM5) there will be prizes!
 
 "What prizes?" you ask. Well, that’s a
-[[http://gophergala.com/prizes/][secret]] until January 10th but we’re pretty
+[secret](http://gophergala.com/prizes/) until January 10th but we’re pretty
 sure you won’t be disappointed.
diff --git a/content/gos-declaration-syntax.article b/content/gos-declaration-syntax.article
index bb1d18f..a6113a1 100644
--- a/content/gos-declaration-syntax.article
+++ b/content/gos-declaration-syntax.article
@@ -1,16 +1,17 @@
-Go's Declaration Syntax
+# Go's Declaration Syntax
 7 Jul 2010
 Tags: c, syntax, ethos
+Summary: Newcomers to Go wonder why the declaration syntax is different from the tradition established in the C family. In this post we'll compare the two approaches and explain why Go's declarations look as they do.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 Newcomers to Go wonder why the declaration syntax is different from the
 tradition established in the C family.
 In this post we'll compare the two approaches and explain why Go's declarations look as they do.
 
-* C syntax
+## C syntax
 
 First, let's talk about C syntax. C took an unusual and clever approach
 to declaration syntax.
@@ -30,7 +31,7 @@
 	int *p;
 	int a[3];
 
-state that p is a pointer to int because '*p' has type int,
+state that p is a pointer to int because '\*p' has type int,
 and that a is an array of ints because a[3] (ignoring the particular index value,
 which is punned to be the size of the array) has type int.
 
@@ -56,7 +57,7 @@
 
 	int (*fp)(int a, int b);
 
-Here, fp is a pointer to a function because if you write the expression (*fp)(a,
+Here, fp is a pointer to a function because if you write the expression (\*fp)(a,
 b) you'll call a function that returns int.
 What if one of fp's arguments is itself a function?
 
@@ -73,7 +74,7 @@
 	char *argv[]
 
 so you drop the name from the middle of its declaration to construct its type.
-It's not obvious, though, that you declare something of type char *[] by
+It's not obvious, though, that you declare something of type char \*[] by
 putting its name in the middle.
 
 And look what happens to fp's declaration if you don't name the parameters:
@@ -101,7 +102,7 @@
 
 	(int)M_PI
 
-* Go syntax
+## Go syntax
 
 Languages outside the C family usually use a distinct type syntax in declarations.
 Although it's a separate point, the name usually comes first,
@@ -157,7 +158,7 @@
 
 	sum := func(a, b int) int { return a+b } (3, 4)
 
-* Pointers
+## Pointers
 
 Pointers are the exception that proves the rule.
 Notice that in arrays and slices, for instance,
@@ -167,7 +168,7 @@
 	var a []int
 	x = a[1]
 
-For familiarity, Go's pointers use the * notation from C,
+For familiarity, Go's pointers use the \* notation from C,
 but we could not bring ourselves to make a similar reversal for pointer types.
 Thus pointers work like this
 
@@ -179,7 +180,7 @@
 	var p *int
 	x = p*
 
-because that postfix * would conflate with multiplication. We could have used the Pascal ^, for example:
+because that postfix \* would conflate with multiplication. We could have used the Pascal ^, for example:
 
 	var p ^int
 	x = p^
@@ -191,11 +192,11 @@
 
 	[]int("hi")
 
-as a conversion, one must parenthesize the type if it starts with a *:
+as a conversion, one must parenthesize the type if it starts with a \*:
 
 	(*int)(nil)
 
-Had we been willing to give up * as pointer syntax, those parentheses would be unnecessary.
+Had we been willing to give up \* as pointer syntax, those parentheses would be unnecessary.
 
 So Go's pointer syntax is tied to the familiar C form,
 but those ties mean that we cannot break completely from using parentheses
@@ -203,7 +204,7 @@
 
 Overall, though, we believe Go's type syntax is easier to understand than C's, especially when things get complicated.
 
-* Notes
+## Notes
 
 Go's declarations read left to right. It's been pointed out that C's read in a spiral!
-See [[http://c-faq.com/decl/spiral.anderson.html][ The "Clockwise/Spiral Rule"]] by David Anderson.
+See [ The "Clockwise/Spiral Rule"](http://c-faq.com/decl/spiral.anderson.html) by David Anderson.
diff --git a/content/gothamgo.article b/content/gothamgo.article
index e5e5575..f3e4632 100644
--- a/content/gothamgo.article
+++ b/content/gothamgo.article
@@ -1,10 +1,11 @@
-GothamGo: gophers in the big apple
+# GothamGo: gophers in the big apple
 9 Jan 2015
+Summary: Last November more than two hundred gophers from all across the United States got together for the first full-day Go conference in New York City.
 
 Francesc Campoy
 campoy@golang.org
 
-* Introduction
+##
 
 Last November more than two hundred gophers from all across the United States
 got together for the first full-day Go conference in New York City.
@@ -15,50 +16,50 @@
 
 .image gothamgo/gothamgo.jpg _ 600
 
-- [[http://vimeo.com/115728346][Launching into Go]] _by_Kathy_Spardlin_ -
-  a CockroachDB contributor provides pointers for people getting started with Go.
-- [[http://vimeo.com/115782573][Error Handling]] _by_ [[https://twitter.com/goinggodotnet][_Bill_Kennedy_]] -
-  ideas on how to use the Go error interface.
-- [[http://vimeo.com/115776445][7 common mistakes in Go and how to avoid them]] _by_
-  [[https://twitter.com/spf13][_Steve_Francia_]] - the author of some popular
-  Go libraries shares his experience.
-- [[http://vimeo.com/115309491][Cancellation, Context, and Plumbing]] _by_
-  [[https://twitter.com/sajma][_Sameer_Ajmani_]] - the Google NYC Go team
-  lead explains how cancellation works in Go,
-  and how we're retrofitting the Google code base to use it.
-- [[http://vimeo.com/115940605][Dethorning Package Management]] _by_ [[https://twitter.com/krarick][_Keith_Rarick_]] -
-  the creator of godep talks about how to manage your dependencies well.
-- [[http://vimeo.com/115940590][Everything You've Always Wanted to Know About Go Web Apps (But were afraid to ask)]]
-  _by_ [[https://twitter.com/markbates][_Mark_Bates_]] - a survey of Go packages
-  for building web apps,
-  and insights into why there are so few Go "frameworks".
-- [[http://vimeo.com/116215450][Building high-performance database applications using Aerospike]]
-  _by_Chris_Stivers_ - a principal engineer at Aerospike shares his experiences
-  building scalable applications.
-- [[http://vimeo.com/115307069][The state of Go on the Android platform]]
-  _by_ [[https://twitter.com/davidcrawshaw][_David_Crawshaw_]] - the leader
-  of the Go on mobile platforms project tells us what’s coming up and shows a working demo.
-- [[http://vimeo.com/116108566][Mutexes and Locks]] _by_ [[https://twitter.com/frazelledazzell][_Jessie_Frazelle_]] -
-  a member of the Docker core team tells us about concurrency and what to
-  do when things go wrong.
-- [[http://vimeo.com/115618722][Gobot.io]] _by_ [[https://twitter.com/deadprogram][_Ron_Evans_]] -
-  awesome robots controlled by Go, with demos!
-- [[http://vimeo.com/114941260][Doing Go]] _by_ [[https://twitter.com/bryanl][_Bryan_Liles_]] -
-  a DigitalOcean engineer delivers a hilarious comedy routine that happens to be about Go.
-- [[http://vimeo.com/115308225][Things I learned teaching Go]] _by_ [[https://twitter.com/francesc][_Francesc_Campoy_]] -
-  the Developer Advocate for the Go team shares his experience teaching Go
-  and some advice on how to become a better gopher.
+  - [Launching into Go](http://vimeo.com/115728346) _by Kathy Spardlin_ -
+    a CockroachDB contributor provides pointers for people getting started with Go.
+  - [Error Handling](http://vimeo.com/115782573) _by_ [_Bill Kennedy_](https://twitter.com/goinggodotnet) -
+    ideas on how to use the Go error interface.
+  - [7 common mistakes in Go and how to avoid them](http://vimeo.com/115776445) _by_
+    [_Steve Francia_](https://twitter.com/spf13) - the author of some popular
+    Go libraries shares his experience.
+  - [Cancellation, Context, and Plumbing](http://vimeo.com/115309491) _by_
+    [_Sameer Ajmani_](https://twitter.com/sajma) - the Google NYC Go team
+    lead explains how cancellation works in Go,
+    and how we're retrofitting the Google code base to use it.
+  - [Dethorning Package Management](http://vimeo.com/115940605) _by_ [_Keith Rarick_](https://twitter.com/krarick) -
+    the creator of godep talks about how to manage your dependencies well.
+  - [Everything You've Always Wanted to Know About Go Web Apps (But were afraid to ask)](http://vimeo.com/115940590)
+    _by_ [_Mark Bates_](https://twitter.com/markbates) - a survey of Go packages
+    for building web apps,
+    and insights into why there are so few Go "frameworks".
+  - [Building high-performance database applications using Aerospike](http://vimeo.com/116215450)
+    _by Chris Stivers_ - a principal engineer at Aerospike shares his experiences
+    building scalable applications.
+  - [The state of Go on the Android platform](http://vimeo.com/115307069)
+    _by_ [_David Crawshaw_](https://twitter.com/davidcrawshaw) - the leader
+    of the Go on mobile platforms project tells us what’s coming up and shows a working demo.
+  - [Mutexes and Locks](http://vimeo.com/116108566) _by_ [_Jessie Frazelle_](https://twitter.com/frazelledazzell) -
+    a member of the Docker core team tells us about concurrency and what to
+    do when things go wrong.
+  - [Gobot.io](http://vimeo.com/115618722) _by_ [_Ron Evans_](https://twitter.com/deadprogram) -
+    awesome robots controlled by Go, with demos!
+  - [Doing Go](http://vimeo.com/114941260) _by_ [_Bryan Liles_](https://twitter.com/bryanl) -
+    a DigitalOcean engineer delivers a hilarious comedy routine that happens to be about Go.
+  - [Things I learned teaching Go](http://vimeo.com/115308225) _by_ [_Francesc Campoy_](https://twitter.com/francesc) -
+    the Developer Advocate for the Go team shares his experience teaching Go
+    and some advice on how to become a better gopher.
 
 Two more talks come from the Go meetup in New York City, which met the day before GothamGo:
 
-- [[http://vimeo.com/114975899][Benchmarking Go]] _by_ [[https://twitter.com/bbulkow][_Brian_Bulkowski_]] -
-  the founder of Aerospike talks about profiling tools for Go and Linux,
-  and micro benchmarks for goroutines, channels,
-  buffers, and and other Go features.
-- [[http://vimeo.com/114736889][Go Static Analysis Tools]] _by_Alan_Donovan_ -
-  a member of the Go team at Google NY gives a guided tour of several static
-  analysis tools designed to help Go programmers understand,
-  navigate , and refactor their code.
+  - [Benchmarking Go](http://vimeo.com/114975899) _by_ [_Brian Bulkowski_](https://twitter.com/bbulkow) -
+    the founder of Aerospike talks about profiling tools for Go and Linux,
+    and micro benchmarks for goroutines, channels,
+    buffers, and and other Go features.
+  - [Go Static Analysis Tools](http://vimeo.com/114736889) _by Alan Donovan_ -
+    a member of the Go team at Google NY gives a guided tour of several static
+    analysis tools designed to help Go programmers understand,
+    navigate , and refactor their code.
 
-Make sure to have a look at all of those in preparation for the [[https://fosdem.org/][FOSDEM]] Go
-devroom FOSDEM in Brussels (Belgium) and [[http://www.gophercon.in/][gophercon.in]] in Bengaluru (India).
+Make sure to have a look at all of those in preparation for the [FOSDEM](https://fosdem.org/) Go
+devroom FOSDEM in Brussels (Belgium) and [gophercon.in](http://www.gophercon.in/) in Bengaluru (India).
diff --git a/content/gouk15.article b/content/gouk15.article
index 9499358..b4f3b44 100644
--- a/content/gouk15.article
+++ b/content/gouk15.article
@@ -1,64 +1,65 @@
-GolangUK 2015
-09 Oct 2015
+# GolangUK 2015
+9 Oct 2015
 Tags: conference, golanguk
+Summary: On August 21st the Go community gathered in London for the first edition of [Golang UK](https://golanguk.com). The conference featured two parallel tracks and nearly 400 gophers attended.
 
 Francesc Campoy
 
-* Introduction
+##
 
 On August 21st the Go community gathered in London for the first edition of
-[[https://golanguk.com][Golang UK]]. The conference featured two parallel
+[Golang UK](https://golanguk.com). The conference featured two parallel
 tracks and nearly 400 gophers attended.
 
 .image gouk15/gouk.jpg 300 _
 
-The conference started with the opening keynote by [[https://twitter.com/calavera][David Calavera]]
-called Crossing the Language Chasm ([[https://www.youtube.com/watch?v=JPVRnEZ4v_w&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-and continued with two concurrently executed [[http://golanguk.com/schedule/][tracks]].
+The conference started with the opening keynote by [David Calavera](https://twitter.com/calavera)
+called Crossing the Language Chasm ([video](https://www.youtube.com/watch?v=JPVRnEZ4v_w&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+and continued with two concurrently executed [tracks](http://golanguk.com/schedule/).
 
 Main track:
 
-- Stupid Gopher Tricks,
-  by [[https://twitter.com/enneff][Andrew Gerrand]]
-  ([[https://www.youtube.com/watch?v=UECh7X07m6E&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Complex Concurrency Patterns in Go,
-  by [[https://twitter.com/eapache][Evan Huus]]
-  ([[https://www.youtube.com/watch?v=2HOO5gIgyMg&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Code Analysis [no reading required],
-  by [[https://twitter.com/francesc][Francesc Campoy]]
-  ([[https://www.youtube.com/watch?v=oorX84tBMqo&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Go kit: a toolkit for microservices,
-  by [[https://twitter.com/peterbourgon][Peter Bourgon]]
-  ([[https://www.youtube.com/watch?v=aL6sd4d4hxk&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Dependency Management Conundrum,
-  by [[https://twitter.com/goinggodotnet][William Kennedy]]
-  ([[https://www.youtube.com/watch?v=CdhucJShJU8&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
+  - Stupid Gopher Tricks,
+    by [Andrew Gerrand](https://twitter.com/enneff)
+    ([video](https://www.youtube.com/watch?v=UECh7X07m6E&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Complex Concurrency Patterns in Go,
+    by [Evan Huus](https://twitter.com/eapache)
+    ([video](https://www.youtube.com/watch?v=2HOO5gIgyMg&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Code Analysis [no reading required],
+    by [Francesc Campoy](https://twitter.com/francesc)
+    ([video](https://www.youtube.com/watch?v=oorX84tBMqo&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Go kit: a toolkit for microservices,
+    by [Peter Bourgon](https://twitter.com/peterbourgon)
+    ([video](https://www.youtube.com/watch?v=aL6sd4d4hxk&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Dependency Management Conundrum,
+    by [William Kennedy](https://twitter.com/goinggodotnet)
+    ([video](https://www.youtube.com/watch?v=CdhucJShJU8&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
 
 Side track:
 
-- Building APIs,
-  by [[https://twitter.com/matryer][Mat Ryer]] ([[https://www.youtube.com/watch?v=tIm8UkSf6RA&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Building a Bank with Go,
-  by [[https://twitter.com/mattheath][Matt Heath]]
-  ([[https://www.youtube.com/watch?v=cFJkLfujOts&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- CockroachDB: Make Data Easy,
-  by [[https://twitter.com/bendarnell][Ben Darnell]]
-  ([[https://www.youtube.com/watch?v=33oqpLmQ3LE&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Understanding memory allocation in Go,
-  by [[https://twitter.com/DeanElbaz][Dean Elbaz]]
-  ([[https://www.youtube.com/watch?v=zjoieOpy5hE&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
-- Whispered Secrets,
-  by [[https://twitter.com/feyeleanor][Eleanor McHugh]]
-  ([[https://www.youtube.com/watch?v=ViBRx-F4Z2U&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]])
+  - Building APIs,
+    by [Mat Ryer](https://twitter.com/matryer) ([video](https://www.youtube.com/watch?v=tIm8UkSf6RA&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Building a Bank with Go,
+    by [Matt Heath](https://twitter.com/mattheath)
+    ([video](https://www.youtube.com/watch?v=cFJkLfujOts&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - CockroachDB: Make Data Easy,
+    by [Ben Darnell](https://twitter.com/bendarnell)
+    ([video](https://www.youtube.com/watch?v=33oqpLmQ3LE&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Understanding memory allocation in Go,
+    by [Dean Elbaz](https://twitter.com/DeanElbaz)
+    ([video](https://www.youtube.com/watch?v=zjoieOpy5hE&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
+  - Whispered Secrets,
+    by [Eleanor McHugh](https://twitter.com/feyeleanor)
+    ([video](https://www.youtube.com/watch?v=ViBRx-F4Z2U&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd))
 
-Finally [[https://twitter.com/dgryski][Damian Gryski]]
+Finally [Damian Gryski](https://twitter.com/dgryski)
 took the stage for the closing keynote
-([[https://www.youtube.com/watch?v=IiSyFc10Jj0&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd][video]]),
+([video](https://www.youtube.com/watch?v=IiSyFc10Jj0&list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd)),
 giving an overview of how the Go community has evolved over time and hinting
 to what the future might look like.
 
 On the day before the conference,
-[[https://twitter.com/goinggodotnet][William Kennedy]]
+[William Kennedy](https://twitter.com/goinggodotnet)
 gave a full day Go workshop.
 
 It was a great conference, so congratulations to the organizers and see you next year in London!
diff --git a/content/h2push.article b/content/h2push.article
index 87e3649..f8bc53d 100644
--- a/content/h2push.article
+++ b/content/h2push.article
@@ -1,10 +1,11 @@
-HTTP/2 Server Push
+# HTTP/2 Server Push
 24 Mar 2017
 Tags: http, technical
+Summary: HTTP/2 is designed to address many of the failings of HTTP/1.x. Modern web pages use many resources: HTML, stylesheets, scripts, images, and so on. In HTTP/1.x, each of these resources must be requested explicitly. This can be a slow process. The browser starts by fetching the HTML, then learns of more resources incrementally as it parses and evaluates the page. Since the server must wait for the browser to make each request, the network is often idle and underutilized.
 
 Jaana Burcu Dogan, Tom Bergan
 
-* Introduction
+## Introduction
 
 HTTP/2 is designed to address many of the failings of HTTP/1.x.
 Modern web pages use many resources: HTML, stylesheets,
@@ -15,7 +16,7 @@
 must wait for the browser to make each request, the network is often
 idle and underutilized.
 
-To improve latency, HTTP/2 introduced _server_push_, which allows the
+To improve latency, HTTP/2 introduced _server push_, which allows the
 server to push resources to the browser before they are explicitly
 requested. A server often knows many of the additional resources a
 page will need and can start pushing those resources as it responds
@@ -32,13 +33,13 @@
 wait for the push to complete rather than sending a new request.
 This reduces the time the browser spends waiting on the network.
 
-* Server Push in net/http
+## Server Push in net/http
 
-Go 1.8 introduced support for pushing responses from an [[https://golang.org/pkg/net/http/#Server][`http.Server`]].
+Go 1.8 introduced support for pushing responses from an [`http.Server`](https://golang.org/pkg/net/http/#Server).
 This feature is available if the running server is an HTTP/2 server
 and the incoming connection uses HTTP/2. In any HTTP handler,
 you can assert if the http.ResponseWriter supports server push by checking
-if it implements the new [[https://golang.org/pkg/net/http/#Pusher][`http.Pusher`]] interface.
+if it implements the new [`http.Pusher`](https://golang.org/pkg/net/http/#Pusher) interface.
 
 For example, if the server knows that `app.js` will be required to
 render the page, the handler can initiate a push if `http.Pusher`
@@ -60,13 +61,13 @@
 
 	$ go get golang.org/x/blog/content/h2push/server
 
-If you run the server and load [[https://localhost:8080][https://localhost:8080]],
+If you run the server and load [https://localhost:8080](https://localhost:8080),
 your browser's developer tools should show that `app.js` and
 `style.css` were pushed by the server.
 
 .image h2push/networktimeline.png _ 605
 
-* Start Your Pushes Before You Respond
+## Start Your Pushes Before You Respond
 
 It's a good idea to call the Push method before sending any bytes
 of the response. Otherwise it is possible to accidentally generate
@@ -78,12 +79,12 @@
 		<link rel="stylesheet" href="a.css">...
 
 Then you call Push("a.css", nil). The browser may parse this fragment
-of HTML before it receives your PUSH_PROMISE, in which case the browser
+of HTML before it receives your PUSH\_PROMISE, in which case the browser
 will send a request for `a.css` in addition to receiving your
 `PUSH_PROMISE`. Now the server will generate two responses for `a.css`.
 Calling Push before writing the response avoids this possibility entirely.
 
-* When To Use Server Push
+## When To Use Server Push
 
 Consider using server push any time your network link is idle.
 Just finished sending the HTML for your web app? Don't waste time waiting,
@@ -104,17 +105,17 @@
 
 The following links make for good supplemental reading:
 
-- [[https://calendar.perfplanet.com/2016/http2-push-the-details/][HTTP/2 Push: The Details]]
-- [[https://www.igvita.com/2013/06/12/innovating-with-http-2.0-server-push/][Innovating with HTTP/2 Server Push]]
-- [[https://github.com/h2o/h2o/issues/421][Cache-Aware Server Push in H2O]]
-- [[https://developers.google.com/web/fundamentals/performance/prpl-pattern/][The PRPL Pattern]]
-- [[https://docs.google.com/document/d/1K0NykTXBbbbTlv60t5MyJvXjqKGsCVNYHyLEXIxYMv0][Rules of Thumb for HTTP/2 Push]]
-- [[https://tools.ietf.org/html/rfc7540#section-8.2][Server Push in the HTTP/2 spec]]
+  - [HTTP/2 Push: The Details](https://calendar.perfplanet.com/2016/http2-push-the-details/)
+  - [Innovating with HTTP/2 Server Push](https://www.igvita.com/2013/06/12/innovating-with-http-2.0-server-push/)
+  - [Cache-Aware Server Push in H2O](https://github.com/h2o/h2o/issues/421)
+  - [The PRPL Pattern](https://developers.google.com/web/fundamentals/performance/prpl-pattern/)
+  - [Rules of Thumb for HTTP/2 Push](https://docs.google.com/document/d/1K0NykTXBbbbTlv60t5MyJvXjqKGsCVNYHyLEXIxYMv0)
+  - [Server Push in the HTTP/2 spec](https://tools.ietf.org/html/rfc7540#section-8.2)
 
-* Conclusion
+## Conclusion
 
 With Go 1.8, the standard library provides out-of-the-box support for HTTP/2
 Server Push, giving you more flexibility to optimize your web applications.
 
-Go to our [[https://http2.golang.org/serverpush][HTTP/2 Server Push demo]]
+Go to our [HTTP/2 Server Push demo](https://http2.golang.org/serverpush)
 page to see it in action.
diff --git a/content/hello-china.article b/content/hello-china.article
index abb4b0f..7766d81 100644
--- a/content/hello-china.article
+++ b/content/hello-china.article
@@ -1,30 +1,31 @@
-Hello, 中国!
+# Hello, 中国!
 22 Jan 2018
 Tags: community, china
+Summary: We are thrilled to announce that the content on [golang.org](https://golang.org) is now available in mainland China through the name [https://golang.google.cn](https://golang.google.cn). The growing Go developer community in China can now directly access official documentation, technical articles, and binaries.
 
 Andrew Bonventre
 
-* Introduction
+##
 
 We are thrilled to announce that the content on
-[[https://golang.org][golang.org]] is now available in mainland China through
-the name [[https://golang.google.cn][https://golang.google.cn]].
+[golang.org](https://golang.org) is now available in mainland China through
+the name [https://golang.google.cn](https://golang.google.cn).
 The growing Go developer community in China can now directly access official
 documentation, technical articles, and binaries.
 
 The Go community in China is bigger than ever.
-In 2015, Robert Griesemer [[gopherchina][visited Shanghai]] to attend
+In 2015, Robert Griesemer [visited Shanghai](gopherchina) to attend
 GopherChina, the first Go conference in the country.
 In the years since, it has become one of the largest Go conferences in the world
 with over 1200 attendees at their 2017 event.
 Over the same period, one of the most popular
-[[https://gocn.io][community-built Go forums]] saw their traffic increase
+[community-built Go forums](https://gocn.io) saw their traffic increase
 threefold and the number of participants in Go-specific groups on social
 platforms like WeChat and QQ has grown to over 11,000 people.
 
 Go adoption within China-based companies has also increased, with
-[[https://www.qiniu.com/][Qiniu]], [[http://www.huawei.com/][Huawei]],
-[[http://www.alibabagroup.com/][Alibaba]], and countless others using Go heavily
+[Qiniu](https://www.qiniu.com/), [Huawei](http://www.huawei.com/),
+[Alibaba](http://www.alibabagroup.com/), and countless others using Go heavily
 in their production stacks.
 
 We’re excited to provide even more resources for Go developers in China to
diff --git a/content/http-tracing.article b/content/http-tracing.article
index 710ae60..665ee1a 100644
--- a/content/http-tracing.article
+++ b/content/http-tracing.article
@@ -1,34 +1,35 @@
-Introducing HTTP Tracing
+# Introducing HTTP Tracing
 4 Oct 2016
 Tags: http, technical
+Summary: In Go 1.7 we introduced HTTP tracing, a facility to gather fine-grained information throughout the lifecycle of an HTTP client request. Support for HTTP tracing is provided by the [`net/http/httptrace`](https://golang.org/pkg/net/http/httptrace/) package. The collected information can be used for debugging latency issues, service monitoring, writing adaptive systems, and more.
 
 Jaana Burcu Dogan
 
-* Introduction
+## Introduction
 
 In Go 1.7 we introduced HTTP tracing, a facility to gather fine-grained
 information throughout the lifecycle of an HTTP client request.
-Support for HTTP tracing is provided by the [[https://golang.org/pkg/net/http/httptrace/][`net/http/httptrace`]]
+Support for HTTP tracing is provided by the [`net/http/httptrace`](https://golang.org/pkg/net/http/httptrace/)
 package. The collected information can be used for debugging latency issues,
 service monitoring, writing adaptive systems, and more.
 
-* HTTP events
+## HTTP events
 
 The `httptrace` package provides a number of hooks to gather information
 during an HTTP round trip about a variety of events. These events include:
 
-- Connection creation
-- Connection reuse
-- DNS lookups
-- Writing the request to the wire
-- Reading the response
+  - Connection creation
+  - Connection reuse
+  - DNS lookups
+  - Writing the request to the wire
+  - Reading the response
 
-* Tracing events
+## Tracing events
 
 You can enable HTTP tracing by putting an
-[[https://golang.org/pkg/net/http/httptrace/#ClientTrace][`*httptrace.ClientTrace`]]
-containing hook functions into a request's [[https://golang.org/pkg/context/#Context][`context.Context`]].
-Various [[https://golang.org/pkg/net/http/#RoundTripper][`http.RoundTripper`]]
+[`*httptrace.ClientTrace`](https://golang.org/pkg/net/http/httptrace/#ClientTrace)
+containing hook functions into a request's [`context.Context`](https://golang.org/pkg/context/#Context).
+Various [`http.RoundTripper`](https://golang.org/pkg/net/http/#RoundTripper)
 implementations report the internal events by
 looking for context's `*httptrace.ClientTrace` and calling the relevant hook functions.
 
@@ -42,7 +43,7 @@
 information as soon as the DNS lookup is complete. It will similarly print
 connection information when a connection is established to the request's host.
 
-* Tracing with http.Client
+## Tracing with http.Client
 
 The tracing mechanism is designed to trace the events in the lifecycle
 of a single `http.Transport.RoundTrip`. However, a client may
@@ -67,11 +68,11 @@
 you can support tracing by checking the request context for an
 `*httptest.ClientTrace` and invoking the relevant hooks as the events occur.
 
-* Conclusion
+## Conclusion
 
 HTTP tracing is a valuable addition to Go for those who are interested
 in debugging HTTP request latency and writing tools for network debugging
 for outbound traffic.
 By enabling this new facility, we hope to see HTTP debugging, benchmarking
 and visualization tools from the community — such as
-[[https://github.com/davecheney/httpstat][httpstat]].
+[httpstat](https://github.com/davecheney/httpstat).
diff --git a/content/introducing-go-playground.article b/content/introducing-go-playground.article
index 41087da..f22045e 100644
--- a/content/introducing-go-playground.article
+++ b/content/introducing-go-playground.article
@@ -1,17 +1,18 @@
-Introducing the Go Playground
+# Introducing the Go Playground
 15 Sep 2010
 Tags: playground
+Summary: If you visit [golang.org](https://golang.org/) today you'll see our new look. We have given the site a new coat of paint and reorganized its content to make it easier to find. These changes are also reflected in the web interface of [godoc](https://golang.org/cmd/godoc/), the Go documentation tool. But the real news is a prominent new feature: the [Go Playground](https://golang.org/).
 
 Andrew Gerrand
 
-* Introduction
+##
 
-If you visit [[https://golang.org/][golang.org]] today you'll see our new look.
+If you visit [golang.org](https://golang.org/) today you'll see our new look.
 We have given the site a new coat of paint and reorganized its content to
 make it easier to find.
-These changes are also reflected in the web interface of [[https://golang.org/cmd/godoc/][godoc]],
+These changes are also reflected in the web interface of [godoc](https://golang.org/cmd/godoc/),
 the Go documentation tool.
-But the real news is a prominent new feature: the [[https://golang.org/][Go Playground]].
+But the real news is a prominent new feature: the [Go Playground](https://golang.org/).
 
 .image introducing-go-playground_Untitled.png
 
@@ -20,7 +21,7 @@
 link, and run on our servers.
 There are a few example programs to get you started (see the "Examples" drop-down).
 We hope that this will give curious programmers an opportunity to try the
-language before [[https://golang.org/doc/install.html][installing it]],
+language before [installing it](https://golang.org/doc/install.html),
 and experienced Go users a convenient place in which to experiment.
 Beyond the front page, this functionality has the potential to make our
 reference and tutorial materials more engaging.
@@ -32,6 +33,6 @@
 the only communication your program has to the outside world is via standard output,
 and there are limits to CPU and memory use.
 As such, consider this just a taste of the wonderful world of Go;
-to have the full experience you'll need to [[https://golang.org/doc/install.html][download it yourself]].
+to have the full experience you'll need to [download it yourself](https://golang.org/doc/install.html).
 If you've been meaning to try Go but never got around to it,
-why not visit [[https://golang.org/][golang.org]] to try it right now?
+why not visit [golang.org](https://golang.org/) to try it right now?
diff --git a/content/introducing-gofix.article b/content/introducing-gofix.article
index 93c6853..63290ed 100644
--- a/content/introducing-gofix.article
+++ b/content/introducing-gofix.article
@@ -1,25 +1,26 @@
-Introducing Gofix
+# Introducing Gofix
 15 Apr 2011
 Tags: gofix, technical
+Summary: The next Go release will include significant API changes in several fundamental Go packages. Code that [implements an HTTP server handler](http://codereview.appspot.com/4239076), [calls `net.Dial`](http://codereview.appspot.com/4244055), [calls `os.Open`](http://codereview.appspot.com/4357052), or [uses the reflect package](http://codereview.appspot.com/4281055) will not build unless it is updated to use the new APIs. Now that our releases are [more stable and less frequent](https://blog.golang.org/2011/03/go-becomes-more-stable.html), this will be a common situation. Each of these API changes happened in a different weekly snapshot and might have been manageable on its own; together, however, they represent a significant amount of manual effort to update existing code.
 
 Russ Cox
 
-* Introduction
+##
 
 The next Go release will include significant API changes in several fundamental Go packages.
-Code that [[http://codereview.appspot.com/4239076][implements an HTTP server handler]],
-[[http://codereview.appspot.com/4244055][calls `net.Dial`]],
-[[http://codereview.appspot.com/4357052][calls `os.Open`]],
-or [[http://codereview.appspot.com/4281055][uses the reflect package]] will
+Code that [implements an HTTP server handler](http://codereview.appspot.com/4239076),
+[calls `net.Dial`](http://codereview.appspot.com/4244055),
+[calls `os.Open`](http://codereview.appspot.com/4357052),
+or [uses the reflect package](http://codereview.appspot.com/4281055) will
 not build unless it is updated to use the new APIs.
-Now that our releases are [[https://blog.golang.org/2011/03/go-becomes-more-stable.html][more stable and less frequent]],
+Now that our releases are [more stable and less frequent](https://blog.golang.org/2011/03/go-becomes-more-stable.html),
 this will be a common situation.
 Each of these API changes happened in a different weekly snapshot and might
 have been manageable on its own;
 together, however, they represent a significant amount of manual effort
 to update existing code.
 
-[[https://golang.org/cmd/fix/][Gofix]] is a new tool that reduces the amount
+[Gofix](https://golang.org/cmd/fix/) is a new tool that reduces the amount
 of effort it takes to update existing code.
 It reads a program from a source file, looks for uses of old APIs,
 rewrites them to use the current API, and writes the program back to the file.
@@ -43,10 +44,10 @@
 Right now, writing a new fix requires doing some scanning and rewriting
 of the go/ast syntax tree,
 usually in proportion to how complex the API changes are.
-If you want to explore, the [[https://go.googlesource.com/go/+/go1/src/cmd/fix/netdial.go][`netdialFix`]],
-[[https://go.googlesource.com/go/+/go1/src/cmd/fix/osopen.go][`osopenFix`]],
-[[https://go.googlesource.com/go/+/go1/src/cmd/fix/httpserver.go][`httpserverFix`]],
-and [[https://go.googlesource.com/go/+/go1/src/cmd/fix/reflect.go][`reflectFix`]]
+If you want to explore, the [`netdialFix`](https://go.googlesource.com/go/+/go1/src/cmd/fix/netdial.go),
+[`osopenFix`](https://go.googlesource.com/go/+/go1/src/cmd/fix/osopen.go),
+[`httpserverFix`](https://go.googlesource.com/go/+/go1/src/cmd/fix/httpserver.go),
+and [`reflectFix`](https://go.googlesource.com/go/+/go1/src/cmd/fix/reflect.go)
 are all illustrative examples,
 in increasing order of complexity.
 
@@ -58,7 +59,7 @@
 We even use gofix to update Google’s internal source tree when it is time
 to build against a new Go release.
 
-As an example, gofix can rewrite code like [[http://codereview.appspot.com/4353043/diff/10001/src/pkg/fmt/print.go#newcode657][this snippet from `fmt/print.go`]]:
+As an example, gofix can rewrite code like [this snippet from `fmt/print.go`](http://codereview.appspot.com/4353043/diff/10001/src/pkg/fmt/print.go#newcode657):
 
 	switch f := value.(type) {
 	case *reflect.BoolValue:
@@ -94,8 +95,8 @@
 The changes involved in the rewrite are extensive but nearly entirely mechanical,
 just the kind of thing that computers are great at doing.
 
-Gofix is possible because Go has support in its standard libraries for [[https://golang.org/pkg/go/parser][parsing Go source files into syntax trees]]
-and also for [[https://golang.org/pkg/go/printer][printing those syntax trees back to Go source code]].
+Gofix is possible because Go has support in its standard libraries for [parsing Go source files into syntax trees](https://golang.org/pkg/go/parser)
+and also for [printing those syntax trees back to Go source code](https://golang.org/pkg/go/printer).
 Importantly, the Go printing library prints a program in the official format
 (typically enforced via the gofmt tool),
 allowing gofix to make mechanical changes to Go programs without causing
diff --git a/content/io2014.article b/content/io2014.article
index d3dded7..684317d 100644
--- a/content/io2014.article
+++ b/content/io2014.article
@@ -1,44 +1,45 @@
-Go at Google I/O and Gopher SummerFest
+# Go at Google I/O and Gopher SummerFest
 6 Oct 2014
 Tags: conference, io, report
+Summary: The week of June 23rd was a good week for gophers in San Francisco. Go was a big part of [Google I/O](https://www.google.com/events/io) on Wednesday and Thursday, and on Monday we took advantage of the large gopher population to run the [Go SummerFest](http://www.meetup.com/golangsf/events/170421402/), a special instance of the [GoSF](http://www.meetup.com/golangsf) meetup. This blog post is a recap of both events.
 
 Francesc Campoy
 
-* Introduction
+## Introduction
 
 The week of June 23rd was a good week for gophers in San Francisco. Go was a big
-part of [[https://www.google.com/events/io][Google I/O]] on Wednesday and
+part of [Google I/O](https://www.google.com/events/io) on Wednesday and
 Thursday, and on Monday we took advantage of the large gopher population to run
-the [[http://www.meetup.com/golangsf/events/170421402/][Go SummerFest]], a
-special instance of the [[http://www.meetup.com/golangsf][GoSF]] meetup. This
+the [Go SummerFest](http://www.meetup.com/golangsf/events/170421402/), a
+special instance of the [GoSF](http://www.meetup.com/golangsf) meetup. This
 blog post is a recap of both events.
 
-* Gopher SummerFest
+## Gopher SummerFest
 
 .image io2014/summerfest.jpg _ 800
 
 On the Monday, more than 200 gophers gathered at the Google office in San
 Francisco to hear a series of talks:
 
-- The State of Go, ([[https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVQm9tdncxWnJGUTQ/edit][slides]]
-  and [[http://www.hakkalabs.co/articles/state-go][video]]) by Andrew Gerrand.
-- I was wrong, again! ([[https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVTTUwS25qaFlzMGs/edit][slides]]
-  and [[http://www.hakkalabs.co/articles/why-we-use-go][video]]), by Derek Collison.
-- Go at Splice ([[https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVZklnNnJITlhSbXc/edit][slides]]), by Matt Aimonetti
-- Quick testing with quick ([[https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVVElmOHpwamp4aTA/edit][slides]]), by Evan Shaw
-- Something about Go (no slides), by Blake Mizerany.
+  - The State of Go, ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVQm9tdncxWnJGUTQ/edit)
+    and [video](http://www.hakkalabs.co/articles/state-go)) by Andrew Gerrand.
+  - I was wrong, again! ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVTTUwS25qaFlzMGs/edit)
+    and [video](http://www.hakkalabs.co/articles/why-we-use-go)), by Derek Collison.
+  - Go at Splice ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVZklnNnJITlhSbXc/edit)), by Matt Aimonetti
+  - Quick testing with quick ([slides](https://docs.google.com/a/golang.org/file/d/0B-nws9GU_6qVVElmOHpwamp4aTA/edit)), by Evan Shaw
+  - Something about Go (no slides), by Blake Mizerany.
 
 More comments and pictures from the event are available on the
-[[http://www.meetup.com/golangsf/events/170421402/][meetup event page]].
+[meetup event page](http://www.meetup.com/golangsf/events/170421402/).
 
-* Go at Google I/O
+## Go at Google I/O
 
 On the Wednesday and Thursday, Go was at Google I/O in two different
 formats: the Go booth in the sandbox area and the Go code labs available in the
 code lab area and all around the world through
-[[https://www.google.com/events/io/io-extended][I/O Extended]].
+[I/O Extended](https://www.google.com/events/io/io-extended).
 
-** The Go booth
+### The Go booth
 
 .image io2014/booth.jpg _ 800
 
@@ -49,38 +50,38 @@
 recorded, but the slides and some screencasts and blog posts will be shared
 soon.
 
-- Organizing Go Code, by David Crawshaw. ([[https://talks.golang.org/2014/organizeio.slide#1][slides]])
-- Testing Techniques, by Andrew Gerrand. ([[https://www.youtube.com/watch?v=ndmB0bj7eyw][video]]
-  and [[https://talks.golang.org/2014/testing.slide#1][slides]])
-- Go for Java Developers, by Francesc Campoy. ([[https://talks.golang.org/2014/go4java.slide#1][slides]])
-- Camlistore: Android, ARM, App Engine, Everywhere,
-  by Brad Fitzpatrick.
-  ([[https://talks.golang.org/2014/camlistore.slide#1][slides]])
-- Go Compilation Complexities, by Ian Lance Taylor. ([[https://talks.golang.org/2014/compiling.slide#1][slides]])
-- SourceGraph: a Code Search Engine in Go,
-  by Quinn Slack. ([[https://youtu.be/-DpKaoPz8l8][video]] and [[https://go-talks.appspot.com/github.com/sourcegraph/talks/google-io-2014/gio2014.slide#1][slides]])
+  - Organizing Go Code, by David Crawshaw. ([slides](https://talks.golang.org/2014/organizeio.slide#1))
+  - Testing Techniques, by Andrew Gerrand. ([video](https://www.youtube.com/watch?v=ndmB0bj7eyw)
+    and [slides](https://talks.golang.org/2014/testing.slide#1))
+  - Go for Java Developers, by Francesc Campoy. ([slides](https://talks.golang.org/2014/go4java.slide#1))
+  - Camlistore: Android, ARM, App Engine, Everywhere,
+    by Brad Fitzpatrick.
+    ([slides](https://talks.golang.org/2014/camlistore.slide#1))
+  - Go Compilation Complexities, by Ian Lance Taylor. ([slides](https://talks.golang.org/2014/compiling.slide#1))
+  - SourceGraph: a Code Search Engine in Go,
+    by Quinn Slack. ([video](https://youtu.be/-DpKaoPz8l8) and [slides](https://go-talks.appspot.com/github.com/sourcegraph/talks/google-io-2014/gio2014.slide#1))
 
 We also organized Q&A sessions and lightning talks by members of the Go
 community:
 
-- [[https://twitter.com/bradrydzewski][Brad Rydzewski]] talked about his project [[https://drone.io/][drone.io]].
-- [[https://twitter.com/barakmich][Barak Michener]] presented [[https://github.com/google/cayley][Cayley]],
-  an open source graph database.
-- [[https://twitter.com/mattetti][Matt Aimonetti]] discussed how Go is used at [[https://splice.com/][Splice]].
-- [[https://twitter.com/ssougou][Sugu Sougoumarane]] talked about how [[https://github.com/youtube/vitess][vitess]] solved
-  scalability problems at YouTube.
-  ([[https://youtu.be/midJ6b1LkA0][video]])
+  - [Brad Rydzewski](https://twitter.com/bradrydzewski) talked about his project [drone.io](https://drone.io/).
+  - [Barak Michener](https://twitter.com/barakmich) presented [Cayley](https://github.com/google/cayley),
+    an open source graph database.
+  - [Matt Aimonetti](https://twitter.com/mattetti) discussed how Go is used at [Splice](https://splice.com/).
+  - [Sugu Sougoumarane](https://twitter.com/ssougou) talked about how [vitess](https://github.com/youtube/vitess) solved
+    scalability problems at YouTube.
+    ([video](https://youtu.be/midJ6b1LkA0))
 
-** The Go code lab
+### The Go code lab
 
 This year attendees of Google I/O had a code lab area with self-service
 computers where they could sit and learn Go. The code labs were also available
 to anyone through the Google I/O extended brand. You can try it yourself at
-[[https://io2014codelabs.appspot.com/][io2014codelabs.appspot.com]].
+[io2014codelabs.appspot.com](https://io2014codelabs.appspot.com/).
 
 .image io2014/collage.jpg _ 800
 
-* Conclusion
+## Conclusion
 
 Thanks to the organizers, speakers, and attendees who helped make these events a
-great success. See you next year. (Or at [[http://dotgo.eu][dotGo]] this week!)
+great success. See you next year. (Or at [dotGo](http://dotgo.eu) this week!)
diff --git a/content/ismmkeynote.article b/content/ismmkeynote.article
index 33b2227..ea105d3 100644
--- a/content/ismmkeynote.article
+++ b/content/ismmkeynote.article
@@ -1,10 +1,11 @@
-Getting to Go: The Journey of Go's Garbage Collector
+# Getting to Go: The Journey of Go's Garbage Collector
 12 Jul 2018
+Summary: This is the transcript from the keynote I gave at the International Symposium on Memory Management (ISMM) on June 18, 2018. For the past 25 years ISMM has been the premier venue for publishing memory management and garbage collection papers and it was an honor to have been invited to give the keynote.
 
 Rick Hudson
 rlh@golang.org
 
-* Abstract
+##
 
 This is the transcript from the keynote I gave at the International Symposium
 on Memory Management (ISMM) on June 18, 2018.
@@ -12,7 +13,7 @@
 management and garbage collection papers and it was an honor to have been
 invited to give the keynote.
 
-** Abstract
+## Abstract
 
 The Go language features, goals, and use cases have forced us to rethink
 the entire garbage collection stack and have led us to a surprising place.
@@ -22,7 +23,7 @@
 This talk will provide insight into the how and the why of our journey,
 where we are in 2018, and Go's preparation for the next part of the journey.
 
-** Bio
+## Bio
 
 Richard L. Hudson (Rick) is best known for his work in memory management
 including the invention of the Train,
@@ -33,9 +34,9 @@
 
 Contact: rlh@golang.org
 
-Comments: See [[https://groups.google.com/forum/#!topic/golang-dev/UuDv7W1Hsns][the discussion on golang-dev]].
+Comments: See [the discussion on golang-dev](https://groups.google.com/forum/#!topic/golang-dev/UuDv7W1Hsns).
 
-** The Transcript
+## The Transcript
 
 .image ismmkeynote/image63.png
 
@@ -322,8 +323,8 @@
 this math and see if it's the same as your math.
 If you have any suggestions let us know.
 
-[[https://golang.org/s/go15gcpacing][*Go 1.5 concurrent garbage collector pacing]]
-and [[https://github.com/golang/proposal/blob/master/design/14951-soft-heap-limit.md][Proposal: Separate soft and hard heap size goal]]
+[\*Go 1.5 concurrent garbage collector pacing](https://golang.org/s/go15gcpacing)
+and [Proposal: Separate soft and hard heap size goal](https://github.com/golang/proposal/blob/master/design/14951-soft-heap-limit.md)
 
 .image ismmkeynote/image40.png
 
@@ -738,7 +739,7 @@
 
 Put another way, we think that doubling memory is going to be a better value than doubling cores.
 
-[[http://www.kurzweilai.net/ask-ray-the-future-of-moores-law][Original graph]]
+[Original graph](http://www.kurzweilai.net/ask-ray-the-future-of-moores-law)
 at www.kurzweilai.net/ask-ray-the-future-of-moores-law.
 
 .image ismmkeynote/image57.png
@@ -769,7 +770,7 @@
 Chang M.S., Electrical & Computer Engineering,
 Carnegie Mellon University B.S., Electrical & Computer Engineering,
 Carnegie Mellon University Carnegie Mellon University Pittsburgh, PA May, 2017".
-See [[http://repository.cmu.edu/cgi/viewcontent.cgi?article%3D1946%26context%3Ddissertations&amp;sa=D&amp;ust=1531164842660000][Kevin K. Chang's thesis.]]
+See [Kevin K. Chang's thesis.](http://repository.cmu.edu/cgi/viewcontent.cgi?article%3D1946%26context%3Ddissertations&amp;sa=D&amp;ust=1531164842660000)
 The original graph in the introduction was not in a form that I could draw
 a Moore's law line on it easily so I changed the X-axis to be more uniform.)
 
@@ -795,7 +796,7 @@
 
 Long term, it is our belief that memory pricing will drop at a rate that is much faster than CPU pricing.
 
-(Sources [[https://hblok.net/blog/][https://hblok.net/blog/]] and [[https://hblok.net/storage_data/storage_memory_prices_2005-2017-12.png][https://hblok.net/storage_data/storage_memory_prices_2005-2017-12.png]])
+(Sources [https://hblok.net/blog/](https://hblok.net/blog/) and [https://hblok.net/storage\_data/storage\_memory\_prices\_2005-2017-12.png](https://hblok.net/storage_data/storage_memory_prices_2005-2017-12.png))
 
 .image ismmkeynote/image37.png
 
@@ -848,4 +849,4 @@
 
 P.S. The Go team is looking to hire engineers to help develop and maintain the Go runtime and compiler toolchain.
 
-Interested? Have a look at our [[https://go-jobs-at-goog.firebaseapp.com][open positions]].
+Interested? Have a look at our [open positions](https://go-jobs-at-goog.firebaseapp.com).
diff --git a/content/json-and-go.article b/content/json-and-go.article
index 8e4dfcd..4287cf8 100644
--- a/content/json-and-go.article
+++ b/content/json-and-go.article
@@ -1,25 +1,26 @@
-JSON and Go
+# JSON and Go
 25 Jan 2011
 Tags: json, technical
+Summary: JSON (JavaScript Object Notation) is a simple data interchange format. Syntactically it resembles the objects and lists of JavaScript. It is most commonly used for communication between web back-ends and JavaScript programs running in the browser, but it is used in many other places, too. Its home page, [json.org](http://json.org), provides a wonderfully clear and concise definition of the standard.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 JSON (JavaScript Object Notation) is a simple data interchange format.
 Syntactically it resembles the objects and lists of JavaScript.
 It is most commonly used for communication between web back-ends and JavaScript
 programs running in the browser,
 but it is used in many other places, too.
-Its home page, [[http://json.org][json.org]],
+Its home page, [json.org](http://json.org),
 provides a wonderfully clear and concise definition of the standard.
 
-With the [[https://golang.org/pkg/encoding/json/][json package]] it's a
+With the [json package](https://golang.org/pkg/encoding/json/) it's a
 snap to read and write JSON data from your Go programs.
 
-* Encoding
+## Encoding
 
-To encode JSON data we use the [[https://golang.org/pkg/encoding/json/#Marshal][`Marshal`]] function.
+To encode JSON data we use the [`Marshal`](https://golang.org/pkg/encoding/json/#Marshal) function.
 
 	func Marshal(v interface{}) ([]byte, error)
 
@@ -33,11 +34,11 @@
 
 and an instance of `Message`
 
-	    m := Message{"Alice", "Hello", 1294706395881547000}
+	m := Message{"Alice", "Hello", 1294706395881547000}
 
 we can marshal a JSON-encoded version of m using `json.Marshal`:
 
-	    b, err := json.Marshal(m)
+	b, err := json.Marshal(m)
 
 If all is well, `err` will be `nil` and `b` will be a `[]byte` containing this JSON data:
 
@@ -45,62 +46,62 @@
 
 Only data structures that can be represented as valid JSON will be encoded:
 
-- JSON objects only support strings as keys;
-  to encode a Go map type it must be of the form `map[string]T` (where `T`
-  is any Go type supported by the json package).
+  - JSON objects only support strings as keys;
+    to encode a Go map type it must be of the form `map[string]T` (where `T`
+    is any Go type supported by the json package).
 
-- Channel, complex, and function types cannot be encoded.
+  - Channel, complex, and function types cannot be encoded.
 
-- Cyclic data structures are not supported; they will cause `Marshal` to go into an infinite loop.
+  - Cyclic data structures are not supported; they will cause `Marshal` to go into an infinite loop.
 
-- Pointers will be encoded as the values they point to (or 'null' if the pointer is `nil`).
+  - Pointers will be encoded as the values they point to (or 'null' if the pointer is `nil`).
 
 The json package only accesses the exported fields of struct types (those
 that begin with an uppercase letter).
 Therefore only the the exported fields of a struct will be present in the JSON output.
 
-* Decoding
+## Decoding
 
-To decode JSON data we use the [[https://golang.org/pkg/encoding/json/#Unmarshal][`Unmarshal`]] function.
+To decode JSON data we use the [`Unmarshal`](https://golang.org/pkg/encoding/json/#Unmarshal) function.
 
 	func Unmarshal(data []byte, v interface{}) error
 
 We must first create a place where the decoded data will be stored
 
-	    var m Message
+	var m Message
 
 and call `json.Unmarshal`, passing it a `[]byte` of JSON data and a pointer to `m`
 
-	    err := json.Unmarshal(b, &m)
+	err := json.Unmarshal(b, &m)
 
 If `b` contains valid JSON that fits in `m`,
 after the call `err` will be `nil` and the data from `b` will have been
 stored in the struct `m`,
 as if by an assignment like:
 
-	    m = Message{
-	        Name: "Alice",
-	        Body: "Hello",
-	        Time: 1294706395881547000,
-	    }
+	m = Message{
+	    Name: "Alice",
+	    Body: "Hello",
+	    Time: 1294706395881547000,
+	}
 
 How does `Unmarshal` identify the fields in which to store the decoded data?
 For a given JSON key `"Foo"`,
 `Unmarshal` will look through the destination struct's fields to find (in
 order of preference):
 
-- An exported field with a tag of `"Foo"` (see the [[https://golang.org/ref/spec#Struct_types][Go spec]]
-  for more on struct tags),
+  - An exported field with a tag of `"Foo"` (see the [Go spec](https://golang.org/ref/spec#Struct_types)
+    for more on struct tags),
 
-- An exported field named `"Foo"`, or
+  - An exported field named `"Foo"`, or
 
-- An exported field named `"FOO"` or `"FoO"` or some other case-insensitive match of `"Foo"`.
+  - An exported field named `"FOO"` or `"FoO"` or some other case-insensitive match of `"Foo"`.
 
 What happens when the structure of the JSON data doesn't exactly match the Go type?
 
-	    b := []byte(`{"Name":"Bob","Food":"Pickle"}`)
-	    var m Message
-	    err := json.Unmarshal(b, &m)
+	b := []byte(`{"Name":"Bob","Food":"Pickle"}`)
+	var m Message
+	err := json.Unmarshal(b, &m)
 
 `Unmarshal` will decode only the fields that it can find in the destination type.
 In this case, only the Name field of m will be populated,
@@ -112,99 +113,99 @@
 
 But what if you don't know the structure of your JSON data beforehand?
 
-* Generic JSON with interface{}
+## Generic JSON with interface{}
 
 The `interface{}` (empty interface) type describes an interface with zero methods.
 Every Go type implements at least zero methods and therefore satisfies the empty interface.
 
 The empty interface serves as a general container type:
 
-	    var i interface{}
-	    i = "a string"
-	    i = 2011
-	    i = 2.777
+	var i interface{}
+	i = "a string"
+	i = 2011
+	i = 2.777
 
 A type assertion accesses the underlying concrete type:
 
-	    r := i.(float64)
-	    fmt.Println("the circle's area", math.Pi*r*r)
+	r := i.(float64)
+	fmt.Println("the circle's area", math.Pi*r*r)
 
 Or, if the underlying type is unknown, a type switch determines the type:
 
-	    switch v := i.(type) {
-	    case int:
-	        fmt.Println("twice i is", v*2)
-	    case float64:
-	        fmt.Println("the reciprocal of i is", 1/v)
-	    case string:
-	        h := len(v) / 2
-	        fmt.Println("i swapped by halves is", v[h:]+v[:h])
-	    default:
-	        // i isn't one of the types above
-	    }
+	switch v := i.(type) {
+	case int:
+	    fmt.Println("twice i is", v*2)
+	case float64:
+	    fmt.Println("the reciprocal of i is", 1/v)
+	case string:
+	    h := len(v) / 2
+	    fmt.Println("i swapped by halves is", v[h:]+v[:h])
+	default:
+	    // i isn't one of the types above
+	}
 
 The json package uses `map[string]interface{}` and
 `[]interface{}` values to store arbitrary JSON objects and arrays;
 it will happily unmarshal any valid JSON blob into a plain
 `interface{}` value.  The default concrete Go types are:
 
-- `bool` for JSON booleans,
+  - `bool` for JSON booleans,
 
-- `float64` for JSON numbers,
+  - `float64` for JSON numbers,
 
-- `string` for JSON strings, and
+  - `string` for JSON strings, and
 
-- `nil` for JSON null.
+  - `nil` for JSON null.
 
-* Decoding arbitrary data
+## Decoding arbitrary data
 
 Consider this JSON data, stored in the variable `b`:
 
-	    b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)
+	b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)
 
 Without knowing this data's structure, we can decode it into an `interface{}` value with `Unmarshal`:
 
-	    var f interface{}
-	    err := json.Unmarshal(b, &f)
+	var f interface{}
+	err := json.Unmarshal(b, &f)
 
 At this point the Go value in `f` would be a map whose keys are strings
 and whose values are themselves stored as empty interface values:
 
-	    f = map[string]interface{}{
-	        "Name": "Wednesday",
-	        "Age":  6,
-	        "Parents": []interface{}{
-	            "Gomez",
-	            "Morticia",
-	        },
-	    }
+	f = map[string]interface{}{
+	    "Name": "Wednesday",
+	    "Age":  6,
+	    "Parents": []interface{}{
+	        "Gomez",
+	        "Morticia",
+	    },
+	}
 
 To access this data we can use a type assertion to access `f`'s underlying `map[string]interface{}`:
 
-	    m := f.(map[string]interface{})
+	m := f.(map[string]interface{})
 
 We can then iterate through the map with a range statement and use a type
 switch to access its values as their concrete types:
 
-	    for k, v := range m {
-	        switch vv := v.(type) {
-	        case string:
-	            fmt.Println(k, "is string", vv)
-	        case float64:
-	            fmt.Println(k, "is float64", vv)
-	        case []interface{}:
-	            fmt.Println(k, "is an array:")
-	            for i, u := range vv {
-	                fmt.Println(i, u)
-	            }
-	        default:
-	            fmt.Println(k, "is of a type I don't know how to handle")
+	for k, v := range m {
+	    switch vv := v.(type) {
+	    case string:
+	        fmt.Println(k, "is string", vv)
+	    case float64:
+	        fmt.Println(k, "is float64", vv)
+	    case []interface{}:
+	        fmt.Println(k, "is an array:")
+	        for i, u := range vv {
+	            fmt.Println(i, u)
 	        }
+	    default:
+	        fmt.Println(k, "is of a type I don't know how to handle")
 	    }
+	}
 
 In this way you can work with unknown JSON data while still enjoying the benefits of type safety.
 
-* Reference Types
+## Reference Types
 
 Let's define a Go type to contain the data from the previous example:
 
@@ -253,12 +254,12 @@
 To know which messages to process, the programmer need simply test that
 either `Cmd` or `Msg` is not `nil`.
 
-* Streaming Encoders and Decoders
+## Streaming Encoders and Decoders
 
 The json package provides `Decoder` and `Encoder` types to support the common
 operation of reading and writing streams of JSON data.
-The `NewDecoder` and `NewEncoder` functions wrap the [[https://golang.org/pkg/io/#Reader][`io.Reader`]]
-and [[https://golang.org/pkg/io/#Writer][`io.Writer`]] interface types.
+The `NewDecoder` and `NewEncoder` functions wrap the [`io.Reader`](https://golang.org/pkg/io/#Reader)
+and [`io.Writer`](https://golang.org/pkg/io/#Writer) interface types.
 
 	func NewDecoder(r io.Reader) *Decoder
 	func NewEncoder(w io.Writer) *Encoder
@@ -300,7 +301,7 @@
 such as reading and writing to HTTP connections,
 WebSockets, or files.
 
-* References
+## References
 
-For more information see the [[https://golang.org/pkg/encoding/json/][json package documentation]].
-For an example usage of json see the source files of the [[https://golang.org/pkg/net/rpc/jsonrpc/][jsonrpc package]].
+For more information see the [json package documentation](https://golang.org/pkg/encoding/json/).
+For an example usage of json see the source files of the [jsonrpc package](https://golang.org/pkg/net/rpc/jsonrpc/).
diff --git a/content/json-rpc-tale-of-interfaces.article b/content/json-rpc-tale-of-interfaces.article
index 3ccabc7..59875f1 100644
--- a/content/json-rpc-tale-of-interfaces.article
+++ b/content/json-rpc-tale-of-interfaces.article
@@ -1,16 +1,17 @@
-JSON-RPC: a tale of interfaces
+# JSON-RPC: a tale of interfaces
 27 Apr 2010
 Tags: json, rpc, technical
+Summary: Here we present an example where Go's [interfaces](https://golang.org/doc/effective_go.html#interfaces_and_types) made it easy to refactor some existing code to make it more flexible and extensible. Originally, the standard library's [RPC package](https://golang.org/pkg/net/rpc/) used a custom wire format called [gob](https://golang.org/pkg/encoding/gob/). For a particular application, we wanted to use [JSON](https://golang.org/pkg/encoding/json/) as an alternate wire format.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-Here we present an example where Go's [[https://golang.org/doc/effective_go.html#interfaces_and_types][interfaces]]
+Here we present an example where Go's [interfaces](https://golang.org/doc/effective_go.html#interfaces_and_types)
 made it easy to refactor some existing code to make it more flexible and extensible.
-Originally, the standard library's [[https://golang.org/pkg/net/rpc/][RPC package]]
-used a custom wire format called [[https://golang.org/pkg/encoding/gob/][gob]].
-For a particular application, we wanted to use [[https://golang.org/pkg/encoding/json/][JSON]]
+Originally, the standard library's [RPC package](https://golang.org/pkg/net/rpc/)
+used a custom wire format called [gob](https://golang.org/pkg/encoding/gob/).
+For a particular application, we wanted to use [JSON](https://golang.org/pkg/encoding/json/)
 as an alternate wire format.
 
 We first defined a pair of interfaces to describe the functionality of the
@@ -42,7 +43,7 @@
 this was the full extent of the work we needed to do on the RPC package.
 This whole exercise took about 20 minutes!
 After tidying up and testing the new code,
-the [[https://github.com/golang/go/commit/dcff89057bc0e0d7cb14cf414f2df6f5fb1a41ec][final changeset]] was submitted.
+the [final changeset](https://github.com/golang/go/commit/dcff89057bc0e0d7cb14cf414f2df6f5fb1a41ec) was submitted.
 
 In an inheritance-oriented language like Java or C++,
 the obvious path would be to generalize the RPC class,
diff --git a/content/laws-of-reflection.article b/content/laws-of-reflection.article
index 10cd663..6e34859 100644
--- a/content/laws-of-reflection.article
+++ b/content/laws-of-reflection.article
@@ -1,10 +1,11 @@
-The Laws of Reflection
+# The Laws of Reflection
 6 Sep 2011
 Tags: interface, reflect, type, technical
+Summary: Reflection in computing is the ability of a program to examine its own structure, particularly through types; it's a form of metaprogramming. It's also a great source of confusion.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 Reflection in computing is the ability of a program to examine its own structure,
 particularly through types;
@@ -16,7 +17,7 @@
 but this article is about Go, so for the rest of this article the word "reflection"
 should be taken to mean "reflection in Go".
 
-* Types and interfaces
+## Types and interfaces
 
 Because reflection builds on the type system, let's start with a refresher about types in Go.
 
@@ -39,7 +40,7 @@
 An interface variable can store any concrete (non-interface) value as long
 as that value implements the interface's methods.
 A well-known pair of examples is `io.Reader` and `io.Writer`,
-the types `Reader` and `Writer` from the [[https://golang.org/pkg/io/][io package]]:
+the types `Reader` and `Writer` from the [io package](https://golang.org/pkg/io/):
 
 	// Reader is the interface that wraps the basic Read method.
 	type Reader interface {
@@ -56,11 +57,11 @@
 For the purposes of this discussion, that means that a variable of type
 `io.Reader` can hold any value whose type has a `Read` method:
 
-	    var r io.Reader
-	    r = os.Stdin
-	    r = bufio.NewReader(r)
-	    r = new(bytes.Buffer)
-	    // and so on
+	var r io.Reader
+	r = os.Stdin
+	r = bufio.NewReader(r)
+	r = new(bytes.Buffer)
+	// and so on
 
 It's important to be clear that whatever concrete value `r` may hold,
 `r`'s type is always `io.Reader`:
@@ -80,9 +81,9 @@
 
 We need to be precise about all this because reflection and interfaces are closely related.
 
-* The representation of an interface
+## The representation of an interface
 
-Russ Cox has written a [[https://research.swtch.com/2009/12/go-data-structures-interfaces.html][ detailed blog post]]
+Russ Cox has written a [ detailed blog post](https://research.swtch.com/2009/12/go-data-structures-interfaces.html)
 about the representation of interface values in Go.
 It's not necessary to repeat the full story here,
 but a simplified summary is in order.
@@ -93,12 +94,12 @@
 To be more precise, the value is the underlying concrete data item that
 implements the interface and the type describes the full type of that item. For instance, after
 
-	    var r io.Reader
-	    tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)
-	    if err != nil {
-	        return nil, err
-	    }
-	    r = tty
+	var r io.Reader
+	tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)
+	if err != nil {
+	    return nil, err
+	}
+	r = tty
 
 `r` contains, schematically, the (value, type) pair,
 (`tty`, `*os.File`).
@@ -107,8 +108,8 @@
 the value inside carries all the type information about that value.
 That's why we can do things like this:
 
-	    var w io.Writer
-	    w = r.(io.Writer)
+	var w io.Writer
+	w = r.(io.Writer)
 
 The expression in this assignment is a type assertion;
 what it asserts is that the item inside `r` also implements `io.Writer`,
@@ -120,8 +121,8 @@
 
 Continuing, we can do this:
 
-	    var empty interface{}
-	    empty = w
+	var empty interface{}
+	empty = w
 
 and our empty interface value `empty` will again contain that same pair,
 (`tty`, `*os.File`).
@@ -140,14 +141,14 @@
 
 Now we're ready to reflect.
 
-* The first law of reflection
+## The first law of reflection
 
-* 1. Reflection goes from interface value to reflection object.
+## 1. Reflection goes from interface value to reflection object.
 
 At the basic level, reflection is just a mechanism to examine the type and
 value pair stored inside an interface variable.
-To get started, there are two types we need to know about in [[https://golang.org/pkg/reflect/][package reflect]]:
-[[https://golang.org/pkg/reflect/#Type][Type]] and [[https://golang.org/pkg/reflect/#Value][Value]].
+To get started, there are two types we need to know about in [package reflect](https://golang.org/pkg/reflect/):
+[Type](https://golang.org/pkg/reflect/#Type) and [Value](https://golang.org/pkg/reflect/#Value).
 Those two types give access to the contents of an interface variable,
 and two simple functions, called `reflect.TypeOf` and `reflect.ValueOf`,
 retrieve `reflect.Type` and `reflect.Value` pieces out of an interface value.
@@ -175,7 +176,7 @@
 You might be wondering where the interface is here,
 since the program looks like it's passing the `float64` variable `x`,
 not an interface value, to `reflect.TypeOf`.
-But it's there; as [[https://golang.org/pkg/reflect/#TypeOf][godoc reports]],
+But it's there; as [godoc reports](https://golang.org/pkg/reflect/#TypeOf),
 the signature of `reflect.TypeOf` includes an empty interface:
 
 	// TypeOf returns the reflection Type of the value in the interface{}.
@@ -189,8 +190,8 @@
 recovers the value (from here on we'll elide the boilerplate and focus just
 on the executable code):
 
-	    var x float64 = 3.4
-	    fmt.Println("value:", reflect.ValueOf(x).String())
+	var x float64 = 3.4
+	fmt.Println("value:", reflect.ValueOf(x).String())
 
 prints
 
@@ -210,11 +211,11 @@
 Also methods on `Value` with names like `Int` and `Float` let us grab values
 (as `int64` and `float64`) stored inside:
 
-	    var x float64 = 3.4
-	    v := reflect.ValueOf(x)
-	    fmt.Println("type:", v.Type())
-	    fmt.Println("kind is float64:", v.Kind() == reflect.Float64)
-	    fmt.Println("value:", v.Float())
+	var x float64 = 3.4
+	v := reflect.ValueOf(x)
+	fmt.Println("type:", v.Type())
+	fmt.Println("kind is float64:", v.Kind() == reflect.Float64)
+	fmt.Println("value:", v.Float())
 
 prints
 
@@ -234,29 +235,29 @@
 value takes an `int64`;
 it may be necessary to convert to the actual type involved:
 
-	    var x uint8 = 'x'
-	    v := reflect.ValueOf(x)
-	    fmt.Println("type:", v.Type())                            // uint8.
-	    fmt.Println("kind is uint8: ", v.Kind() == reflect.Uint8) // true.
-	    x = uint8(v.Uint())                                       // v.Uint returns a uint64.
+	var x uint8 = 'x'
+	v := reflect.ValueOf(x)
+	fmt.Println("type:", v.Type())                            // uint8.
+	fmt.Println("kind is uint8: ", v.Kind() == reflect.Uint8) // true.
+	x = uint8(v.Uint())                                       // v.Uint returns a uint64.
 
 The second property is that the `Kind` of a reflection object describes
 the underlying type,
 not the static type.
 If a reflection object contains a value of a user-defined integer type, as in
 
-	    type MyInt int
-	    var x MyInt = 7
-	    v := reflect.ValueOf(x)
+	type MyInt int
+	var x MyInt = 7
+	v := reflect.ValueOf(x)
 
 the `Kind` of `v` is still `reflect.Int`,
 even though the static type of `x` is `MyInt`, not `int`.
 In other words, the `Kind` cannot discriminate an int from a `MyInt` even
 though the `Type` can.
 
-* The second law of reflection
+## The second law of reflection
 
-* 2. Reflection goes from reflection object to interface value.
+## 2. Reflection goes from reflection object to interface value.
 
 Like physical reflection, reflection in Go generates its own inverse.
 
@@ -269,8 +270,8 @@
 
 As a consequence we can say
 
-	    y := v.Interface().(float64) // y will have type float64.
-	    fmt.Println(y)
+	y := v.Interface().(float64) // y will have type float64.
+	fmt.Println(y)
 
 to print the `float64` value represented by the reflection object `v`.
 
@@ -281,13 +282,13 @@
 Therefore all it takes to print the contents of a `reflect.Value` correctly
 is to pass the result of the `Interface` method to the formatted print routine:
 
-	    fmt.Println(v.Interface())
+	fmt.Println(v.Interface())
 
 (Why not `fmt.Println(v)`? Because `v` is a `reflect.Value`;
 we want the concrete value it holds.) Since our value is a `float64`,
 we can even use a floating-point format if we want:
 
-	    fmt.Printf("value is %7.1e\n", v.Interface())
+	fmt.Printf("value is %7.1e\n", v.Interface())
 
 and get in this case
 
@@ -302,17 +303,17 @@
 
 Reiterating: Reflection goes from interface values to reflection objects and back again.
 
-* The third law of reflection
+## The third law of reflection
 
-* 3. To modify a reflection object, the value must be settable.
+## 3. To modify a reflection object, the value must be settable.
 
 The third law is the most subtle and confusing, but it's easy enough to understand if we start from first principles.
 
 Here is some code that does not work, but is worth studying.
 
-	    var x float64 = 3.4
-	    v := reflect.ValueOf(x)
-	    v.SetFloat(7.1) // Error: will panic.
+	var x float64 = 3.4
+	v := reflect.ValueOf(x)
+	v.SetFloat(7.1) // Error: will panic.
 
 If you run this code, it will panic with the cryptic message
 
@@ -325,9 +326,9 @@
 
 The `CanSet` method of `Value` reports the settability of a `Value`; in our case,
 
-	    var x float64 = 3.4
-	    v := reflect.ValueOf(x)
-	    fmt.Println("settability of v:", v.CanSet())
+	var x float64 = 3.4
+	v := reflect.ValueOf(x)
+	fmt.Println("settability of v:", v.CanSet())
 
 prints
 
@@ -340,15 +341,15 @@
 that was used to create the reflection object.
 Settability is determined by whether the reflection object holds the original item. When we say
 
-	    var x float64 = 3.4
-	    v := reflect.ValueOf(x)
+	var x float64 = 3.4
+	v := reflect.ValueOf(x)
 
 we pass a copy of `x` to `reflect.ValueOf`,
 so the interface value created as the argument to `reflect.ValueOf` is a
 copy of `x`, not `x` itself.
 Thus, if the statement
 
-	    v.SetFloat(7.1)
+	v.SetFloat(7.1)
 
 were allowed to succeed, it would not update `x`,
 even though `v` looks like it was created from `x`.
@@ -375,10 +376,10 @@
 
 Let's do that. First we initialize `x` as usual and then create a reflection value that points to it, called `p`.
 
-	    var x float64 = 3.4
-	    p := reflect.ValueOf(&x) // Note: take the address of x.
-	    fmt.Println("type of p:", p.Type())
-	    fmt.Println("settability of p:", p.CanSet())
+	var x float64 = 3.4
+	p := reflect.ValueOf(&x) // Note: take the address of x.
+	fmt.Println("type of p:", p.Type())
+	fmt.Println("settability of p:", p.CanSet())
 
 The output so far is
 
@@ -390,8 +391,8 @@
 To get to what `p` points to, we call the `Elem` method of `Value`,
 which indirects through the pointer, and save the result in a reflection `Value` called `v`:
 
-	    v := p.Elem()
-	    fmt.Println("settability of v:", v.CanSet())
+	v := p.Elem()
+	fmt.Println("settability of v:", v.CanSet())
 
 Now `v` is a settable reflection object, as the output demonstrates,
 
@@ -399,9 +400,9 @@
 
 and since it represents `x`, we are finally able to use `v.SetFloat` to modify the value of `x`:
 
-	    v.SetFloat(7.1)
-	    fmt.Println(v.Interface())
-	    fmt.Println(x)
+	v.SetFloat(7.1)
+	fmt.Println(v.Interface())
+	fmt.Println(x)
 
 The output, as expected, is
 
@@ -413,7 +414,7 @@
 Just keep in mind that reflection Values need the address of something in
 order to modify what they represent.
 
-* Structs
+## Structs
 
 In our previous example `v` wasn't a pointer itself,
 it was just derived from one.
@@ -426,22 +427,22 @@
 We create the reflection object with the address of the struct because we'll
 want to modify it later.
 Then we set `typeOfT` to its type and iterate over the fields using straightforward
-method calls (see [[https://golang.org/pkg/reflect/][package reflect]] for details).
+method calls (see [package reflect](https://golang.org/pkg/reflect/) for details).
 Note that we extract the names of the fields from the struct type,
 but the fields themselves are regular `reflect.Value` objects.
 
-	    type T struct {
-	        A int
-	        B string
-	    }
-	    t := T{23, "skidoo"}
-	    s := reflect.ValueOf(&t).Elem()
-	    typeOfT := s.Type()
-	    for i := 0; i < s.NumField(); i++ {
-	        f := s.Field(i)
-	        fmt.Printf("%d: %s %s = %v\n", i,
-	            typeOfT.Field(i).Name, f.Type(), f.Interface())
-	    }
+	type T struct {
+	    A int
+	    B string
+	}
+	t := T{23, "skidoo"}
+	s := reflect.ValueOf(&t).Elem()
+	typeOfT := s.Type()
+	for i := 0; i < s.NumField(); i++ {
+	    f := s.Field(i)
+	    fmt.Printf("%d: %s %s = %v\n", i,
+	        typeOfT.Field(i).Name, f.Type(), f.Interface())
+	}
 
 The output of this program is
 
@@ -454,9 +455,9 @@
 
 Because `s` contains a settable reflection object, we can modify the fields of the structure.
 
-	    s.Field(0).SetInt(77)
-	    s.Field(1).SetString("Sunset Strip")
-	    fmt.Println("t is now", t)
+	s.Field(0).SetInt(77)
+	s.Field(1).SetString("Sunset Strip")
+	fmt.Println("t is now", t)
 
 And here's the result:
 
@@ -466,15 +467,15 @@
 not `&t`, the calls to `SetInt` and `SetString` would fail as the fields
 of `t` would not be settable.
 
-* Conclusion
+## Conclusion
 
 Here again are the laws of reflection:
 
-- Reflection goes from interface value to reflection object.
+  - Reflection goes from interface value to reflection object.
 
-- Reflection goes from reflection object to interface value.
+  - Reflection goes from reflection object to interface value.
 
-- To modify a reflection object, the value must be settable.
+  - To modify a reflection object, the value must be settable.
 
 Once you understand these laws reflection in Go becomes much easier to use,
 although it remains subtle.
diff --git a/content/learn-go-from-your-browser.article b/content/learn-go-from-your-browser.article
index 8458c09..559f898 100644
--- a/content/learn-go-from-your-browser.article
+++ b/content/learn-go-from-your-browser.article
@@ -1,21 +1,22 @@
-Learn Go from your browser
+# Learn Go from your browser
 4 Oct 2011
 Tags: playground, tour
+Summary: We are excited to announce [A Tour of Go](https://tour.golang.org/), a guided tour of the Go programming language you can run from your browser.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-We are excited to announce [[https://tour.golang.org/][A Tour of Go]],
+We are excited to announce [A Tour of Go](https://tour.golang.org/),
 a guided tour of the Go programming language you can run from your browser.
 
 The tour is hands-on, demonstrating the language through code samples that you can modify,
 compile, and run from the tour itself.
-(The technology behind the [[https://golang.org/doc/play/][Go Playground]] does the work.)
+(The technology behind the [Go Playground](https://golang.org/doc/play/) does the work.)
 
 The tour has three sections. The first section covers basic syntax and data structures;
 the second discusses methods and interfaces;
 and the third introduces Go's concurrency primitives.
 Each section concludes with a few exercises so you can practice what you've learned.
 
-So, what are you waiting for? [[https://tour.golang.org/][Get started now!]]
+So, what are you waiting for? [Get started now!](https://tour.golang.org/)
diff --git a/content/matchlang.article b/content/matchlang.article
index 47473ea..ea64dbd 100644
--- a/content/matchlang.article
+++ b/content/matchlang.article
@@ -1,10 +1,11 @@
-Language and Locale Matching in Go
-09 Feb 2016
+# Language and Locale Matching in Go
+9 Feb 2016
 Tags: language, locale, tag, BCP 47, matching
+Summary: Consider an application, such as a web site, with support for multiple languages in its user interface. When a user arrives with a list of preferred languages, the application must decide which language it should use in its presentation to the user. This requires finding the best match between the languages the application supports and those the user prefers. This post explains why this is a difficult decision and how Go can help.
 
 Marcel van Lohuizen
 
-* Introduction
+## Introduction
 
 Consider an application, such as a web site, with support for multiple languages
 in its user interface.
@@ -14,7 +15,7 @@
 and those the user prefers.
 This post explains why this is a difficult decision and how Go can help.
 
-* Language Tags
+## Language Tags
 
 Language tags, also known as locale identifiers, are machine-readable
 identifiers for the language and/or dialect being used.
@@ -47,14 +48,14 @@
 sorting order for Portuguese, a collate package may fall back to the sorting
 order for the default, or “root”, language.
 
-* The Messy Nature of Matching Languages
+## The Messy Nature of Matching Languages
 
 Handling language tags is tricky.
 This is partly because the boundaries of human languages are not well defined
 and partly because of the legacy of evolving language tag standards.
 In this section we will show some of the messy aspects of handling language tags.
 
-__Tags_with_different_language_codes_can_indicate_the_same_language_
+_ Tags with different language codes can indicate the same language_
 
 For historical and political reasons, many language codes have changed over
 time, leaving languages with an older legacy code as well as a new one.
@@ -66,7 +67,7 @@
 Tags for macro languages are often used interchangeably with the most-spoken
 language in the group.
 
-_Matching_language_code_alone_is_not_sufficient_
+_Matching language code alone is not sufficient_
 
 Azerbaijani (“az”), for example, is written in different scripts depending on
 the country in which it is spoken: "az-Latn" for Latin (the default script),
@@ -82,7 +83,7 @@
 
 If you ignore subtags, you might as well present Greek to the user.
 
-_The_best_match_might_be_a_language_not_listed_by_the_user_
+_The best match might be a language not listed by the user_
 
 The most common written form of Norwegian (“nb”) looks an awful lot like Danish.
 If Norwegian is not available, Danish may be a good second choice.
@@ -93,7 +94,7 @@
 If a user-requested language is not supported, falling back to English is often
 not the best thing to do.
 
-_The_choice_of_language_decides_more_than_translation_
+_The choice of language decides more than translation_
 
 Suppose a user asks for Danish, with German as a second choice.
 If an application chooses German, it must not only use German translations
@@ -105,10 +106,10 @@
 language) and then you stick with this protocol for all communication for the
 duration of a session.
 
-_Using_a_“parent”_of_a_language_as_fallback_is_non-trivial_
+_Using a “parent” of a language as fallback is non-trivial_
 
 Suppose your application supports Angolan Portuguese (“pt-AO”).
-Packages in [[https://golang.org/x/text]], like collation and display, may not
+Packages in [golang.org/x/text](https://golang.org/x/text), like collation and display, may not
 have specific support for this dialect.
 The correct course of action in such cases is to match the closest parent dialect.
 Languages are arranged in a hierarchy, with each specific language having a more
@@ -127,9 +128,9 @@
 If you compute the parent by simply removing subtags, you may select a “dialect”
 that is incomprehensible to the user.
 
-* Language Matching in Go
+## Language Matching in Go
 
-The Go package [[https://golang.org/x/text/language]] implements the BCP 47
+The Go package [golang.org/x/text/language](https://golang.org/x/text/language) implements the BCP 47
 standard for language tags and adds support for deciding which language to use
 based on data published in the Unicode Common Locale Data Repository (CLDR).
 
@@ -138,7 +139,7 @@
 
 .code -edit matchlang/complete.go
 
-** Creating Language Tags
+### Creating Language Tags
 
 The simplest way to create a language.Tag from a user-given language code string
 is with language.Make.
@@ -164,7 +165,7 @@
 A full array of canonicalization options are available if the programmer still
 desires to do so.
 
-** Matching User-Preferred Languages to Supported Languages
+### Matching User-Preferred Languages to Supported Languages
 
 A Matcher matches user-preferred languages to supported languages.
 Users are strongly advised to use it if they don’t want to deal with all the
@@ -193,7 +194,7 @@
 It is all the same for the Matcher. An application may even add both, allowing
 for more specific American slang for “en-US”.
 
-** Matching Example
+### Matching Example
 
 Consider the following Matcher and lists of supported languages:
 
@@ -245,7 +246,7 @@
 German is the best match for Swiss German in the server's language list, and the
 option for phone-book collation order has been carried over.
 
-** Confidence Scores
+### Confidence Scores
 
 Go uses coarse-grained confidence scoring with rule-based elimination.
 A match is classified as Exact, High (not exact, but no known ambiguity), Low
@@ -264,9 +265,9 @@
 simpler to implement, more maintainable, and faster, meaning that we could
 handle more rules.
 
-** Displaying Supported Languages
+### Displaying Supported Languages
 
-The [[https://golang.org/x/text/language/display]] package allows naming language
+The [golang.org/x/text/language/display](https://golang.org/x/text/language/display) package allows naming language
 tags in many languages.
 It also contains a “Self” namer for displaying a tag in its own language.
 
@@ -287,7 +288,7 @@
 In the second column, note the differences in capitalization, reflecting the
 rules of the respective language.
 
-* Conclusion
+## Conclusion
 
 At first glance, language tags look like nicely structured data, but because
 they describe human languages, the structure of relationships between language
@@ -297,5 +298,5 @@
 language tags.
 As described above, this can produce awful results.
 
-Go's [[https://golang.org/x/text/language]] package solves this complex problem
+Go's [golang.org/x/text/language](https://golang.org/x/text/language) package solves this complex problem
 while still presenting a simple, easy-to-use API. Enjoy.
diff --git a/content/migrating-to-go-modules.article b/content/migrating-to-go-modules.article
index e3c8759..10bf730 100644
--- a/content/migrating-to-go-modules.article
+++ b/content/migrating-to-go-modules.article
@@ -1,24 +1,25 @@
-Migrating to Go Modules
+# Migrating to Go Modules
 21 Aug 2019
 Tags: tools, versioning, modules
+Summary: This post is part 2 in a series.
 
 Jean de Klerk
 
-* Introduction
+## Introduction
 
 This post is part 2 in a series.
 
-- Part 1 — [[/using-go-modules][Using Go Modules]]
-- *Part*2*—*Migrating*To*Go*Modules* (this post)
-- Part 3 — [[/publishing-go-modules][Publishing Go Modules]]
-- Part 4 — [[/v2-go-modules][Go Modules: v2 and Beyond]]
+  - Part 1 — [Using Go Modules](/using-go-modules)
+  - **Part 2 — Migrating To Go Modules** (this post)
+  - Part 3 — [Publishing Go Modules](/publishing-go-modules)
+  - Part 4 — [Go Modules: v2 and Beyond](/v2-go-modules)
 
 Go projects use a wide variety of dependency management strategies.
-[[https://golang.org/cmd/go/#hdr-Vendor_Directories][Vendoring]] tools such
-as [[https://github.com/golang/dep][dep]] and [[https://github.com/Masterminds/glide][glide]] are popular,
+[Vendoring](https://golang.org/cmd/go/#hdr-Vendor_Directories) tools such
+as [dep](https://github.com/golang/dep) and [glide](https://github.com/Masterminds/glide) are popular,
 but they have wide differences in behavior and don't always work well together.
 Some projects store their entire GOPATH directory in a single Git repository.
-Others simply rely on `go`get` and expect fairly recent versions of dependencies
+Others simply rely on `go get` and expect fairly recent versions of dependencies
 to be installed in GOPATH.
 
 Go's module system, introduced in Go 1.11,
@@ -30,18 +31,18 @@
 We'll explain how to do that without breaking your users in a future article
 focused on v2 and beyond.
 
-* Migrating to Go modules in your project
+## Migrating to Go modules in your project
 
 A project might be in one of three states when beginning the transition to Go modules:
 
-- A brand new Go project.
-- An established Go project with a non-modules dependency manager.
-- An established Go project without any dependency manager.
+  - A brand new Go project.
+  - An established Go project with a non-modules dependency manager.
+  - An established Go project without any dependency manager.
 
-The first case is covered in [[https://blog.golang.org/using-go-modules][Using Go Modules]];
+The first case is covered in [Using Go Modules](https://blog.golang.org/using-go-modules);
 we'll address the latter two in this post.
 
-* With a dependency manager
+## With a dependency manager
 
 To convert a project that already uses a dependency management tool, run the following commands:
 
@@ -77,12 +78,12 @@
 	require rsc.io/binaryregexp v0.2.1-0.20190524193500-545cabda89ca
 	$
 
-`go`mod`init` creates a new go.mod file and automatically imports dependencies from `Godeps.json`,
-`Gopkg.lock`, or a number of [[https://go.googlesource.com/go/+/362625209b6cd2bc059b6b0a67712ddebab312d9/src/cmd/go/internal/modconv/modconv.go#9][other supported formats]].
-The argument to `go`mod`init` is the module path,
+`go mod init` creates a new go.mod file and automatically imports dependencies from `Godeps.json`,
+`Gopkg.lock`, or a number of [other supported formats](https://go.googlesource.com/go/+/362625209b6cd2bc059b6b0a67712ddebab312d9/src/cmd/go/internal/modconv/modconv.go#9).
+The argument to `go mod init` is the module path,
 the location where the module may be found.
 
-This is a good time to pause and run `go`build`./...` and `go`test`./...` before continuing.
+This is a good time to pause and run `go build ./...` and `go test ./...` before continuing.
 Later steps may modify your `go.mod` file,
 so if you prefer to take an iterative approach,
 this is the closest your `go.mod` file will be to your pre-modules dependency specification.
@@ -95,13 +96,13 @@
 	rsc.io/binaryregexp v0.2.1-0.20190524193500-545cabda89ca/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 	$
 
-`go`mod`tidy` finds all the packages transitively imported by packages in your module.
+`go mod tidy` finds all the packages transitively imported by packages in your module.
 It adds new module requirements for packages not provided by any known module,
 and it removes requirements on modules that don't provide any imported packages.
 If a module provides packages that are only imported by projects that haven't
 migrated to modules yet,
-the module requirement will be marked with an `//`indirect` comment.
-It is always good practice to run `go`mod`tidy` before committing a `go.mod`
+the module requirement will be marked with an `// indirect` comment.
+It is always good practice to run `go mod tidy` before committing a `go.mod`
 file to version control.
 
 Let's finish by making sure the code builds and tests pass:
@@ -129,10 +130,10 @@
 and compare the resulting versions with your old dependency management file
 to ensure that the selected versions are appropriate.
 If you find a version that wasn't what you wanted,
-you can find out why using `go`mod`why`-m` and/or `go`mod`graph`,
-and upgrade or downgrade to the correct version using `go`get`.
+you can find out why using `go mod why -m` and/or `go mod graph`,
+and upgrade or downgrade to the correct version using `go get`.
 (If the version you request is older than the version that was previously selected,
-`go`get` will downgrade other dependencies as needed to maintain compatibility.) For example,
+`go get` will downgrade other dependencies as needed to maintain compatibility.) For example,
 
 	$ go mod why -m rsc.io/binaryregexp
 	[...]
@@ -141,7 +142,7 @@
 	$ go get rsc.io/binaryregexp@v0.2.0
 	$
 
-* Without a dependency manager
+## Without a dependency manager
 
 For a Go project without a dependency management system, start by creating a `go.mod` file:
 
@@ -157,9 +158,9 @@
 	$
 
 Without a configuration file from a previous dependency manager,
-`go`mod`init` will create a `go.mod` file with only the `module` and `go` directives.
+`go mod init` will create a `go.mod` file with only the `module` and `go` directives.
 In this example, we set the module path to `golang.org/x/blog` because that
-is its [[https://golang.org/cmd/go/#hdr-Remote_import_paths][custom import path]].
+is its [custom import path](https://golang.org/cmd/go/#hdr-Remote_import_paths).
 Users may import packages with this path,
 and we must be careful not to change it.
 
@@ -167,7 +168,7 @@
 and the `go` directive declares the expected version of the Go language
 used to compile the code within the module.
 
-Next, run `go`mod`tidy` to add the module's dependencies:
+Next, run `go mod tidy` to add the module's dependencies:
 
 	$ go mod tidy
 	go: finding golang.org/x/website latest
@@ -206,7 +207,7 @@
 	[...]
 	$
 
-`go`mod`tidy` added module requirements for all the packages transitively
+`go mod tidy` added module requirements for all the packages transitively
 imported by packages in your module and built a `go.sum` with checksums
 for each library at a specific version.
 Let's finish by making sure the code still builds and tests still pass:
@@ -222,22 +223,22 @@
 	?   	golang.org/x/blog/support/racy	[no test files]
 	$
 
-Note that when `go`mod`tidy` adds a requirement,
+Note that when `go mod tidy` adds a requirement,
 it adds the latest version of the module.
 If your `GOPATH` included an older version of a dependency that subsequently
 published a breaking change,
-you may see errors in `go`mod`tidy`, `go`build`, or `go`test`.
-If this happens, try downgrading to an older version with `go`get` (for example,
-`go`get`github.com/broken/module@v1.1.0`),
+you may see errors in `go mod tidy`, `go build`, or `go test`.
+If this happens, try downgrading to an older version with `go get` (for example,
+`go get github.com/broken/module@v1.1.0`),
 or take the time to make your module compatible with the latest version of each dependency.
 
-** Tests in module mode
+### Tests in module mode
 
 Some tests may need tweaks after migrating to Go modules.
 
 If a test needs to write files in the package directory,
 it may fail when the package directory is in the module cache, which is read-only.
-In particular, this may cause `go`test`all` to fail.
+In particular, this may cause `go test all` to fail.
 The test should copy files it needs to write to a temporary directory instead.
 
 If a test relies on relative paths (`../package-in-another-module`) to locate
@@ -252,12 +253,12 @@
 If this is the case, you may need to add a `go.mod` file to the source tree to be tested,
 or set `GO111MODULE=off` explicitly.
 
-* Publishing a release
+## Publishing a release
 
 Finally, you should tag and publish a release version for your new module.
 This is optional if you haven't released any versions yet,
 but without an official release, downstream users will depend on specific
-commits using [[https://golang.org/cmd/go/#hdr-Pseudo_versions][pseudo-versions]],
+commits using [pseudo-versions](https://golang.org/cmd/go/#hdr-Pseudo_versions),
 which may be more difficult to support.
 
 	$ git tag v1.2.0
@@ -268,31 +269,31 @@
 import path, and your dependencies haven't made breaking changes, then adding
 the `go.mod` file is backwards-compatible — but it's a significant change, and
 may expose existing problems. If you have existing version tags, you should
-increment the [[https://semver.org/#spec-item-7][minor version]]. See
-[[/publishing-go-modules][Publishing Go Modules]] to learn how to increment and
+increment the [minor version](https://semver.org/#spec-item-7). See
+[Publishing Go Modules](/publishing-go-modules) to learn how to increment and
 publish versions.
 
-* Imports and canonical module paths
+## Imports and canonical module paths
 
 Each module declares its module path in its `go.mod` file.
 Each `import` statement that refers to a package within the module must
 have the module path as a prefix of the package path.
 However, the `go` command may encounter a repository containing the module
-through many different [[https://golang.org/cmd/go/#hdr-Remote_import_paths][remote import paths]].
+through many different [remote import paths](https://golang.org/cmd/go/#hdr-Remote_import_paths).
 For example, both `golang.org/x/lint` and `github.com/golang/lint` resolve
-to repositories containing the code hosted at [[https://go.googlesource.com/lint][go.googlesource.com/lint]].
-The [[https://go.googlesource.com/lint/+/refs/heads/master/go.mod][`go.mod` file]]
+to repositories containing the code hosted at [go.googlesource.com/lint](https://go.googlesource.com/lint).
+The [`go.mod` file](https://go.googlesource.com/lint/+/refs/heads/master/go.mod)
 contained in that repository declares its path to be `golang.org/x/lint`,
 so only that path corresponds to a valid module.
 
-Go 1.4 provided a mechanism for declaring canonical import paths using [[https://golang.org/cmd/go/#hdr-Import_path_checking][`//`import` comments]],
+Go 1.4 provided a mechanism for declaring canonical import paths using [`// import` comments](https://golang.org/cmd/go/#hdr-Import_path_checking),
 but package authors did not always provide them.
 As a result, code written prior to modules may have used a non-canonical
 import path for a module without surfacing an error for the mismatch.
 When using modules, the import path must match the canonical module path,
 so you may need to update `import` statements:
-for example, you may need to change `import`"github.com/golang/lint"` to
-`import`"golang.org/x/lint"`.
+for example, you may need to change `import "github.com/golang/lint"` to
+`import "golang.org/x/lint"`.
 
 Another scenario in which a module's canonical path may differ from its
 repository path occurs for Go modules at major version 2 or higher.
@@ -304,15 +305,15 @@
 `v2.0.1` may have imported it as `github.com/russross/blackfriday` instead,
 and will need to update the import path to include the `/v2` suffix.
 
-* Conclusion
+## Conclusion
 
 Converting to Go modules should be a straightforward process for most users.
 Occasional issues may arise due to non-canonical import paths or breaking
 changes within a dependency.
-Future posts will explore [[/publishing-go-modules][publishing new versions]],
+Future posts will explore [publishing new versions](/publishing-go-modules),
 v2 and beyond, and ways to debug strange situations.
 
 To provide feedback and help shape the future of dependency management in Go,
-please send us [[https://golang.org/issue/new][bug reports]] or [[https://golang.org/wiki/ExperienceReports][experience reports]].
+please send us [bug reports](https://golang.org/issue/new) or [experience reports](https://golang.org/wiki/ExperienceReports).
 
 Thanks for all your feedback and help improving modules.
diff --git a/content/module-mirror-launch.article b/content/module-mirror-launch.article
index d86a716..a0f3247 100644
--- a/content/module-mirror-launch.article
+++ b/content/module-mirror-launch.article
@@ -1,48 +1,49 @@
-Module Mirror and Checksum Database Launched
+# Module Mirror and Checksum Database Launched
 29 Aug 2019
 Tags: tools, versioning
+Summary: We are excited to share that our module [mirror](https://proxy.golang.org), [index](https://index.golang.org), and [checksum database](https://sum.golang.org) are now production ready! The `go` command will use the module mirror and checksum database by default for [Go 1.13 module users](https://golang.org/doc/go1.13#introduction).  See [proxy.golang.org/privacy](https://proxy.golang.org/privacy) for privacy information about these services and the [go command documentation](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) for configuration details, including how to disable the use of these servers or use different ones.  If you depend on non-public modules, see the [documentation for configuring your environment](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules).
 
 Katie Hockman
 
-* Introduction
+##
 
-We are excited to share that our module [[https://proxy.golang.org][mirror]],
-[[https://index.golang.org][index]], and
-[[https://sum.golang.org][checksum database]] are now production ready! The `go` command
+We are excited to share that our module [mirror](https://proxy.golang.org),
+[index](https://index.golang.org), and
+[checksum database](https://sum.golang.org) are now production ready! The `go` command
 will use the module mirror and checksum database by default for
-[[https://golang.org/doc/go1.13#introduction][Go 1.13 module users]].  See
-[[https://proxy.golang.org/privacy][proxy.golang.org/privacy]] for privacy
+[Go 1.13 module users](https://golang.org/doc/go1.13#introduction).  See
+[proxy.golang.org/privacy](https://proxy.golang.org/privacy) for privacy
 information about these services and the
-[[https://golang.org/cmd/go/#hdr-Module_downloading_and_verification][go command documentation]]
+[go command documentation](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification)
 for configuration details, including how to disable the use of these servers or
 use different ones.  If you depend on non-public modules, see the
-[[https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules][documentation for configuring your environment]].
+[documentation for configuring your environment](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules).
 
 This post will describe these services and the benefits of using them, and
 summarizes some of the points from the
-[[https://youtu.be/KqTySYYhPUE][Go Module Proxy: Life of a Query]] talk at Gophercon 2019.
-See the [[https://youtu.be/KqTySYYhPUE][recording]] if you are interested in the full talk.
+[Go Module Proxy: Life of a Query](https://youtu.be/KqTySYYhPUE) talk at Gophercon 2019.
+See the [recording](https://youtu.be/KqTySYYhPUE) if you are interested in the full talk.
 
-** Module Mirror
+## Module Mirror
 
-[[https://blog.golang.org/versioning-proposal][Modules]] are sets of Go packages
+[Modules](https://blog.golang.org/versioning-proposal) are sets of Go packages
 that are versioned together, and the contents of each version are immutable.
 That immutability provides new opportunities for caching and authentication.
-When `go`get` runs in module mode, it must fetch the module containing the
+When `go get` runs in module mode, it must fetch the module containing the
 requested packages, as well as any new dependencies introduced by that module,
 updating your
-[[https://golang.org/cmd/go/#hdr-The_go_mod_file][go.mod]] and
-[[https://golang.org/cmd/go/#hdr-Module_downloading_and_verification][go.sum]]
+[go.mod](https://golang.org/cmd/go/#hdr-The_go_mod_file) and
+[go.sum](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification)
 files as needed. Fetching modules from version control can be expensive in terms
 of latency and storage in your system: the `go` command may be forced to pull down
 the full commit history of a repository containing a transitive dependency, even
 one that isn’t being built, just to resolve its version.
 
 The solution is to use a module proxy, which speaks an API that is better suited
-to the `go` command’s needs (see `go`help`goproxy`). When `go`get` runs in
+to the `go` command’s needs (see `go help goproxy`). When `go get` runs in
 module mode with a proxy, it will work faster by only asking for the specific
 module metadata or source code it needs, and not worrying about the rest. Below is
-an example of how the `go` command may use a proxy with `go`get` by requesting the list
+an example of how the `go` command may use a proxy with `go get` by requesting the list
 of versions, then the info, mod, and zip file for the latest tagged version.
 
 .image module-mirror-launch/proxy-protocol.png _ 800
@@ -51,15 +52,15 @@
 source code in its own storage system, allowing the mirror to continue to serve
 source code that is no longer available from the original locations. This can
 speed up downloads and protect you from disappearing dependencies. See
-[[https://blog.golang.org/modules2019][Go Modules in 2019]] for more information.
+[Go Modules in 2019](https://blog.golang.org/modules2019) for more information.
 
 The Go team maintains a module mirror, served at
-[[https://proxy.golang.org][proxy.golang.org]], which the `go` command will use by
+[proxy.golang.org](https://proxy.golang.org), which the `go` command will use by
 default for module users as of Go 1.13. If you are running an earlier version of the `go`
 command, then you can use this service by setting
 `GOPROXY=https://proxy.golang.org` in your local environment.
 
-** Checksum Database
+## Checksum Database
 
 Modules introduced the `go.sum` file, which is a list of SHA-256 hashes of the
 source code and `go.mod` files of each dependency when it was first downloaded.
@@ -76,15 +77,15 @@
 targeted to you.
 
 Go's solution is a global source of `go.sum` lines, called a
-[[https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#checksum-database][checksum database]],
+[checksum database](https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#checksum-database),
 which ensures that the `go` command always adds the same lines to everyone's
 `go.sum` file. Whenever the `go` command receives new source code, it can verify the
 hash of that code against this global database to make sure the hashes match,
 ensuring that everyone is using the same code for a given version.
 
-The checksum database is served by [[https://sum.golang.org][sum.golang.org]], and
-is built on a [[https://research.swtch.com/tlog][Transparent Log]] (or “Merkle
-tree”) of hashes backed by [[https://github.com/google/trillian][Trillian]]. The
+The checksum database is served by [sum.golang.org](https://sum.golang.org), and
+is built on a [Transparent Log](https://research.swtch.com/tlog) (or “Merkle
+tree”) of hashes backed by [Trillian](https://github.com/google/trillian). The
 main advantage of a Merkle tree is that it is tamper proof and has properties
 that don’t allow for misbehavior to go undetected, which makes it more
 trustworthy than a simple database. The `go` command uses this tree to check
@@ -95,7 +96,7 @@
 .image module-mirror-launch/tree.png _ 800
 
 The checksum database supports
-[[https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#checksum-database][a set of endpoints]]
+[a set of endpoints](https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md#checksum-database)
 used by the `go` command to request and verify `go.sum` lines. The `/lookup`
 endpoint provides a “signed tree head” (STH) and the requested `go.sum` lines. The
 `/tile` endpoint provides chunks of the tree called _tiles_ which the `go` command
@@ -114,7 +115,7 @@
 
 If you are using Go 1.12 or earlier, you can manually check a `go.sum` file
 against the checksum database with
-[[https://godoc.org/golang.org/x/mod/gosumcheck][gosumcheck]]:
+[gosumcheck](https://godoc.org/golang.org/x/mod/gosumcheck):
 
 	$ go get golang.org/x/mod/gosumcheck
 	$ gosumcheck /path/to/go.sum
@@ -125,17 +126,17 @@
 the tree as it grows to ensure that it remains uncompromised, and we hope that
 the Go community will run them.
 
-** Module Index
+## Module Index
 
-The module index is served by [[https://index.golang.org][index.golang.org]], and
+The module index is served by [index.golang.org](https://index.golang.org), and
 is a public feed of new module versions that become available through
-[[https://proxy.golang.org][proxy.golang.org]]. This is particularly useful for
+[proxy.golang.org](https://proxy.golang.org). This is particularly useful for
 tool developers that want to keep their own cache of what’s available in
-[[https://proxy.golang.org][proxy.golang.org]], or keep up-to-date on some of the
+[proxy.golang.org](https://proxy.golang.org), or keep up-to-date on some of the
 newest modules that people are using.
 
-** Feedback or bugs
+## Feedback or bugs
 
 We hope these services improve your experience with modules, and encourage you
-to [[https://github.com/golang/go/issues/new?title=proxy.golang.org][file issues]] if you run into
+to [file issues](https://github.com/golang/go/issues/new?title=proxy.golang.org) if you run into
 problems or have feedback!
diff --git a/content/modules2019.article b/content/modules2019.article
index 6ea86c0..52a290d 100644
--- a/content/modules2019.article
+++ b/content/modules2019.article
@@ -1,10 +1,11 @@
-Go Modules in 2019
+# Go Modules in 2019
 19 Dec 2018
 Tags: tools, versioning
+Summary: 2018 was a great year for the Go ecosystem, with package management as one of our major focuses. In February, we started a community-wide discussion about how to integrate package management directly into the Go toolchain, and in August we delivered the first rough implementation of that feature, called Go modules, in Go 1.11. The migration to Go modules will be the most far-reaching change for the Go ecosystem since Go 1. Converting the entire ecosystem—code, users, tools, and so on—from GOPATH to modules will require work in many different areas. The module system will in turn help us deliver better authentication and build speeds to the Go ecosystem.
 
 Russ Cox
 
-* What a year!
+## What a year!
 
 2018 was a great year for the Go ecosystem, with
 package management as one of our major focuses.
@@ -22,9 +23,9 @@
 This post is a preview of what the Go team is planning
 relating to modules in 2019.
 
-* Releases
+## Releases
 
-Go 1.11, released in August 2018, introduced [[https://golang.org/doc/go1.11#modules][preliminary support for modules]].
+Go 1.11, released in August 2018, introduced [preliminary support for modules](https://golang.org/doc/go1.11#modules).
 For now, module support is maintained alongside the
 traditional GOPATH-based mechanisms.
 The `go` command defaults to module mode when run
@@ -51,7 +52,7 @@
 In order to do that, we’ve been working on better tooling support
 along with better support for the open-source module ecosystem.
 
-* Tooling & IDE Integration
+## Tooling & IDE Integration
 
 In the eight years that we’ve had GOPATH,
 an incredible amount of tooling has been created
@@ -59,7 +60,7 @@
 Moving to modules requires updating all code that makes
 that assumption.
 We’ve designed a new package,
-[[https://godoc.org/golang.org/x/tools/go/packages][golang.org/x/tools/go/packages]],
+[golang.org/x/tools/go/packages](https://godoc.org/golang.org/x/tools/go/packages),
 that abstracts the operation of finding and loading information
 about the Go source code for a given target.
 This new package adapts automatically to both
@@ -74,7 +75,7 @@
 like gocode, godef, and go-outline
 into a single tool that can be used from the
 command line and also supports
-the [[https://langserver.org/][language server protocol]]
+the [language server protocol](https://langserver.org/)
 used by modern IDEs.
 
 The transition to modules and the changes in package loading
@@ -85,7 +86,7 @@
 in which an analyzer is invoked for one package at a time.
 In this framework, the analysis of one package can write out facts
 made available to analyses of other packages that import the first.
-For example, `go` `vet`’s analysis of the [[https://golang.org/pkg/log/][log package]]
+For example, `go` `vet`’s analysis of the [log package](https://golang.org/pkg/log/)
 determines and records the fact that `log.Printf` is a `fmt.Printf` wrapper.
 Then `go` `vet` can check printf-style format strings in other packages
 that call `log.Printf`.
@@ -93,7 +94,7 @@
 program analysis tools to help developers find bugs earlier
 and understand code better.
 
-* Module Index
+## Module Index
 
 One of the most important parts of the original design for `go` `get`
 was that it was _decentralized_:
@@ -126,7 +127,7 @@
 using simple queries, to allow `goimports` to add
 imports for packages that have not yet been downloaded to the local system.
 
-* Module Authentication
+## Module Authentication
 
 Today, `go` `get` relies on connection-level authentication (HTTPS or SSH)
 to check that it is talking to the right server to download code.
@@ -157,8 +158,8 @@
 and cryptographically signs statements of the form
 “module M at version V has file tree hash H.”
 The notary service will publish all these notarized hashes
-in a queryable, [[https://www.certificate-transparency.org/][Certificate Transparency]]-style
-[[http://static.usenix.org/event/sec09/tech/full_papers/crosby.pdf][tamper-proof log]],
+in a queryable, [Certificate Transparency](https://www.certificate-transparency.org/)-style
+[tamper-proof log](http://static.usenix.org/event/sec09/tech/full_papers/crosby.pdf),
 so that anyone can verify that the notary is behaving correctly.
 This log will serve as a public, global `go.sum` file
 that `go` `get` can use to authenticate modules
@@ -168,7 +169,7 @@
 for publicly-available modules not already in `go.sum`
 starting in Go 1.13.
 
-* Module Mirrors
+## Module Mirrors
 
 Because the decentralized `go` `get` fetches code from multiple origin servers,
 fetching code is only as fast and reliable as the slowest,
@@ -183,7 +184,7 @@
 The Go module design introduces the idea of a module proxy,
 which is a server that the `go` command asks for modules,
 instead of the origin servers.
-One important kind of proxy is a _module_mirror_,
+One important kind of proxy is a _module mirror_,
 which answers requests for modules by fetching them
 from origin servers and then caching them for use in
 future requests.
@@ -210,7 +211,7 @@
 Using an alternate mirror, or no mirror at all, will be trivial
 to configure.
 
-* Module Discovery
+## Module Discovery
 
 Finally, we mentioned earlier that the module index will make it easier to
 build sites like godoc.org.
@@ -219,7 +220,7 @@
 discover available modules
 and then decide whether to rely on a given module or not.
 
-* Big Picture
+## Big Picture
 
 This diagram shows how module source code
 moves through the design in this post.
diff --git a/content/new-talk-and-tutorials.article b/content/new-talk-and-tutorials.article
index 3b74ca2..6eeab6c 100644
--- a/content/new-talk-and-tutorials.article
+++ b/content/new-talk-and-tutorials.article
@@ -1,25 +1,26 @@
-New Talk and Tutorials
+# New Talk and Tutorials
 5 May 2010
+Summary: Rob Pike recently gave a talk at Stanford's [Computer Systems Colloquium](http://www.stanford.edu/class/ee380/) (EE380). Titled [_Another Go at Language Design_](http://www.stanford.edu/class/ee380/Abstracts/100428.html), the presentation gives an overview of the itches Go was built to scratch, and how Go addresses those problems. You can view [a video stream of the talk](https://www.youtube.com/watch?v=7VcArS4Wpqk), and [download the slides](http://www.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf).
 
 Andrew Gerrand
 
-* Introduction
+##
 
-Rob Pike recently gave a talk at Stanford's [[http://www.stanford.edu/class/ee380/][Computer Systems Colloquium]] (EE380).
-Titled [[http://www.stanford.edu/class/ee380/Abstracts/100428.html][_Another_Go_at_Language_Design_]],
+Rob Pike recently gave a talk at Stanford's [Computer Systems Colloquium](http://www.stanford.edu/class/ee380/) (EE380).
+Titled [_Another Go at Language Design_](http://www.stanford.edu/class/ee380/Abstracts/100428.html),
 the presentation gives an overview of the itches Go was built to scratch,
 and how Go addresses those problems.
-You can view [[https://www.youtube.com/watch?v=7VcArS4Wpqk][a video stream of the talk]],
-and [[http://www.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf][download the slides]].
+You can view [a video stream of the talk](https://www.youtube.com/watch?v=7VcArS4Wpqk),
+and [download the slides](http://www.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf).
 
-Last week's release included a code lab, [[https://golang.org/doc/codelab/wiki/][Writing Web Applications]],
+Last week's release included a code lab, [Writing Web Applications](https://golang.org/doc/codelab/wiki/),
 that details the construction of a simple wiki program.
 It is a practical introduction to some fundamental Go concepts,
 and the first of a series of Go code labs.
 
 Lastly, we are often asked "How do Go packages work?" It's easier to show than to explain,
-so I put together a [[http://www.youtube.com/watch?v=jDWBJOXs_iI][Go Packages screen cast]]
+so I put together a [Go Packages screen cast](http://www.youtube.com/watch?v=jDWBJOXs_iI)
 that demonstrates the process of writing,
 building, installing, and redistributing Go packages.
 I hope to post more of these covering a variety of Go programming topics
-to the [[http://youtube.com/gocoding][gocoding YouTube channel]] in the near future.
+to the [gocoding YouTube channel](http://youtube.com/gocoding) in the near future.
diff --git a/content/normalization.article b/content/normalization.article
index 636eac8..0076d62 100644
--- a/content/normalization.article
+++ b/content/normalization.article
@@ -1,27 +1,28 @@
-Text normalization in Go
+# Text normalization in Go
 26 Nov 2013
 Tags: strings, bytes, runes, characters
+Summary: An earlier [post](https://blog.golang.org/strings) talked about strings, bytes and characters in Go. I've been working on various packages for multilingual text processing for the go.text repository. Several of these packages deserve a separate blog post, but today I want to focus on [go.text/unicode/norm](https://godoc.org/code.google.com/p/go.text/unicode/norm), which handles normalization, a topic touched in the [strings article](https://blog.golang.org/strings) and the subject of this post. Normalization works at a higher level of abstraction than raw bytes.
 
 Marcel van Lohuizen
 
-* Introduction
+## Introduction
 
-An earlier [[https://blog.golang.org/strings][post]] talked about strings, bytes
+An earlier [post](https://blog.golang.org/strings) talked about strings, bytes
 and characters in Go. I've been working on various packages for multilingual
 text processing for the go.text repository. Several of these packages deserve a
 separate blog post, but today I want to focus on
-[[https://godoc.org/code.google.com/p/go.text/unicode/norm][go.text/unicode/norm]],
+[go.text/unicode/norm](https://godoc.org/code.google.com/p/go.text/unicode/norm),
 which handles normalization, a topic touched in the
-[[https://blog.golang.org/strings][strings article]] and the subject of this
+[strings article](https://blog.golang.org/strings) and the subject of this
 post. Normalization works at a higher level of abstraction than raw bytes.
 
 To learn pretty much everything you ever wanted to know about normalization
-(and then some), [[http://unicode.org/reports/tr15/][Annex 15 of the Unicode Standard]]
+(and then some), [Annex 15 of the Unicode Standard](http://unicode.org/reports/tr15/)
 is a good read. A more approachable article is the corresponding
-[[http://en.wikipedia.org/wiki/Unicode_equivalence][Wikipedia page]]. Here we
+[Wikipedia page](http://en.wikipedia.org/wiki/Unicode_equivalence). Here we
 focus on how normalization relates to Go.
 
-* What is normalization?
+## What is normalization?
 
 There are often several ways to represent the same string. For example, an é
 (e-acute) can be represented in a string as a single rune ("\u00e9") or an 'e'
@@ -46,12 +47,12 @@
 
 .html normalization/table1.html
 
-* Go's approach to normalization
+## Go's approach to normalization
 
 As mentioned in the strings blog post, Go does not guarantee that characters in
 a string are normalized. However, the go.text packages can compensate. For
 example, the
-[[https://godoc.org/code.google.com/p/go.text/collate][collate]] package, which
+[collate](https://godoc.org/code.google.com/p/go.text/collate) package, which
 can sort strings in a language-specific way, works correctly even with
 unnormalized strings. The packages in go.text do not always require normalized
 input, but in general normalization may be necessary for consistent results.
@@ -59,7 +60,7 @@
 Normalization isn't free but it is fast, particularly for collation and
 searching or if a string is either in NFD or in NFC and can be converted to NFD
 by decomposing without reordering its bytes. In practice,
-[[http://www.macchiato.com/unicode/nfc-faq#TOC-How-much-text-is-already-NFC-][99.98%]] of
+[99.98%](http://www.macchiato.com/unicode/nfc-faq#TOC-How-much-text-is-already-NFC-) of
 the web's HTML page content is in NFC form (not counting markup, in which case
 it would be more). By far most NFC can be decomposed to NFD without the need
 for reordering (which requires allocation). Also, it is efficient to detect
@@ -78,7 +79,7 @@
 Of course, we can also avoid the overhead outright if we know in advance that a
 string is already normalized, which is often the case.
 
-* Why bother?
+## Why bother?
 
 After all this discussion about avoiding normalization, you might ask why it's
 worth worrying about at all. The reason is that there are cases where
@@ -87,7 +88,7 @@
 
 Before discussing those, we must first clarify the concept of 'character'.
 
-* What is a character?
+## What is a character?
 
 As was mentioned in the strings blog post, characters can span multiple runes.
 For example, an 'e' and '◌́' (acute "\u0301") can combine to form 'é' ("e\u0301"
@@ -119,7 +120,7 @@
 adopts this approach for all normalization algorithms. This decision gives up a
 little conformance but gains a little safety.
 
-* Writing in normal form
+## Writing in normal form
 
 Even if you don't need to normalize text within your Go code, you might still
 want to do so when communicating to the outside world. For example, normalizing
@@ -129,7 +130,7 @@
 in and output your text as NFC like the rest of the world.
 
 To write your text as NFC, use the
-[[https://godoc.org/code.google.com/p/go.text/unicode/norm][unicode/norm]] package
+[unicode/norm](https://godoc.org/code.google.com/p/go.text/unicode/norm) package
 to wrap your `io.Writer` of choice:
 
 	wc := norm.NFC.Writer(w)
@@ -144,7 +145,7 @@
 Package norm provides various other methods for normalizing text.
 Pick the one that suits your needs best.
 
-* Catching look-alikes
+## Catching look-alikes
 
 Can you tell the difference between 'K' ("\u004B") and 'K' (Kelvin sign
 "\u212A") or 'Ω' ("\u03a9") and 'Ω' (Ohm sign "\u2126")? It is easy to overlook
@@ -159,7 +160,7 @@
 'o', Greek 'ο', and Cyrillic 'о' are still different characters as defined by
 these forms.
 
-* Correct text modifications
+## Correct text modifications
 
 The norm package might also come to the rescue when one needs to modify text.
 Consider a case where you want to search and replace the word "cafe" with its
@@ -202,14 +203,14 @@
 problems can be avoided by using search functionality that respects character
 boundaries (such as the planned go.text/search package.)
 
-* Iteration
+## Iteration
 
 Another tool provided by the norm package that may help dealing with character
 boundaries is its iterator,
-[[https://godoc.org/code.google.com/p/go.text/unicode/norm#Iter][`norm.Iter`]].
+[`norm.Iter`](https://godoc.org/code.google.com/p/go.text/unicode/norm#Iter).
 It iterates over characters one at a time in the normal form of choice.
 
-* Performing magic
+## Performing magic
 
 As mentioned earlier, most text is in NFC form, where base characters and
 modifiers are combined into a single rune whenever possible.  For the purpose
@@ -240,16 +241,16 @@
 This will, for example, convert any mention of "cafés" in the text to "cafes",
 regardless of the normal form in which the original text was encoded.
 
-* Normalization info
+## Normalization info
 
 As mentioned earlier, some packages precompute normalizations into their tables
 to minimize the need for normalization at run time. The type `norm.Properties`
 provides access to the per-rune information needed by these packages, most
 notably the Canonical Combining Class and decomposition information. Read the
-[[https://godoc.org/code.google.com/p/go.text/unicode/norm/#Properties][documentation]]
+[documentation](https://godoc.org/code.google.com/p/go.text/unicode/norm/#Properties)
 for this type if you want to dig deeper.
 
-* Performance
+## Performance
 
 To give an idea of the performance of normalization, we compare it against the
 performance of strings.ToLower. The sample in the first row is both lowercase
@@ -269,7 +270,7 @@
 we may change the implementation at some point to speed up the common case for
 small strings even further.
 
-* Conclusion
+## Conclusion
 
 If you're dealing with text inside Go, you generally do not have to use the
 unicode/norm package to normalize your text. The package may still be useful
diff --git a/content/open-source.article b/content/open-source.article
index 9ee5324..500f097 100644
--- a/content/open-source.article
+++ b/content/open-source.article
@@ -1,13 +1,14 @@
-Go, Open Source, Community
-08 Jul 2015
+# Go, Open Source, Community
+8 Jul 2015
 Tags: community
+Summary: [This is the text of my opening keynote at Gophercon 2015. [The video is available here](https://www.youtube.com/watch?v=XvZOdpd_9tc).]
 
 Russ Cox
 
-* Welcome
+## Welcome
 
 [This is the text of my opening keynote at Gophercon 2015.
-[[https://www.youtube.com/watch?v=XvZOdpd_9tc][The video is available here]].]
+[The video is available here](https://www.youtube.com/watch?v=XvZOdpd_9tc).]
 
 Thank you all for traveling to Denver to be here,
 and thank you to everyone watching on video.
@@ -33,7 +34,7 @@
 how I see the Go open source project
 evolving.
 
-* Why Go?
+## Why Go?
 
 To get started,
 we have to go back to the beginning.
@@ -96,7 +97,7 @@
 Here are two.
 Last year, on RedMonk.com, Donnie Berkholz
 wrote about
-“[[http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/][Go as the emerging language of cloud infrastructure]],”
+“[Go as the emerging language of cloud infrastructure](http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/),”
 observing that
 “[Go's] marquee projects ... are cloud-centric or otherwise
 made for dealing with distributed systems
@@ -104,13 +105,13 @@
 
 This year, on Texlution.com, the author
 wrote an article titled
-“[[https://texlution.com/post/why-go-is-doomed-to-succeed/][Why Golang is doomed to succeed]],”
+“[Why Golang is doomed to succeed](https://texlution.com/post/why-go-is-doomed-to-succeed/),”
 pointing out that this focus on large-scale development
 was possibly even better suited to open source than
 to Google itself: “This open source fitness is why I think
 you are about to see more and more Go around ...”
 
-* The Go Balance
+## The Go Balance
 
 How does Go accomplish those things?
 
@@ -131,7 +132,7 @@
 Instead, we've tried to do just enough that you can build
 your own custom solutions easily.
 
-The way I would summarize Go's chosen balance is this: *Do*Less.*Enable*More.*
+The way I would summarize Go's chosen balance is this: **Do Less. Enable More.**
 
 Do less, but enable more.
 
@@ -147,7 +148,7 @@
 and ideally can interoperate with
 the solutions and tools built by others.
 
-** Examples
+### Examples
 
 Let me illustrate this with some examples.
 
@@ -351,7 +352,7 @@
 
 I'm going to return to that idea later.
 
-* Why is Go open source?
+## Why is Go open source?
 
 But first, as I said earlier,
 I want to explain how I see
@@ -434,7 +435,7 @@
 while doing less.
 Open source is a huge part of that.
 
-* Go's open source
+## Go's open source
 
 What does open source mean?
 The minimum requirement is to open the source code,
@@ -496,7 +497,7 @@
 earlier:
 Do Less, Enable More.
 
-* Google's role
+## Google's role
 
 A natural question is:
 What is the role
@@ -628,7 +629,7 @@
 Everyone contributing to Go
 should have the opportunity to be heard.
 
-** Examples
+### Examples
 
 I want to share some evidence for this claim
 that, over time,
@@ -861,7 +862,7 @@
 
 This brings me to my last point.
 
-* Code of Conduct
+## Code of Conduct
 
 I've argued that Go must be open,
 and that Go needs your help.
@@ -1069,7 +1070,7 @@
 We need all the help we can get.
 We need a large, diverse Go community.
 
-* Thank You
+## Thank You
 
 I consider the many people
 releasing software for download using “go get,”
diff --git a/content/organizing-go-code.article b/content/organizing-go-code.article
index 5be76a0..ff87bf4 100644
--- a/content/organizing-go-code.article
+++ b/content/organizing-go-code.article
@@ -1,22 +1,23 @@
-Organizing Go code
+# Organizing Go code
 16 Aug 2012
 Tags: godoc, gopath, interface, libraries, tools, technical
+Summary: Go code is organized differently to that of other languages. This post discusses how to name and package the elements of your Go program to best serve its users.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 Go code is organized differently to that of other languages.
 This post discusses how to name and package the elements of your Go program
 to best serve its users.
 
-* Choose good names
+## Choose good names
 
 The names you choose affect how you think about your code,
 so take care when naming your package and its exported identifiers.
 
 A package's name provides context for its contents.
-For instance, the [[https://golang.org/pkg/bytes/][bytes package]] from
+For instance, the [bytes package](https://golang.org/pkg/bytes/) from
 the standard library exports the `Buffer` type.
 On its own, the name `Buffer` isn't very descriptive,
 but when combined with its package name its meaning becomes clear: `bytes.Buffer`.
@@ -27,7 +28,7 @@
 As you spend time with your program you will better understand how its pieces fit together and,
 therefore, what their names should be.
 There's no need to lock yourself into early decisions.
-(The [[https://golang.org/cmd/gofmt/][gofmt command]] has a `-r` flag that
+(The [gofmt command](https://golang.org/cmd/gofmt/) has a `-r` flag that
 provides a syntax-aware search and replace,
 making large-scale refactoring easier.)
 
@@ -36,7 +37,7 @@
 A well-chosen name is therefore the starting point for good documentation.
 Many of the following practices result organically from good naming.
 
-* Choose a good import path (make your package "go get"-able)
+## Choose a good import path (make your package "go get"-able)
 
 An import path is the string with which users import a package.
 It specifies the directory (relative to `$GOROOT/src/pkg` or `$GOPATH/src`)
@@ -48,7 +49,7 @@
 The Go project owns the path `"github.com/golang"`,
 so that path cannot be used by another author for a different package.
 Because the repository URL and import path are one and the same,
-the `go`get` command can fetch and install the package automatically.
+the `go get` command can fetch and install the package automatically.
 
 If you don't use a hosted source repository,
 choose some unique prefix such as a domain,
@@ -68,10 +69,10 @@
 such as `"src/my/package"`.
 On one hand, this keeps the import paths short (`"my/package"` instead of
 `"github.com/me/project/my/package"`),
-but on the other it breaks `go`get` and forces users to re-set their `GOPATH`
+but on the other it breaks `go get` and forces users to re-set their `GOPATH`
 to use the package. Don't do this.
 
-* Minimize the exported interface
+## Minimize the exported interface
 
 Your code is likely composed of many small pieces of useful code,
 and so it is tempting to expose much of that functionality in your package's
@@ -88,7 +89,7 @@
 
 If in doubt, leave it out!
 
-* What to put into a package
+## What to put into a package
 
 It is easy to just throw everything into a "grab bag" package,
 but this dilutes the meaning of the package name (as it must encompass a
@@ -102,9 +103,9 @@
 
 Look to the Go standard libraries as a guide.
 Some of its packages are large and some are small.
-For instance, the [[https://golang.org/pkg/net/http/][http package]] comprises
+For instance, the [http package](https://golang.org/pkg/net/http/) comprises
 17 go source files (excluding tests) and exports 109 identifiers,
-and the [[https://golang.org/pkg/hash/][hash package]] consists of one file
+and the [hash package](https://golang.org/pkg/hash/) consists of one file
 that exports just three declarations.
 There is no hard and fast rule; both approaches are appropriate given their context.
 
@@ -112,10 +113,10 @@
 Complex commands contain a lot of code that is of little use outside the
 context of the executable,
 and often it's simpler to just keep it all in the one place.
-For instance, the go tool is more than 12000 lines spread across [[https://golang.org/src/cmd/go/][34 files]].
+For instance, the go tool is more than 12000 lines spread across [34 files](https://golang.org/src/cmd/go/).
 
-* Document your code
+## Document your code
 
 Good documentation is an essential quality of usable and maintainable code.
-Read the [[https://golang.org/doc/articles/godoc_documenting_go_code.html][Godoc: documenting Go code]]
+Read the [Godoc: documenting Go code](https://golang.org/doc/articles/godoc_documenting_go_code.html)
 article to learn how to write good doc comments.
diff --git a/content/oscon.article b/content/oscon.article
index 8e929f8..00b705b 100644
--- a/content/oscon.article
+++ b/content/oscon.article
@@ -1,47 +1,48 @@
-Go will be at OSCON 2014
+# Go will be at OSCON 2014
 15 Jul 2014
 Tags: conference, oscon
+Summary: [OSCON](http://www.oscon.com), the Open Source Convention, is taking place from July 20th to the 29th in Portland, Oregon and Go will be central to many talks. If you are attending make sure you add these to your personal schedule.
 
 Francesc Campoy
 
-* Go will be at OSCON 2014
+##
 
-[[http://www.oscon.com][OSCON]], the Open Source Convention, is taking place
+[OSCON](http://www.oscon.com), the Open Source Convention, is taking place
 from July 20th to the 29th in Portland, Oregon and Go will be central to many
 talks. If you are attending make sure you add these to your personal schedule.
 
 On Monday you'll have the chance to learn Go in these two tutorials:
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34395][Getting Started with Go]]
-  by [[http://twitter.com/spf13][Steve Francia]] (MongoDB) at 9:00am on Monday, 07/21/2014
+  - [Getting Started with Go](http://www.oscon.com/oscon2014/public/schedule/detail/34395)
+    by [Steve Francia](http://twitter.com/spf13) (MongoDB) at 9:00am on Monday, 07/21/2014
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34267][A Quick Introduction to System Tools Programming with Go]]
-  by [[http://twitter.com/macmceniry][Chris McEniry]] (Sony Network Entertainment)
-  at 1:30pm on Monday, 07/21/2014
+  - [A Quick Introduction to System Tools Programming with Go](http://www.oscon.com/oscon2014/public/schedule/detail/34267)
+    by [Chris McEniry](http://twitter.com/macmceniry) (Sony Network Entertainment)
+    at 1:30pm on Monday, 07/21/2014
 
 During the rest of the week you can hear how different projects use Go:
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34371][A Recovering Java Developer Learns to Go]]
-  by [[http://twitter.com/mstine][Matt Stine]] (Pivotal) at 1:40pm on Tuesday, 07/22/2014
+  - [A Recovering Java Developer Learns to Go](http://www.oscon.com/oscon2014/public/schedule/detail/34371)
+    by [Matt Stine](http://twitter.com/mstine) (Pivotal) at 1:40pm on Tuesday, 07/22/2014
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34299][Painless Data Storage with MongoDB and Go]]
-  by [[http://twitter.com/spf13][Steve Francia]] (MongoDB) and [[http://twitter.com/gniemeyer][Gustavo Niemeyer]]
-  (Canonical) at 1:40pm on Tuesday, 07/22/2014
+  - [Painless Data Storage with MongoDB and Go](http://www.oscon.com/oscon2014/public/schedule/detail/34299)
+    by [Steve Francia](http://twitter.com/spf13) (MongoDB) and [Gustavo Niemeyer](http://twitter.com/gniemeyer)
+    (Canonical) at 1:40pm on Tuesday, 07/22/2014
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/37795][Gophers with Hammers: Fun with Parsing and Generating Go]]
-  by [[http://twitter.com/offbymany][Josh Bleecher Snyder]] (PayPal) at 2:30pm
-  on Tuesday, 07/22/2014
+  - [Gophers with Hammers: Fun with Parsing and Generating Go](http://www.oscon.com/oscon2014/public/schedule/detail/37795)
+    by [Josh Bleecher Snyder](http://twitter.com/offbymany) (PayPal) at 2:30pm
+    on Tuesday, 07/22/2014
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34047][Go for Object Oriented Programmers (or OO Programming without Objects)]]
-  by [[http://twitter.com/spf13][Steve Francia]] (MongoDB) at 4:10pm on
-  Wednesday, 07/23/2014
+  - [Go for Object Oriented Programmers (or OO Programming without Objects)](http://www.oscon.com/oscon2014/public/schedule/detail/34047)
+    by [Steve Francia](http://twitter.com/spf13) (MongoDB) at 4:10pm on
+    Wednesday, 07/23/2014
 
-- [[http://www.oscon.com/oscon2014/public/schedule/detail/34509][Inside the Go Tour]]
-  by [[http://twitter.com/francesc][Francesc Campoy Flores]] (Google Inc.)
-  at 11:50am on Thursday, 07/24/2014
+  - [Inside the Go Tour](http://www.oscon.com/oscon2014/public/schedule/detail/34509)
+    by [Francesc Campoy Flores](http://twitter.com/francesc) (Google Inc.)
+    at 11:50am on Thursday, 07/24/2014
 
 And if you have any questions come to the
-[[http://www.oscon.com/oscon2014/public/schedule/detail/37075][Go office hours]]
+[Go office hours](http://www.oscon.com/oscon2014/public/schedule/detail/37075)
 on Wednesday or come anytime by the Google booth.
 
 See you at OSCON!
diff --git a/content/osconreport.article b/content/osconreport.article
index 70b6fab..dfaf438 100644
--- a/content/osconreport.article
+++ b/content/osconreport.article
@@ -1,71 +1,72 @@
-Go at OSCON
+# Go at OSCON
 20 Aug 2014
 Tags: conference, oscon
+Summary: What happens in Portland in July? [OSCON](http://www.oscon.com/oscon2014)! At this year's conference, Go was more present than ever before, with five talks, two workshops, a [Birds of a Feather](http://en.wikipedia.org/wiki/Birds_of_a_feather_(computing)) session, and a meetup.
 
 Francesc Campoy
 
-* Introduction
+## Introduction
 
-What happens in Portland in July? [[http://www.oscon.com/oscon2014][OSCON]]! At
+What happens in Portland in July? [OSCON](http://www.oscon.com/oscon2014)! At
 this year's conference, Go was more present than ever before, with five talks,
 two workshops, a
-[[http://en.wikipedia.org/wiki/Birds_of_a_feather_(computing)][Birds of a Feather]]
+[Birds of a Feather](http://en.wikipedia.org/wiki/Birds_of_a_feather_(computing))
 session, and a meetup.
 
-* Talks
+## Talks
 
-[[http://twitter.com/mstine][Matt Stine]] talked about his experience switching
+[Matt Stine](http://twitter.com/mstine) talked about his experience switching
 from Java to Go with
-[[http://www.slideshare.net/mstine/java-devlearnstogooscon][A recovering Java developer learns Go]]
-while [[https://twitter.com/spf13][Steve Francia]] presented
-[[http://spf13.com/presentation/MongoDB-and-Go][Painless Data Storage with MongoDB and Go]].
+[A recovering Java developer learns Go](http://www.slideshare.net/mstine/java-devlearnstogooscon)
+while [Steve Francia](https://twitter.com/spf13) presented
+[Painless Data Storage with MongoDB and Go](http://spf13.com/presentation/MongoDB-and-Go).
 Steve also presented
-[[http://spf13.com/presentation/go-for-object-oriented-programmers][Go for Object Oriented Programmers]],
+[Go for Object Oriented Programmers](http://spf13.com/presentation/go-for-object-oriented-programmers),
 where he explained how some object oriented concepts can be implemented in Go.
 
 .image osconreport/talks.png _ 800
 
-Finally, [[http://twitter.com/offbymany][Josh Bleecher Snyder]] talked about his
+Finally, [Josh Bleecher Snyder](http://twitter.com/offbymany) talked about his
 experience writing tools to work with Go source code in
-[[https://talks.golang.org/2014/hammers.slide#1][Gophers with hammers]],
-and [[http://twitter.com/francesc][Francesc Campoy]] talked about all the things
+[Gophers with hammers](https://talks.golang.org/2014/hammers.slide#1),
+and [Francesc Campoy](http://twitter.com/francesc) talked about all the things
 that could have gone wrong and what the Go team did to prevent them
-[[https://talks.golang.org/2014/playground.slide][Inside the Go playground]].
+[Inside the Go playground](https://talks.golang.org/2014/playground.slide).
 
-* Workshops
+## Workshops
 
 At the beginning of OSCON's workshop day, Steve Francia presented how to build a
 web application and a CLI tool during
-[[http://spf13.com/presentation/first-go-app][Getting started with Go]] to a big
+[Getting started with Go](http://spf13.com/presentation/first-go-app) to a big
 room full of Gophers.
 
 .image osconreport/workshops.png _ 800
 
-In the afternoon, [[https://twitter.com/mmceniry][Chris McEniry]] gave his
-[[http://cdn.oreillystatic.com/en/assets/1/event/115/A%20Quick%20Introduction%20to%20System%20Tools%20Programming%20with%20Go%20Presentation.pdf][Quick introduction to system tools programming with Go]] where he went over some useful skills to
+In the afternoon, [Chris McEniry](https://twitter.com/mmceniry) gave his
+[Quick introduction to system tools programming with Go](http://cdn.oreillystatic.com/en/assets/1/event/115/A%20Quick%20Introduction%20to%20System%20Tools%20Programming%20with%20Go%20Presentation.pdf) where he went over some useful skills to
 write system tools using Go and its standard library.
 
-* Additional events
+## Additional events
 
 To take advantage of the increased Gopher population in Portland during OSCON, we
-organized two extra events: the first [[https://twitter.com/pdxgolang][PDXGolang]]
+organized two extra events: the first [PDXGolang](https://twitter.com/pdxgolang)
 meetup and a
-[[http://www.oscon.com/oscon2014/public/schedule/detail/37775][Birds of a Feather session]].
+[Birds of a Feather session](http://www.oscon.com/oscon2014/public/schedule/detail/37775).
 
 .image osconreport/meetup.png _ 800
 
 At the meetup Francesc Campoy talked about
-[[https://talks.golang.org/2013/bestpractices.slide][Go Best Practices]] and
-[[https://twitter.com/kelseyhightower][Kelsey Hightower]] gave a great
-introduction to [[https://github.com/GoogleCloudPlatform/kubernetes][Kubernetes]],
+[Go Best Practices](https://talks.golang.org/2013/bestpractices.slide) and
+[Kelsey Hightower](https://twitter.com/kelseyhightower) gave a great
+introduction to [Kubernetes](https://github.com/GoogleCloudPlatform/kubernetes),
 a container management system for clusters written in Go by Google. If you live
-in Portland, make sure you [[http://meetup.com/pdx-go][join the group]] and come
+in Portland, make sure you [join the group](http://meetup.com/pdx-go) and come
 along to the next meeting.
 
 The "Birds of a Feather" (or, more aptly, "Gophers of a Feather") was a lot of
 fun for everyone involved. We hope to see more of you there next year.
 
-* In conclusion
+## In conclusion
 
 .image osconreport/random.png _ 800
 
diff --git a/content/package-names.article b/content/package-names.article
index 2cd74d1..bf92642 100644
--- a/content/package-names.article
+++ b/content/package-names.article
@@ -1,10 +1,11 @@
-Package names
+# Package names
 4 Feb 2015
 Tags: package, names, style
+Summary: Go code is organized into packages. Within a package, code can refer to any identifier (name) defined within, while clients of the package may only reference the package's exported types, functions, constants, and variables. Such references always include the package name as a prefix: `foo.Bar` refers to the exported name `Bar` in the imported package named `foo`.
 
 Sameer Ajmani
 
-* Introduction
+## Introduction
 
 Go code is organized into packages.
 Within a package, code can refer to any identifier (name) defined within, while
@@ -21,66 +22,66 @@
 Well-named packages make it easier to find the code you need.
 
 Effective Go provides
-[[https://golang.org/doc/effective_go.html#names][guidelines]] for naming
+[guidelines](https://golang.org/doc/effective_go.html#names) for naming
 packages, types, functions, and variables.
 This article expands on that discussion and surveys names found in the standard
 library.
 It also discusses bad package names and how to fix them.
 
-* Package names
+## Package names
 
 Good package names are short and clear.
 They are lower case, with no `under_scores` or `mixedCaps`.
 They are often simple nouns, such as:
 
-- `time` (provides functionality for measuring and displaying time)
-- `list` (implements a doubly linked list)
-- `http` (provides HTTP client and server implementations)
+  - `time` (provides functionality for measuring and displaying time)
+  - `list` (implements a doubly linked list)
+  - `http` (provides HTTP client and server implementations)
 
 The style of names typical of another language might not be idiomatic in a Go
 program.
 Here are two examples of names that might be good style in other languages but
 do not fit well in Go:
 
-- `computeServiceClient`
-- `priority_queue`
+  - `computeServiceClient`
+  - `priority_queue`
 
 A Go package may export several types and functions.
 For example, a `compute` package could export a `Client` type with methods for
 using the service as well as functions for partitioning a compute task across
 several clients.
 
-*Abbreviate*judiciously.*
+**Abbreviate judiciously.**
 Package names may be abbreviated when the abbreviation is familiar to the
 programmer.
 Widely-used packages often have compressed names:
 
-- `strconv` (string conversion)
-- `syscall` (system call)
-- `fmt` (formatted I/O)
+  - `strconv` (string conversion)
+  - `syscall` (system call)
+  - `fmt` (formatted I/O)
 
 On the other hand, if abbreviating a package name makes it ambiguous or unclear,
 don't do it.
 
-*Don't*steal*good*names*from*the*user.*
+**Don't steal good names from the user.**
 Avoid giving a package a name that is commonly used in client code.
 For example, the buffered I/O package is called `bufio`, not `buf`, since `buf`
 is a good variable name for a buffer.
 
-* Naming package contents
+## Naming package contents
 
 A package name and its contents' names are coupled, since client code uses them
 together.
 When designing a package, take the client's point of view.
 
-*Avoid*stutter.*
+**Avoid stutter.**
 Since client code uses the package name as a prefix when referring to the
 package contents, the names for those contents need not repeat the package name.
 The HTTP server provided by the `http` package is called `Server`, not
 `HTTPServer`.
 Client code refers to this type as `http.Server`, so there is no ambiguity.
 
-*Simplify*function*names.*
+**Simplify function names.**
 When a function in package pkg returns a value of type `pkg.Pkg` (or
 `*pkg.Pkg`), the function name can often omit the type name without confusion:
 
@@ -116,7 +117,7 @@
 This approach will yield packages that are easier for clients to understand and
 for the package developers to maintain.
 
-* Package paths
+## Package paths
 
 A Go package has both a name and a path.
 The package name is specified in the package statement of its source files;
@@ -132,13 +133,13 @@
 	)
 
 Build tools map package paths onto directories.
-The go tool uses the [[https://golang.org/doc/code.html#GOPATH][GOPATH]]
+The go tool uses the [GOPATH](https://golang.org/doc/code.html#GOPATH)
 environment variable to find the source files for path `"github.com/user/hello"`
 in directory `$GOPATH/src/github.com/user/hello`.
 (This situation should be familiar, of course, but it's important to be clear
 about the terminology and structure of packages.)
 
-*Directories.*
+**Directories.**
 The standard library uses like directories `crypto`, `container`, `encoding`,
 and `image` to group packages for related protocols and algorithms.
 There is no actual relationship among the packages in one of these directories;
@@ -149,23 +150,23 @@
 Just as types in different packages can have the same name without ambiguity,
 packages in different directories can have the same name.
 For example,
-[[https://golang.org/pkg/runtime/pprof][runtime/pprof]] provides profiling data
-in the format expected by the [[https://github.com/google/pprof][pprof]]
-profiling tool, while [[https://golang.org/pkg/net/http/pprof][net/http/pprof]]
+[runtime/pprof](https://golang.org/pkg/runtime/pprof) provides profiling data
+in the format expected by the [pprof](https://github.com/google/pprof)
+profiling tool, while [net/http/pprof](https://golang.org/pkg/net/http/pprof)
 provides HTTP endpoints to present profiling data in this format.
 Client code uses the package path to import the package, so there is no
 confusion.
 If a source file needs to import both `pprof` packages, it can
-[[https://golang.org/ref/spec#Import_declarations][rename]] one or both locally.
+[rename](https://golang.org/ref/spec#Import_declarations) one or both locally.
 When renaming an imported package, the local name should follow the same
 guidelines as package names (lower case, no `under_scores` or `mixedCaps`).
 
-* Bad package names
+## Bad package names
 
 Bad package names make code harder to navigate and maintain.
 Here are some guidelines for recognizing and fixing bad names.
 
-*Avoid*meaningless*package*names.*
+**Avoid meaningless package names.**
 Packages named `util`, `common`, or `misc` provide clients with no sense of what
 the package contains.
 This makes it harder for clients to use the package and makes it harder for
@@ -176,7 +177,7 @@
 other packages imported by client code, forcing clients to invent names to
 distinguish them.
 
-*Break*up*generic*packages.*
+**Break up generic packages.**
 To fix such packages, look for types and functions with common name elements and
 pull them into their own package.
 For example, if you have
@@ -217,7 +218,7 @@
 The name of the package is a critical piece of its design.
 Work to eliminate meaningless package names from your projects.
 
-*Don't*use*a*single*package*for*all*your*APIs.*
+**Don't use a single package for all your APIs.**
 Many well-intentioned programmers put all the interfaces exposed by their
 program into a single package named `api`, `types`, or `interfaces`, thinking it
 makes it easier to find the entry points to their code base.
@@ -228,23 +229,23 @@
 Break them up, perhaps using directories to separate public packages from
 implementation.
 
-*Avoid*unnecessary*package*name*collisions.*
+**Avoid unnecessary package name collisions.**
 While packages in different directories may have the same name, packages that
 are frequently used together should have distinct names.
 This reduces confusion and the need for local renaming in client code.
 For the same reason, avoid using the same name as popular standard packages like
 `io` or `http`.
 
-* Conclusion
+## Conclusion
 
 Package names are central to good naming in Go programs.
 Take the time to choose good package names and organize your code well.
 This helps clients understand and use your packages and helps maintainers to
 grow them gracefully.
 
-* Further reading
+## Further reading
 
-- [[https://golang.org/doc/effective_go.html][Effective Go]]
-- [[https://golang.org/doc/code.html][How to Write Go Code]]
-- [[https://blog.golang.org/organizing-go-code][Organizing Go Code (2012 blog post)]]
-- [[https://talks.golang.org/2014/organizeio.slide][Organizing Go Code (2014 Google I/O talk)]]
+  - [Effective Go](https://golang.org/doc/effective_go.html)
+  - [How to Write Go Code](https://golang.org/doc/code.html)
+  - [Organizing Go Code (2012 blog post)](https://blog.golang.org/organizing-go-code)
+  - [Organizing Go Code (2014 Google I/O talk)](https://talks.golang.org/2014/organizeio.slide)
diff --git a/content/pipelines.article b/content/pipelines.article
index 194b26c..f2fe186 100644
--- a/content/pipelines.article
+++ b/content/pipelines.article
@@ -1,26 +1,27 @@
-Go Concurrency Patterns: Pipelines and cancellation
+# Go Concurrency Patterns: Pipelines and cancellation
 13 Mar 2014
 Tags: concurrency, pipelines, cancellation
+Summary: Go's concurrency primitives make it easy to construct streaming data pipelines that make efficient use of I/O and multiple CPUs.  This article presents examples of such pipelines, highlights subtleties that arise when operations fail, and introduces techniques for dealing with failures cleanly.
 
 Sameer Ajmani
 
-* Introduction
+## Introduction
 
 Go's concurrency primitives make it easy to construct streaming data pipelines
 that make efficient use of I/O and multiple CPUs.  This article presents
 examples of such pipelines, highlights subtleties that arise when operations
 fail, and introduces techniques for dealing with failures cleanly.
 
-* What is a pipeline?
+## What is a pipeline?
 
 There's no formal definition of a pipeline in Go; it's just one of many kinds of
 concurrent programs.  Informally, a pipeline is a series of _stages_ connected
 by channels, where each stage is a group of goroutines running the same
 function.  In each stage, the goroutines
 
-- receive values from _upstream_ via _inbound_ channels
-- perform some function on that data, usually producing new values
-- send values _downstream_ via _outbound_ channels
+  - receive values from _upstream_ via _inbound_ channels
+  - perform some function on that data, usually producing new values
+  - send values _downstream_ via _outbound_ channels
 
 Each stage has any number of inbound and outbound channels, except the
 first and last stages, which have only outbound or inbound channels,
@@ -30,7 +31,7 @@
 We'll begin with a simple example pipeline to explain the ideas and techniques.
 Later, we'll present a more realistic example.
 
-* Squaring numbers
+## Squaring numbers
 
 Consider a pipeline with three stages.
 
@@ -59,7 +60,7 @@
 
 .code pipelines/square2.go /func main/,/^}/
 
-* Fan-out, fan-in
+## Fan-out, fan-in
 
 Multiple functions can read from the same channel until that channel is closed;
 this is called _fan-out_. This provides a way to distribute work amongst a group
@@ -83,17 +84,17 @@
 
 Sends on a closed channel panic, so it's important to ensure all sends
 are done before calling close.  The
-[[https://golang.org/pkg/sync/#WaitGroup][`sync.WaitGroup`]] type
+[`sync.WaitGroup`](https://golang.org/pkg/sync/#WaitGroup) type
 provides a simple way to arrange this synchronization:
 
 .code pipelines/sqfan.go /func merge/,/^}/
 
-* Stopping short
+## Stopping short
 
 There is a pattern to our pipeline functions:
 
-- stages close their outbound channels when all the send operations are done.
-- stages keep receiving values from inbound channels until those channels are closed.
+  - stages close their outbound channels when all the send operations are done.
+  - stages keep receiving values from inbound channels until those channels are closed.
 
 This pattern allows each receiving stage to be written as a `range` loop and
 ensures that all goroutines exit once all values have been successfully sent
@@ -147,7 +148,7 @@
 Instead, we need to provide a way for downstream stages to indicate to the
 senders that they will stop accepting input.
 
-* Explicit cancellation
+## Explicit cancellation
 
 When `main` decides to exit without receiving all the values from
 `out`, it must tell the goroutines in the upstream stages to abandon
@@ -174,7 +175,7 @@
 We need a way to tell an unknown and unbounded number of goroutines to
 stop sending their values downstream.  In Go, we can do this by
 closing a channel, because
-[[https://golang.org/ref/spec#Receive_operator][a receive operation on a closed channel can always proceed immediately, yielding the element type's zero value.]]
+[a receive operation on a closed channel can always proceed immediately, yielding the element type's zero value.](https://golang.org/ref/spec#Receive_operator)
 
 This means that `main` can unblock all the senders simply by closing
 the `done` channel.  This close is effectively a broadcast signal to
@@ -200,14 +201,14 @@
 
 Here are the guidelines for pipeline construction:
 
-- stages close their outbound channels when all the send operations are done.
-- stages keep receiving values from inbound channels until those channels are closed or the senders are unblocked.
+  - stages close their outbound channels when all the send operations are done.
+  - stages keep receiving values from inbound channels until those channels are closed or the senders are unblocked.
 
 Pipelines unblock senders either by ensuring there's enough buffer for all the
 values that are sent or by explicitly signalling senders when the receiver may
 abandon the channel.
 
-* Digesting a tree
+## Digesting a tree
 
 Let's consider a more realistic pipeline.
 
@@ -234,14 +235,14 @@
 .code pipelines/serial.go /func main/,/^}/
 
 The `MD5All` function is the focus of our discussion.  In
-[[pipelines/serial.go][serial.go]], the implementation uses no concurrency and
+[serial.go](pipelines/serial.go), the implementation uses no concurrency and
 simply reads and sums each file as it walks the tree.
 
 .code pipelines/serial.go /MD5All/,/^}/
 
-* Parallel digestion
+## Parallel digestion
 
-In [[pipelines/parallel.go][parallel.go]], we split `MD5All` into a two-stage
+In [parallel.go](pipelines/parallel.go), we split `MD5All` into a two-stage
 pipeline.  The first stage, `sumFiles`, walks the tree, digests each file in
 a new goroutine, and sends the results on a channel with value type `result`:
 
@@ -259,14 +260,14 @@
 
 .code pipelines/parallel.go /func MD5All/,/^}/  HLdone
 
-* Bounded parallelism
+## Bounded parallelism
 
-The `MD5All` implementation in [[pipelines/parallel.go][parallel.go]]
+The `MD5All` implementation in [parallel.go](pipelines/parallel.go)
 starts a new goroutine for each file. In a directory with many large
 files, this may allocate more memory than is available on the machine.
 
 We can limit these allocations by bounding the number of files read in
-parallel.  In [[pipelines/bounded.go][bounded.go]], we do this by
+parallel.  In [bounded.go](pipelines/bounded.go), we do this by
 creating a fixed number of goroutines for reading files.  Our pipeline
 now has three stages: walk the tree, read and digest the files, and
 collect the digests.
@@ -296,7 +297,7 @@
 
 .code pipelines/bounded.go /m := make/,/^}/ HLerrc
 
-* Conclusion
+## Conclusion
 
 This article has presented techniques for constructing streaming data pipelines
 in Go.  Dealing with failures in such pipelines is tricky, since each stage in
@@ -307,12 +308,12 @@
 
 Further reading:
 
-- [[https://talks.golang.org/2012/concurrency.slide#1][Go Concurrency Patterns]]
-  ([[https://www.youtube.com/watch?v=f6kdp27TYZs][video]]) presents the basics
-  of Go's concurrency primitives and several ways to apply them.
-- [[https://blog.golang.org/advanced-go-concurrency-patterns][Advanced Go Concurrency Patterns]]
-  ([[http://www.youtube.com/watch?v=QDDwwePbDtw][video]]) covers more complex
-  uses of Go's primitives,
-  especially `select`.
-- Douglas McIlroy's paper [[https://swtch.com/~rsc/thread/squint.pdf][Squinting at Power Series]]
-  shows how Go-like concurrency provides elegant support for complex calculations.
+  - [Go Concurrency Patterns](https://talks.golang.org/2012/concurrency.slide#1)
+    ([video](https://www.youtube.com/watch?v=f6kdp27TYZs)) presents the basics
+    of Go's concurrency primitives and several ways to apply them.
+  - [Advanced Go Concurrency Patterns](https://blog.golang.org/advanced-go-concurrency-patterns)
+    ([video](http://www.youtube.com/watch?v=QDDwwePbDtw)) covers more complex
+    uses of Go's primitives,
+    especially `select`.
+  - Douglas McIlroy's paper [Squinting at Power Series](https://swtch.com/~rsc/thread/squint.pdf)
+    shows how Go-like concurrency provides elegant support for complex calculations.
diff --git a/content/pkg.go.dev-2020.article b/content/pkg.go.dev-2020.article
index 06e9a4b..7399cb1 100644
--- a/content/pkg.go.dev-2020.article
+++ b/content/pkg.go.dev-2020.article
@@ -1,104 +1,105 @@
-Next steps for pkg.go.dev
+# Next steps for pkg.go.dev
 31 Jan 2020
+Summary: In 2019, we launched [go.dev](https://go.dev), a new hub for Go developers.
 
 Julie Qiu
 julie@golang.org
 
-* Introduction
+## Introduction
 
-In 2019, we launched [[https://go.dev][go.dev]], a new hub for Go
+In 2019, we launched [go.dev](https://go.dev), a new hub for Go
 developers.
 
-As part of the site, we also launched [[https://pkg.go.dev][pkg.go.dev]], a
+As part of the site, we also launched [pkg.go.dev](https://pkg.go.dev), a
 central source of information about Go packages and modules. Like
-[[https://godoc.org][godoc.org]], pkg.go.dev serves Go
+[godoc.org](https://godoc.org), pkg.go.dev serves Go
 documentation. However, it also understands modules and has information about
 past versions of a package!
 
 Throughout this year, we will be adding features to
-[[https://pkg.go.dev][pkg.go.dev]] to help our users better understand their
+[pkg.go.dev](https://pkg.go.dev) to help our users better understand their
 dependencies and help them make better decisions around what libraries to
 import.
 
-* Redirecting godoc.org requests to pkg.go.dev
+## Redirecting godoc.org requests to pkg.go.dev
 
 To minimize confusion about which site to use, later this year we are planning
-to redirect traffic from [[https://godoc.org][godoc.org]] to the corresponding
-page on [[https://pkg.go.dev][pkg.go.dev]]. We need your help to ensure that
+to redirect traffic from [godoc.org](https://godoc.org) to the corresponding
+page on [pkg.go.dev](https://pkg.go.dev). We need your help to ensure that
 pkg.go.dev addresses all of our users' needs. We encourage everyone to begin
 using pkg.go.dev today for all of their needs and provide feedback.
 
 Your feedback will inform our transition plan, with the goal of making
-[[https://pkg.go.dev][pkg.go.dev]] our primary source of information and
+[pkg.go.dev](https://pkg.go.dev) our primary source of information and
 documentation for packages and modules. We’re sure there are things that you
 want to see on pkg.go.dev, and we want to hear from you
 about what those features are!
 
 You can share your feedback with us on these channels:
 
-- Post on the [[https://golang.org/s/discovery-feedback][Go issue tracker]].
-- Email [[mailto:go-discovery-feedback@google.com][go-discovery-feedback@google.com]].
-- Click “Share Feedback” or “Report an Issue” in the go.dev footer.
+  - Post on the [Go issue tracker](https://golang.org/s/discovery-feedback).
+  - Email [go-discovery-feedback@google.com](mailto:go-discovery-feedback@google.com).
+  - Click “Share Feedback” or “Report an Issue” in the go.dev footer.
 
 As part of this transition, we will also be discussing plans for API access to
-[[https://pkg.go.dev][pkg.go.dev]]. We will be posting updates on
-[[https://golang.org/s/discovery-updates][Go issue 33654]].
+[pkg.go.dev](https://pkg.go.dev). We will be posting updates on
+[Go issue 33654](https://golang.org/s/discovery-updates).
 
-* Frequently asked questions
+## Frequently asked questions
 
 Since our launch in November, we’ve received tons of great feedback about
-[[https://pkg.go.dev][pkg.go.dev]] from Go users. For the remainder of this post, we thought it would
+[pkg.go.dev](https://pkg.go.dev) from Go users. For the remainder of this post, we thought it would
 be helpful to answer some frequently asked questions.
 
-** My package doesn’t show up on pkg.go.dev! How do I add it?
+### My package doesn’t show up on pkg.go.dev! How do I add it?
 
-We monitor the [[https://index.golang.org/index][Go Module Index]] regularly for
-new packages to add to [[https://pkg.go.dev][pkg.go.dev]]. If you don’t see a
+We monitor the [Go Module Index](https://index.golang.org/index) regularly for
+new packages to add to [pkg.go.dev](https://pkg.go.dev). If you don’t see a
 package on pkg.go.dev, you can add it by fetching the module version from
-[[https://proxy.golang.org][proxy.golang.org]]. See
-[[https://go.dev/about][go.dev/about]] for instructions.
+[proxy.golang.org](https://proxy.golang.org). See
+[go.dev/about](https://go.dev/about) for instructions.
 
-** My package has license restrictions. What’s wrong with it?
+### My package has license restrictions. What’s wrong with it?
 
 We understand it can be a frustrating experience to not be able to see the
-package you want in its entirety on [[https://pkg.go.dev][pkg.go.dev]]. We
+package you want in its entirety on [pkg.go.dev](https://pkg.go.dev). We
 appreciate your patience as we improve our license detection algorithm.
 
 Since our launch in November, we've made the following improvements:
 
-- Updated our [[https://pkg.go.dev/license-policy][license policy]] to include the list of licenses that we detect and recognize
-- Worked with the [[https://github.com/google/licensecheck][licensecheck]] team to improve detection for copyright notices
-- Established a manual review process for special cases
+  - Updated our [license policy](https://pkg.go.dev/license-policy) to include the list of licenses that we detect and recognize
+  - Worked with the [licensecheck](https://github.com/google/licensecheck) team to improve detection for copyright notices
+  - Established a manual review process for special cases
 
 As always, our license policy is at
-[[https://pkg.go.dev/license-policy][pkg.go.dev/license-policy]]. If you are
-having issues, feel free to [[https://golang.org/s/discovery-feedback][file an issue on the Go issue tracker]], or email
-[[mailto:go-discovery-feedback@google.com][go-discovery-feedback@google.com]]
+[pkg.go.dev/license-policy](https://pkg.go.dev/license-policy). If you are
+having issues, feel free to [file an issue on the Go issue tracker](https://golang.org/s/discovery-feedback), or email
+[go-discovery-feedback@google.com](mailto:go-discovery-feedback@google.com)
 so that we can work with you directly!
 
-** Will pkg.go.dev be open-sourced so I can run it at work for my private code?
+### Will pkg.go.dev be open-sourced so I can run it at work for my private code?
 
 We understand that corporations with private code want to run a documentation
 server that provides module support. We want to help meet that need, but we
 feel we don’t yet understand it as well as we need to.
 
-We’ve heard from users that running the [[https://godoc.org][godoc.org]] server
+We’ve heard from users that running the [godoc.org](https://godoc.org) server
 is more complex than it should be, because it is designed for serving at public
 internet scale instead of just within a company. We believe the current
-[[https://pkg.go.dev][pkg.go.dev]] server would have the same problem.
+[pkg.go.dev](https://pkg.go.dev) server would have the same problem.
 
 We think a new server is more likely to be the right answer for use with
 private code, instead of exposing every company to the complexity of running
-the internet-scale [[https://pkg.go.dev][pkg.go.dev]] codebase. In addition to
+the internet-scale [pkg.go.dev](https://pkg.go.dev) codebase. In addition to
 serving documentation, a new server could also serve information to
-[[https://pkg.go.dev/golang.org/x/tools/cmd/goimports?tab=doc][goimports]] and
-[[https://pkg.go.dev/golang.org/x/tools/gopls][gopls]].
+[goimports](https://pkg.go.dev/golang.org/x/tools/cmd/goimports?tab=doc) and
+[gopls](https://pkg.go.dev/golang.org/x/tools/gopls).
 
 If you want to run such a server, please fill out this
-[[https://google.qualtrics.com/jfe/form/SV_6FHmaLveae6d8Bn][*3-5*minute*survey*]]
+[**3-5 minute survey**](https://google.qualtrics.com/jfe/form/SV_6FHmaLveae6d8Bn)
 to help us better understand your needs. This survey will be available until
 March 1st, 2020.
 
-We’re excited about the future of [[https://pkg.go.dev][pkg.go.dev]] in 2020,
+We’re excited about the future of [pkg.go.dev](https://pkg.go.dev) in 2020,
 and we hope you are too! We look forward to hearing your feedback and working
 with the Go community on this transition.
diff --git a/content/playground.article b/content/playground.article
index 657624d..3078132 100644
--- a/content/playground.article
+++ b/content/playground.article
@@ -1,25 +1,26 @@
-Inside the Go Playground
+# Inside the Go Playground
 12 Dec 2013
 Tags: playground
+Summary: In September 2010 we [introduced the Go Playground](https://blog.golang.org/introducing-go-playground), a web service that compiles and executes arbitrary Go code and returns the program output.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-In September 2010 we [[https://blog.golang.org/introducing-go-playground][introduced the Go Playground]],
+In September 2010 we [introduced the Go Playground](https://blog.golang.org/introducing-go-playground),
 a web service that compiles and executes arbitrary Go code and returns the
 program output.
 
 If you're a Go programmer then you have probably already used the playground
-by using the [[https://play.golang.org][Go Playground]] directly,
-taking the [[https://tour.golang.org][Go Tour]],
-or running [[https://golang.org/pkg/strings/#pkg-examples][executable examples]]
+by using the [Go Playground](https://play.golang.org) directly,
+taking the [Go Tour](https://tour.golang.org),
+or running [executable examples](https://golang.org/pkg/strings/#pkg-examples)
 from the Go documentation.
 
 You may also have used it by clicking one of the "Run" buttons in a slide
-deck on [[https://talks.golang.org/][talks.golang.org]] or a post on this
+deck on [talks.golang.org](https://talks.golang.org/) or a post on this
 very blog
-(such as the [[https://blog.golang.org/strings][recent article on Strings]]).
+(such as the [recent article on Strings](https://blog.golang.org/strings)).
 
 In this article we will take a look at how the playground is implemented
 and integrated with these services.
@@ -27,22 +28,22 @@
 and our description here assumes you have some familiarity with systems
 programming using Go.
 
-* Overview
+## Overview
 
 .image playground/overview.png
 
 The playground service has three parts:
 
-- A back end that runs on Google's servers.
-  It receives RPC requests, compiles the user program using the gc tool chain,
-  executes the user program, and returns the program output (or compilation
-  errors) as the RPC response.
-- A front end that runs on [[https://cloud.google.com/appengine/docs/go/][Google App Engine]].
-  It receives HTTP requests from the client and makes corresponding RPC requests to the back end.
-  It also does some caching.
-- A JavaScript client that implements the user interface and makes HTTP requests to the front end.
+  - A back end that runs on Google's servers.
+    It receives RPC requests, compiles the user program using the gc tool chain,
+    executes the user program, and returns the program output (or compilation
+    errors) as the RPC response.
+  - A front end that runs on [Google App Engine](https://cloud.google.com/appengine/docs/go/).
+    It receives HTTP requests from the client and makes corresponding RPC requests to the back end.
+    It also does some caching.
+  - A JavaScript client that implements the user interface and makes HTTP requests to the front end.
 
-* The back end
+## The back end
 
 The back end program itself is trivial, so we won't discuss its implementation
 here. The interesting part is how we safely execute arbitrary user code in a
@@ -50,13 +51,13 @@
 network, and the file system.
 
 To isolate user programs from Google's infrastructure, the back end runs
-them under [[https://developers.google.com/native-client/][Native Client]]
+them under [Native Client](https://developers.google.com/native-client/)
 (or "NaCl"), a technology developed by Google to permit the safe execution of
 x86 programs inside web browsers. The back end uses a special version of the gc
 tool chain that generates NaCl executables.
 
 (This special tool chain was merged into Go 1.3.
-To learn more, read the [[https://golang.org/s/go13nacl][design document]].)
+To learn more, read the [design document](https://golang.org/s/go13nacl).)
 
 NaCl limits the amount of CPU and RAM a program may consume, and it prevents
 programs from accessing the network or file system.
@@ -73,14 +74,14 @@
 return an `EINVALID` error.
 
 A year ago we
-[[https://groups.google.com/d/msg/golang-nuts/JBsCrDEVyVE/30MaQsiQcWoJ][implemented fake time]]
+[implemented fake time](https://groups.google.com/d/msg/golang-nuts/JBsCrDEVyVE/30MaQsiQcWoJ)
 in the playground, so that programs that sleep would behave correctly.
 A more recent update to the playground introduced a fake network stack and a
 fake file system, making the playground's tool chain similar to a normal
 Go tool chain.
 These facilities are described in the following sections.
 
-** Faking time
+### Faking time
 
 Playground programs are limited in the amount of CPU time and memory they can
 use, but they are also restricted in how much real time they can use.
@@ -90,10 +91,10 @@
 predictable and defends us against denial of service attacks.
 
 But these restrictions become stifling when running code that uses time.
-The [[https://talks.golang.org/2012/concurrency.slide][Go Concurrency Patterns]]
+The [Go Concurrency Patterns](https://talks.golang.org/2012/concurrency.slide)
 talk demonstrates concurrency with examples that use timing functions like
-[[https://golang.org/pkg/time/#Sleep][`time.Sleep`]] and
-[[https://golang.org/pkg/time/#After][`time.After`]].
+[`time.Sleep`](https://golang.org/pkg/time/#Sleep) and
+[`time.After`](https://golang.org/pkg/time/#After).
 When run under early versions of the playground, these programs' sleeps would
 have no effect and their behavior would be strange (and sometimes wrong).
 
@@ -121,8 +122,8 @@
 program believes that time has passed, when in fact the sleep was nearly
 instantaneous.
 
-These changes to the scheduler can be found in [[https://golang.org/cl/73110043][`proc.c`]]
-and [[https://golang.org/cl/73110043][`time.goc`]].
+These changes to the scheduler can be found in [`proc.c`](https://golang.org/cl/73110043)
+and [`time.goc`](https://golang.org/cl/73110043).
 
 Fake time fixes the issue of resource exhaustion on the back end, but what
 about the program output? It would be odd to see a program that sleeps run to
@@ -141,7 +142,7 @@
 locally.
 
 The playground's `runtime` package provides a special
-[[https://github.com/golang/go/blob/go1.3/src/pkg/runtime/sys_nacl_amd64p32.s#L54][`write` function]]
+[`write` function](https://github.com/golang/go/blob/go1.3/src/pkg/runtime/sys_nacl_amd64p32.s#L54)
 that includes a small "playback header" before each write.
 The playback header comprises a magic string, the current time, and the
 length of the write data. A write with a playback header has this structure:
@@ -179,7 +180,7 @@
 events using the provided delay intervals.
 To the user it appears that the program is running in real time.
 
-** Faking the file system
+### Faking the file system
 
 Programs built with the Go's NaCl tool chain cannot access the local machine's
 file system. Instead, the `syscall` package's file-related functions
@@ -200,24 +201,24 @@
 lost.
 
 There is also a provision to load a zip file into the file system at init time
-(see [[https://github.com/golang/go/blob/go1.3/src/pkg/syscall/unzip_nacl.go][`unzip_nacl.go`]]).
+(see [`unzip_nacl.go`](https://github.com/golang/go/blob/go1.3/src/pkg/syscall/unzip_nacl.go)).
 So far we have only used the unzip facility to provide the data files required
 to run the standard library tests, but we intend to provide playground programs
 with a set of files that can be used in documentation examples, blog posts, and
 the Go Tour.
 
 The implementation can be found in the
-[[https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go][`fs_nacl.go`]] and
-[[https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go][`fd_nacl.go`]] files
+[`fs_nacl.go`](https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go) and
+[`fd_nacl.go`](https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go) files
 (which, by virtue of their `_nacl` suffix, are built into package `syscall` only
 when `GOOS` is set to `nacl`).
 
 The file system itself is represented by the
-[[https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L26][`fsys` struct]],
+[`fsys` struct](https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L26),
 of which a global instance (named `fs`) is created during init time.
 The various file-related functions then operate on `fs` instead of making the
 actual system call.
-For instance, here is the [[https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L473][`syscall.Open`]] function:
+For instance, here is the [`syscall.Open`](https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L473) function:
 
 	func Open(path string, openmode int, perm uint32) (fd int, err error) {
 		fs.mu.Lock()
@@ -230,18 +231,18 @@
 	}
 
 File descriptors are tracked by a global slice named
-[[https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L17][`files`]].
-Each file descriptor corresponds to a [[https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L23][`file`]]
-and each `file` provides a value that implements the [[https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L30][`fileImpl`]] interface.
+[`files`](https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L17).
+Each file descriptor corresponds to a [`file`](https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L23)
+and each `file` provides a value that implements the [`fileImpl`](https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L30) interface.
 There are several implementations of the interface:
 
-- regular files and devices (such as `/dev/random`) are represented by [[https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L58][`fsysFile`]],
-- standard input, output, and error are instances of [[https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L216][`naclFile`]],
-  which uses system calls to interact with the actual files (these are a playground
-  program's only way to interact with the outside world),
-- network sockets have their own implementation, discussed in the next section.
+  - regular files and devices (such as `/dev/random`) are represented by [`fsysFile`](https://github.com/golang/go/blob/master/src/syscall/fs_nacl.go#L58),
+  - standard input, output, and error are instances of [`naclFile`](https://github.com/golang/go/blob/master/src/syscall/fd_nacl.go#L216),
+    which uses system calls to interact with the actual files (these are a playground
+    program's only way to interact with the outside world),
+  - network sockets have their own implementation, discussed in the next section.
 
-** Faking the network
+### Faking the network
 
 Like the file system, the playground's network stack is an in-process fake
 implemented by the `syscall` package. It permits playground projects to use
@@ -259,11 +260,11 @@
 file system. It must simulate read and write timeouts, different address types
 and protocols, and so on.
 
-The implementation can be found in [[https://github.com/golang/go/blob/master/src/syscall/net_nacl.go][`net_nacl.go`]].
-A good place to start reading is [[https://github.com/golang/go/blob/master/src/syscall/net_nacl.go#L461][`netFile`]],
+The implementation can be found in [`net_nacl.go`](https://github.com/golang/go/blob/master/src/syscall/net_nacl.go).
+A good place to start reading is [`netFile`](https://github.com/golang/go/blob/master/src/syscall/net_nacl.go#L461),
 the network socket implementation of the `fileImpl` interface.
 
-* The front end
+## The front end
 
 The playground front end is another simple program (shorter than 100 lines).
 It receives HTTP requests from the client, makes RPC requests to the back end,
@@ -275,52 +276,52 @@
 (for most clients this should be `"2"`).
 
 When the front end receives a compilation request it first checks
-[[https://developers.google.com/appengine/docs/memcache/][memcache]]
+[memcache](https://developers.google.com/appengine/docs/memcache/)
 to see if it has cached the results of a previous compilation of that source.
 If found, it returns the cached response.
 The cache prevents popular programs such as those on the
-[[https://golang.org/][Go home page]] from overloading the back ends.
+[Go home page](https://golang.org/) from overloading the back ends.
 If there is no cached response, the front end makes an RPC request to the back
 end, stores the response in memcache, parses the playback events, and returns
 a JSON object to the client as the HTTP response (as described above).
 
-* The client
+## The client
 
 The various sites that use the playground each share some common JavaScript
 code for setting up the user interface (the code and output boxes, the run
 button, and so on) and communicating with the playground front end.
 
 This implementation is in the file
-[[https://github.com/golang/tools/blob/master/godoc/static/playground.js][`playground.js`]]
+[`playground.js`](https://github.com/golang/tools/blob/master/godoc/static/playground.js)
 in the `go.tools` repository, which can be imported from the
-[[https://godoc.org/golang.org/x/tools/godoc/static][`golang.org/x/tools/godoc/static`]] package.
+[`golang.org/x/tools/godoc/static`](https://godoc.org/golang.org/x/tools/godoc/static) package.
 Some of it is clean and some is a bit crufty, as it is the result of
 consolidating several divergent implementations of the client code.
 
-The [[https://github.com/golang/tools/blob/master/godoc/static/playground.js#L227][`playground`]]
+The [`playground`](https://github.com/golang/tools/blob/master/godoc/static/playground.js#L227)
 function takes some HTML elements and turns them into an interactive
 playground widget. You should use this function if you want to put the
 playground on your own site (see 'Other clients' below).
 
-The [[https://github.com/golang/tools/blob/master/godoc/static/playground.js#L6][`Transport`]]
+The [`Transport`](https://github.com/golang/tools/blob/master/godoc/static/playground.js#L6)
 interface (not formally defined, this being JavaScript)
 abstracts the user interface from the means of talking to the web front end.
-[[https://github.com/golang/tools/blob/master/godoc/static/playground.js#L43][`HTTPTransport`]]
+[`HTTPTransport`](https://github.com/golang/tools/blob/master/godoc/static/playground.js#L43)
 is an implementation of `Transport` that speaks the HTTP-based protocol
 described earlier.
-[[https://github.com/golang/tools/blob/master/godoc/static/playground.js#L115][`SocketTransport`]]
+[`SocketTransport`](https://github.com/golang/tools/blob/master/godoc/static/playground.js#L115)
 is another implementation that speaks WebSocket (see 'Playing offline' below).
 
-To comply with the [[https://en.wikipedia.org/wiki/Same-origin_policy][same-origin policy]],
+To comply with the [same-origin policy](https://en.wikipedia.org/wiki/Same-origin_policy),
 the various web servers (godoc, for instance) proxy requests to
 `/compile` through to the playground service at `https://golang.org/compile`.
-The common [[https://godoc.org/golang.org/x/tools/playground][`golang.org/x/tools/playground`]]
+The common [`golang.org/x/tools/playground`](https://godoc.org/golang.org/x/tools/playground)
 package does this proxying.
 
-* Playing offline
+## Playing offline
 
-Both the [[https://tour.golang.org][Go Tour]] and the
-[[https://godoc.org/golang.org/x/tools/present][Present Tool]] can be
+Both the [Go Tour](https://tour.golang.org) and the
+[Present Tool](https://godoc.org/golang.org/x/tools/present) can be
 run offline. This is great for people with limited internet connectivity
 or presenters at conferences who cannot (and _should_ not) rely on a working
 internet connection.
@@ -331,19 +332,19 @@
 client.
 
 The WebSocket back end implementation can be found in the
-[[https://godoc.org/golang.org/x/tools/playground/socket][`golang.org/x/tools/playground/socket`]] package.
-The [[https://talks.golang.org/2012/insidepresent.slide#1][Inside Present]] talk discusses this code in detail.
+[`golang.org/x/tools/playground/socket`](https://godoc.org/golang.org/x/tools/playground/socket) package.
+The [Inside Present](https://talks.golang.org/2012/insidepresent.slide#1) talk discusses this code in detail.
 
-* Other clients
+## Other clients
 
 The playground service is used by more than just the official Go project
-([[https://gobyexample.com/][Go by Example]] is one other instance)
+([Go by Example](https://gobyexample.com/) is one other instance)
 and we are happy for you to use it on your own site. All we ask is that
-you [[mailto:golang-dev@googlegroups.com][contact us first]],
+you [contact us first](mailto:golang-dev@googlegroups.com),
 use a unique user agent in your requests (so we can identify you), and that
 your service is of benefit to the Go community.
 
-* Conclusion
+## Conclusion
 
 From godoc to the tour to this very blog, the playground has become an
 essential part of our Go documentation story. With the recent additions
@@ -354,6 +355,6 @@
 With Native Client support scheduled for Go 1.3,
 we look forward to seeing what the community can do with it.
 
-_This_article_is_part_12_of_the_
-[[https://blog.gopheracademy.com/go-advent-2013][Go Advent Calendar]],
-_a_series_of_daily_blog_posts_throughout_December_._
+_This article is part 12 of the_
+[Go Advent Calendar](https://blog.gopheracademy.com/go-advent-2013),
+_a series of daily blog posts throughout December ._
diff --git a/content/preview-of-go-version-1.article b/content/preview-of-go-version-1.article
index 48a9224..e915225 100644
--- a/content/preview-of-go-version-1.article
+++ b/content/preview-of-go-version-1.article
@@ -1,10 +1,11 @@
-A preview of Go version 1
+# A preview of Go version 1
 5 Oct 2011
 Tags: go1, release
+Summary: We want to be able to provide a stable base for people using Go. People should be able to write Go programs and expect that they will continue to compile and run without change, on a timescale of years. Similarly, people should be able to write books about Go, be able to say which version of Go the book is describing, and have that version number still be meaningful much later. None of these properties is true for Go today.
 
 Russ Cox
 
-* Introduction
+##
 
 We want to be able to provide a stable base for people using Go.
 People should be able to write Go programs and expect that they will continue
@@ -42,6 +43,6 @@
 rather than delay them until after it is released and thereby introduce
 divergence that contradicts our goals.
 
-Today, we are publishing our preliminary [[https://docs.google.com/document/pub?id=1ny8uI-_BHrDCZv_zNBSthNKAMX_fR_0dc6epA6lztRE][plan for Go 1]]
+Today, we are publishing our preliminary [plan for Go 1](https://docs.google.com/document/pub?id=1ny8uI-_BHrDCZv_zNBSthNKAMX_fR_0dc6epA6lztRE)
 for feedback from the Go community.
-If you have feedback, please reply to the [[http://groups.google.com/group/golang-nuts/browse_thread/thread/badc4f323431a4f6][thread on the golang-nuts mailing list]].
+If you have feedback, please reply to the [thread on the golang-nuts mailing list](http://groups.google.com/group/golang-nuts/browse_thread/thread/badc4f323431a4f6).
diff --git a/content/profiling-go-programs.article b/content/profiling-go-programs.article
index 9959076..2876475 100644
--- a/content/profiling-go-programs.article
+++ b/content/profiling-go-programs.article
@@ -1,13 +1,14 @@
-Profiling Go Programs
+# Profiling Go Programs
 24 Jun 2011
 Tags: benchmark, pprof, profiling, technical
+Summary: At Scala Days 2011, Robert Hundt presented a paper titled [Loop Recognition in C++/Java/Go/Scala.](http://research.google.com/pubs/pub37122.html) The paper implemented a specific loop finding algorithm, such as you might use in a flow analysis pass of a compiler, in C++, Go, Java, Scala, and then used those programs to draw conclusions about typical performance concerns in these languages. The Go program presented in that paper runs quite slowly, making it an excellent opportunity to demonstrate how to use Go's profiling tools to take a slow program and make it faster.
 
 Russ Cox, July 2011; updated by Shenghou Ma, May 2013
 
-* Introduction
+##
 
 At Scala Days 2011, Robert Hundt presented a paper titled
-[[http://research.google.com/pubs/pub37122.html][Loop Recognition in C++/Java/Go/Scala.]]
+[Loop Recognition in C++/Java/Go/Scala.](http://research.google.com/pubs/pub37122.html)
 The paper implemented a specific loop finding algorithm, such as you might use
 in a flow analysis pass of a compiler, in C++, Go, Java, Scala, and then used
 those programs to draw conclusions about typical performance concerns in these
@@ -16,7 +17,7 @@
 an excellent opportunity to demonstrate how to use Go's profiling tools to take
 a slow program and make it faster.
 
-_By_using_Go's_profiling_tools_to_identify_and_correct_specific_bottlenecks,_we_can_make_the_Go_loop_finding_program_run_an_order_of_magnitude_faster_and_use_6x_less_memory._
+_By using Go's profiling tools to identify and correct specific bottlenecks, we can make the Go loop finding program run an order of magnitude faster and use 6x less memory._
 (Update: Due to recent optimizations of `libstdc++` in `gcc`, the memory reduction is now 3.7x.)
 
 Hundt's paper does not specify which versions of the C++, Go, Java, and Scala
@@ -51,7 +52,7 @@
 	done
 	#
 
-We've taken [[https://github.com/hundt98847/multi-language-bench][Hundt's benchmark programs]]
+We've taken [Hundt's benchmark programs](https://github.com/hundt98847/multi-language-bench)
 in C++ and Go, combined each into a single source file, and removed all but one
 line of output.
 We'll time the program using Linux's `time` utility with a format that shows user time,
@@ -84,7 +85,7 @@
 results from the paper.)
 
 To start tuning the Go program, we have to enable profiling.
-If the code used the [[https://golang.org/pkg/testing/][Go testing package]]'s
+If the code used the [Go testing package](https://golang.org/pkg/testing/)'s
 benchmarking support, we could use gotest's standard `-cpuprofile` and `-memprofile`
 flags.
 In a standalone program like this one, we have to import `runtime/pprof` and add a few
@@ -105,12 +106,12 @@
 	    ...
 
 The new code defines a flag named `cpuprofile`, calls the
-[[https://golang.org/pkg/flag/][Go flag library]] to parse the command line flags,
+[Go flag library](https://golang.org/pkg/flag/) to parse the command line flags,
 and then, if the `cpuprofile` flag has been set on the command line,
-[[https://golang.org/pkg/runtime/pprof/#StartCPUProfile][starts CPU profiling]]
+[starts CPU profiling](https://golang.org/pkg/runtime/pprof/#StartCPUProfile)
 redirected to that file.
 The profiler requires a final call to
-[[https://golang.org/pkg/runtime/pprof/#StopCPUProfile][`StopCPUProfile`]] to
+[`StopCPUProfile`](https://golang.org/pkg/runtime/pprof/#StopCPUProfile) to
 flush any pending writes to the file before the program exits; we use `defer`
 to make sure this happens as `main` returns.
 
@@ -125,7 +126,7 @@
 	(pprof)
 
 The `go tool pprof` program is a slight variant of
-[[https://github.com/gperftools/gperftools][Google's `pprof` C++ profiler]].
+[Google's `pprof` C++ profiler](https://github.com/gperftools/gperftools).
 The most important command is `topN`, which shows the top `N` samples in the profile:
 
 	(pprof) top10
@@ -180,12 +181,12 @@
 The `web` command writes a graph of the profile data in SVG format and opens it in a web
 browser.
 (There is also a `gv` command that writes PostScript and opens it in Ghostview.
-For either command, you need [[http://www.graphviz.org/][graphviz]] installed.)
+For either command, you need [graphviz](http://www.graphviz.org/) installed.)
 
 	(pprof) web
 
 A small fragment of
-[[https://rawgit.com/rsc/benchgraffiti/master/havlak/havlak1.svg][the full graph]] looks like:
+[the full graph](https://rawgit.com/rsc/benchgraffiti/master/havlak/havlak1.svg) looks like:
 
 .image profiling-go-programs_havlak1a-75.png
 
@@ -240,7 +241,7 @@
 listing; when there are enough samples this can help you see which instructions are
 expensive.
 The `weblist` command mixes the two modes: it shows
-[[https://rawgit.com/rsc/benchgraffiti/master/havlak/havlak1.html][a source listing in which clicking a line shows the disassembly]].
+[a source listing in which clicking a line shows the disassembly](https://rawgit.com/rsc/benchgraffiti/master/havlak/havlak1.html).
 
 Since we already know that the time is going into map lookups implemented by the
 hash runtime functions, we care most about the second column.
@@ -265,7 +266,7 @@
 	16.55u 0.11s 16.69r 1321008kB ./havlak2
 	$
 
-(See the [[https://github.com/rsc/benchgraffiti/commit/58ac27bcac3ffb553c29d0b3fb64745c91c95948][diff between `havlak1` and `havlak2`]])
+(See the [diff between `havlak1` and `havlak2`](https://github.com/rsc/benchgraffiti/commit/58ac27bcac3ffb553c29d0b3fb64745c91c95948))
 
 We can run the profiler again to confirm that `main.DFS` is no longer a significant
 part of the run time:
@@ -317,7 +318,7 @@
 	./havlak3 -memprofile=havlak3.mprof
 	$
 
-(See the [[https://github.com/rsc/benchgraffiti/commit/b78dac106bea1eb3be6bb3ca5dba57c130268232][diff from havlak2]])
+(See the [diff from havlak2](https://github.com/rsc/benchgraffiti/commit/b78dac106bea1eb3be6bb3ca5dba57c130268232))
 
 We use `go tool pprof` exactly the same way. Now the samples we are examining are
 memory allocations, not clock ticks.
@@ -426,7 +427,7 @@
 	11.84u 0.08s 11.94r 810416kB ./havlak4
 	$
 
-(See the [[https://github.com/rsc/benchgraffiti/commit/245d899f7b1a33b0c8148a4cd147cb3de5228c8a][diff from havlak3]])
+(See the [diff from havlak3](https://github.com/rsc/benchgraffiti/commit/245d899f7b1a33b0c8148a4cd147cb3de5228c8a))
 
 We're now at 2.11x faster than when we started. Let's look at a CPU profile again.
 
@@ -525,33 +526,33 @@
 
 and then have `FindLoops` consult it as a replacement for allocation:
 
-	    if cache.size < size {
-	        cache.size = size
-	        cache.nonBackPreds = make([][]int, size)
-	        cache.backPreds = make([][]int, size)
-	        cache.number = make([]int, size)
-	        cache.header = make([]int, size)
-	        cache.types = make([]int, size)
-	        cache.last = make([]int, size)
-	        cache.nodes = make([]*UnionFindNode, size)
-	        for i := range cache.nodes {
-	            cache.nodes[i] = new(UnionFindNode)
-	        }
+	if cache.size < size {
+	    cache.size = size
+	    cache.nonBackPreds = make([][]int, size)
+	    cache.backPreds = make([][]int, size)
+	    cache.number = make([]int, size)
+	    cache.header = make([]int, size)
+	    cache.types = make([]int, size)
+	    cache.last = make([]int, size)
+	    cache.nodes = make([]*UnionFindNode, size)
+	    for i := range cache.nodes {
+	        cache.nodes[i] = new(UnionFindNode)
 	    }
+	}
 
-	    nonBackPreds := cache.nonBackPreds[:size]
-	    for i := range nonBackPreds {
-	        nonBackPreds[i] = nonBackPreds[i][:0]
-	    }
-	    backPreds := cache.backPreds[:size]
-	    for i := range nonBackPreds {
-	        backPreds[i] = backPreds[i][:0]
-	    }
-	    number := cache.number[:size]
-	    header := cache.header[:size]
-	    types := cache.types[:size]
-	    last := cache.last[:size]
-	    nodes := cache.nodes[:size]
+	nonBackPreds := cache.nonBackPreds[:size]
+	for i := range nonBackPreds {
+	    nonBackPreds[i] = nonBackPreds[i][:0]
+	}
+	backPreds := cache.backPreds[:size]
+	for i := range nonBackPreds {
+	    backPreds[i] = backPreds[i][:0]
+	}
+	number := cache.number[:size]
+	header := cache.header[:size]
+	types := cache.types[:size]
+	last := cache.last[:size]
+	nodes := cache.nodes[:size]
 
 Such a global variable is bad engineering practice, of course: it means that
 concurrent calls to `FindLoops` are now unsafe.
@@ -568,7 +569,7 @@
 	8.03u 0.06s 8.11r 770352kB ./havlak5
 	$
 
-(See the [[https://github.com/rsc/benchgraffiti/commit/2d41d6d16286b8146a3f697dd4074deac60d12a4][diff from havlak4]])
+(See the [diff from havlak4](https://github.com/rsc/benchgraffiti/commit/2d41d6d16286b8146a3f697dd4074deac60d12a4))
 
 There's more we can do to clean up the program and make it faster, but none of
 it requires profiling techniques that we haven't already shown.
@@ -577,7 +578,7 @@
 during that pass.
 Similarly, the loop graph storage can be reused on each iteration instead of reallocated.
 In addition to these performance changes, the
-[[https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.go][final version]]
+[final version](https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.go)
 is written using idiomatic Go style, using data structures and methods.
 The stylistic changes have only a minor effect on the run time: the algorithm and
 constraints are unchanged.
@@ -605,7 +606,7 @@
 program, which used inefficient data structures like `set`s where `vector`s would
 be more appropriate.
 As a sanity check, we translated the final Go program into
-[[https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.cc][equivalent C++ code]].
+[equivalent C++ code](https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.cc).
 Its execution time is similar to the Go program's:
 
 	$ make havlak6cc
@@ -623,8 +624,8 @@
 	 461 1441 9467 havlak6.go
 	$
 
-(See [[https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.cc][havlak6.cc]]
-and [[https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.go][havlak6.go]])
+(See [havlak6.cc](https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.cc)
+and [havlak6.go](https://github.com/rsc/benchgraffiti/blob/master/havlak/havlak6.go))
 
 Benchmarks are only as good as the programs they measure.
 We used `go tool pprof` to study an inefficient Go program and then to improve its
@@ -634,11 +635,11 @@
 by inner loops.
 
 The program sources, Linux x86-64 binaries, and profiles used to write this post
-are available in the [[https://github.com/rsc/benchgraffiti/][benchgraffiti project on GitHub]].
+are available in the [benchgraffiti project on GitHub](https://github.com/rsc/benchgraffiti/).
 
-As mentioned above, [[https://golang.org/cmd/go/#Test_packages][`go test`]] includes
+As mentioned above, [`go test`](https://golang.org/cmd/go/#Test_packages) includes
 these profiling flags already: define a
-[[https://golang.org/pkg/testing/][benchmark function]] and you're all set.
+[benchmark function](https://golang.org/pkg/testing/) and you're all set.
 There is also a standard HTTP interface to profiling data. In an HTTP server, adding
 
 	import _ "net/http/pprof"
diff --git a/content/publishing-go-modules.article b/content/publishing-go-modules.article
index 6036b70..eb92850 100644
--- a/content/publishing-go-modules.article
+++ b/content/publishing-go-modules.article
@@ -1,33 +1,34 @@
-Publishing Go Modules
+# Publishing Go Modules
 26 Sep 2019
 Tags: tools, versioning
+Summary: This post is part 3 in a series.
 
 Tyler Bui-Palsulich
 
-* Introduction
+## Introduction
 
 This post is part 3 in a series.
 
-- Part 1 — [[/using-go-modules][Using Go Modules]]
-- Part 2 — [[/migrating-to-go-modules][Migrating To Go Modules]]
-- *Part*3*—*Publishing*Go*Modules* (this post)
-- Part 4 — [[/v2-go-modules][Go Modules: v2 and Beyond]]
+  - Part 1 — [Using Go Modules](/using-go-modules)
+  - Part 2 — [Migrating To Go Modules](/migrating-to-go-modules)
+  - **Part 3 — Publishing Go Modules** (this post)
+  - Part 4 — [Go Modules: v2 and Beyond](/v2-go-modules)
 
 This post discusses how to write and publish modules so other modules can depend
 on them.
 
 Please note: this post covers development up to and including `v1`. If you are
-interested in `v2`, please see [[/v2-go-modules][Go Modules: v2 and Beyond]].
+interested in `v2`, please see [Go Modules: v2 and Beyond](/v2-go-modules).
 
-This post uses [[https://git-scm.com/][Git]] in examples.
-[[https://www.mercurial-scm.org/][Mercurial]],
-[[http://wiki.bazaar.canonical.com/][Bazaar]], and others are supported as well.
+This post uses [Git](https://git-scm.com/) in examples.
+[Mercurial](https://www.mercurial-scm.org/),
+[Bazaar](http://wiki.bazaar.canonical.com/), and others are supported as well.
 
-* Project setup
+## Project setup
 
 For this post, you'll need an existing project to use as an example. So, start
 with the files from the end of the
-[[https://blog.golang.org/using-go-modules][Using Go Modules]] article:
+[Using Go Modules](https://blog.golang.org/using-go-modules) article:
 
 	$ cat go.mod
 	module example.com/hello
@@ -89,28 +90,28 @@
 	$ git commit -m "hello: initial commit"
 	$
 
-* Semantic versions and modules
+## Semantic versions and modules
 
 Every required module in a `go.mod` has a
-[[https://semver.org][semantic version]], the minimum version of that dependency
+[semantic version](https://semver.org), the minimum version of that dependency
 to use to build the module.
 
 A semantic version has the form `vMAJOR.MINOR.PATCH`.
 
-- Increment the `MAJOR` version when you make a [[https://golang.org/doc/go1compat][backwards incompatible]]
-  change to the public API of your module.
-  This should only be done when absolutely necessary.
-- Increment the `MINOR` version when you make a backwards compatible change to the API,
-  like changing dependencies or adding a new function,
-  method, struct field, or type.
-- Increment the `PATCH` version after making minor changes that don't affect
-  your module's public API or dependencies, like fixing a bug.
+  - Increment the `MAJOR` version when you make a [backwards incompatible](https://golang.org/doc/go1compat)
+    change to the public API of your module.
+    This should only be done when absolutely necessary.
+  - Increment the `MINOR` version when you make a backwards compatible change to the API,
+    like changing dependencies or adding a new function,
+    method, struct field, or type.
+  - Increment the `PATCH` version after making minor changes that don't affect
+    your module's public API or dependencies, like fixing a bug.
 
 You can specify pre-release versions by appending a hyphen and dot separated
 identifiers (for example, `v1.0.1-alpha` or `v2.2.2-beta.2`). Normal releases
 are preferred by the `go` command over pre-release versions, so users must ask
 for pre-release versions explicitly (for example,
-`go`get`example.com/hello@v1.0.1-alpha`) if your module has any normal releases.
+`go get example.com/hello@v1.0.1-alpha`) if your module has any normal releases.
 
 `v0` major versions and pre-release versions do not guarantee backwards
 compatibility. They let you refine your API before making stability commitments
@@ -119,7 +120,7 @@
 
 The version referenced in a `go.mod` may be an explicit release tagged in the
 repository (for example, `v1.5.2`), or it may be a
-[[https://golang.org/cmd/go/#hdr-Pseudo_versions][pseudo-version]] based on a
+[pseudo-version](https://golang.org/cmd/go/#hdr-Pseudo_versions) based on a
 specific commit (for example, `v0.0.0-20170915032832-14c0d48ead0c`).
 Pseudo-versions are a special type of pre-release version. Pseudo-versions are
 useful when a user needs to depend on a project that has not published any
@@ -130,7 +131,7 @@
 
 Once you start tagging your repo with versions, it's important to keep tagging
 new releases as you develop your module. When users request a new version of
-your module (with `go`get`-u` or `go`get`example.com/hello`), the `go` command
+your module (with `go get -u` or `go get example.com/hello`), the `go` command
 will choose the greatest semantic release version available, even if that
 version is several years old and many changes behind the primary branch.
 Continuing to tag new releases will make your ongoing improvements available to
@@ -140,11 +141,11 @@
 with a version, release a new version. If people depend on a version that you
 have deleted, their builds may fail. Similarly, once you release a version, do
 not change or overwrite it. The
-[[https://blog.golang.org/module-mirror-launch][module mirror and checksum database]]
+[module mirror and checksum database](https://blog.golang.org/module-mirror-launch)
 store modules, their versions, and signed cryptographic hashes to ensure that
 the build of a given version remains reproducible over time.
 
-* v0: the initial, unstable version
+## v0: the initial, unstable version
 
 Let's tag the module with a `v0` semantic version. A `v0` version does not make
 any stability guarantees, so nearly all projects should start with `v0` as they
@@ -152,11 +153,11 @@
 
 Tagging a new version has a few steps:
 
-1. Run `go`mod`tidy`, which removes any dependencies the module might have accumulated that are no longer necessary.
+1. Run `go mod tidy`, which removes any dependencies the module might have accumulated that are no longer necessary.
 
-2. Run `go`test`./...` a final time to make sure everything is working.
+2. Run `go test ./...` a final time to make sure everything is working.
 
-3. Tag the project with a new version using [[https://git-scm.com/docs/git-tag][`git`tag`]].
+3. Tag the project with a new version using [`git tag`](https://git-scm.com/docs/git-tag).
 
 4. Push the new tag to the origin repository.
 
@@ -170,7 +171,7 @@
 	$
 
 Now other projects can depend on `v0.1.0` of `example.com/hello`. For your own
-module, you can run `go`list`-m`example.com/hello@v0.1.0` to confirm the latest
+module, you can run `go list -m example.com/hello@v0.1.0` to confirm the latest
 version is available (this example module does not exist, so no versions are
 available). If you don't see the latest version immediately and you're using the
 Go module proxy (the default since Go 1.13), try again in a few minutes to give
@@ -184,7 +185,7 @@
 If you fix a bug in an existing version, increment the `PATCH` version. For
 example, the next release after `v0.1.0` would be `v0.1.1`.
 
-* v1: the first stable version
+## v1: the first stable version
 
 Once you are absolutely sure your module's API is stable, you can release
 `v1.0.0`. A `v1` major version communicates to users that no incompatible
@@ -202,26 +203,26 @@
 The standard library's `strings` package is a prime example of maintaining
 backwards compatibility at the cost of API consistency.
 
-- [[https://godoc.org/strings#Split][`Split`]] slices a string into all
-  substrings separated by a separator and returns a slice of the substrings
-  between those separators.
-- [[https://godoc.org/strings#SplitN][`SplitN`]] can be used to control the number of substrings to return.
+  - [`Split`](https://godoc.org/strings#Split) slices a string into all
+    substrings separated by a separator and returns a slice of the substrings
+    between those separators.
+  - [`SplitN`](https://godoc.org/strings#SplitN) can be used to control the number of substrings to return.
 
-However, [[https://godoc.org/strings#Replace][`Replace`]] took a count of how
+However, [`Replace`](https://godoc.org/strings#Replace) took a count of how
 many instances of the string to replace from the beginning (unlike `Split`).
 
 Given `Split` and `SplitN`, you would expect functions like `Replace` and
 `ReplaceN`. But, we couldn't change the existing `Replace` without breaking
 callers, which we promised not to do. So, in Go 1.12, we added a new function,
-[[https://godoc.org/strings#ReplaceAll][`ReplaceAll`]]. The resulting API is a
+[`ReplaceAll`](https://godoc.org/strings#ReplaceAll). The resulting API is a
 little odd, since `Split` and `Replace` behave differently, but that
 inconsistency is better than a breaking change.
 
 Let's say you're happy with the API of `example.com/hello` and you want to
 release `v1` as the first stable version.
 
-Tagging `v1` uses the same process as tagging a `v0` version: run `go`mod`tidy`
-and `go`test`./...`, tag the version, and push the tag to the origin repository:
+Tagging `v1` uses the same process as tagging a `v0` version: run `go mod tidy`
+and `go test ./...`, tag the version, and push the tag to the origin repository:
 
 	$ go mod tidy
 	$ go test ./...
@@ -236,14 +237,14 @@
 communicates to everyone that our API is stable and they should feel comfortable
 using it.
 
-* Conclusion
+## Conclusion
 
 This post walked through the process of tagging a module with semantic versions
 and when to release `v1`. A future post will cover how to maintain and publish
 modules at `v2` and beyond.
 
 To provide feedback and help shape the future of dependency management in Go,
-please send us [[https://golang.org/issue/new][bug reports]] or
-[[https://golang.org/wiki/ExperienceReports][experience reports]].
+please send us [bug reports](https://golang.org/issue/new) or
+[experience reports](https://golang.org/wiki/ExperienceReports).
 
 Thanks for all your feedback and help improving Go modules.
diff --git a/content/qihoo.article b/content/qihoo.article
index 7f90ed8..7ac2ebc 100644
--- a/content/qihoo.article
+++ b/content/qihoo.article
@@ -1,13 +1,14 @@
-Qihoo 360 and Go
+# Qihoo 360 and Go
 6 Jul 2015
+Summary: _This guest blog post was written by Yang Zhou, Software Engineer at Qihoo 360._
 
 Yang Zhou
 
-* Introduction
+##
 
-_This_guest_blog_post_was_written_by_Yang_Zhou,_Software_Engineer_at_Qihoo_360._
+_This guest blog post was written by Yang Zhou, Software Engineer at Qihoo 360._
 
-[[http://www.360safe.com/][Qihoo 360]] is a major provider of Internet and
+[Qihoo 360](http://www.360safe.com/) is a major provider of Internet and
 mobile security products and services in China, and operates a major
 Android-based mobile distribution platform. At the end of June 2014, Qihoo had
 about 500 million monthly active PC Internet users and over 640 million mobile
@@ -46,28 +47,28 @@
 
 Here are a few tweaks we made and key take-aways:
 
-- Replace short connections with persistent ones (using a connection pool),
-  to reduce creation of buffers and objects during communication.
-- Use Objects and Memory pools appropriately, to reduce the load on the GC.
+  - Replace short connections with persistent ones (using a connection pool),
+    to reduce creation of buffers and objects during communication.
+  - Use Objects and Memory pools appropriately, to reduce the load on the GC.
 
 .image qihoo/image00.png
 
-- Use a Task Pool, a mechanism with a group of long-lived goroutines consuming
-  global task or message queues sent by connection goroutines,
-  to replace short-lived goroutines.
+  - Use a Task Pool, a mechanism with a group of long-lived goroutines consuming
+    global task or message queues sent by connection goroutines,
+    to replace short-lived goroutines.
 
-- Monitor and control goroutine numbers in the program.
-  The lack of control can cause unbearable burden on the GC,
-  imposed by surges in goroutines due to uninhibited acceptance of external requests,
-  as RPC invocations sent to inner servers may block goroutines recently created.
+  - Monitor and control goroutine numbers in the program.
+    The lack of control can cause unbearable burden on the GC,
+    imposed by surges in goroutines due to uninhibited acceptance of external requests,
+    as RPC invocations sent to inner servers may block goroutines recently created.
 
-- Remember to add [[https://golang.org/pkg/net/#Conn][read and write deadlines]]
-  to connections when under a mobile network;
-  otherwise, it may lead to goroutine blockage.
-  Apply it properly and with caution when under a LAN network,
-  otherwise your RPC communication efficiency will be hurt.
+  - Remember to add [read and write deadlines](https://golang.org/pkg/net/#Conn)
+    to connections when under a mobile network;
+    otherwise, it may lead to goroutine blockage.
+    Apply it properly and with caution when under a LAN network,
+    otherwise your RPC communication efficiency will be hurt.
 
-- Use Pipeline (under Full Duplex feature of TCP) to enhance the communication efficiency of RPC framework.
+  - Use Pipeline (under Full Duplex feature of TCP) to enhance the communication efficiency of RPC framework.
 
 As a result, we successfully launched three iterations of our architecture,
 and two iterations of our RPC framework even with limited human resources.
@@ -103,7 +104,7 @@
 obsolete one day, as Go continues to evolve.
 
 This is why I want to conclude my sharing by extending my sincere appreciation
-to the opportunity to attend [[http://gopherchina.org/][Gopher China]].
+to the opportunity to attend [Gopher China](http://gopherchina.org/).
 It was a gala for us to learn, to share and for offering a window showcasing
 Go’s popularity and prosperity in China. Many other teams within Qihoo have
 already either got to know Go, or tried to use Go.
diff --git a/content/race-detector.article b/content/race-detector.article
index 1a284f2..3ebc9fb 100644
--- a/content/race-detector.article
+++ b/content/race-detector.article
@@ -1,14 +1,15 @@
-Introducing the Go Race Detector
+# Introducing the Go Race Detector
 26 Jun 2013
 Tags: concurrency, technical
+Summary: [Race conditions](http://en.wikipedia.org/wiki/Race_condition) are among the most insidious and elusive programming errors. They typically cause erratic and mysterious failures, often long after the code has been deployed to production. While Go's concurrency mechanisms make it easy to write clean concurrent code, they don't prevent race conditions. Care, diligence, and testing are required. And tools can help.
 
 Dmitry Vyukov
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-[[http://en.wikipedia.org/wiki/Race_condition][Race conditions]] are among the
+[Race conditions](http://en.wikipedia.org/wiki/Race_condition) are among the
 most insidious and elusive programming errors. They typically cause erratic and
 mysterious failures, often long after the code has been deployed to production.
 While Go's concurrency mechanisms make it easy to write clean concurrent code,
@@ -16,28 +17,28 @@
 And tools can help.
 
 We're happy to announce that Go 1.1 includes a
-[[https://golang.org/doc/articles/race_detector.html][race detector]],
+[race detector](https://golang.org/doc/articles/race_detector.html),
 a new tool for finding race conditions in Go code.
 It is currently available for Linux, OS X, and Windows systems
 with 64-bit x86 processors.
 
 The race detector is based on the C/C++
-[[https://github.com/google/sanitizers][ThreadSanitizer runtime library]],
+[ThreadSanitizer runtime library](https://github.com/google/sanitizers),
 which has been used to detect many errors in Google's internal code base and in
-[[http://www.chromium.org/][Chromium]].
+[Chromium](http://www.chromium.org/).
 The technology was integrated with Go in September 2012; since then it has detected
-[[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=ThreadSanitizer][42 races]]
+[42 races](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=ThreadSanitizer)
 in the standard library. It is now part of our continuous build process,
 where it continues to catch race conditions as they arise.
 
-* How it works
+## How it works
 
 The race detector is integrated with the go tool chain. When the
 `-race` command-line flag is set, the compiler instruments all memory accesses
 with code that records when and how the memory was accessed, while the runtime
 library watches for unsynchronized accesses to shared variables.
 When such "racy" behavior is detected, a warning is printed.
-(See [[https://github.com/google/sanitizers/wiki/ThreadSanitizerAlgorithm][this article]]
+(See [this article](https://github.com/google/sanitizers/wiki/ThreadSanitizerAlgorithm)
 for the details of the algorithm.)
 
 Because of its design, the race detector can detect race conditions only when
@@ -51,7 +52,7 @@
 Another approach using production workloads is to deploy a single race-enabled
 instance within a pool of running servers.
 
-* Using the race detector
+## Using the race detector
 
 The race detector is fully integrated with the Go tool chain.
 To build your code with the race detector enabled, just add the
@@ -67,18 +68,18 @@
 	$ go get -race golang.org/x/blog/support/racy
 	$ racy
 
-* Examples
+## Examples
 
 Here are two examples of real issues caught by the race detector.
 
-** Example 1: Timer.Reset
+### Example 1: Timer.Reset
 
 The first example is a simplified version of an actual bug found by the race
 detector. It uses a timer to print a message after a random duration between 0
 and 1 second. It does so repeatedly for five seconds.
-It uses [[https://golang.org/pkg/time/#AfterFunc][`time.AfterFunc`]] to create a
-[[https://golang.org/pkg/time/#Timer][`Timer`]] for the first message and then
-uses the [[https://golang.org/pkg/time/#Timer.Reset][`Reset`]] method to
+It uses [`time.AfterFunc`](https://golang.org/pkg/time/#AfterFunc) to create a
+[`Timer`](https://golang.org/pkg/time/#Timer) for the first message and then
+uses the [`Reset`](https://golang.org/pkg/time/#Timer.Reset) method to
 schedule the next message, re-using the `Timer` each time.
 
 .play -numbers race-detector/timer.go /func main/,$
@@ -132,19 +133,19 @@
 a thread-safe way.
 
 A simpler but less efficient approach is to
-[[http://play.golang.org/p/kuWTrY0pS4][avoid reusing timers]].
+[avoid reusing timers](http://play.golang.org/p/kuWTrY0pS4).
 
-** Example 2: ioutil.Discard
+### Example 2: ioutil.Discard
 
 The second example is more subtle.
 
 The `ioutil` package's
-[[https://golang.org/pkg/io/ioutil/#Discard][`Discard`]] object implements
-[[https://golang.org/pkg/io/#Writer][`io.Writer`]],
+[`Discard`](https://golang.org/pkg/io/ioutil/#Discard) object implements
+[`io.Writer`](https://golang.org/pkg/io/#Writer),
 but discards all the data written to it.
 Think of it like `/dev/null`: a place to send data that you need to read but
 don't want to store.
-It is commonly used with [[https://golang.org/pkg/io/#Copy][`io.Copy`]]
+It is commonly used with [`io.Copy`](https://golang.org/pkg/io/#Copy)
 to drain a reader, like this:
 
 	io.Copy(ioutil.Discard, reader)
@@ -165,22 +166,22 @@
 	writer.ReadFrom(reader)
 
 We
-[[https://golang.org/cl/4817041][added a ReadFrom method]]
+[added a ReadFrom method](https://golang.org/cl/4817041)
 to Discard's underlying type, which has an internal buffer that is shared
 between all its users.
 We knew this was theoretically a race condition, but since all writes to the
 buffer should be thrown away we didn't think it was important.
 
 When the race detector was implemented it immediately
-[[https://golang.org/issue/3970][flagged this code]] as racy.
+[flagged this code](https://golang.org/issue/3970) as racy.
 Again, we considered that the code might be problematic, but decided that the
 race condition wasn't "real".
 To avoid the "false positive" in our build we implemented
-[[https://golang.org/cl/6624059][a non-racy version]]
+[a non-racy version](https://golang.org/cl/6624059)
 that is enabled only when the race detector is running.
 
-But a few months later [[https://bradfitz.com/][Brad]] encountered a
-[[https://golang.org/issue/4589][frustrating and strange bug]].
+But a few months later [Brad](https://bradfitz.com/) encountered a
+[frustrating and strange bug](https://golang.org/issue/4589).
 After a few days of debugging, he narrowed it down to a real race condition
 caused by `ioutil.Discard`.
 
@@ -232,11 +233,11 @@
 	}
 
 The bug was finally
-[[https://golang.org/cl/7011047][fixed]]
+[fixed](https://golang.org/cl/7011047)
 by giving a unique buffer to each use of `ioutil.Discard`, eliminating the race
 condition on the shared buffer.
 
-* Conclusions
+## Conclusions
 
 The race detector is a powerful tool for checking the correctness of concurrent
 programs. It will not issue false positives, so take its warnings seriously.
@@ -244,4 +245,4 @@
 exercise the concurrent properties of your code so that the race detector can
 do its job.
 
-What are you waiting for? Run `"go`test`-race"` on your code today!
+What are you waiting for? Run `"go test -race"` on your code today!
diff --git a/content/real-go-projects-smarttwitter-and-webgo.article b/content/real-go-projects-smarttwitter-and-webgo.article
index 2c79ac7..4881648 100644
--- a/content/real-go-projects-smarttwitter-and-webgo.article
+++ b/content/real-go-projects-smarttwitter-and-webgo.article
@@ -1,27 +1,28 @@
-Real Go Projects: SmartTwitter and web.go
+# Real Go Projects: SmartTwitter and web.go
 19 Oct 2010
 Tags: guest
+Summary: _This week's article is written by_ [_Michael Hoisie_](http://www.hoisie.com/). _A programmer based in San Francisco, he is one of Go's early adopters and the author of several popular Go libraries. He describes his experiences using Go:_
 
 Michael Hoisie
 
-* Introduction
+##
 
-_This_week's_article_is_written_by_ [[http://www.hoisie.com/][_Michael_Hoisie_]].
-_A_programmer_based_in_San_Francisco,_he_is_one_of_Go's_early_adopters_and_the_author_of_several_popular_Go_libraries._He_describes_his_experiences_using_Go:_
+_This week's article is written by_ [_Michael Hoisie_](http://www.hoisie.com/).
+_A programmer based in San Francisco, he is one of Go's early adopters and the author of several popular Go libraries. He describes his experiences using Go:_
 
-I was introduced to Go by a post on [[http://news.ycombinator.com/][Hacker News]].
+I was introduced to Go by a post on [Hacker News](http://news.ycombinator.com/).
 About an hour later I was hooked. At the time I was working at a web start-up,
 and had been developing internal testing apps in Python.
 Go offered speed, better concurrency support,
 and sane Unicode handling, so I was keen to port my programs to the language.
 At that time there wasn't an easy way to write web apps in Go,
 so I decided to build a simple web framework,
-[[http://github.com/hoisie/web.go][web.go]].
+[web.go](http://github.com/hoisie/web.go).
 It was modeled after a popular Python framework,
-[[http://webpy.org/][web.py]], which I had worked with previously.
+[web.py](http://webpy.org/), which I had worked with previously.
 While working on web.go I got involved in the Go community,
 submitted a bunch of bug reports, and hacked on some standard library packages
-(mainly [[https://golang.org/pkg/http/][http]] and [[https://golang.org/pkg/json/][json]]).
+(mainly [http](https://golang.org/pkg/http/) and [json](https://golang.org/pkg/json/)).
 
 After a few weeks I noticed that web.go was getting attention at Github.
 This was surprising because I'd never really promoted the project.
@@ -34,10 +35,10 @@
 but it re-posts everything, creating noise in your Facebook feed.
 My application allowed you to filter retweets,
 mentions, hashtags, replies, and more.
-This turned into [[http://www.facebook.com/apps/application.php?id=135488932982][Smart Twitter]],
+This turned into [Smart Twitter](http://www.facebook.com/apps/application.php?id=135488932982),
 which currently has nearly 90,000 users.
 
-The entire program is written in Go, and uses [[https://redis.io/][Redis]]
+The entire program is written in Go, and uses [Redis](https://redis.io/)
 as its storage back-end.
 It is very fast and robust. It currently processes about two dozen tweets per second,
 and makes heavy use of Go's channels.
@@ -51,9 +52,9 @@
 or re-posting incoming tweets.
 
 Smart Twitter also spawned other open-source Go projects:
-[[http://github.com/hoisie/mustache.go][mustache.go]],
-[[http://github.com/hoisie/redis.go][redis.go]],
-and [[http://github.com/hoisie/twitterstream][twitterstream]].
+[mustache.go](http://github.com/hoisie/mustache.go),
+[redis.go](http://github.com/hoisie/redis.go),
+and [twitterstream](http://github.com/hoisie/twitterstream).
 
 I see a lot of work left to do on web.go.
 For instance, I'd like to add better support for streaming connections,
diff --git a/content/share-memory-by-communicating.article b/content/share-memory-by-communicating.article
index 01c7426..12bff79 100644
--- a/content/share-memory-by-communicating.article
+++ b/content/share-memory-by-communicating.article
@@ -1,10 +1,11 @@
-Share Memory By Communicating
+# Share Memory By Communicating
 13 Jul 2010
 Tags: concurrency, technical
+Summary: Traditional threading models (commonly used when writing Java, C++, and Python programs, for example) require the programmer to communicate between threads using shared memory. Typically, shared data structures are protected by locks, and threads will contend over those locks to access the data. In some cases, this is made easier by the use of thread-safe data structures such as Python's Queue.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 Traditional threading models (commonly used when writing Java,
 C++, and Python programs, for example) require the programmer to communicate
@@ -16,15 +17,15 @@
 
 Go's concurrency primitives - goroutines and channels - provide an elegant
 and distinct means of structuring concurrent software.
-(These concepts have an [[https://swtch.com/~rsc/thread/][interesting history]] that begins with C.
-A. R. Hoare's [[http://www.usingcsp.com/][Communicating Sequential Processes]].)
+(These concepts have an [interesting history](https://swtch.com/~rsc/thread/) that begins with C.
+A. R. Hoare's [Communicating Sequential Processes](http://www.usingcsp.com/).)
 Instead of explicitly using locks to mediate access to shared data,
 Go encourages the use of channels to pass references to data between goroutines.
 This approach ensures that only one goroutine has access to the data at a given time.
-The concept is summarized in the document [[https://golang.org/doc/effective_go.html][Effective Go]]
+The concept is summarized in the document [Effective Go](https://golang.org/doc/effective_go.html)
 (a must-read for any Go programmer):
 
-_Do_not_communicate_by_sharing_memory;_instead,_share_memory_by_communicating._
+_Do not communicate by sharing memory; instead, share memory by communicating._
 
 Consider a program that polls a list of URLs.
 In a traditional threading environment, one might structure its data like so:
@@ -102,4 +103,4 @@
 
 There are many omissions from the above code snippets.
 For a walkthrough of a complete, idiomatic Go program that uses these ideas,
-see the Codewalk [[https://golang.org/doc/codewalk/sharemem/][_Share_Memory_By_Communicating_]].
+see the Codewalk [_Share Memory By Communicating_](https://golang.org/doc/codewalk/sharemem/).
diff --git a/content/slices.article b/content/slices.article
index 324e8e1..d129ccd 100644
--- a/content/slices.article
+++ b/content/slices.article
@@ -1,20 +1,21 @@
-Arrays, slices (and strings): The mechanics of 'append'
+# Arrays, slices (and strings): The mechanics of 'append'
 26 Sep 2013
 Tags: array, slice, string, copy, append
+Summary: One of the most common features of procedural programming languages is the concept of an array. Arrays seem like simple things but there are many questions that must be answered when adding them to a language, such as:
 
 Rob Pike
 
-* Introduction
+## Introduction
 
 One of the most common features of procedural programming languages is
 the concept of an array.
 Arrays seem like simple things but there are many questions that must be
 answered when adding them to a language, such as:
 
-- fixed-size or variable-size?
-- is the size part of the type?
-- what do multidimensional arrays look like?
-- does the empty array have meaning?
+  - fixed-size or variable-size?
+  - is the size part of the type?
+  - what do multidimensional arrays look like?
+  - does the empty array have meaning?
 
 The answers to these questions affect whether arrays are just
 a feature of the language or a core part of its design.
@@ -30,7 +31,7 @@
 We'll do so by building up the pieces to explain how the `append` built-in function
 works, and why it works the way it does.
 
-* Arrays
+## Arrays
 
 Arrays are an important building block in Go, but like the foundation of a building
 they are often hidden below more visible components.
@@ -68,14 +69,14 @@
 matrix for instance—but their most common purpose in Go is to hold storage
 for a slice.
 
-* Slices: The slice header
+## Slices: The slice header
 
 Slices are where the action is, but to use them well one must understand
 exactly what they are and what they do.
 
 A slice is a data structure describing a contiguous section of an array
 stored separately from the slice variable itself.
-_A_slice_is_not_an_array_.
+_A slice is not an array_.
 A slice _describes_ a piece of an array.
 
 Given our `buffer` array variable from the previous section, we could create
@@ -153,7 +154,7 @@
 You'll often hear experienced Go programmers talk about the "slice header"
 because that really is what's stored in a slice variable.
 For instance, when you call a function that takes a slice as an argument, such as
-[[https://golang.org/pkg/bytes/#IndexRune][bytes.IndexRune]], that header is
+[bytes.IndexRune](https://golang.org/pkg/bytes/#IndexRune), that header is
 what gets passed to the function.
 In this call,
 
@@ -166,7 +167,7 @@
 but first let's see what the existence of the slice header means when you
 program with slices.
 
-* Passing slices to functions
+## Passing slices to functions
 
 It's important to understand that even though a slice contains a pointer,
 it is itself a value.
@@ -212,7 +213,7 @@
 The `slice` variable is unchanged but the returned value has the new length,
 which is then stored in `newSlice`,
 
-* Pointers to slices: Method receivers
+## Pointers to slices: Method receivers
 
 Another way to have a function modify the slice header is to pass a pointer to it.
 Here's a variant of our previous example that does this:
@@ -248,7 +249,7 @@
 
 [Advanced exercise: Convert the `ToUpper` method to handle Unicode letters, not just ASCII.]
 
-* Capacity
+## Capacity
 
 Look at the following function that extends its argument slice of `ints` by one element:
 
@@ -293,7 +294,7 @@
 		fmt.Println("slice is full!")
 	}
 
-* Make
+## Make
 
 What if we want to grow the slice beyond its capacity?
 You can't!
@@ -329,7 +330,7 @@
 
 the `gophers` slice has both its length and capacity set to 10.
 
-* Copy
+## Copy
 
 When we doubled the capacity of our slice in the previous section,
 we wrote a loop to copy the old data to the new slice.
@@ -376,7 +377,7 @@
 
 .play -edit slices/prog100.go /make/,/OMIT/
 
-* Append: An example
+## Append: An example
 
 A few sections back, we wrote an `Extend` function that extends a slice by one element.
 It was buggy, though, because if the slice's capacity was too small, the function would
@@ -445,7 +446,7 @@
 
 .play -edit slices/prog140.go /START/,/END/
 
-* Append: The built-in function
+## Append: The built-in function
 
 And so we arrive at the motivation for the design of the `append` built-in function.
 It does exactly what our `Append` example does, with equivalent efficiency, but it
@@ -469,9 +470,9 @@
 
 There are lots more examples of `append`, `copy`, and other ways to use slices
 on the community-built
-[[https://golang.org/wiki/SliceTricks]["Slice Tricks" Wiki page]].
+["Slice Tricks" Wiki page](https://golang.org/wiki/SliceTricks).
 
-* Nil
+## Nil
 
 As an aside, with our newfound knowledge we can see what the representation of a `nil` slice is.
 Naturally, it is the zero value of the slice header:
@@ -502,7 +503,7 @@
 As an example, look at the one-liner above that copies a slice by appending
 to a `nil` slice.
 
-* Strings
+## Strings
 
 Now a brief section about strings in Go in the context of slices.
 
@@ -549,9 +550,9 @@
 the benchmarks saw huge speedups as a result.
 
 There's much more to strings, of course, and a
-[[https://blog.golang.org/strings][separate blog post]] covers them in greater depth.
+[separate blog post](https://blog.golang.org/strings) covers them in greater depth.
 
-* Conclusion
+## Conclusion
 
 To understand how slices work, it helps to understand how they are implemented.
 There is a little data structure, the slice header, that is the item associated with the slice
@@ -563,15 +564,15 @@
 powerful and expressive, especially with the help of the `copy` and `append`
 built-in functions.
 
-* More reading
+## More reading
 
 There's lots to find around the intertubes about slices in Go.
 As mentioned earlier,
-the [[https://golang.org/wiki/SliceTricks]["Slice Tricks" Wiki page]]
+the ["Slice Tricks" Wiki page](https://golang.org/wiki/SliceTricks)
 has many examples.
-The [[https://blog.golang.org/go-slices-usage-and-internals][Go Slices]] blog post
+The [Go Slices](https://blog.golang.org/go-slices-usage-and-internals) blog post
 describes the memory layout details with clear diagrams.
-Russ Cox's [[https://research.swtch.com/godata][Go Data Structures]] article includes
+Russ Cox's [Go Data Structures](https://research.swtch.com/godata) article includes
 a discussion of slices along with some of Go's other internal data structures.
 
 There is much more material available, but the best way to learn about slices is to use them.
diff --git a/content/spotlight-on-external-go-libraries.article b/content/spotlight-on-external-go-libraries.article
index 75500cc..e92bdf4 100644
--- a/content/spotlight-on-external-go-libraries.article
+++ b/content/spotlight-on-external-go-libraries.article
@@ -1,57 +1,58 @@
-Spotlight on external Go libraries
+# Spotlight on external Go libraries
 3 Jun 2011
 Tags: community, libraries
+Summary: While the Go authors have been working hard at improving Go's standard library, the greater community has created a growing ecosystem of external libraries. In this post we look at some popular Go libraries and how they can be used.
 
 Andrew Gerrand
 
-* Introduction
+##
 
 While the Go authors have been working hard at improving Go's standard library,
 the greater community has created a growing ecosystem of external libraries.
 In this post we look at some popular Go libraries and how they can be used.
 
-[[http://labix.org/mgo][Mgo]] (pronounced "mango") is a MongoDB database driver.
-[[http://www.mongodb.org/][MongoDB]] is a [[http://en.wikipedia.org/wiki/Document-oriented_database][document-oriented database]]
-with a long list of features suitable for [[http://www.mongodb.org/display/DOCS/Use%2BCases][a broad range of uses]].
+[Mgo](http://labix.org/mgo) (pronounced "mango") is a MongoDB database driver.
+[MongoDB](http://www.mongodb.org/) is a [document-oriented database](http://en.wikipedia.org/wiki/Document-oriented_database)
+with a long list of features suitable for [a broad range of uses](http://www.mongodb.org/display/DOCS/Use%2BCases).
 The mgo package provides a rich, idiomatic Go API for working with MongoDB,
 from basic operations such as inserting and updating records to the more
-advanced [[http://www.mongodb.org/display/DOCS/MapReduce][MapReduce]] and
-[[http://www.mongodb.org/display/DOCS/GridFS][GridFS]] features.
+advanced [MapReduce](http://www.mongodb.org/display/DOCS/MapReduce) and
+[GridFS](http://www.mongodb.org/display/DOCS/GridFS) features.
 Mgo has a bunch of cool features including automated cluster discovery and
-result pre-fetching - see the [[http://labix.org/mgo][mgo homepage]] for
+result pre-fetching - see the [mgo homepage](http://labix.org/mgo) for
 details and example code.
 For working with large data sets Go, MongoDB,
 and mgo are a powerful combination.
 
-[[https://github.com/dchest/authcookie][Authcookie]] is a web library for
+[Authcookie](https://github.com/dchest/authcookie) is a web library for
 generating and verifying user authentication cookies.
 It allows web servers to hand out cryptographically secure tokens tied to
 a specific user that will expire after a specified time period.
 It has a simple API that makes it straightforward to add authentication
 to existing web applications.
-See the [[https://github.com/dchest/authcookie/blob/master/README.md][README file]]
+See the [README file](https://github.com/dchest/authcookie/blob/master/README.md)
 for details and example code.
 
-[[http://code.google.com/p/go-charset][Go-charset]] provides support for
+[Go-charset](http://code.google.com/p/go-charset) provides support for
 converting between Go's standard UTF-8 encoding and a variety of character sets.
 The go-charset package implements a translating io.Reader and io.Writer
 so you can wrap existing Readers and Writers (such as network connections
 or file descriptors),
 making it easy to communicate with systems that use other character encodings.
 
-[[https://github.com/madari/go-socket.io][Go-socket.io]] is a Go implementation
-of [[http://socket.io/][Socket.IO]],
+[Go-socket.io](https://github.com/madari/go-socket.io) is a Go implementation
+of [Socket.IO](http://socket.io/),
 a client/server API that allows web servers to push messages to web browsers.
 Depending on the capabilities of the user's browser,
 Socket.IO uses the best transport for the connection,
 be it modern websockets, AJAX long polling,
-or some [[http://socket.io/#transports][other mechanism]].
+or some [other mechanism](http://socket.io/#transports).
 Go-socket.io bridges the gap between Go servers and rich JavaScript clients
 for a wide range of browsers.
-To get a feel for go-socket.io see the [[https://github.com/madari/go-socket.io/blob/master/example/example.go][chat server example]].
+To get a feel for go-socket.io see the [chat server example](https://github.com/madari/go-socket.io/blob/master/example/example.go).
 
-It's worth mentioning that these packages are [[https://golang.org/cmd/goinstall/][goinstallable]].
-With an up-to-date Go [[https://golang.org/doc/install.html][installation]]
+It's worth mentioning that these packages are [goinstallable](https://golang.org/cmd/goinstall/).
+With an up-to-date Go [installation](https://golang.org/doc/install.html)
 you can install them all with a single command:
 
 	goinstall launchpad.net/mgo \
@@ -69,10 +70,10 @@
 	)
 
 Also, as they are now a part of the local Go system,
-we can inspect their documentation with [[https://golang.org/cmd/godoc/][godoc]]:
+we can inspect their documentation with [godoc](https://golang.org/cmd/godoc/):
 
 	godoc launchpad.net/mgo Database # see docs for Database type
 
 Of course, this is just the tip of the iceberg;
-there are more great Go libraries listed on the [[http://godashboard.appspot.com/package][package dashboard]]
+there are more great Go libraries listed on the [package dashboard](http://godashboard.appspot.com/package)
 and many more to come.
diff --git a/content/store.article b/content/store.article
index f295fa4..7dee6cf 100644
--- a/content/store.article
+++ b/content/store.article
@@ -1,25 +1,26 @@
-Announcing The New Go Store
+# Announcing The New Go Store
 18 Jul 2019
+Summary: **October 1, 2019, Update:** _The Go Store is currently offline._ _We are sorry for any inconvenience._ _We will update this post with any status changes._
 
 Cassandra Salisbury
 
-* Introduction
+##
 
-*October*1,*2019,*Update:* _The_Go_Store_is_currently_offline._
-_We_are_sorry_for_any_inconvenience._
-_We_will_update_this_post_with_any_status_changes._
+**October 1, 2019, Update:** _The Go Store is currently offline._
+_We are sorry for any inconvenience._
+_We will update this post with any status changes._
 
 We are excited to launch the new Go official swag and merch store, shipping worldwide.
-We are even more excited to announce that *100%*of*the*proceeds* from the Go store go directly to GoBridge.
-[[https://github.com/gobridge/about-us][GoBridge]] is a non-profit organization focused on building bridges to educate underrepresented groups by teaching technical skills and fostering diversity in the Go community.
+We are even more excited to announce that **100% of the proceeds** from the Go store go directly to GoBridge.
+[GoBridge](https://github.com/gobridge/about-us) is a non-profit organization focused on building bridges to educate underrepresented groups by teaching technical skills and fostering diversity in the Go community.
 
 .image store/gophers.jpg
 
-At the *Go*store* you’ll find our beloved gopher plushies and vinyls as well as new merchandise.
-Visit the store for 20% off with code *Gopher20* through Sunday, July 21st at 11:59 PM PST.
+At the **Go store** you’ll find our beloved gopher plushies and vinyls as well as new merchandise.
+Visit the store for 20% off with code **Gopher20** through Sunday, July 21st at 11:59 PM PST.
 
 We plan on adding stock to current items and bringing on new ones to the store.
 If we are out of stock when you go to place an order, check back again soon.
-Follow the [[https://twitter.com/golang][Twitter account]] for updates, we plan on adding new goodies for all our Go fans out there, so keep an eye out!
+Follow the [Twitter account](https://twitter.com/golang) for updates, we plan on adding new goodies for all our Go fans out there, so keep an eye out!
 
 Happy shopping!
diff --git a/content/strings.article b/content/strings.article
index 0a9bd8f..122ba7c 100644
--- a/content/strings.article
+++ b/content/strings.article
@@ -1,12 +1,13 @@
-Strings, bytes, runes and characters in Go
+# Strings, bytes, runes and characters in Go
 23 Oct 2013
 Tags: strings, bytes, runes, characters
+Summary: The [previous blog post](https://blog.golang.org/slices) explained how slices work in Go, using a number of examples to illustrate the mechanism behind their implementation. Building on that background, this post discusses strings in Go. At first, strings might seem too simple a topic for a blog post, but to use them well requires understanding not only how they work, but also the difference between a byte, a character, and a rune, the difference between Unicode and UTF-8, the difference between a string and a string literal, and other even more subtle distinctions.
 
 Rob Pike
 
-* Introduction
+## Introduction
 
-The [[https://blog.golang.org/slices][previous blog post]] explained how slices
+The [previous blog post](https://blog.golang.org/slices) explained how slices
 work in Go, using a number of examples to illustrate the mechanism behind
 their implementation.
 Building on that background, this post discusses strings in Go.
@@ -25,16 +26,16 @@
 
 An excellent introduction to some of these issues, independent of Go,
 is Joel Spolsky's famous blog post,
-[[http://www.joelonsoftware.com/articles/Unicode.html][The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)]].
+[The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)](http://www.joelonsoftware.com/articles/Unicode.html).
 Many of the points he raises will be echoed here.
 
-* What is a string?
+## What is a string?
 
 Let's start with some basics.
 
 In Go, a string is in effect a read-only slice of bytes.
 If you're at all uncertain about what a slice of bytes is or how it works,
-please read the [[https://blog.golang.org/slices][previous blog post]];
+please read the [previous blog post](https://blog.golang.org/slices);
 we'll assume here that you have.
 
 It's important to state right up front that a string holds _arbitrary_ bytes.
@@ -48,7 +49,7 @@
 
 .code strings/basic.go /const sample/
 
-* Printing strings
+## Printing strings
 
 Because some of the bytes in our sample string are not valid ASCII, not even
 valid UTF-8, printing the string directly will produce ugly output.
@@ -145,7 +146,7 @@
 [Exercise: Loop over the string using the `%q` format on each byte.
 What does the output tell you?]
 
-* UTF-8 and string literals
+## UTF-8 and string literals
 
 As we saw, indexing a string yields its bytes, not its characters: a string is just a
 bunch of bytes.
@@ -189,7 +190,7 @@
 data the editor placed in the file.
 
 In short, Go source code is UTF-8, so
-_the_source_code_for_the_string_literal_is_UTF-8_text_.
+_the source code for the string literal is UTF-8 text_.
 If that string literal contains no escape sequences, which a raw
 string cannot, the constructed string will hold exactly the
 source text  between the quotes.
@@ -210,7 +211,7 @@
 To summarize, strings can contain arbitrary bytes, but when constructed
 from string literals, those bytes are (almost always) UTF-8.
 
-* Code points, characters, and runes
+## Code points, characters, and runes
 
 We've been very careful so far in how we use the words "byte" and "character".
 That's partly because strings hold bytes, and partly because the idea of "character"
@@ -219,7 +220,7 @@
 by a single value.
 The code point U+2318, with hexadecimal value 2318, represents the symbol ⌘.
 (For lots more information about that code point, see
-[[http://unicode.org/cldr/utility/character.jsp?a=2318][its Unicode page]].)
+[its Unicode page](http://unicode.org/cldr/utility/character.jsp?a=2318).)
 
 To pick a more prosaic example, the Unicode code point U+0061 is the lower
 case Latin letter 'A': a.
@@ -247,7 +248,7 @@
 The Go language defines the word `rune` as an alias for the type `int32`, so
 programs can be clear when an integer value represents a code point.
 Moreover, what you might think of as a character constant is called a
-_rune_constant_ in Go.
+_rune constant_ in Go.
 The type and value of the expression
 
 	'⌘'
@@ -256,13 +257,13 @@
 
 To summarize, here are the salient points:
 
-- Go source code is always UTF-8.
-- A string holds arbitrary bytes.
-- A string literal, absent byte-level escapes, always holds valid UTF-8 sequences.
-- Those sequences represent Unicode code points, called runes.
-- No guarantee is made in Go that characters in strings are normalized.
+  - Go source code is always UTF-8.
+  - A string holds arbitrary bytes.
+  - A string literal, absent byte-level escapes, always holds valid UTF-8 sequences.
+  - Those sequences represent Unicode code points, called runes.
+  - No guarantee is made in Go that characters in strings are normalized.
 
-* Range loops
+## Range loops
 
 Besides the axiomatic detail that Go source code is UTF-8,
 there's really only one way that Go treats UTF-8 specially, and that is when using
@@ -287,14 +288,14 @@
 [Exercise: Put an invalid UTF-8 byte sequence into the string. (How?)
 What happens to the iterations of the loop?]
 
-* Libraries
+## Libraries
 
 Go's standard library provides strong support for interpreting UTF-8 text.
 If a `for` `range` loop isn't sufficient for your purposes,
 chances are the facility you need is provided by a package in the library.
 
 The most important such package is
-[[https://golang.org/pkg/unicode/utf8/][`unicode/utf8`]],
+[`unicode/utf8`](https://golang.org/pkg/unicode/utf8/),
 which contains
 helper routines to validate, disassemble, and reassemble UTF-8 strings.
 Here is a program equivalent to the `for` `range` example above,
@@ -310,11 +311,11 @@
 exactly the same iteration sequence.
 
 Look at the
-[[https://golang.org/pkg/unicode/utf8/][documentation]]
+[documentation](https://golang.org/pkg/unicode/utf8/)
 for the `unicode/utf8` package to see what
 other facilities it provides.
 
-* Conclusion
+## Conclusion
 
 To answer the question posed at the beginning: Strings are built from bytes
 so indexing them yields bytes, not characters.
diff --git a/content/subtests.article b/content/subtests.article
index e3c212d..54b3eb7 100644
--- a/content/subtests.article
+++ b/content/subtests.article
@@ -1,20 +1,21 @@
-Using Subtests and Sub-benchmarks
-03 Oct 2016
+# Using Subtests and Sub-benchmarks
+3 Oct 2016
 Tags: testing, hierarchy, table-driven, subtests, sub-benchmarks
+Summary: In Go 1.7, the `testing` package introduces a Run method on the [`T`](https://golang.org/pkg/testing/#T.Run) and [`B`](https://golang.org/pkg/testing/#B.Run) types that allows for the creation of subtests and sub-benchmarks. The introduction of subtests and sub-benchmarks enables better handling of failures, fine-grained control of which tests to run from the command line, control of parallelism, and often results in simpler and more maintainable code.
 
 Marcel van Lohuizen
 
-* Introduction
+## Introduction
 
 In Go 1.7, the `testing` package introduces a Run method on the
-[[https://golang.org/pkg/testing/#T.Run][`T`]] and
-[[https://golang.org/pkg/testing/#B.Run][`B`]] types
+[`T`](https://golang.org/pkg/testing/#T.Run) and
+[`B`](https://golang.org/pkg/testing/#B.Run) types
 that allows for the creation of subtests and sub-benchmarks.
 The introduction of subtests and sub-benchmarks enables better handling of
 failures, fine-grained control of which tests to run from the command line,
 control of parallelism, and often results in simpler and more maintainable code.
 
-* Table-driven tests basics
+## Table-driven tests basics
 
 Before digging into the details, let's first discuss a common
 way of writing tests in Go.
@@ -47,7 +48,7 @@
 of repetitive code compared to repeating the same code for each test
 and makes it straightforward to add more test cases.
 
-* Table-driven benchmarks
+## Table-driven benchmarks
 
 Before Go 1.7 it was not possible to use the same table-driven approach for
 benchmarks.
@@ -111,7 +112,7 @@
 Moreover, common setup code is now shared between runs while eliminating the
 need to reset the timer.
 
-* Table-driven tests using subtests
+## Table-driven tests using subtests
 
 Go 1.7 also introduces a `Run` method for creating subtests.
 This test is a rewritten version of our earlier example using subtests:
@@ -167,10 +168,10 @@
 There are several other benefits to using subtests or sub-benchmarks,
 as clarified by the following sections.
 
-* Running specific tests or benchmarks
+## Running specific tests or benchmarks
 
 Both subtests and sub-benchmarks can be singled out on the command line using
-the [[https://golang.org/cmd/go/#hdr-Description_of_testing_flags][`-run` or `-bench` flag]].
+the [`-run` or `-bench` flag](https://golang.org/cmd/go/#hdr-Description_of_testing_flags).
 Both flags take a slash-separated list of regular expressions that match the
 corresponding parts of the full name of the subtest or sub-benchmark.
 
@@ -234,7 +235,7 @@
 if there is no obvious naming scheme for subtests and the subtests
 can easily be identified by their sequence number.
 
-* Setup and Tear-down
+## Setup and Tear-down
 
 Subtests and sub-benchmarks can be used to manage common setup and tear-down code:
 
@@ -254,7 +255,7 @@
 and will run at most once.
 This applies even if any of the subtests calls `Skip`, `Fail`, or `Fatal`.
 
-* Control of Parallelism
+## Control of Parallelism
 
 Subtests allow fine-grained control over parallelism.
 To understand how to use subtests in the way
@@ -278,7 +279,7 @@
 In fact, under the hood top-level tests are implemented as subtests of
 a hidden master test.
 
-** Run a group of tests in parallel
+### Run a group of tests in parallel
 
 The above semantics allows for running a group of tests in parallel with
 each other but not with other parallel tests:
@@ -303,7 +304,7 @@
 Note that we need to capture the range variable to ensure that `tc` gets bound to
 the correct instance.
 
-** Cleaning up after a group of parallel tests
+### Cleaning up after a group of parallel tests
 
 In the previous example we used the semantics to wait on a group of parallel
 tests to complete before commencing other tests.
@@ -324,7 +325,7 @@
 The behavior of waiting on a group of parallel tests is identical to that
 of the previous example.
 
-* Conclusion
+## Conclusion
 
 Go 1.7's addition of subtests and sub-benchmarks allows you to write structured
 tests and benchmarks in a natural way that blends nicely into the existing
diff --git a/content/survey2016-results.article b/content/survey2016-results.article
index b5756cf..ec0b316 100644
--- a/content/survey2016-results.article
+++ b/content/survey2016-results.article
@@ -1,16 +1,17 @@
-Go 2016 Survey Results
-06 Mar 2017
+# Go 2016 Survey Results
+6 Mar 2017
 Tags: survey, community
+Summary: This post summarizes the result of our December 2016 user survey along with our commentary and insights. We are grateful to everyone who provided their feedback through the survey to help shape the future of Go.
 
 Steve Francia, for the Go team
 spf@golang.org
 
-* Thank you
+## Thank you
 
 This post summarizes the result of our December 2016 user survey along with our commentary and insights.
 We are grateful to everyone who provided their feedback through the survey to help shape the future of Go.
 
-* Programming background
+## Programming background
 
 Of the 3,595 survey respondents, 89% said they program in Go at work or outside of work,
 with 39% using Go both at home and at work, 27% using Go only at home, and 23% using Go only at work.
@@ -34,7 +35,7 @@
 
 .html survey2016/background.html
 
-* Go usage
+## Go usage
 
 Users are overwhelmingly happy with Go:
 they agree that they would recommend Go to others by a ratio of 19:1,
@@ -66,7 +67,7 @@
 
 .html survey2016/usage.html
 
-* Development and deployment
+## Development and deployment
 
 When asked which operating systems they develop Go on,
 63% of respondents say they use Linux, 44% use MacOS, and 19% use Windows,
@@ -78,7 +79,7 @@
 
 .html survey2016/dev.html
 
-* Working Effectively
+## Working Effectively
 
 We asked how strongly people agreed or disagreed with various statements about Go.
 Users most agreed that Go’s performance meets their needs (57:1 ratio agree versus disagree),
@@ -103,7 +104,7 @@
 
 .html survey2016/effective.html
 
-* The Go Project
+## The Go Project
 
 55% of respondents expressed interest in contributing in some way to the Go community and projects.
 Unfortunately, relatively few agreed that they felt welcome to do so (3.3:1)
@@ -123,7 +124,7 @@
 
 .html survey2016/project.html
 
-* Community
+## Community
 
 At the end of the survey, we asked some demographic questions.
 The country distribution of responses roughly matches the country distribution of site visits to golang.org,
diff --git a/content/survey2016.article b/content/survey2016.article
index 6a26bca..66923ba 100644
--- a/content/survey2016.article
+++ b/content/survey2016.article
@@ -1,51 +1,52 @@
-Participate in the 2016 Go User Survey and Company Questionnaire
+# Participate in the 2016 Go User Survey and Company Questionnaire
 13 Dec 2016
 Tags: survey, community
+Summary: The Go project wants to hear from you!  Our goal is to create the best language for developing simple, reliable, scalable software.  We are asking you to help by participating in a survey and if applicable, a company questionnaire.
 
 Steve Francia
 spf@golang.org
 
-* The Go project wants to hear from you!
+## The Go project wants to hear from you!
 
 The Go project wants to hear from you!  Our goal is to create the best language
 for developing simple, reliable, scalable software.  We are asking you to help
 by participating in a survey and if applicable, a company questionnaire.
 
-* The Go User Survey
+## The Go User Survey
 
-*Who:* If you use Go, have ever used Go, have ever stopped using Go, or have
+**Who:** If you use Go, have ever used Go, have ever stopped using Go, or have
 any interest in the language, please help by sharing your feedback to improve
 Go for you and your fellow Gophers.
 
-*Where:* Please take this 20-minute survey by December 22nd: [[https://goo.gl/NJgrHT][Go User Survey 2016]]
+**Where:** Please take this 20-minute survey by December 22nd: [Go User Survey 2016](https://goo.gl/NJgrHT)
 
 The survey is anonymous and confidential.
 
-*Why:* The Go project leadership depends on your feedback to guide the future
+**Why:** The Go project leadership depends on your feedback to guide the future
 of the Go project. Your responses will help to understand how we are doing and
 help plan improvements for the Go language, libraries, and tools.
 
 After the survey closes, we will publish the anonymous aggregate results to the Go blog.
 
-* The Go Company Questionnaire
+## The Go Company Questionnaire
 
-*Who:* If you are in a position to share details like “company name”, “if your
+**Who:** If you are in a position to share details like “company name”, “if your
 company is hiring Go developers”, and “reasons your team or company adopted Go”
 then please help us by taking this questionnaire. We only need one response per
 company (or department for larger companies).
 
-*Where:* Please take this 5-minute questionnaire by December 22nd: [[https://goo.gl/Epya2q][Go Company Questionnaire 2016]]
+**Where:** Please take this 5-minute questionnaire by December 22nd: [Go Company Questionnaire 2016](https://goo.gl/Epya2q)
 
 The questionnaire is confidential, but not anonymous.
 
-*Why:* The Go project would like to better understand the companies using Go.
+**Why:** The Go project would like to better understand the companies using Go.
 
 After the questionnaire closes the Go project leadership will use this
 information to better understand how companies are utilizing Go and in what
 ways the project can improve their experience. If you participate we may reach
 out for further information.
 
-* Spread the word!
+## Spread the word!
 
 Please help us spread the word by sharing this post on your social network
 feeds, at meetups, around your office and in other communities.
diff --git a/content/survey2017-results.article b/content/survey2017-results.article
index 59ebc9a..ef71648 100644
--- a/content/survey2017-results.article
+++ b/content/survey2017-results.article
@@ -1,18 +1,19 @@
-Go 2017 Survey Results
+# Go 2017 Survey Results
 26 Feb 2018
 Tags: survey, community
+Summary: This post summarizes the result of our 2017 user survey along with commentary and insights. It also draws key comparisons between the results of the 2016 and 2017 survey.
 
 Steve Francia
 spf@golang.org
 
-* Thank you
+## Thank you
 
 This post summarizes the result of our 2017 user survey along with commentary
 and insights. It also draws key comparisons between the results of the 2016 and
 2017 survey.
 
 This year we had 6,173 survey respondents, 70% more than the 3,595 we had in the
-[[https://blog.golang.org/survey2016-results][Go 2016 User Survey]]. In
+[Go 2016 User Survey](https://blog.golang.org/survey2016-results). In
 addition, it also had a slightly higher completion rate (84% → 87%) and a
 higher response rate to most of the questions. We believe that survey length is
 the main cause of this improvement as the 2017 survey was shortened in response
@@ -21,7 +22,7 @@
 We are grateful to everyone who provided their feedback through the survey to
 help shape the future of Go.
 
-* Programming background
+## Programming background
 
 For the first time, more survey respondents say they are paid to write Go
 than say they write it outside work. This indicates a significant shift in
@@ -45,7 +46,7 @@
 
 .html survey2017/background.html
 
-* Go usage
+## Go usage
 
 In nearly every question around the usage and perception of Go, Go has
 demonstrated improvement over our prior survey. Users are happier using Go, and
@@ -56,10 +57,10 @@
 their two biggest issues, consistent with 2016. In 2017 we laid a foundation to
 be able to address these issues. We improved our proposal and development
 process with the addition of
-[[https://golang.org/wiki/ExperienceReports][Experience Reports]] which is
+[Experience Reports](https://golang.org/wiki/ExperienceReports) which is
 enabling the project to gather and obtain feedback critical to making these
 significant changes. We also made
-[[https://golang.org/doc/go1.10#build][sigificant changes]] under the hood in
+[sigificant changes](https://golang.org/doc/go1.10#build) under the hood in
 how Go obtains, and builds packages. This is foundational work essential to
 addressing our dependency management needs.
 
@@ -76,7 +77,7 @@
 
 .html survey2017/usage.html
 
-* Development and deployment
+## Development and deployment
 
 We asked programmers which operating systems they develop Go on; the ratios of
 their responses remain consistent with last year. 64% of respondents say
@@ -99,12 +100,12 @@
 
 .html survey2017/dev.html
 
-* Working Effectively
+## Working Effectively
 
 We asked how strongly people agreed or disagreed with various statements about
 Go. All questions are repeated from last year with the addition of one new
 question which we introduced to add further clarifaction around how users are
-able to both find and *use* Go libraries.
+able to both find and **use** Go libraries.
 
 All responses either indicated a small improvement or are comparable to 2016.
 
@@ -122,7 +123,7 @@
 
 .html survey2017/effective.html
 
-* The Go Project
+## The Go Project
 
 59% of respondents expressed interest in contributing in some way to the Go
 community and projects, up from 55% last year. Respondents also indicated that
@@ -140,13 +141,13 @@
 forward. We will continue to work to improve our understanding of user needs and
 approachability.
 
-We tried some [[https://blog.golang.org/8years#TOC_1.3.][new ways]] to engage
+We tried some [new ways](https://blog.golang.org/8years#TOC_1.3.) to engage
 with users in 2017 and while progress was made, we are still working on making these
 solutions scalable for our growing community.
 
 .html survey2017/project.html
 
-* Community
+## Community
 
 At the end of the survey, we asked some demographic questions.
 
diff --git a/content/survey2017.article b/content/survey2017.article
index 8c29489..3f1f758 100644
--- a/content/survey2017.article
+++ b/content/survey2017.article
@@ -1,39 +1,40 @@
-Participate in the 2017 Go User Survey
+# Participate in the 2017 Go User Survey
 16 Nov 2017
 Tags: survey, community
+Summary: Last year we conducted the first ever [Go user survey](https://blog.golang.org/survey2016-results). Thanks to all of you, it was an overwhelming success with over 3500 responses. The survey provided key insights and helped us better plan and prioritize.
 
 Steve Francia
 spf@golang.org
 
-* The Go project wants to hear from you (again)!
+## The Go project wants to hear from you (again)!
 
 Last year we conducted the first ever
-[[https://blog.golang.org/survey2016-results][Go user survey]]. Thanks to all of you,
+[Go user survey](https://blog.golang.org/survey2016-results). Thanks to all of you,
 it was an overwhelming success with over 3500 responses. The survey provided key insights
 and helped us better plan and prioritize.
 
-We invite you to participate in the [[https://goo.gl/n9M7SB][2017 Go User Survey]].
+We invite you to participate in the [2017 Go User Survey](https://goo.gl/n9M7SB).
 
-* The Go User Survey
+## The Go User Survey
 
-*Who:* If you currently use Go, have used Go in the past, or have any interest in the language,
+**Who:** If you currently use Go, have used Go in the past, or have any interest in the language,
 please help by sharing your feedback to improve Go for you and your fellow
 Gophers.
 
-*Where:* Please take this 15-minute survey by *Friday*December*8th*: [[https://goo.gl/n9M7SB][2017 Go User Survey]]
+**Where:** Please take this 15-minute survey by **Friday December 8th**: [2017 Go User Survey](https://goo.gl/n9M7SB)
 
 The survey is anonymous and confidential.
 
-*Why:* The Go project leadership depends on your feedback to guide the future
+**Why:** The Go project leadership depends on your feedback to guide the future
 of the Go project. Your responses will help to understand what's going well
 and what's not, as well as help us prioritize improvements for the Go
 language, libraries and tools.
 
 A few weeks after the survey closes, we will publish the anonymous aggregate results to
-the Go blog. See the [[https://blog.golang.org/survey2016-results][2016 Go user survey results]]
+the Go blog. See the [2016 Go user survey results](https://blog.golang.org/survey2016-results)
 to learn what insights were gained from last year's survey.
 
-* Spread the word!
+## Spread the word!
 
 Please help us spread the word by sharing this post on your social network
-feeds, at meetups, around your office and in other communities.
\ No newline at end of file
+feeds, at meetups, around your office and in other communities.
diff --git a/content/survey2018-results.article b/content/survey2018-results.article
index f8ff4f5..f1e7e3b 100644
--- a/content/survey2018-results.article
+++ b/content/survey2018-results.article
@@ -1,48 +1,49 @@
-Go 2018 Survey Results
+# Go 2018 Survey Results
 28 Mar 2019
 Tags: survey, community
+Summary: This post summarizes the results of our 2018 user survey and draws comparisons between the results of our prior surveys from [2016](https://blog.golang.org/survey2016-results) and [2017](https://blog.golang.org/survey2017-results).
 
 Todd Kulesza, Steve Francia
 tkulesza@google.com, spf@golang.org
 
-* Thank you
+## Thank you
 
 .html survey2018/style.html
 
 This post summarizes the results of our 2018 user survey and draws comparisons
-between the results of our prior surveys from [[https://blog.golang.org/survey2016-results][2016]]
-and [[https://blog.golang.org/survey2017-results][2017]].
+between the results of our prior surveys from [2016](https://blog.golang.org/survey2016-results)
+and [2017](https://blog.golang.org/survey2017-results).
 
 This year we had 5,883 survey respondents from 103 different countries.
 We are grateful to everyone who provided their feedback through this survey
 to help shape the future of Go. Thank you!
 
-* Summary of findings
+## Summary of findings
 
-- For the first time, *half*of*survey*respondents*are*now*using*Go*as*part*of*their*daily*routine*.
-  This year also saw significant increases in the number of respondents who
-  develop in Go as part of their jobs and use Go outside of work responsibilities.
-- The most *common*uses*for*Go*remain*API/RPC*services*and*CLI*tools*.
-  Automation tasks, while not as common as CLI tools and API services,
-  are a fast-growing area for Go.
-- *Web*development*remains*the*most*common*domain* that survey respondents work in,
-  but *DevOps*showed*the*highest*year-over-year*growth* and is now the second most common domain.
-- A large majority of survey respondents said *Go*is*their*most-preferred*programming*language*,
-  despite generally feeling less proficient with it than at least one other language.
-- *VS*Code*and*GoLand*are*surging*in*popularity* and are now the most popular code editors among survey respondents.
-- Highlighting the portable nature of Go,
-  *many*Go*developers*use*more*than*one*primary*OS* for development.
-  Linux and macOS are particularly popular,
-  with a large majority of survey respondents using one or both of these operating
-  systems to write Go code.
-- Survey respondents appear to be *shifting*away*from*on-prem*Go*deployments*
-  and moving towards containers and serverless cloud deployments.
-- The majority of respondents said they feel welcome in the Go community,
-  and most ideas for improving the Go community specifically focus on *improving*the*experience*of*newcomers*.
+  - For the first time, **half of survey respondents are now using Go as part of their daily routine**.
+    This year also saw significant increases in the number of respondents who
+    develop in Go as part of their jobs and use Go outside of work responsibilities.
+  - The most **common uses for Go remain API/RPC services and CLI tools**.
+    Automation tasks, while not as common as CLI tools and API services,
+    are a fast-growing area for Go.
+  - **Web development remains the most common domain** that survey respondents work in,
+    but **DevOps showed the highest year-over-year growth** and is now the second most common domain.
+  - A large majority of survey respondents said **Go is their most-preferred programming language**,
+    despite generally feeling less proficient with it than at least one other language.
+  - **VS Code and GoLand are surging in popularity** and are now the most popular code editors among survey respondents.
+  - Highlighting the portable nature of Go,
+    **many Go developers use more than one primary OS** for development.
+    Linux and macOS are particularly popular,
+    with a large majority of survey respondents using one or both of these operating
+    systems to write Go code.
+  - Survey respondents appear to be **shifting away from on-prem Go deployments**
+    and moving towards containers and serverless cloud deployments.
+  - The majority of respondents said they feel welcome in the Go community,
+    and most ideas for improving the Go community specifically focus on **improving the experience of newcomers**.
 
 Read on for all of the details.
 
-* Programming background
+## Programming background
 
 This year's results show a significant increase in the number of survey
 respondents who are paid to write Go as part of their jobs (68% → 72%),
@@ -72,7 +73,7 @@
 who do not view software engineering as a day job:
 they also choose to hack on code outside of work responsibilities,
 and (as evidenced by 85% of respondents saying they'd prefer Go for their next project,
-see section _Attitudes_towards_Go_ below) Go is the top language they'd
+see section _Attitudes towards Go_ below) Go is the top language they'd
 prefer to use for these non-work-related projects.
 
 .image survey2018/fig4.svg _ 600
@@ -98,31 +99,31 @@
 language as their most preferred/understood (the darkest blue bars),
 which highlights three interesting bits:
 
-- While about ⅓ of respondents consider Go to be the language in which
-  they have the most expertise,
-  twice that many respondents consider it their most preferred programming language.
-  So even though many respondents feel they haven't become as proficient with
-  Go as with some other language,
-  they still frequently prefer to develop with Go.
-- Few survey respondents rank Rust as a language in which they have expertise (6.8%),
-  yet 19% rank it as a top preferred language,
-  indicating a high level of interest in Rust among this audience.
-- Only three languages have more respondents who say they prefer the language
-  than say they have expertise with it:
-  Rust (2.41:1 ratio of preference:expertise),
-  Kotlin (1.95:1), and Go (1.02:1).
-  Higher preference than expertise implies interest—but little direct experience—in a language,
-  while lower preference than expertise numbers suggests barriers to proficient use.
-  Ratios near 1.0 suggest that most developers are able to work effectively
-  _and_ enjoyably with a given language.
-  This data is corroborated by [[https://insights.stackoverflow.com/survey/2018/#most-loved-dreaded-and-wanted][Stack Overflow's 2018 developer survey]],
-  which also found Rust, Kotlin, and Go to be among the most-preferred programming languages.
+  - While about ⅓ of respondents consider Go to be the language in which
+    they have the most expertise,
+    twice that many respondents consider it their most preferred programming language.
+    So even though many respondents feel they haven't become as proficient with
+    Go as with some other language,
+    they still frequently prefer to develop with Go.
+  - Few survey respondents rank Rust as a language in which they have expertise (6.8%),
+    yet 19% rank it as a top preferred language,
+    indicating a high level of interest in Rust among this audience.
+  - Only three languages have more respondents who say they prefer the language
+    than say they have expertise with it:
+    Rust (2.41:1 ratio of preference:expertise),
+    Kotlin (1.95:1), and Go (1.02:1).
+    Higher preference than expertise implies interest—but little direct experience—in a language,
+    while lower preference than expertise numbers suggests barriers to proficient use.
+    Ratios near 1.0 suggest that most developers are able to work effectively
+    _and_ enjoyably with a given language.
+    This data is corroborated by [Stack Overflow's 2018 developer survey](https://insights.stackoverflow.com/survey/2018/#most-loved-dreaded-and-wanted),
+    which also found Rust, Kotlin, and Go to be among the most-preferred programming languages.
 
 .image survey2018/fig6.svg _ 600
 .image survey2018/fig7.svg _ 600
 .html survey2018/reading.html
 
-* Development domains
+## Development domains
 
 Survey respondents reported working on a median of three different domains,
 with a large majority (72%) working in 2-5 different areas.
@@ -156,10 +157,10 @@
 To better understand the contexts in which developers are using Go,
 we added a question about Go adoption across different industries.
 Perhaps unsurprisingly for a relatively new language,
-over half of survey respondents work in companies in the _Internet/web_services_
+over half of survey respondents work in companies in the _Internet/web services_
 and _Software_ categories (i.e., tech companies).
-The only other industries with >3% responses were _Finance,_banking,_or_insurance_
-and _Media,_advertising,_publishing,_or_entertainment_.
+The only other industries with >3% responses were _Finance, banking, or insurance_
+and _Media, advertising, publishing, or entertainment_.
 (In the chart below, we've condensed all of the categories with response
 rates below 3% into the "Other" category.) We'll continue tracking Go's
 adoption across industries to better understand developer needs outside
@@ -167,10 +168,10 @@
 
 .image survey2018/fig10.svg _ 600
 
-* Attitudes towards Go
+## Attitudes towards Go
 
 This year we added a question asking "How likely are you to recommend Go
-to a friend or colleague?" to calculate our [[https://en.wikipedia.org/wiki/Net_Promoter][Net Promoter Score]].
+to a friend or colleague?" to calculate our [Net Promoter Score](https://en.wikipedia.org/wiki/Net_Promoter).
 This score attempts to measure how many more "promoters" a product has than
 "detractors" and ranges from -100 to 100;
 a positive value suggests most people are likely to recommend using a product,
@@ -189,8 +190,8 @@
 while a plurality feel that Go is at least somewhat critical to their company's success (44%).
 While all of these metrics showed an increase in 2017,
 they remained mostly stable this year.
-(The wording of the first question changed in 2018 from "_I_would_recommend_using_Go_to_others_"
-to "_Overall,_I'm_happy_with_Go_",
+(The wording of the first question changed in 2018 from "_I would recommend using Go to others_"
+to "_Overall, I'm happy with Go_",
 so those results are not directly comparable.)
 
 .image survey2018/fig12.svg _ 600
@@ -209,16 +210,16 @@
 counting the number of responses that supported each theme.
 The top three major challenges we identified are:
 
-- Package management (e.g., "Keeping up with vendoring",
-  "dependency / packet [sic] management / vendoring not unified")
-- Differences from more familiar programming languages (e.g.,
-  "syntax close to C-languages with slightly different semantics makes me
-  look up references somewhat more than I'd like",
-  "coworkers who come from non-Go backgrounds trying to use Go as a version
-  of their previous language but with channels and Goroutines")
-- Lack of generics (e.g., "Lack of generics makes it difficult to persuade
-  people who have not tried Go that they would find it efficient.",
-  "Hard to build richer abstractions (want generics)")
+  - Package management (e.g., "Keeping up with vendoring",
+    "dependency / packet [sic] management / vendoring not unified")
+  - Differences from more familiar programming languages (e.g.,
+    "syntax close to C-languages with slightly different semantics makes me
+    look up references somewhat more than I'd like",
+    "coworkers who come from non-Go backgrounds trying to use Go as a version
+    of their previous language but with channels and Goroutines")
+  - Lack of generics (e.g., "Lack of generics makes it difficult to persuade
+    people who have not tried Go that they would find it efficient.",
+    "Hard to build richer abstractions (want generics)")
 
 .image survey2018/fig13.svg _ 600
 .image survey2018/fig14.svg _ 600
@@ -252,7 +253,7 @@
 .image survey2018/fig15.svg _ 600
 .image survey2018/fig29.svg _ 600
 
-* Development environments
+## Development environments
 
 We asked respondents which operating systems they primarily use when writing Go code.
 A majority (65%) of respondents said they use Linux,
@@ -282,10 +283,10 @@
 Like the "biggest challenge" question above,
 participants could write in their own response rather than select from a
 multiple-choice list.
-A thematic analysis on the responses revealed that _improved_debugging_support_ (e.g.,
+A thematic analysis on the responses revealed that _improved debugging support_ (e.g.,
 "Live debugging", "Integrated debugging",
 "Even better debugging") was the most-common request,
-followed by _improved_code_completion_ (e.g.,
+followed by _improved code completion_ (e.g.,
 "autocomplete performance and quality", "smarter autocomplete").
 Other requests include better integration with Go's CLI toolchain,
 better support for modules/packages, and general performance improvements.
@@ -306,7 +307,7 @@
 
 .image survey2018/fig19.svg _ 600
 
-* Deployments and services
+## Deployments and services
 
 For 2018 we see a continuation of the trend from on-prem to cloud hosting
 for both Go and non-Go deployments.
@@ -338,7 +339,7 @@
 
 .image survey2018/fig21.svg _ 600
 
-* Go community
+## Go community
 
 The top community sources for finding answers to Go questions continue to
 be Stack Overflow (23% of respondents marked it as their top source),
@@ -377,7 +378,7 @@
 For 2018, we saw a similar percentage of respondents (12%) identify as part
 of an under-represented group,
 and this was paired with a significant decrease in the percentage of respondents
-who do *not* identify as part of an under-represented group.
+who do **not** identify as part of an under-represented group.
 In 2017, for every person who identified as part of an under-represented group,
 3.5 people identified as not part of an under-represented group (3.5:1 ratio).
 In 2018 that ratio improved to 3.08:1. This suggests that the Go community
@@ -406,15 +407,15 @@
 "What changes would make the Go community more welcoming?".
 Respondents' comments can be broadly grouped into four categories:
 
-- Reduce a perception of elitism, especially for newcomers to Go (e.g.,
-  "less dismissiveness", "Less defensiveness and hubris")
-- Increase transparency at the leadership level (e.g.,
-  "Future direction and planning discussions",
-  "Less top down leadership", "More democratic")
-- Increase introductory resources (e.g., "A more clear introduction for contributors",
-  "Fun challenges to learn best practices")
-- More events and meetups, with a focus on covering a larger geographic area (e.g.,
-  "More meetups & social events", "Events in more cities")
+  - Reduce a perception of elitism, especially for newcomers to Go (e.g.,
+    "less dismissiveness", "Less defensiveness and hubris")
+  - Increase transparency at the leadership level (e.g.,
+    "Future direction and planning discussions",
+    "Less top down leadership", "More democratic")
+  - Increase introductory resources (e.g., "A more clear introduction for contributors",
+    "Fun challenges to learn best practices")
+  - More events and meetups, with a focus on covering a larger geographic area (e.g.,
+    "More meetups & social events", "Events in more cities")
 
 This feedback is very helpful and gives us concrete areas we can focus on
 to improve the experience of being a Go developer.
@@ -424,7 +425,7 @@
 .image survey2018/fig22.svg _ 600
 .image survey2018/fig23.svg _ 600
 
-* Conclusion
+## Conclusion
 
 We hope you've enjoyed seeing the results of our 2018 developer survey.
 These results are impacting our 2019 planning,
diff --git a/content/survey2018.article b/content/survey2018.article
index 2ef3189..2085f82 100644
--- a/content/survey2018.article
+++ b/content/survey2018.article
@@ -1,31 +1,32 @@
-Participate in the 2018 Go User Survey
+# Participate in the 2018 Go User Survey
 8 Nov 2018
 Tags: survey, community
+Summary: In [2017](https://blog.golang.org/survey2017-results) & [2016](https://blog.golang.org/survey2016-results), thousands of you helped the project by lending your voice via the Go user survey. In October, hundreds of companies helped us understand how enterprises are using Go by taking the Go company questionnaire. These surveys and questionnaires have played an enormous role in driving changes to our language and community, from [our new code of conduct](https://blog.golang.org/conduct-2018), to our [latest release Go 1.11](https://blog.golang.org/go1.11).
 
 Ran Tao, Steve Francia
 spf@golang.org
 
-* The Go project wants to hear from you, the Go community!
+## The Go project wants to hear from you, the Go community!
 
-In [[https://blog.golang.org/survey2017-results][2017]] &
-[[https://blog.golang.org/survey2016-results][2016]], thousands of you helped the
+In [2017](https://blog.golang.org/survey2017-results) &
+[2016](https://blog.golang.org/survey2016-results), thousands of you helped the
 project by lending your voice via the Go user survey. In October, hundreds of
 companies helped us understand how enterprises are using Go by taking the Go company
 questionnaire. These surveys and questionnaires have played an enormous role in
 driving changes to our language and community, from
-[[https://blog.golang.org/conduct-2018][our new code of conduct]], to our
-[[https://blog.golang.org/go1.11][latest release Go 1.11]].
+[our new code of conduct](https://blog.golang.org/conduct-2018), to our
+[latest release Go 1.11](https://blog.golang.org/go1.11).
 
-Today we are conducting the 2018 Go user survey. We’d like to hear from *all* Go
+Today we are conducting the 2018 Go user survey. We’d like to hear from **all** Go
 users in order to help us to create the best programming language that fits the
 needs and desires of the people closest to it. Please help us shape the future of Go
 by participating in the 15-minute 2018 Go user survey by November 30th:
-[[https://goo.gl/8Vzquh][*Go*User*Survey*2018*]].
+[**Go User Survey 2018**](https://goo.gl/8Vzquh).
 
-This survey is _confidential_and_anonymous_. For more information,
-please refer to Google’s privacy policy [[https://policies.google.com/privacy][here]].
+This survey is _confidential and anonymous_. For more information,
+please refer to Google’s privacy policy [here](https://policies.google.com/privacy).
 
-* Spread the word!
+## Spread the word!
 
 We need as many Gophers as possible to participate in this survey to help us better
 understand our global user base. We’d be grateful if you would spread the word by
diff --git a/content/survey2019.article b/content/survey2019.article
index 1d8ef4a..243bbec 100644
--- a/content/survey2019.article
+++ b/content/survey2019.article
@@ -1,21 +1,22 @@
-Announcing the 2019 Go Developer Survey
+# Announcing the 2019 Go Developer Survey
 20 Nov 2019
 Tags: survey, community
+Summary: Since 2016, thousands of Gophers around the world have helped the Go project by sharing your thoughts via our annual Go Developer Survey. Your feedback has played an enormous role in driving changes to our language, ecosystem, and community, including [the gopls language server](https://about.sourcegraph.com/go/gophercon-2019-go-pls-stop-breaking-my-editor), new [error-handling mechanics](https://blog.golang.org/go1.13-errors), the [module mirror](https://blog.golang.org/module-mirror-launch), and so much more from the latest [Go 1.13 release](https://blog.golang.org/go1.13). And of course, we publicly share [each](https://blog.golang.org/survey2016-results) [year's](https://blog.golang.org/survey2017-results) [results](https://blog.golang.org/survey2018-results), so we can all benefit from the community's insights.
 
 Todd Kulesza
 tkulesza@google.com
 
-* Help shape the future of Go
+## Help shape the future of Go
 
 Since 2016, thousands of Gophers around the world have helped the Go project
 by sharing your thoughts via our annual Go Developer Survey.
 Your feedback has played an enormous role in driving changes to our language,
-ecosystem, and community, including [[https://about.sourcegraph.com/go/gophercon-2019-go-pls-stop-breaking-my-editor][the gopls language server]],
-new [[https://blog.golang.org/go1.13-errors][error-handling mechanics]],
-the [[https://blog.golang.org/module-mirror-launch][module mirror]],
-and so much more from the latest [[https://blog.golang.org/go1.13][Go 1.13 release]].
-And of course, we publicly share [[https://blog.golang.org/survey2016-results][each]]
-[[https://blog.golang.org/survey2017-results][year's]] [[https://blog.golang.org/survey2018-results][results]],
+ecosystem, and community, including [the gopls language server](https://about.sourcegraph.com/go/gophercon-2019-go-pls-stop-breaking-my-editor),
+new [error-handling mechanics](https://blog.golang.org/go1.13-errors),
+the [module mirror](https://blog.golang.org/module-mirror-launch),
+and so much more from the latest [Go 1.13 release](https://blog.golang.org/go1.13).
+And of course, we publicly share [each](https://blog.golang.org/survey2016-results)
+[year's](https://blog.golang.org/survey2017-results) [results](https://blog.golang.org/survey2018-results),
 so we can all benefit from the community's insights.
 
 Today we are launching the 2019 Go Developer Survey.
@@ -24,9 +25,9 @@
 to help ensure the language, community, and ecosystem fit the needs of the
 people closest to it.
 Please help us shape Go's future by participating in this 15-minute survey by December 15th:
-[[https://google.qualtrics.com/jfe/form/SV_b1xqnBCMpZAhJZ3][Take the 2019 Go Developer Survey]].
+[Take the 2019 Go Developer Survey](https://google.qualtrics.com/jfe/form/SV_b1xqnBCMpZAhJZ3).
 
-* Spread the word!
+## Spread the word!
 
 We need as many Gophers as possible to participate in this survey to help
 us better understand our global user base.
diff --git a/content/the-app-engine-sdk-and-workspaces-gopath.article b/content/the-app-engine-sdk-and-workspaces-gopath.article
index 73ae7d9..df53b35 100644
--- a/content/the-app-engine-sdk-and-workspaces-gopath.article
+++ b/content/the-app-engine-sdk-and-workspaces-gopath.article
@@ -1,27 +1,28 @@
-The App Engine SDK and workspaces (GOPATH)
+# The App Engine SDK and workspaces (GOPATH)
 9 Jan 2013
 Tags: appengine, tools, gopath
+Summary: When we released Go 1 we introduced the [go tool](https://golang.org/cmd/go/) and, with it, the concept of workspaces. Workspaces (specified by the GOPATH environment variable) are a convention for organizing code that simplifies fetching, building, and installing Go packages. If you're not familiar with workspaces, please read [this article](https://golang.org/doc/code.html) or watch [this screencast](http://www.youtube.com/watch?v=XCsL89YtqCs) before reading on.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-When we released Go 1 we introduced the [[https://golang.org/cmd/go/][go tool]] and,
+When we released Go 1 we introduced the [go tool](https://golang.org/cmd/go/) and,
 with it, the concept of workspaces.
 Workspaces (specified by the GOPATH environment variable) are a convention
 for organizing code that simplifies fetching,
 building, and installing Go packages.
-If you're not familiar with workspaces, please read [[https://golang.org/doc/code.html][this article]]
-or watch [[http://www.youtube.com/watch?v=XCsL89YtqCs][this screencast]] before reading on.
+If you're not familiar with workspaces, please read [this article](https://golang.org/doc/code.html)
+or watch [this screencast](http://www.youtube.com/watch?v=XCsL89YtqCs) before reading on.
 
 Until recently, the tools in the App Engine SDK were not aware of workspaces.
-Without workspaces the "[[https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies][go get]]"
+Without workspaces the "[go get](https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies)"
 command cannot function,
 and so app authors had to install and update their app dependencies manually. It was a pain.
 
 This has all changed with version 1.7.4 of the App Engine SDK.
-The [[https://developers.google.com/appengine/docs/go/tools/devserver][dev_appserver]]
-and [[https://developers.google.com/appengine/docs/go/tools/uploadinganapp][appcfg]]
+The [dev\_appserver](https://developers.google.com/appengine/docs/go/tools/devserver)
+and [appcfg](https://developers.google.com/appengine/docs/go/tools/uploadinganapp)
 tools are now workspace-aware.
 When running locally or uploading an app,
 these tools now search for dependencies in the workspaces specified by the
@@ -32,76 +33,76 @@
 
 For example, let's say you want to build an app that uses OAuth 2.0 to authenticate
 with a remote service.
-A popular OAuth 2.0 library for Go is the [[https://godoc.org/golang.org/x/oauth2][oauth2]] package,
+A popular OAuth 2.0 library for Go is the [oauth2](https://godoc.org/golang.org/x/oauth2) package,
 which you can install to your workspace with this command:
 
-	     go get golang.org/x/oauth2
+	go get golang.org/x/oauth2
 
 When writing your App Engine app, import the oauth package just as you would in a regular Go program:
 
-	     import "golang.org/x/oauth2"
+	import "golang.org/x/oauth2"
 
-Now, whether running your app with the dev_appserver or deploying it with appcfg,
+Now, whether running your app with the dev\_appserver or deploying it with appcfg,
 the tools will find the oauth package in your workspace. It just works.
 
-* Hybrid stand-alone/App Engine apps
+## Hybrid stand-alone/App Engine apps
 
-The Go App Engine SDK builds on Go's standard [[https://golang.org/pkg/net/http/][net/http]]
+The Go App Engine SDK builds on Go's standard [net/http](https://golang.org/pkg/net/http/)
 package to serve web requests and,
 as a result, many Go web servers can be run on App Engine with only a few changes.
-For example, [[https://golang.org/cmd/godoc/][godoc]] is included in the
+For example, [godoc](https://golang.org/cmd/godoc/) is included in the
 Go distribution as a stand-alone program,
-but it can also run as an App Engine app (godoc serves [[https://golang.org/][golang.org]] from App Engine).
+but it can also run as an App Engine app (godoc serves [golang.org](https://golang.org/) from App Engine).
 
 But wouldn't it be nice if you could write a program that is both a stand-alone
-web server and an App Engine app? By using [[https://golang.org/pkg/go/build/#hdr-Build_Constraints][build constraints]], you can.
+web server and an App Engine app? By using [build constraints](https://golang.org/pkg/go/build/#hdr-Build_Constraints), you can.
 
 Build constraints are line comments that determine whether a file should
 be included in a package.
 They are most often used in code that handles a variety of operating systems
 or processor architectures.
-For instance, the [[https://golang.org/pkg/path/filepath/][path/filepath]]
-package includes the file [[https://golang.org/src/pkg/path/filepath/symlink.go][symlink.go]],
+For instance, the [path/filepath](https://golang.org/pkg/path/filepath/)
+package includes the file [symlink.go](https://golang.org/src/pkg/path/filepath/symlink.go),
 which specifies a build constraint to ensure that it is not built on Windows
 systems (which do not have symbolic links):
 
-	    // +build !windows
+	// +build !windows
 
 The App Engine SDK introduces a new build constraint term: "appengine". Files that specify
 
-	    // +build appengine
+	// +build appengine
 
 will be built by the App Engine SDK and ignored by the go tool. Conversely, files that specify
 
-	    // +build !appengine
+	// +build !appengine
 
 are ignored by the App Engine SDK, while the go tool will happily build them.
 
-The [[http://code.google.com/p/goprotobuf/][goprotobuf]] library uses this
+The [goprotobuf](http://code.google.com/p/goprotobuf/) library uses this
 mechanism to provide two implementations of a key part of its encode/decode machinery:
-[[http://code.google.com/p/goprotobuf/source/browse/proto/pointer_unsafe.go][pointer_unsafe.go]]
+[pointer\_unsafe.go](http://code.google.com/p/goprotobuf/source/browse/proto/pointer_unsafe.go)
 is the faster version that cannot be used on App Engine because it uses
-the [[https://golang.org/pkg/unsafe/][unsafe package]],
-while [[http://code.google.com/p/goprotobuf/source/browse/proto/pointer_reflect.go][pointer_reflect.go]]
-is a slower version that avoids unsafe by using the [[https://golang.org/pkg/reflect/][reflect package]] instead.
+the [unsafe package](https://golang.org/pkg/unsafe/),
+while [pointer\_reflect.go](http://code.google.com/p/goprotobuf/source/browse/proto/pointer_reflect.go)
+is a slower version that avoids unsafe by using the [reflect package](https://golang.org/pkg/reflect/) instead.
 
 Let's take a simple Go web server and turn it into a hybrid app. This is main.go:
 
-	    package main
+	package main
 
-	    import (
-	        "fmt"
-	        "net/http"
-	    )
+	import (
+	    "fmt"
+	    "net/http"
+	)
 
-	    func main() {
-	        http.HandleFunc("/", handler)
-	        http.ListenAndServe("localhost:8080", nil)
-	    }
+	func main() {
+	    http.HandleFunc("/", handler)
+	    http.ListenAndServe("localhost:8080", nil)
+	}
 
-	    func handler(w http.ResponseWriter, r *http.Request) {
-	        fmt.Fprint(w, "Hello!")
-	    }
+	func handler(w http.ResponseWriter, r *http.Request) {
+	    fmt.Fprint(w, "Hello!")
+	}
 
 Build this with the go tool and you'll get a stand-alone web server executable.
 
@@ -110,20 +111,20 @@
 To convert main.go to an App Engine app, drop the call to ListenAndServe
 and register the handler in an init function (which runs before main). This is app.go:
 
-	    package main
+	package main
 
-	    import (
-	        "fmt"
-	        "net/http"
-	    )
+	import (
+	    "fmt"
+	    "net/http"
+	)
 
-	    func init() {
-	        http.HandleFunc("/", handler)
-	    }
+	func init() {
+	    http.HandleFunc("/", handler)
+	}
 
-	    func handler(w http.ResponseWriter, r *http.Request) {
-	        fmt.Fprint(w, "Hello!")
-	    }
+	func handler(w http.ResponseWriter, r *http.Request) {
+	    fmt.Fprint(w, "Hello!")
+	}
 
 To make this a hybrid app, we need to split it into an App Engine-specific part,
 an stand-alone binary-specific part, and the parts common to both versions.
@@ -137,19 +138,19 @@
 main.go runs the web server. It includes the "!appengine" build constraint,
 as it must only included when building the stand-alone binary.
 
-	    // +build !appengine
+	// +build !appengine
 
-	    package main
+	package main
 
-	    import "net/http"
+	import "net/http"
 
-	    func main() {
-	        http.ListenAndServe("localhost:8080", nil)
-	    }
+	func main() {
+	    http.ListenAndServe("localhost:8080", nil)
+	}
 
-To see a more complex hybrid app, take a look at the [[https://godoc.org/golang.org/x/tools/present][present tool]].
+To see a more complex hybrid app, take a look at the [present tool](https://godoc.org/golang.org/x/tools/present).
 
-* Conclusions
+## Conclusions
 
 We hope these changes will make it easier to work on apps with external dependencies,
 and to maintain code bases that contain both stand-alone programs and App Engine apps.
diff --git a/content/the-path-to-go-1.article b/content/the-path-to-go-1.article
index 1bb1f5f..15eb3ee 100644
--- a/content/the-path-to-go-1.article
+++ b/content/the-path-to-go-1.article
@@ -1,12 +1,13 @@
-The path to Go 1
+# The path to Go 1
 14 Mar 2013
 Tags: talk, video, go1
+Summary: In July 2012, Rob Pike and I presented a talk at OSCON titled _The path to Go 1_. In it we explain how Go 1 came to be, and outline the process by which Go was refined and stabilized to become the clean, consistent programming environment that it is today. We present the major highlights of the release and discuss the details behind some specific libraries and tools.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-In July 2012, Rob Pike and I presented a talk at OSCON titled _The_path_to_Go_1_.
+In July 2012, Rob Pike and I presented a talk at OSCON titled _The path to Go 1_.
 In it we explain how Go 1 came to be, and outline the process by which Go
 was refined and stabilized to become the clean,
 consistent programming environment that it is today.
@@ -15,7 +16,7 @@
 
 .iframe //www.youtube.com/embed/bj9T2c2Xk_s 309 550
 
-The slides for the talk are [[https://talks.golang.org/2012/go1.slide][available here]].
+The slides for the talk are [available here](https://talks.golang.org/2012/go1.slide).
 
 It's almost a year since we cut Go 1.0 and we are now busy preparing Go 1.1.
 The release will include performance improvements to the gc compiler,
diff --git a/content/third-party-libraries-goprotobuf-and.article b/content/third-party-libraries-goprotobuf-and.article
index b356e81..e58c132 100644
--- a/content/third-party-libraries-goprotobuf-and.article
+++ b/content/third-party-libraries-goprotobuf-and.article
@@ -1,13 +1,14 @@
-Third-party libraries: goprotobuf and beyond
+# Third-party libraries: goprotobuf and beyond
 20 Apr 2010
 Tags: protobuf, community
+Summary: On March 24, Rob Pike announced [goprotobuf](http://code.google.com/p/goprotobuf/), the Go bindings of Google's data interchange format [Protocol Buffers](http://code.google.com/apis/protocolbuffers/docs/overview.html), called protobufs for short. With this announcement, Go joins C++, Java, and Python as languages providing official protobuf implementations. This marks an important milestone in enabling the interoperability between existing systems and those built in Go.
 
 Andrew Gerrand
 
-* Introduction
+##
 
-On March 24, Rob Pike announced [[http://code.google.com/p/goprotobuf/][goprotobuf]],
-the Go bindings of Google's data interchange format [[http://code.google.com/apis/protocolbuffers/docs/overview.html][Protocol Buffers]],
+On March 24, Rob Pike announced [goprotobuf](http://code.google.com/p/goprotobuf/),
+the Go bindings of Google's data interchange format [Protocol Buffers](http://code.google.com/apis/protocolbuffers/docs/overview.html),
 called protobufs for short.
 With this announcement, Go joins C++, Java,
 and Python as languages providing official protobuf implementations.
@@ -20,27 +21,27 @@
 and a Go package that implements run-time support for encoding (marshaling),
 decoding (unmarshaling), and accessing protocol buffers.
 
-To use goprotobuf, you first need to have both Go and [[http://code.google.com/p/protobuf/][protobuf]] installed.
-You can then install the 'proto' package with [[https://golang.org/cmd/goinstall/][goinstall]]:
+To use goprotobuf, you first need to have both Go and [protobuf](http://code.google.com/p/protobuf/) installed.
+You can then install the 'proto' package with [goinstall](https://golang.org/cmd/goinstall/):
 
 	goinstall goprotobuf.googlecode.com/hg/proto
 
 And then install the protobuf compiler plugin:
 
-	 cd $GOROOT/src/pkg/goprotobuf.googlecode.com/hg/compiler
-	 make install
+	cd $GOROOT/src/pkg/goprotobuf.googlecode.com/hg/compiler
+	make install
 
-For more detail see the project's [[http://code.google.com/p/goprotobuf/source/browse/README][README]] file.
+For more detail see the project's [README](http://code.google.com/p/goprotobuf/source/browse/README) file.
 
-This is one of a growing list of third-party [[http://godashboard.appspot.com/package][Go projects]].
+This is one of a growing list of third-party [Go projects](http://godashboard.appspot.com/package).
 Since the announcement of goprotobuf, the X Go bindings have been spun off
-from the standard library to the [[http://code.google.com/p/x-go-binding/][x-go-binding]] project,
-and work has begun on a [[http://www.freetype.org/][Freetype]] port,
-[[http://code.google.com/p/freetype-go/][freetype-go]].
+from the standard library to the [x-go-binding](http://code.google.com/p/x-go-binding/) project,
+and work has begun on a [Freetype](http://www.freetype.org/) port,
+[freetype-go](http://code.google.com/p/freetype-go/).
 Other popular third-party projects include the lightweight web framework
-[[http://github.com/hoisie/web.go][web.go]],
-and the Go GTK bindings [[http://github.com/mattn/go-gtk][gtk-go]].
+[web.go](http://github.com/hoisie/web.go),
+and the Go GTK bindings [gtk-go](http://github.com/mattn/go-gtk).
 
 We wish to encourage the development of other useful packages by the open source community.
 If you're working on something, don't keep it to yourself - let us know
-through our mailing list [[http://groups.google.com/group/golang-nuts][golang-nuts]].
+through our mailing list [golang-nuts](http://groups.google.com/group/golang-nuts).
diff --git a/content/toward-go2.article b/content/toward-go2.article
index 584883e..c097242 100644
--- a/content/toward-go2.article
+++ b/content/toward-go2.article
@@ -1,13 +1,14 @@
-Toward Go 2
+# Toward Go 2
 13 Jul 2017
 Tags: community
+Summary: [This is the text of [my talk today](https://www.youtube.com/watch?v=0Zbh_vmAKvk) at Gophercon 2017, asking for the entire Go community's help as we discuss and plan Go 2.]
 
 Russ Cox
 
-* Introduction
+## Introduction
 
 [This is the text of
-[[https://www.youtube.com/watch?v=0Zbh_vmAKvk][my talk today]]
+[my talk today](https://www.youtube.com/watch?v=0Zbh_vmAKvk)
 at Gophercon 2017, asking for the entire Go community's
 help as we discuss and plan Go 2.]
 
@@ -21,7 +22,7 @@
 
 The next year, Ian Lance Taylor and I joined the team, and together
 the five of us built two compilers and a standard library, leading up
-to the [[https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html][open-source release]] on November 10, 2009.
+to the [open-source release](https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html) on November 10, 2009.
 
 .html toward-go2/div-indent.html
 .image toward-go2/tweet.png _ 467
@@ -29,14 +30,14 @@
 
 For the next two years, with the help of the new Go open source
 community, we experimented with changes large and small, refining Go
-and leading to the [[https://blog.golang.org/preview-of-go-version-1][plan for Go 1]], proposed on October 5, 2011.
+and leading to the [plan for Go 1](https://blog.golang.org/preview-of-go-version-1), proposed on October 5, 2011.
 
 .html toward-go2/div-indent.html
 .image toward-go2/go1-preview.png _ 560
 .html toward-go2/div-end.html
 
 With more help from the Go community, we revised and implemented that
-plan, eventually [[https://blog.golang.org/go-version-1-is-released][releasing Go 1]] on March 28, 2012.
+plan, eventually [releasing Go 1](https://blog.golang.org/go-version-1-is-released) on March 28, 2012.
 
 .html toward-go2/div-indent.html
 .image toward-go2/go1-release.png _ 556
@@ -51,7 +52,7 @@
 programs nearly every week. We understood that this was keeping Go
 from use in production settings, where programs could not be rewritten
 weekly to keep up with language changes.
-As the [[https://blog.golang.org/go-version-1-is-released][blog post announcing Go 1]] says, the driving motivation was to provide a stable foundation
+As the [blog post announcing Go 1](https://blog.golang.org/go-version-1-is-released) says, the driving motivation was to provide a stable foundation
 for creating reliable products, projects, and publications (blogs,
 tutorials, conference talks, and books), to make users confident that
 their programs would continue to compile and run without change for
@@ -63,7 +64,7 @@
 own projects and improving the implementation: we ported Go to many
 new systems, we rewrote nearly every performance-critical piece to
 make Go run more efficiently, and we added key tools like the
-[[https://blog.golang.org/race-detector][race detector]].
+[race detector](https://blog.golang.org/race-detector).
 
 Now we have five years of experience using Go to build large,
 production-quality systems. We have developed a sense of what works
@@ -79,7 +80,7 @@
 problems we might try to solve; the possible kinds of solutions; how
 we will deliver Go 2; and how all of you can help.
 
-* Goals
+## Goals
 
 The goals we have for Go today are the same as in 2007. We want to
 make programmers more effective at managing two kinds of scale:
@@ -99,15 +100,15 @@
 scale.
 
 (For more about these goals, see
-Rob Pike's 2012 article “[[https://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]”
-and my GopherCon 2015 talk “[[https://blog.golang.org/open-source][Go, Open Source, Community]].”)
+Rob Pike's 2012 article “[Go at Google: Language Design in the Service of Software Engineering](https://talks.golang.org/2012/splash.article)”
+and my GopherCon 2015 talk “[Go, Open Source, Community](https://blog.golang.org/open-source).”)
 
-* Constraints
+## Constraints
 
 The goals for Go have not changed since the beginning, but the
 constraints on Go certainly have. The most important constraint is
 existing Go usage. We estimate that there are at least
-[[https://research.swtch.com/gophercount][half a million Go developers worldwide]],
+[half a million Go developers worldwide](https://research.swtch.com/gophercount),
 which means there are millions of Go source files and at
 least a billion of lines of Go code. Those programmers and that source
 code represent Go's success, but they are also the main constraint on
@@ -144,7 +145,7 @@
 topics not yet suggested. We can do only a few of those major changes.
 We will have to choose carefully.
 
-* Process
+## Process
 
 That raises an important question. What is the process for developing
 Go?
@@ -202,12 +203,12 @@
 
 (For more about the development of Go 1 and the shift away from
 language changes, see Rob Pike and Andrew Gerrand's
-OSCON 2012 talk “[[https://blog.golang.org/the-path-to-go-1][The Path to Go 1]].”
+OSCON 2012 talk “[The Path to Go 1](https://blog.golang.org/the-path-to-go-1).”
 For more about the proposal process, see
-Andrew Gerrand's GopherCon 2015 talk “[[https://www.youtube.com/watch?v=0ht89TxZZnk][How Go was Made]]” and the
-[[https://golang.org/s/proposal][proposal process documentation]].)
+Andrew Gerrand's GopherCon 2015 talk “[How Go was Made](https://www.youtube.com/watch?v=0ht89TxZZnk)” and the
+[proposal process documentation](https://golang.org/s/proposal).)
 
-* Explaining Problems
+## Explaining Problems
 
 .html toward-go2/div-indent.html
 .image toward-go2/process2.png _ 410
@@ -263,7 +264,7 @@
 want to look at two recent examples that show this clearly, at least
 in hindsight.
 
-** Example: Leap seconds
+### Example: Leap seconds
 
 My first example is about time.
 
@@ -279,7 +280,7 @@
 
 	elapsed := end.Sub(start) // 10 ms
 
-This obvious procedure can fail during a [[https://en.wikipedia.org/wiki/Leap_second][leap second]]. When our clocks
+This obvious procedure can fail during a [leap second](https://en.wikipedia.org/wiki/Leap_second). When our clocks
 are not quite in sync with the daily rotation of the Earth, a leap
 second—officially 11:59pm and 60 seconds—is inserted just before
 midnight. Unlike leap years, leap seconds follow no predictable
@@ -307,7 +308,7 @@
 benefit of being useful for telling time, so for simplicity Go 1’s
 time APIs expose only the time-of-day clock.
 
-In October 2015, a [[https://golang.org/issue/12914][bug report]] noted that Go programs could not time
+In October 2015, a [bug report](https://golang.org/issue/12914) noted that Go programs could not time
 events correctly across clock resets, especially a typical leap second.
 The suggested fix was also the original issue title: “add a new API to access a
 monotonic clock source.” I argued that this problem was not
@@ -315,7 +316,7 @@
 mid-2015 leap second, Akamai, Amazon, and Google had slowed their
 clocks a tiny amount for the entire day, absorbing the extra second
 without turning their clocks backward. It seemed like eventual
-widespread adoption of this “[[https://developers.google.com/time/smear][leap smear]]” approach would eliminate
+widespread adoption of this “[leap smear](https://developers.google.com/time/smear)” approach would eliminate
 leap-second clock resets as a problem on production systems. In
 contrast, adding new API to Go would add new problems: we would have
 to explain the two kinds of clocks, educate users about when to use
@@ -327,7 +328,7 @@
 understanding of the problem and also more time to find a good
 solution. In this case, waiting added to our understanding of the
 significance of the problem, in the form of a thankfully
-[[https://www.theregister.co.uk/2017/01/04/cloudflare_trips_over_leap_second/][minor outage at Cloudflare]].
+[minor outage at Cloudflare](https://www.theregister.co.uk/2017/01/04/cloudflare_trips_over_leap_second/).
 Their Go code timed DNS requests during the end-of-2016
 leap second as taking around negative 990 milliseconds, which caused
 simultaneous panics across their servers, breaking 0.2% of DNS queries
@@ -337,22 +338,22 @@
 and they had a production outage based on Go not being able to time
 events correctly. Then, and this is the key point, Cloudflare reported
 their experience in a blog post by John Graham-Cumming titled
-“[[https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/][How and why the leap second affected Cloudflare DNS]].” By sharing concrete
+“[How and why the leap second affected Cloudflare DNS](https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/).” By sharing concrete
 details of their experience with Go in production, John and Cloudflare helped us
 understand that the problem of accurate timing across leap second
 clock resets was too significant to leave unfixed. Two months after
 that article was published, we had designed and implemented a solution
-that will [[https://beta.golang.org/doc/go1.9#monotonic-time][ship in Go 1.9]]
-(and in fact we did it with [[https://golang.org/design/12914-monotonic][no new API]]).
+that will [ship in Go 1.9](https://beta.golang.org/doc/go1.9#monotonic-time)
+(and in fact we did it with [no new API](https://golang.org/design/12914-monotonic)).
 
-** Example: Alias declarations
+### Example: Alias declarations
 
 My second example is support for alias declarations in Go.
 
 Over the past few years, Google has established a team focused on
 large-scale code changes, meaning API migration and bug fixes applied
 across our
-[[http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/pdf][codebase of millions of source files and billions of lines of code]]
+[codebase of millions of source files and billions of lines of code](http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/pdf)
 written in C++, Go, Java, Python, and other languages. One
 thing I've learned from that team's work is the importance, when
 changing an API from using one name to another, of being able to
@@ -370,7 +371,7 @@
 alias declarations, which are exactly the needed forwarding mechanism.
 At this point, I felt very good about the way Go was evolving. We'd
 talked about aliases since the early days of Go—in fact, the first
-spec draft has [[https://go.googlesource.com/go/+/18c5b488a3b2e218c0e0cf2a7d4820d9da93a554/doc/go_spec#1182][an example using alias declarations]]—but each time we'd
+spec draft has [an example using alias declarations](https://go.googlesource.com/go/+/18c5b488a3b2e218c0e0cf2a7d4820d9da93a554/doc/go_spec#1182)—but each time we'd
 discussed aliases, and later type aliases, we had no clear use case
 for them, so we left them out. Now we were proposing to add aliases
 not because they were an elegant concept but because they solved a
@@ -378,8 +379,8 @@
 software development. I hoped this would serve as a model for future
 changes to Go.
 
-Later in the spring, Robert and Rob wrote [[https://golang.org/design/16339-alias-decls][a proposal]],
-and Robert presented it in a [[https://www.youtube.com/watch?v=t-w6MyI2qlU][Gophercon 2016 lightning talk]]. The next few months
+Later in the spring, Robert and Rob wrote [a proposal](https://golang.org/design/16339-alias-decls),
+and Robert presented it in a [Gophercon 2016 lightning talk](https://www.youtube.com/watch?v=t-w6MyI2qlU). The next few months
 did not go smoothly, and they were definitely not a model for future
 changes to Go. One of the many lessons we learned was the importance
 of describing the significance of a problem.
@@ -398,16 +399,16 @@
 convey to the broader Go community the significance of handling
 gradual code migration and repair during large-scale changes.
 
-In the fall we started over. I gave a [[https://www.youtube.com/watch?v=h6Cw9iCDVcU][talk]] and wrote
-[[https://talks.golang.org/2016/refactor.article][an article presenting the problem]]
+In the fall we started over. I gave a [talk](https://www.youtube.com/watch?v=h6Cw9iCDVcU) and wrote
+[an article presenting the problem](https://talks.golang.org/2016/refactor.article)
 using multiple concrete examples drawn from
 open source codebases, showing how this problem arises everywhere, not
 just inside Google. Now that more people understood the problem and
-could see its significance, we had a [[https://golang.org/issue/18130][productive discussion]] about what
-kind of solution would be best. The outcome is that [[https://golang.org/design/18130-type-alias][type aliases]] will
-be [[https://beta.golang.org/doc/go1.9#language][included in Go 1.9]] and will help Go scale to ever-larger codebases.
+could see its significance, we had a [productive discussion](https://golang.org/issue/18130) about what
+kind of solution would be best. The outcome is that [type aliases](https://golang.org/design/18130-type-alias) will
+be [included in Go 1.9](https://beta.golang.org/doc/go1.9#language) and will help Go scale to ever-larger codebases.
 
-** Experience reports
+### Experience reports
 
 The lesson here is that it is difficult but essential to describe the
 significance of a problem in a way that someone working in a different
@@ -416,8 +417,8 @@
 significance of any problem we want to solve. The clearest way to do
 that is by showing how the problem affects real programs and real
 production systems, like in
-[[https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/][Cloudflare's blog post]] and in
-[[https://talks.golang.org/2016/refactor.article][my refactoring article]].
+[Cloudflare's blog post](https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/) and in
+[my refactoring article](https://talks.golang.org/2016/refactor.article).
 
 Experience reports like these turn an abstract problem into a concrete
 one and help us understand its significance. They also serve as test
@@ -450,14 +451,14 @@
 experiences with Go. There are half a million of you, working in a
 broad range of environments, and not that many of us.
 Write a post on your own blog,
-or write a [[https://www.medium.com/][Medium]] post,
-or write a [[https://gist.github.com/][Github Gist]] (add a `.md` file extension for Markdown),
-or write a [[https://docs.google.com/][Google doc]],
+or write a [Medium](https://www.medium.com/) post,
+or write a [Github Gist](https://gist.github.com/) (add a `.md` file extension for Markdown),
+or write a [Google doc](https://docs.google.com/),
 or use any other publishing mechanism you like.
 After you've posted, please add the post to our new wiki page,
-[[https://golang.org/wiki/ExperienceReports][golang.org/wiki/ExperienceReports]].
+[golang.org/wiki/ExperienceReports](https://golang.org/wiki/ExperienceReports).
 
-* Solutions
+## Solutions
 
 .html toward-go2/div-indent.html
 .image toward-go2/process34.png _ 410
@@ -472,12 +473,12 @@
 provide direct access to those results. In 2013, Robert proposed that
 we might extend the idea of two-result (“comma-ok”) expressions to
 basic arithmetic. For example, if x and y are, say, uint32 values,
-`lo,`hi`=`x`*`y`
+`lo, hi = x * y`
 would return not only the usual low 32 bits but also the high 32 bits
 of the product. This problem didn't seem particularly significant, so
-we [[https://golang.org/issue/6815][recorded the potential solution]] but didn't implement it. We waited.
+we [recorded the potential solution](https://golang.org/issue/6815) but didn't implement it. We waited.
 
-More recently, we designed for Go 1.9 a [[https://beta.golang.org/doc/go1.9#math-bits][math/bits package]] that
+More recently, we designed for Go 1.9 a [math/bits package](https://beta.golang.org/doc/go1.9#math-bits) that
 contains various bit manipulation functions:
 
 	package bits // import "math/bits"
@@ -508,14 +509,14 @@
 write or at least to compile a program with a data race. How to fit
 that into a language like Go is still an open question in the
 programming language world. Instead we added a tool to the main
-distribution and made it trivial to use: that tool, the [[https://blog.golang.org/race-detector][race detector]], has become
+distribution and made it trivial to use: that tool, the [race detector](https://blog.golang.org/race-detector), has become
 an indispensible part of the Go experience. Here the best solution was
 a runtime and tooling change, not a language change.
 
 There will be language changes as well, of course, but not all
 problems are best solved in the language.
 
-* Shipping Go 2
+## Shipping Go 2
 
 .html toward-go2/div-indent.html
 .image toward-go2/process5.png _ 410
@@ -523,10 +524,10 @@
 
 Finally, how will we ship and deliver Go 2?
 
-I think the best plan would be to ship the [[https://golang.org/doc/go1compat][backwards-compatible parts]]
+I think the best plan would be to ship the [backwards-compatible parts](https://golang.org/doc/go1compat)
 of Go 2 incrementally, feature by feature, as part of the Go 1 release
 sequence. This has a few important properties. First, it keeps the Go
-1 releases on the [[https://golang.org/wiki/Go-Release-Cycle][usual schedule]], to continue the timely bug fixes and
+1 releases on the [usual schedule](https://golang.org/wiki/Go-Release-Cycle), to continue the timely bug fixes and
 improvements that users now depend on. Second, it avoids splitting
 development effort between Go 1 and Go 2. Third, it avoids divergence
 between Go 1 and Go 2, to ease everyone's eventual migration. Fourth,
@@ -553,9 +554,9 @@
 abandoning Go 1, and that in fact we will bring Go 1 along to the
 greatest extent possible.
 
-* Help Wanted
+## Help Wanted
 
-*We*need*your*help.*
+**We need your help.**
 
 The conversation for Go 2 starts today, and it's one that will happen
 in the open, in public forums like the mailing list and the issue
@@ -564,7 +565,7 @@
 Today, what we need most is experience reports. Please tell us how Go
 is working for you, and more importantly not working for you. Write a
 blog post, include real examples, concrete detail, and real
-experience. And link it on our [[https://golang.org/wiki/ExperienceReports][wiki page]].
+experience. And link it on our [wiki page](https://golang.org/wiki/ExperienceReports).
 That's how we'll start talking about what we, the Go community,
 might want to change about Go.
 
diff --git a/content/two-go-talks-lexical-scanning-in-go-and.article b/content/two-go-talks-lexical-scanning-in-go-and.article
index 2965af0..cf276b9 100644
--- a/content/two-go-talks-lexical-scanning-in-go-and.article
+++ b/content/two-go-talks-lexical-scanning-in-go-and.article
@@ -1,32 +1,33 @@
-Two Go Talks: "Lexical Scanning in Go" and "Cuddle: an App Engine Demo"
+# Two Go Talks: "Lexical Scanning in Go" and "Cuddle: an App Engine Demo"
 1 Sep 2011
 Tags: appengine, lexer, talk, video
+Summary: On Tuesday night Rob Pike and Andrew Gerrand each presented at the [Sydney Google Technology User Group](http://www.sydney-gtug.org/).
 
 Andrew Gerrand
 
-* Introduction
+##
 
-On Tuesday night Rob Pike and Andrew Gerrand each presented at the [[http://www.sydney-gtug.org/][Sydney Google Technology User Group]].
+On Tuesday night Rob Pike and Andrew Gerrand each presented at the [Sydney Google Technology User Group](http://www.sydney-gtug.org/).
 
-Rob's talk, "[[http://www.youtube.com/watch?v=HxaD_trXwRE][Lexical Scanning in Go]]",
+Rob's talk, "[Lexical Scanning in Go](http://www.youtube.com/watch?v=HxaD_trXwRE)",
 discusses the design of  a particularly interesting and idiomatic piece of Go code,
-the lexer component of the new [[https://golang.org/pkg/exp/template/][template package.]]
+the lexer component of the new [template package.](https://golang.org/pkg/exp/template/)
 
 .iframe //www.youtube.com/embed/HxaD_trXwRE 345 560
 
-The slides are [[http://cuddle.googlecode.com/hg/talk/lex.html][available here]].
-The new template package is available as [[https://golang.org/pkg/exp/template/][exp/template]] in Go release r59.
+The slides are [available here](http://cuddle.googlecode.com/hg/talk/lex.html).
+The new template package is available as [exp/template](https://golang.org/pkg/exp/template/) in Go release r59.
 In a future release it will replace the old template package.
 
-Andrew's talk, "[[http://www.youtube.com/watch?v=HQtLRqqB-Kk][Cuddle: an App Engine Demo]]",
+Andrew's talk, "[Cuddle: an App Engine Demo](http://www.youtube.com/watch?v=HQtLRqqB-Kk)",
 describes the construction of a simple real-time chat application that uses
-App Engine's [[http://code.google.com/appengine/docs/go/datastore/overview.html][Datastore]],
-[[http://code.google.com/appengine/docs/go/channel/overview.html][Channel]],
-and [[http://code.google.com/appengine/docs/go/datastore/memcache.html][Memcache]] APIs.
-It also includes a question and answer session that covers [[http://code.google.com/appengine/docs/go/gettingstarted/][Go for App Engine]]
+App Engine's [Datastore](http://code.google.com/appengine/docs/go/datastore/overview.html),
+[Channel](http://code.google.com/appengine/docs/go/channel/overview.html),
+and [Memcache](http://code.google.com/appengine/docs/go/datastore/memcache.html) APIs.
+It also includes a question and answer session that covers [Go for App Engine](http://code.google.com/appengine/docs/go/gettingstarted/)
 and Go more generally.
 
 .iframe //www.youtube.com/embed/HQtLRqqB-Kk 345 560
 
-The slides are [[http://cuddle.googlecode.com/hg/talk/index.html][available here]].
-The code is available at the [[http://code.google.com/p/cuddle/][cuddle Google Code project]].
+The slides are [available here](http://cuddle.googlecode.com/hg/talk/index.html).
+The code is available at the [cuddle Google Code project](http://code.google.com/p/cuddle/).
diff --git a/content/two-recent-go-articles.article b/content/two-recent-go-articles.article
index f6acc05..04ec33a 100644
--- a/content/two-recent-go-articles.article
+++ b/content/two-recent-go-articles.article
@@ -1,19 +1,20 @@
-Two recent Go articles
+# Two recent Go articles
 6 Mar 2013
 Tags: google, talk, ethos
+Summary: In today's blog post I'd like to highlight a couple of recent articles about Go.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
 In today's blog post I'd like to highlight a couple of recent articles about Go.
 
-* Go at Google
+## Go at Google
 
-In October last year, Rob Pike presented a keynote at the ACM [[http://splashcon.org/2012/][SPLASH]] conference in Tucson.
-The talk, titled [[https://talks.golang.org/2012/splash.slide][Go at Google]],
+In October last year, Rob Pike presented a keynote at the ACM [SPLASH](http://splashcon.org/2012/) conference in Tucson.
+The talk, titled [Go at Google](https://talks.golang.org/2012/splash.slide),
 was a comprehensive discussion of the motivations behind Go.
-Rob later expanded on his talk to produce an essay titled [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]].
+Rob later expanded on his talk to produce an essay titled [Go at Google: Language Design in the Service of Software Engineering](http://talks.golang.org/2012/splash.article).
 Here is the abstract:
 
 	The Go programming language was conceived in late 2007 as an
@@ -44,17 +45,17 @@
 Examples and explanations will be taken from the real-world problems faced at Google.
 
 If you have wondered about the design decisions behind Go,
-you may find your questions answered by [[https://talks.golang.org/2012/splash.article][the essay]].
+you may find your questions answered by [the essay](https://talks.golang.org/2012/splash.article).
 It is recommended reading for both new and experienced Go programmers.
 
-* Go at the Google Developers Academy
+## Go at the Google Developers Academy
 
-At Google I/O 2012 the Google Developers team [[http://googledevelopers.blogspot.com.au/2012/06/google-launches-new-developer-education.html][launched]] the [[https://developers.google.com/academy/][Google Developers Academy]],
+At Google I/O 2012 the Google Developers team [launched](http://googledevelopers.blogspot.com.au/2012/06/google-launches-new-developer-education.html) the [Google Developers Academy](https://developers.google.com/academy/),
 a program that provides training materials on Google technologies.
 Go is one of those technologies and we're pleased to announce the first
 GDA article featuring Go front and center:
 
-[[https://developers.google.com/appengine/training/go-plus-appengine/][Getting Started with Go, App Engine and Google+ API]] is
+[Getting Started with Go, App Engine and Google+ API](https://developers.google.com/appengine/training/go-plus-appengine/) is
 an introduction to writing web applications in Go.
 It demonstrates how to build and deploy App Engine applications and make
 calls to the Google+ API using the Google APIs Go Client.
diff --git a/content/two-recent-go-talks.article b/content/two-recent-go-talks.article
index 0ae7120..80de1e2 100644
--- a/content/two-recent-go-talks.article
+++ b/content/two-recent-go-talks.article
@@ -1,20 +1,21 @@
-Two recent Go talks
+# Two recent Go talks
 2 Jan 2013
 Tags: talk, video, ethos
+Summary: Late last year I wrote a couple of Go talks and presented them at [Strange Loop](http://thestrangeloop.com/), [Øredev](http://oredev.com), and various other venues. The talks are designed to give insight into the practice of Go programming, each describing the construction of a real program and demonstrating the power and depth of the Go language and its libraries and tools.
 
 Andrew Gerrand
 
-* Introduction
+## Introduction
 
-Late last year I wrote a couple of Go talks and presented them at [[http://thestrangeloop.com/][Strange Loop]],
-[[http://oredev.com][Øredev]], and various other venues.
+Late last year I wrote a couple of Go talks and presented them at [Strange Loop](http://thestrangeloop.com/),
+[Øredev](http://oredev.com), and various other venues.
 The talks are designed to give insight into the practice of Go programming,
 each describing the construction of a real program and demonstrating the
 power and depth of the Go language and its libraries and tools.
 
 The following videos are, in my opinion, the best recordings of these talks.
 
-* Go: a simple programming environment
+## Go: a simple programming environment
 
 Go is a general-purpose language that bridges the gap between efficient
 statically typed languages and productive dynamic language.
@@ -27,9 +28,9 @@
 
 .iframe //player.vimeo.com/video/53221558?badge=0 281 500
 
-See the [[https://talks.golang.org/2012/simple.slide][slide deck]] (use the left and right arrows to navigate).
+See the [slide deck](https://talks.golang.org/2012/simple.slide) (use the left and right arrows to navigate).
 
-* Go: code that grows with grace
+## Go: code that grows with grace
 
 One of Go's key design goals is code adaptability;
 that it should be easy to take a simple design and build upon it in a clean and natural way.
@@ -42,4 +43,4 @@
 
 .iframe //player.vimeo.com/video/53221560?badge=0 281 500
 
-See the [[https://talks.golang.org/2012/chat.slide][slide deck]] (use the left and right arrows to navigate).
+See the [slide deck](https://talks.golang.org/2012/chat.slide) (use the left and right arrows to navigate).
diff --git a/content/upcoming-google-io-go-events.article b/content/upcoming-google-io-go-events.article
index 472ea34..a206498 100644
--- a/content/upcoming-google-io-go-events.article
+++ b/content/upcoming-google-io-go-events.article
@@ -1,17 +1,18 @@
-Upcoming Google I/O Go Events
+# Upcoming Google I/O Go Events
 12 May 2010
+Summary: [Google I/O 2010](https://googleblog.blogspot.com/2010/01/google-io-2010-now-open-for.html) is happening next week at the Moscone Centre in San Francisco. Those of you with tickets will be able to catch some of the Go team both at I/O and at Bootcamp. In reverse-chronological order:
 
 Andrew Gerrand
 
-* Introduction
+##
 
-[[https://googleblog.blogspot.com/2010/01/google-io-2010-now-open-for.html][Google I/O 2010]]
+[Google I/O 2010](https://googleblog.blogspot.com/2010/01/google-io-2010-now-open-for.html)
 is happening next week at the Moscone Centre in San Francisco.
 Those of you with tickets will be able to catch some of the Go team both
 at I/O and at Bootcamp.
 In reverse-chronological order:
 
-Rob Pike and Russ Cox will be presenting a [[https://www.youtube.com/watch?v=jgVhBThJdXc][Go Programming]]
+Rob Pike and Russ Cox will be presenting a [Go Programming](https://www.youtube.com/watch?v=jgVhBThJdXc)
 talk on Thursday at 10.15am.
 This session takes a detailed look at how Go differs from other languages
 in a practical sense.
diff --git a/content/using-go-modules.article b/content/using-go-modules.article
index 8d2774a..193e3ef 100644
--- a/content/using-go-modules.article
+++ b/content/using-go-modules.article
@@ -1,39 +1,40 @@
-Using Go Modules
+# Using Go Modules
 19 Mar 2019
 Tags: tools, versioning
+Summary: This post is part 1 in a series.
 
 Tyler Bui-Palsulich
 
 Eno Compton
 
-* Introduction
+## Introduction
 
 This post is part 1 in a series.
 
-- *Part*1*—*Using*Go*Modules* (this post)
-- Part 2 — [[/migrating-to-go-modules][Migrating To Go Modules]]
-- Part 3 — [[/publishing-go-modules][Publishing Go Modules]]
-- Part 4 — [[/v2-go-modules][Go Modules: v2 and Beyond]]
+  - **Part 1 — Using Go Modules** (this post)
+  - Part 2 — [Migrating To Go Modules](/migrating-to-go-modules)
+  - Part 3 — [Publishing Go Modules](/publishing-go-modules)
+  - Part 4 — [Go Modules: v2 and Beyond](/v2-go-modules)
 
 Go 1.11 and 1.12 include preliminary
-[[https://golang.org/doc/go1.11#modules][support for modules]],
+[support for modules](https://golang.org/doc/go1.11#modules),
 Go’s
-[[https://blog.golang.org/versioning-proposal][new dependency management system]]
+[new dependency management system](https://blog.golang.org/versioning-proposal)
 that makes dependency version information explicit
 and easier to manage.
 This blog post is an introduction to the basic operations needed
 to get started using modules.
 
 A module is a collection of
-[[https://golang.org/ref/spec#Packages][Go packages]]
+[Go packages](https://golang.org/ref/spec#Packages)
 stored in a file tree with a `go.mod` file at its root.
-The `go.mod` file defines the module’s _module_path_,
+The `go.mod` file defines the module’s _module path_,
 which is also the import path used for the root directory,
-and its _dependency_requirements_,
+and its _dependency requirements_,
 which are the other modules needed for a successful build.
 Each dependency requirement is
 written as a module path and a specific
-[[http://semver.org/][semantic version]].
+[semantic version](http://semver.org/).
 
 As of Go 1.11, the go command enables the use of modules
 when the current directory or any parent directory has a `go.mod`,
@@ -41,21 +42,21 @@
 (Inside `$GOPATH/src`, for compatibility, the go command
 still runs in the old GOPATH mode, even if a `go.mod` is found.
 See the
-[[https://golang.org/cmd/go/#hdr-Preliminary_module_support][go command documentation]]
+[go command documentation](https://golang.org/cmd/go/#hdr-Preliminary_module_support)
 for details.)
 Starting in Go 1.13, module mode will be the default for all development.
 
 This post walks through a sequence of common operations
 that arise when developing Go code with modules:
 
-- Creating a new module.
-- Adding a dependency.
-- Upgrading dependencies.
-- Adding a dependency on a new major version.
-- Upgrading a dependency to a new major version.
-- Removing unused dependencies.
+  - Creating a new module.
+  - Adding a dependency.
+  - Upgrading dependencies.
+  - Adding a dependency on a new major version.
+  - Upgrading a dependency to a new major version.
+  - Removing unused dependencies.
 
-* Creating a new module
+## Creating a new module
 
 Let's create a new module.
 
@@ -83,7 +84,7 @@
 
 At this point, the directory contains a package, but not a module,
 because there is no `go.mod` file.
-If we were working in `/home/gopher/hello` and ran `go`test` now,
+If we were working in `/home/gopher/hello` and ran `go test` now,
 we'd see:
 
 	$ go test
@@ -99,7 +100,7 @@
 on the directory name: `_/home/gopher/hello`.
 
 Let's make the current directory the root of a module
-by using `go`mod`init` and then try `go`test` again:
+by using `go mod init` and then try `go test` again:
 
 	$ go mod init example.com/hello
 	go: creating new go.mod: module example.com/hello
@@ -110,7 +111,7 @@
 
 Congratulations! You’ve written and tested your first module.
 
-The `go`mod`init` command wrote a `go.mod` file:
+The `go mod init` command wrote a `go.mod` file:
 
 	$ cat go.mod
 	module example.com/hello
@@ -122,12 +123,12 @@
 Packages in subdirectories have import paths consisting of
 the module path plus the path to the subdirectory.
 For example, if we created a subdirectory `world`,
-we would not need to (nor want to) run `go`mod`init` there.
+we would not need to (nor want to) run `go mod init` there.
 The package would automatically be recognized as part of the
 `example.com/hello` module, with import path
 `example.com/hello/world`.
 
-* Adding a dependency
+## Adding a dependency
 
 The primary motivation for Go modules was to improve the
 experience of using (that is, adding a dependency on)
@@ -167,11 +168,11 @@
 looks up the module containing that package and adds it to
 `go.mod`, using the latest version.
 (“Latest” is defined as the
-latest tagged stable (non-[[https://semver.org/#spec-item-9][prerelease]]) version,
+latest tagged stable (non-[prerelease](https://semver.org/#spec-item-9)) version,
 or else the latest tagged prerelease version,
 or else the latest untagged version.)
-In our example, `go`test` resolved the new import `rsc.io/quote`
-to the module `rsc.io/quote`v1.5.2`.
+In our example, `go test` resolved the new import `rsc.io/quote`
+to the module `rsc.io/quote v1.5.2`.
 It also downloaded two dependencies used by `rsc.io/quote`,
 namely `rsc.io/sampler` and `golang.org/x/text`.
 Only direct dependencies are recorded in the `go.mod` file:
@@ -184,7 +185,7 @@
 	require rsc.io/quote v1.5.2
 	$
 
-A second `go`test` command will not repeat this work,
+A second `go test` command will not repeat this work,
 since the `go.mod` is now up-to-date and the downloaded
 modules are cached locally (in `$GOPATH/pkg/mod`):
 
@@ -199,11 +200,11 @@
 in critical areas such as correctness, security, and proper licensing,
 just to name a few.
 For more considerations, see Russ Cox's blog post,
-“[[https://research.swtch.com/deps][Our Software Dependency Problem]].”
+“[Our Software Dependency Problem](https://research.swtch.com/deps).”
 
 As we saw above, adding one direct dependency often
 brings in other indirect dependencies too.
-The command `go`list`-m`all` lists the current module
+The command `go list -m all` lists the current module
 and all its dependencies:
 
 	$ go list -m all
@@ -213,20 +214,20 @@
 	rsc.io/sampler v1.3.0
 	$
 
-In the `go`list` output, the current module,
-also known as the _main_module_,
+In the `go list` output, the current module,
+also known as the _main module_,
 is always the first line,
 followed by dependencies sorted by module path.
 
 The `golang.org/x/text` version `v0.0.0-20170915032832-14c0d48ead0c`
 is an example of a
-[[https://golang.org/cmd/go/#hdr-Pseudo_versions][pseudo-version]],
+[pseudo-version](https://golang.org/cmd/go/#hdr-Pseudo_versions),
 which is the `go` command's version syntax
 for a specific untagged commit.
 
 In addition to `go.mod`, the `go` command
 maintains a file named `go.sum` containing
-the expected [[https://golang.org/cmd/go/#hdr-Module_downloading_and_verification][cryptographic hashes]] of the content of specific module versions:
+the expected [cryptographic hashes](https://golang.org/cmd/go/#hdr-Module_downloading_and_verification) of the content of specific module versions:
 
 	$ cat go.sum
 	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZO...
@@ -245,7 +246,7 @@
 whether for malicious, accidental, or other reasons.
 Both `go.mod` and `go.sum` should be checked into version control.
 
-* Upgrading dependencies
+## Upgrading dependencies
 
 With Go modules, versions are referenced with semantic version tags.
 A semantic version has three parts: major, minor, and patch.
@@ -254,7 +255,7 @@
 Let's walk through a couple minor version upgrades.
 In the next section, we’ll consider a major version upgrade.
 
-From the output of `go`list`-m`all`,
+From the output of `go list -m all`,
 we can see we're using an untagged version of `golang.org/x/text`.
 Let's upgrade to the latest tagged version and test that everything still works:
 
@@ -268,7 +269,7 @@
 	$
 
 Woohoo! Everything passes.
-Let's take another look at `go`list`-m`all` and the `go.mod` file:
+Let's take another look at `go list -m all` and the `go.mod` file:
 
 	$ go list -m all
 	example.com/hello
@@ -290,10 +291,10 @@
 The `go.mod` file has been updated to specify `v0.3.0` too.
 The `indirect` comment indicates a dependency is not used directly
 by this module, only indirectly by other module dependencies.
-See `go`help`modules` for details.
+See `go help modules` for details.
 
 Now let's try upgrading the `rsc.io/sampler` minor version.
-Start the same way, by running `go`get` and running tests:
+Start the same way, by running `go get` and running tests:
 
 	$ go get rsc.io/sampler
 	go: finding rsc.io/sampler v1.99.99
@@ -327,15 +328,15 @@
 	ok  	example.com/hello	0.022s
 	$
 
-Note the explicit `@v1.3.1` in the `go`get` argument.
-In general each argument passed to `go`get` can take
+Note the explicit `@v1.3.1` in the `go get` argument.
+In general each argument passed to `go get` can take
 an explicit version; the default is `@latest`,
 which resolves to the latest version as defined earlier.
 
-* Adding a dependency on a new major version
+## Adding a dependency on a new major version
 
 Let's add a new function to our package:
-`func`Proverb` returns a Go concurrency proverb,
+`func Proverb` returns a Go concurrency proverb,
 by calling `quote.Concurrency`, which is provided by
 the module `rsc.io/quote/v3`.
 First we update `hello.go` to add the new function:
@@ -386,7 +387,7 @@
 In the example, `v3` of `rsc.io/quote` is no longer `rsc.io/quote`: instead,
 it is identified by the module path `rsc.io/quote/v3`.
 This convention is called
-[[https://research.swtch.com/vgo-import][semantic import versioning]],
+[semantic import versioning](https://research.swtch.com/vgo-import),
 and it gives incompatible packages (those with different major versions)
 different names.
 In contrast, `v1.6.0` of `rsc.io/quote` should be backwards-compatible
@@ -402,17 +403,17 @@
 and so on.
 This gives module authors a clear rule about possible duplication
 of a single module path: it is impossible for a program to build with both
-`rsc.io/quote`v1.5.2` and `rsc.io/quote`v1.6.0`.
+`rsc.io/quote v1.5.2` and `rsc.io/quote v1.6.0`.
 At the same time, allowing different major versions of a module
 (because they have different paths)
 gives module consumers the ability to
 upgrade to a new major version incrementally.
-In this example, we wanted to use `quote.Concurrency` from `rsc/quote/v3`v3.1.0`
-but are not yet ready to migrate our uses of `rsc.io/quote`v1.5.2`.
+In this example, we wanted to use `quote.Concurrency` from `rsc/quote/v3 v3.1.0`
+but are not yet ready to migrate our uses of `rsc.io/quote v1.5.2`.
 The ability to migrate incrementally
 is especially important in a large program or codebase.
 
-* Upgrading a dependency to a new major version
+## Upgrading a dependency to a new major version
 
 Let's complete our conversion from using `rsc.io/quote` to using only `rsc.io/quote/v3`.
 Because of the major version change, we should expect that some APIs may have
@@ -432,7 +433,7 @@
 	$
 
 (There is also a
-[[https://golang.org/issue/30778][known bug]] in the output;
+[known bug](https://golang.org/issue/30778) in the output;
 the displayed import path has incorrectly dropped the `/v3`.)
 
 We can update our use of `quote.Hello()` in `hello.go` to use `quoteV3.HelloV3()`:
@@ -470,10 +471,10 @@
 	PASS
 	ok      example.com/hello       0.014s
 
-* Removing unused dependencies
+## Removing unused dependencies
 
 We've removed all our uses of `rsc.io/quote`,
-but it still shows up in `go`list`-m`all` and in our `go.mod` file:
+but it still shows up in `go list -m all` and in our `go.mod` file:
 
 	$ go list -m all
 	example.com/hello
@@ -494,7 +495,7 @@
 	)
 	$
 
-Why? Because building a single package, like with `go`build` or `go`test`,
+Why? Because building a single package, like with `go build` or `go test`,
 can easily tell when something is missing and needs to be added,
 but not when something can safely be removed.
 Removing a dependency can only be done after
@@ -503,7 +504,7 @@
 An ordinary build command does not load this information,
 and so it cannot safely remove dependencies.
 
-The `go`mod`tidy` command cleans up these unused dependencies:
+The `go mod tidy` command cleans up these unused dependencies:
 
 	$ go mod tidy
 	$ go list -m all
@@ -527,7 +528,7 @@
 	ok  	example.com/hello	0.020s
 	$
 
-* Conclusion
+## Conclusion
 
 Go modules are the future of dependency management in Go.
 Module functionality is now available in all supported Go versions
@@ -535,16 +536,16 @@
 
 This post introduced these workflows using Go modules:
 
-- `go`mod`init` creates a new module, initializing the `go.mod` file that describes it.
-- `go`build`, `go`test`, and other package-building commands add new dependencies to `go.mod` as needed.
-- `go`list`-m`all` prints the current module’s dependencies.
-- `go`get` changes the required version of a dependency (or adds a new dependency).
-- `go`mod`tidy` removes unused dependencies.
+  - `go mod init` creates a new module, initializing the `go.mod` file that describes it.
+  - `go build`, `go test`, and other package-building commands add new dependencies to `go.mod` as needed.
+  - `go list -m all` prints the current module’s dependencies.
+  - `go get` changes the required version of a dependency (or adds a new dependency).
+  - `go mod tidy` removes unused dependencies.
 
 We encourage you to start using modules in your local development
 and to add `go.mod` and `go.sum` files to your projects.
 To provide feedback and help shape the future of dependency management in Go,
 please send us
-[[https://golang.org/issue/new][bug reports]] or [[https://golang.org/wiki/ExperienceReports][experience reports]].
+[bug reports](https://golang.org/issue/new) or [experience reports](https://golang.org/wiki/ExperienceReports).
 
 Thanks for all your feedback and help improving modules.
diff --git a/content/v2-go-modules.article b/content/v2-go-modules.article
index cb8b7be..59d86de 100644
--- a/content/v2-go-modules.article
+++ b/content/v2-go-modules.article
@@ -1,19 +1,20 @@
-Go Modules: v2 and Beyond
+# Go Modules: v2 and Beyond
 7 Nov 2019
 Tags: tools, versioning
+Summary: This post is part 4 in a series.
 
 Jean de Klerk
 
 Tyler Bui-Palsulich
 
-* Introduction
+## Introduction
 
 This post is part 4 in a series.
 
-- Part 1 — [[/using-go-modules][Using Go Modules]]
-- Part 2 — [[/migrating-to-go-modules][Migrating To Go Modules]]
-- Part 3 — [[/publishing-go-modules][Publishing Go Modules]]
-- *Part*4*—*Go*Modules:*v2*and*Beyond* (this post)
+  - Part 1 — [Using Go Modules](/using-go-modules)
+  - Part 2 — [Migrating To Go Modules](/migrating-to-go-modules)
+  - Part 3 — [Publishing Go Modules](/publishing-go-modules)
+  - **Part 4 — Go Modules: v2 and Beyond** (this post)
 
 As a successful project matures and new requirements are added, past features
 and design decisions might stop making sense. Developers may want to integrate
@@ -29,10 +30,10 @@
 version. This post explores major version semantics, how to create and publish a new
 major version, and how to maintain multiple major versions of a module.
 
-* Major versions and module paths
+## Major versions and module paths
 
 Modules formalized an important principle in Go, the
-[[https://research.swtch.com/vgo-import][*import*compatibility*rule*]]:
+[**import compatibility rule**](https://research.swtch.com/vgo-import):
 
 	If an old package and a new package have the same import path,
 	the new package must be backwards compatible with the old package.
@@ -48,8 +49,8 @@
 
 The need for major version suffixes is one of the ways Go modules differs from
 most other dependency management systems. Suffixes are needed to solve
-the [[https://research.swtch.com/vgo-import#dependency_story][diamond dependency problem]].
-Before Go modules, [[http://gopkg.in][gopkg.in]] allowed package maintainers to
+the [diamond dependency problem](https://research.swtch.com/vgo-import#dependency_story).
+Before Go modules, [gopkg.in](http://gopkg.in) allowed package maintainers to
 follow what we now refer to as the import compatibility rule. With gopkg.in, if
 you depend on a package that imports `gopkg.in/yaml.v1` and another package that
 imports `gopkg.in/yaml.v2`, there is no conflict because the two `yaml` packages
@@ -59,7 +60,7 @@
 This is a special case for compatibility with gopkg.in: modules hosted at other
 domains need a slash suffix like `/v2`.
 
-* Major version strategies
+## Major version strategies
 
 The recommended strategy is to develop `v2+` modules in a directory named after
 the major version suffix.
@@ -69,7 +70,7 @@
 	/v2/go.mod → module github.com/googleapis/gax-go/v2
 
 This approach is compatible with tools that aren't aware of modules: file paths
-within the repository match the paths expected by `go`get` in `GOPATH` mode.
+within the repository match the paths expected by `go get` in `GOPATH` mode.
 This strategy also allows all major versions to be developed together in
 different directories.
 
@@ -82,7 +83,7 @@
 since it provides the most compatibility. We recommend that module authors
 follow this strategy as long as they have users developing in `GOPATH` mode.
 
-* Publishing v2 and beyond
+## Publishing v2 and beyond
 
 This post uses `github.com/googleapis/gax-go` as an example:
 
@@ -132,10 +133,10 @@
 	$ go mod edit -module github.com/googleapis/gax-go/v2 v2/go.mod
 	$
 
-Note that the `v2` version is treated as a separate module from the `v0`/`v1`
+Note that the `v2` version is treated as a separate module from the `v0 / v1`
 versions: both may coexist in the same build. So, if your `v2+` module has
 multiple packages, you should update them to use the new `/v2` import path:
-otherwise, your `v2+` module will depend on your `v0`/`v1` module. For example,
+otherwise, your `v2+` module will depend on your `v0 / v1` module. For example,
 to update all `github.com/my/project` references to `github.com/my/project/v2`,
 you can use `find` and `sed`:
 
@@ -165,7 +166,7 @@
 compatible changes and bug fixes will lead to new minor and patch releases
 (for example, `v1.1.0`, `v2.0.1`, etc.).
 
-* Conclusion
+## Conclusion
 
 Major version changes result in development and maintenance overhead and
 require investment from downstream users to migrate. The larger the project,
diff --git a/content/versioning-proposal.article b/content/versioning-proposal.article
index 92c8f54..e85ca3d 100644
--- a/content/versioning-proposal.article
+++ b/content/versioning-proposal.article
@@ -1,13 +1,14 @@
-A Proposal for Package Versioning in Go
+# A Proposal for Package Versioning in Go
 26 Mar 2018
 Tags: tools, versioning
+Summary: Eight years ago, the Go team introduced `goinstall` (which led to `go get`) and with it the decentralized, URL-like import paths that Go developers are familiar with today. After we released `goinstall`, one of the first questions people asked was how to incorporate version information. We admitted we didn’t know. For a long time, we believed that the problem of package versioning would be best solved by an add-on tool, and we encouraged people to create one. The Go community created many tools with different approaches. Each one helped us all better understand the problem, but by mid-2016 it was clear that there were now too many solutions. We needed to adopt a single, official tool.
 
 Russ Cox
 
-* Introduction
+## Introduction
 
 Eight years ago, the Go team introduced `goinstall`
-(which led to `go`get`)
+(which led to `go get`)
 and with it the decentralized, URL-like import paths
 that Go developers are familiar with today.
 After we released `goinstall`, one of the first questions people asked
@@ -25,17 +26,17 @@
 we all believed the answer would be to follow the package versioning approach
 exemplified by Rust’s Cargo, with tagged semantic versions,
 a manifest, a lock file, and a
-[[https://research.swtch.com/version-sat][SAT solver]] to decide which versions to use.
+[SAT solver](https://research.swtch.com/version-sat) to decide which versions to use.
 Sam Boyer led a team to create Dep, which followed this rough plan,
 and which we intended to serve as the model for `go` command integration.
 But as we learned more about the implications of the Cargo/Dep approach,
 it became clear to me that Go would benefit from changing
 some of the details, especially concerning backwards compatibility.
 
-* The Impact of Compatibility
+## The Impact of Compatibility
 
 The most important new feature of
-[[https://blog.golang.org/preview-of-go-version-1][Go 1]]
+[Go 1](https://blog.golang.org/preview-of-go-version-1)
 was not a language feature.
 It was Go 1’s emphasis on backwards compatibility.
 Until that point we’d issued stable release
@@ -44,21 +45,21 @@
 We observed significant acceleration in interest and adoption
 immediately after the release of Go 1.
 We believe that the
-[[https://golang.org/doc/go1compat.html][promise of compatibility]]
+[promise of compatibility](https://golang.org/doc/go1compat.html)
 made developers feel much more comfortable relying on
 Go for production use
 and is a key reason that Go is popular today.
 Since 2013 the
-[[https://golang.org/doc/faq#get_version][Go FAQ]]
+[Go FAQ](https://golang.org/doc/faq#get_version)
 has encouraged package developers to provide their own
 users with similar expectations of compatibility.
-We call this the _import_compatibility_rule_:
+We call this the _import compatibility rule_:
 “If an old package and a new package have the same import path,
 the new package must be backwards compatible with the old package.”
 
 Independently,
-[[http://semver.org/][semantic versioning]]
-has become the _de_facto_
+[semantic versioning](http://semver.org/)
+has become the _de facto_
 standard for describing software versions in many language communities,
 including the Go community.
 Using semantic versioning, later versions are expected to be
@@ -71,7 +72,7 @@
 as most Go developers expect,
 then the import compatibility rule requires that
 different major versions must use different import paths.
-This observation led us to _semantic_import_versioning_,
+This observation led us to _semantic import versioning_,
 in which versions starting at v2.0.0 include the major
 version in the import path: `my/thing/v2/sub/pkg`.
 
@@ -86,7 +87,7 @@
 I was also surprised to realize that
 there is a second, independent logical route to
 semantic import versioning:
-[[https://talks.golang.org/2016/refactor.article][gradual code repair]]
+[gradual code repair](https://talks.golang.org/2016/refactor.article)
 or partial code upgrades.
 In a large program, it’s unrealistic to expect all packages in the program
 to update from v1 to v2 of a particular dependency at the same time.
@@ -95,7 +96,7 @@
 But then the program’s build, and the program’s final binary,
 must include both v1 and v2 of the dependency.
 Giving them the same import path would lead to confusion,
-violating what we might call the _import_uniqueness_rule_:
+violating what we might call the _import uniqueness rule_:
 different packages must have different import paths.
 The only way to have
 partial code upgrades, import uniqueness, _and_ semantic versioning
@@ -131,7 +132,7 @@
 which is the problem of deciding which package versions to use for a given build.
 The constraints of Cargo and Dep make version selection
 equivalent to
-[[https://research.swtch.com/version-sat][solving Boolean satisfiability]],
+[solving Boolean satisfiability](https://research.swtch.com/version-sat),
 meaning it can be very expensive to determine whether
 a valid version configuration even exists.
 And then there may be many valid configurations,
@@ -141,7 +142,7 @@
 to find the single best configuration, which always exists.
 This algorithm,
 which I call
-[[https://research.swtch.com/vgo-mvs][_minimal_version_selection_]],
+[_minimal version selection_](https://research.swtch.com/vgo-mvs),
 in turn eliminates the need for separate lock and manifest files.
 It replaces them with a single, short configuration file,
 edited directly by both developers and tools,
@@ -161,7 +162,7 @@
 eliminates that complexity,
 leading to a much simpler system.
 
-* Progress, a Prototype, and a Proposal
+## Progress, a Prototype, and a Proposal
 
 Dep was released in January 2017.
 Its basic model—code tagged with
@@ -191,7 +192,7 @@
 implied semantic import versioning.
 That seemed like a real breakthrough.
 I wrote a first draft of what became my
-[[https://research.swtch.com/vgo-import][semantic import versioning]]
+[semantic import versioning](https://research.swtch.com/vgo-import)
 blog post,
 concluding it by suggesting that Dep adopt the convention.
 I sent the draft to the people I’d been talking to,
@@ -204,7 +205,7 @@
 
 In mid-December, I discovered that import compatibility
 and semantic import versioning together allowed
-cutting version selection down to [[https://research.swtch.com/vgo-mvs][minimal version selection]].
+cutting version selection down to [minimal version selection](https://research.swtch.com/vgo-mvs).
 I wrote a basic implementation to be sure I understood it,
 I spent a while learning the theory behind why it was so simple,
 and I wrote a draft of the post describing it.
@@ -226,7 +227,7 @@
 I spent the first three weeks of February turning the
 wrapper into a full versioned `go` command, `vgo`;
 writing drafts of a
-[[https://research.swtch.com/vgo][blog post series introducing `vgo`]];
+[blog post series introducing `vgo`](https://research.swtch.com/vgo);
 and discussing them with
 Sam Boyer, the package management working group,
 and the Go team.
@@ -237,26 +238,26 @@
 semantic import versioning, and minimal version selection,
 the `vgo` prototype introduces a number of smaller
 but significant changes motivated by eight years of
-experience with `goinstall` and `go`get`:
-the new concept of a [[https://research.swtch.com/vgo-module][Go module]],
+experience with `goinstall` and `go get`:
+the new concept of a [Go module](https://research.swtch.com/vgo-module),
 which is a collection of packages versioned as a unit;
-[[https://research.swtch.com/vgo-repro][verifiable and verified builds]];
+[verifiable and verified builds](https://research.swtch.com/vgo-repro);
 and
-[[https://research.swtch.com/vgo-cmd][version-awareness throughout the `go` command]],
+[version-awareness throughout the `go` command](https://research.swtch.com/vgo-cmd),
 enabling work outside `$GOPATH`
 and the elimination of (most) `vendor` directories.
 
-The result of all of this is the [[https://golang.org/design/24301-versioned-go][official Go proposal]],
+The result of all of this is the [official Go proposal](https://golang.org/design/24301-versioned-go),
 which I filed last week.
 Even though it might look like a complete implementation,
 it’s still just a prototype,
 one that we will all need to work together to complete.
-You can download and try the `vgo` prototype from [[https://golang.org/x/vgo][golang.org/x/vgo]],
+You can download and try the `vgo` prototype from [golang.org/x/vgo](https://golang.org/x/vgo),
 and you can read the
-[[https://research.swtch.com/vgo-tour][Tour of Versioned Go]]
+[Tour of Versioned Go](https://research.swtch.com/vgo-tour)
 to get a sense of what using `vgo` is like.
 
-* The Path Forward
+## The Path Forward
 
 The proposal I filed last week is exactly that: an initial proposal.
 I know there are problems with it that the Go team and I can’t see,
@@ -265,11 +266,11 @@
 to identify and address the problems in the current proposal,
 to make sure that the final implementation that ships in a future
 Go release works well for as many developers as possible.
-Please point out problems on the [[https://golang.org/issue/24301][proposal discussion issue]].
+Please point out problems on the [proposal discussion issue](https://golang.org/issue/24301).
 I will keep the
-[[https://golang.org/issue/24301#issuecomment-371228742][discussion summary]]
+[discussion summary](https://golang.org/issue/24301#issuecomment-371228742)
 and
-[[https://golang.org/issue/24301#issuecomment-371228664][FAQ]]
+[FAQ](https://golang.org/issue/24301#issuecomment-371228664)
 updated as feedback arrives.
 
 For this proposal to succeed, the Go ecosystem as a
@@ -284,6 +285,6 @@
 please email Steve Francia at spf@golang.org.
 
 We’re looking forward to (finally!) providing the Go community with a single, official answer
-to the question of how to incorporate package versioning into `go`get`.
+to the question of how to incorporate package versioning into `go get`.
 Thanks to everyone who helped us get this far, and to everyone who will help us going forward.
 We hope that, with your help, we can ship something that Go developers will love.
diff --git a/content/why-generics.article b/content/why-generics.article
index 44e9e1e..b4c3a31 100644
--- a/content/why-generics.article
+++ b/content/why-generics.article
@@ -1,10 +1,11 @@
-Why Generics?
+# Why Generics?
 31 Jul 2019
 Tags: go2, proposals, generics
+Summary: This is the blog post version of my talk last week at Gophercon 2019.
 
 Ian Lance Taylor
 
-* Introduction
+## Introduction
 
 This is the blog post version of my talk last week at Gophercon 2019.
 
@@ -17,19 +18,19 @@
 
 Go was released on November 10, 2009.
 Less than 24 hours later we saw the
-[[https://groups.google.com/d/msg/golang-nuts/70-pdwUUrbI/onMsQspcljcJ][first comment about generics]].
+[first comment about generics](https://groups.google.com/d/msg/golang-nuts/70-pdwUUrbI/onMsQspcljcJ).
 (That comment also mentions exceptions, which we added to the
 language, in the form of `panic` and `recover`, in early 2010.)
 
 In three years of Go surveys, lack of generics has always been listed
 as one of the top three problems to fix in the language.
 
-* Why generics?
+## Why generics?
 
 But what does it mean to add generics, and why would we want it?
 
 To paraphrase
-[[https://www.dagstuhl.de/en/program/calendar/semhp/?semnr=98171][Jazayeri, et al]]:
+[Jazayeri, et al](https://www.dagstuhl.de/en/program/calendar/semhp/?semnr=98171):
 generic programming enables the representation of functions and data
 structures in a generic form, with types factored out.
 
@@ -99,7 +100,7 @@
 Most other statically typed languages, like C++ or Java or Rust or
 Swift, support generics to address exactly this kind of issue.
 
-* Go generic programming today
+## Go generic programming today
 
 So how do people write this kind of code in Go?
 
@@ -175,7 +176,7 @@
 with types factored out.
 That's exactly what we want here.
 
-* What generics can bring to Go
+## What generics can bring to Go
 
 The first and most important thing we want from generics in Go is to
 be able to write functions like `Reverse` without caring about the
@@ -196,11 +197,11 @@
 I went through `Reverse` in detail, but there are many other functions
 that we could write generically, such as:
 
-- Find smallest/largest element in slice
-- Find average/standard deviation of slice
-- Compute union/intersection of maps
-- Find shortest path in node/edge graph
-- Apply transformation function to slice/map, returning new slice/map
+  - Find smallest/largest element in slice
+  - Find average/standard deviation of slice
+  - Compute union/intersection of maps
+  - Find shortest path in node/edge graph
+  - Apply transformation function to slice/map, returning new slice/map
 
 These examples are available in most other languages.
 In fact, I wrote this list by glancing at the C++ standard template
@@ -209,10 +210,10 @@
 There are also examples that are specific to Go with its strong
 support for concurrency.
 
-- Read from a channel with a timeout
-- Combine two channels into a single channel
-- Call a list of functions in parallel, returning a slice of results
-- Call a list of functions, using a Context, return the result of the first function to finish, canceling and cleaning up extra goroutines
+  - Read from a channel with a timeout
+  - Combine two channels into a single channel
+  - Call a list of functions in parallel, returning a slice of results
+  - Call a list of functions, using a Context, return the result of the first function to finish, canceling and cleaning up extra goroutines
 
 I've seen all of these functions written out many times with different
 types.
@@ -239,10 +240,10 @@
 aren’t the only ones.
 Here are some other examples.
 
-- Sets
-- Self-balancing trees, with efficient insertion and traversal in sorted order
-- Multimaps, with multiple instances of a key
-- Concurrent hash maps, supporting parallel insertions and lookups with no single lock
+  - Sets
+  - Self-balancing trees, with efficient insertion and traversal in sorted order
+  - Multimaps, with multiple instances of a key
+  - Concurrent hash maps, supporting parallel insertions and lookups with no single lock
 
 If we can write generic types, we can define new data structures, like
 these, that have the same type-checking advantages as slices and maps:
@@ -266,12 +267,12 @@
 
 I hope I’ve explained why this is worth looking into.
 
-* Benefits and costs
+## Benefits and costs
 
 But generics don't come from the
-[[https://mainlynorfolk.info/folk/songs/bigrockcandymountain.html][Big Rock Candy Mountain]],
+[Big Rock Candy Mountain](https://mainlynorfolk.info/folk/songs/bigrockcandymountain.html),
 the land where the sun shines every day over the
-[[http://www.lat-long.com/Latitude-Longitude-773297-Montana-Lemonade_Springs.html][lemonade springs]].
+[lemonade springs](http://www.lat-long.com/Latitude-Longitude-773297-Montana-Lemonade_Springs.html).
 Every language change has a cost.
 There's no doubt that adding generics to Go will make the language
 more complicated.
@@ -288,13 +289,13 @@
 To make this more concrete I’m going to list a few guidelines we
 should follow.
 
-** Minimize new concepts
+### Minimize new concepts
 
 We should add as few new concepts to the language as possible.
 That means a minimum of new syntax and a minimum of new keywords and
 other names.
 
-** Complexity falls on the writer of generic code, not the user
+### Complexity falls on the writer of generic code, not the user
 
 As much as possible the complexity should fall on the programmer
 writing the generic package.
@@ -304,7 +305,7 @@
 should be reported in a way that is easy to understand and to fix.
 It should also be easy to debug calls into generic code.
 
-** Writer and user can work independently
+### Writer and user can work independently
 
 Similarly, we should make it easy to separate the concerns of the
 writer of the generic code and its user, so that they can develop their
@@ -315,7 +316,7 @@
 This sounds obvious, but it's not true of generics in every other
 programming language.
 
-** Short build times, fast execution times
+### Short build times, fast execution times
 
 Naturally, as much as possible, we want to keep the short build times
 and fast execution time that Go gives us today.
@@ -323,7 +324,7 @@
 execution.
 As much as possible, we want both.
 
-** Preserve clarity and simplicity of Go
+### Preserve clarity and simplicity of Go
 
 Most importantly, Go today is a simple language.
 Go programs are usually clear and easy to understand.
@@ -335,9 +336,9 @@
 
 These guidelines should apply to any generics implementation in Go.
 That’s the most important message I want to leave you with today:
-*generics*can*bring*a*significant*benefit*to*the*language,*but*they*are*only*worth*doing*if*Go*still*feels*like*Go*.
+**generics can bring a significant benefit to the language, but they are only worth doing if Go still feels like Go**.
 
-* Draft design
+## Draft design
 
 Fortunately, I think it can be done.
 To finish up this article I’m going to shift from discussing why we
@@ -345,7 +346,7 @@
 discuss a design for how we think we can add them to the language.
 
 At this year's Gophercon Robert Griesemer and I published
-[[https://github.com/golang/proposal/blob/master/design/go2draft-contracts.md][a design draft]]
+[a design draft](https://github.com/golang/proposal/blob/master/design/go2draft-contracts.md)
 for adding generics to Go.
 See the draft for full details.
 I'll go over some of the main points here.
@@ -367,7 +368,7 @@
 
 The element type of the slice has been factored out.
 It's now named `Element` and has become what we call a
-_type_parameter_.
+_type parameter_.
 Instead of being part of the type of the slice parameter, it's now a
 separate, additional, type parameter.
 
@@ -397,7 +398,7 @@
 more complex than `ReverseInts` and `ReverseStrings`, that complexity
 falls on the writer of the function, not the caller.
 
-** Contracts
+### Contracts
 
 Since Go is a statically typed language, we have to talk about the
 type of a type parameter.
@@ -456,7 +457,7 @@
 Here `contract` may be a new keyword, or a special identifier
 recognized in package scope; see the design draft for details.
 
-Anybody who remembers [[https://github.com/golang/proposal/blob/4a530dae40977758e47b78fae349d8e5f86a6c0a/design/go2draft-contracts.md][the design we presented at Gophercon 2018]]
+Anybody who remembers [the design we presented at Gophercon 2018](https://github.com/golang/proposal/blob/4a530dae40977758e47b78fae349d8e5f86a6c0a/design/go2draft-contracts.md)
 will see that this way of writing a contract is a lot simpler.
 We got a lot of feedback on that earlier design that contracts were
 too complicated, and we've tried to take that into account.
@@ -468,7 +469,7 @@
 They also let you describe the relationship between different type
 parameters.
 
-** Contracts with methods
+### Contracts with methods
 
 Here is another simple example, of a function that uses the String
 method to return a `[]string` of the string representation of all the
@@ -506,7 +507,7 @@
 direct conversions between them.
 So this is worth writing, even though `fmt.Stringer` exists.
 
-** Contracts with multiple types
+### Contracts with multiple types
 
 Here is an example of a contract with multiple type parameters.
 
@@ -540,7 +541,7 @@
 single type.  It can describe the relationships between two or more
 types.
 
-** Ordered types
+### Ordered types
 
 One surprisingly common complaint about Go is that it doesn't have a
 `Min` function.
@@ -601,7 +602,7 @@
 		return b
 	}
 
-** Generic data structures
+### Generic data structures
 
 Finally, let's look at a simple generic data structure, a binary
 tree.  In this example the tree has a comparison function, so there
@@ -686,7 +687,7 @@
 as much as possible using one is no different from using an ordinary
 non-generic data structure.
 
-** Next steps
+### Next steps
 
 We are working on actual implementations to allow us to experiment
 with this design.
@@ -696,7 +697,7 @@
 on these implementations as they become available.
 
 Robert Griesemer has written a
-[[https://golang.org/cl/187317][preliminary CL]]
+[preliminary CL](https://golang.org/cl/187317)
 that modifies the go/types package.
 This permits testing whether code using generics and contracts can
 type check.
diff --git a/content/wire.article b/content/wire.article
index 2d9ca5b..5113228 100644
--- a/content/wire.article
+++ b/content/wire.article
@@ -1,19 +1,20 @@
-Compile-time Dependency Injection With Go Cloud's Wire
+# Compile-time Dependency Injection With Go Cloud's Wire
 9 Oct 2018
+Summary: The Go team recently [announced](https://blog.golang.org/go-cloud) the open source project [Go Cloud](https://github.com/google/go-cloud), with portable Cloud APIs and tools for [open cloud](https://cloud.google.com/open-cloud/) development. This post goes into more detail about Wire, a dependency injection tool used in Go Cloud.
 
 Robert van Gent
 
-* Overview
+## Overview
 
-The Go team recently [[https://blog.golang.org/go-cloud][announced]] the
-open source project [[https://github.com/google/go-cloud][Go Cloud]],
-with portable Cloud APIs and tools for [[https://cloud.google.com/open-cloud/][open cloud]] development.
+The Go team recently [announced](https://blog.golang.org/go-cloud) the
+open source project [Go Cloud](https://github.com/google/go-cloud),
+with portable Cloud APIs and tools for [open cloud](https://cloud.google.com/open-cloud/) development.
 This post goes into more detail about Wire,
 a dependency injection tool used in Go Cloud.
 
-* What problem does Wire solve?
+## What problem does Wire solve?
 
-[[https://en.wikipedia.org/wiki/Dependency_injection][Dependency injection]]
+[Dependency injection](https://en.wikipedia.org/wiki/Dependency_injection)
 is a standard technique for producing flexible and loosely coupled code,
 by explicitly providing components with all of the dependencies they need to work.
 In Go, this often takes the form of passing dependencies to constructors:
@@ -43,21 +44,21 @@
 and then let Wire do the tedious work of generating initialization code
 for the entire dependency graph.
 
-* Why is this part of Go Cloud?
+## Why is this part of Go Cloud?
 
 Go Cloud's goal is to make it easier to write portable Cloud applications
 by providing idiomatic Go APIs for useful Cloud services.
-For example, [[https://godoc.org/github.com/google/go-cloud/blob][blob.Bucket]]
+For example, [blob.Bucket](https://godoc.org/github.com/google/go-cloud/blob)
 provides a storage API with implementations for Amazon's S3 and Google Cloud Storage (GCS);
 applications written using `blob.Bucket` can swap implementations without
 changing their application logic.
 However, the initialization code is inherently provider-specific,
 and each provider has a different set of dependencies.
 
-For example, [[https://godoc.org/github.com/google/go-cloud/blob/gcsblob#OpenBucket][constructing a GCS `blob.Bucket`]]
+For example, [constructing a GCS `blob.Bucket`](https://godoc.org/github.com/google/go-cloud/blob/gcsblob#OpenBucket)
 requires a `gcp.HTTPClient`,
 which eventually requires `google.Credentials`,
-while [[https://godoc.org/github.com/google/go-cloud/blob/s3blob][constructing one for S3]]
+while [constructing one for S3](https://godoc.org/github.com/google/go-cloud/blob/s3blob)
 requires an `aws.Config`,
 which eventually requires AWS credentials.
 Thus, updating an application to use a different `blob.Bucket` implementation
@@ -66,34 +67,34 @@
 of Go Cloud portable APIs,
 but it's also a general-purpose tool for dependency injection.
 
-* Hasn't this been done already?
+## Hasn't this been done already?
 
 There are a number of dependency injection frameworks out there.
-For Go, [[https://github.com/uber-go/dig][Uber's dig]] and [[https://github.com/facebookgo/inject][Facebook's inject]]
+For Go, [Uber's dig](https://github.com/uber-go/dig) and [Facebook's inject](https://github.com/facebookgo/inject)
 both use reflection to do runtime dependency injection.
-Wire was primarily inspired by Java's [[https://google.github.io/dagger/][Dagger 2]],
-and uses code generation rather than reflection or [[https://en.wikipedia.org/wiki/Service_locator_pattern][service locators]].
+Wire was primarily inspired by Java's [Dagger 2](https://google.github.io/dagger/),
+and uses code generation rather than reflection or [service locators](https://en.wikipedia.org/wiki/Service_locator_pattern).
 
 We think this approach has several advantages:
 
-- Runtime dependency injection can be hard to follow and debug when the
-  dependency graph gets complex.
-  Using code generation means that the initialization code that's executed
-  at runtime is regular,
-  idiomatic Go code that's easy to understand and debug.
-  Nothing is obfuscated by an intervening framework doing "magic".
-  In particular, problems like forgetting a dependency become compile-time errors,
-  not run-time errors.
-- Unlike [[https://en.wikipedia.org/wiki/Service_locator_pattern][service locators]],
-  there's no need to make up arbitrary names or keys to register services.
-  Wire uses Go types to connect components with their dependencies.
-- It's easier to avoid dependency bloat. Wire's generated code will only
-  import the dependencies you need,
-  so your binary won't have unused imports.
-  Runtime dependency injectors can't identify unused dependencies until runtime.
-- Wire's dependency graph is knowable statically, which provides opportunities for tooling and visualization.
+  - Runtime dependency injection can be hard to follow and debug when the
+    dependency graph gets complex.
+    Using code generation means that the initialization code that's executed
+    at runtime is regular,
+    idiomatic Go code that's easy to understand and debug.
+    Nothing is obfuscated by an intervening framework doing "magic".
+    In particular, problems like forgetting a dependency become compile-time errors,
+    not run-time errors.
+  - Unlike [service locators](https://en.wikipedia.org/wiki/Service_locator_pattern),
+    there's no need to make up arbitrary names or keys to register services.
+    Wire uses Go types to connect components with their dependencies.
+  - It's easier to avoid dependency bloat. Wire's generated code will only
+    import the dependencies you need,
+    so your binary won't have unused imports.
+    Runtime dependency injectors can't identify unused dependencies until runtime.
+  - Wire's dependency graph is knowable statically, which provides opportunities for tooling and visualization.
 
-* How does it work?
+## How does it work?
 
 Wire has two basic concepts: providers and injectors.
 
@@ -175,19 +176,19 @@
 but Wire saves a lot of manual toil for components and applications with
 more complex dependency graphs.
 
-* How can I get involved and learn more?
+## How can I get involved and learn more?
 
-The [[https://github.com/google/wire/blob/master/README.md][Wire README]]
+The [Wire README](https://github.com/google/wire/blob/master/README.md)
 goes into more detail about how to use Wire and its more advanced features.
-There's also a [[https://github.com/google/wire/tree/master/_tutorial][tutorial]]
+There's also a [tutorial](https://github.com/google/wire/tree/master/_tutorial)
 that walks through using Wire in a simple application.
 
 We appreciate any input you have about your experience with Wire!
-[[https://github.com/google/wire][Wire's]] development is conducted on GitHub,
-so you can [[https://github.com/google/wire/issues/new/choose][file an issue]]
+[Wire's](https://github.com/google/wire) development is conducted on GitHub,
+so you can [file an issue](https://github.com/google/wire/issues/new/choose)
 to tell us what could be better.
 For updates and discussion about the project,
-join [[https://groups.google.com/forum/#!forum/go-cloud][the Go Cloud mailing list]].
+join [the Go Cloud mailing list](https://groups.google.com/forum/#!forum/go-cloud).
 
 Thank you for taking the time to learn about Go Cloud's Wire.
 We’re excited to work with you to make Go the language of choice for developers
diff --git a/content/writing-scalable-app-engine.article b/content/writing-scalable-app-engine.article
index c5ca023..c97674c 100644
--- a/content/writing-scalable-app-engine.article
+++ b/content/writing-scalable-app-engine.article
@@ -1,12 +1,13 @@
-Writing scalable App Engine applications
+# Writing scalable App Engine applications
 1 Nov 2011
 Tags: appengine, optimization
+Summary: Back in May, we [announced](https://blog.golang.org/2011/05/go-and-google-app-engine.html) the Go runtime for App Engine. Since then, we've opened it up for everyone to use, added many new APIs, and improved performance. We have been thrilled by all the interesting ways that people are using Go on App Engine. One of the key benefits of the Go runtime, apart from working in a fantastic language, is that it has high performance. Go applications compile to native code, with no interpreter or virtual machine getting between your program and the machine.
 
 David Symonds
 
-* Introduction
+##
 
-Back in May, we [[https://blog.golang.org/2011/05/go-and-google-app-engine.html][announced]]
+Back in May, we [announced](https://blog.golang.org/2011/05/go-and-google-app-engine.html)
 the Go runtime for App Engine.
 Since then, we've opened it up for everyone to use,
 added many new APIs, and improved performance.
@@ -19,15 +20,15 @@
 
 Making your web application fast is important because it is well known that
 a web site's latency has a measurable impact on user happiness,
-and [[https://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html][Google web search uses it as a ranking factor]].
-Also announced in May was that App Engine would be [[http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html][leaving its Preview status]]
-and transitioning to a [[https://www.google.com/enterprise/cloud/appengine/pricing.html][new pricing model]],
+and [Google web search uses it as a ranking factor](https://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html).
+Also announced in May was that App Engine would be [leaving its Preview status](http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html)
+and transitioning to a [new pricing model](https://www.google.com/enterprise/cloud/appengine/pricing.html),
 providing another reason to write efficient App Engine applications.
 
 To make it easier for Go developers using App Engine to write highly efficient,
 scalable applications, we recently updated some existing App Engine articles
 to include snippets of Go source code and to link to relevant Go documentation.
 
-- [[http://code.google.com/appengine/articles/scaling/overview.html][Best practices for writing scalable applications]]
+  - [Best practices for writing scalable applications](http://code.google.com/appengine/articles/scaling/overview.html)
 
-- [[http://code.google.com/appengine/articles/managing-resources.html][Managing Your App's Resource Usage]]
+  - [Managing Your App's Resource Usage](http://code.google.com/appengine/articles/managing-resources.html)