diff --git a/README.md b/README.md index 7fe484c..ea687c5 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,13 @@ presentations. |Date |Title |Speakers |Presentation |Recording | |---- |----- |-------- |------------ |--------- | +|2025.02.01 |building decentralized apps in go: meet gno |[@moul](https://github.com/moul) |[Slides](https://gnolang.github.io/workshops/presentations/2025-02-01--fosdem--manfred/presentation.slide.html#1) |--- | |2025.01.09 |Designing Seamless Interconnected dApps with Gno |[@moul](https://github.com/moul) |[Slides](https://gnolang.github.io/workshops/presentations/2025-01-09--buidleu--manfred/presentation.slide.html#1) |--- | |2024.09.23 |Distributed Communities - How to build timeless and decentralized apps, with Go |[@thehowl](https://github.com/thehowl) |[Slides](https://gnolang.github.io/workshops/presentations/2024-09-23--distributed-communities--morgan/slides.html) |[Video](https://www.youtube.com/watch?v=b3zRbVcJxyE) | |2024.08.20 |A gentle intro to gno.land |[@leohhhn](https://github.com/leohhhn) |[Slides](presentations/2024-08-20--gentle-intro-to-gnoland--leon/presentation.pdf) |[Video](https://www.youtube.com/watch?v=hTGeG0z09NU) | |2024.08.05 |Intro to gno.land |[@leohhhn](https://github.com/leohhhn) |[Slides](https://docs.google.com/presentation/d/1tnplCWxhg-RFatDS3w1iJnO0vSfBAuw2ZA0ommNJQOU/edit?usp=sharing) |--- | -|2024.07.13 |Gno: Examples and Comparisons |[@moul](https://github.com/moul) |[Slides](https://gnolang.github.io/workshops/presentations/2024-07-13--nebular--manfred/presentation.slide.html#1) |[Video](https://www.youtube.com/watch?v=Zsl3xu_Edcc) | |2024.07.13 |Building with Gno.land: A Practical Workshop on Smart Contracts |[@gfanton](https://github.com/gfanton) |[Slides](presentations/2024-07-13--nebular--gfanton/README.md) |[Video](https://www.youtube.com/watch?v=oBQ-t_E0QpI) | +|2024.07.13 |Gno: Examples and Comparisons |[@moul](https://github.com/moul) |[Slides](https://gnolang.github.io/workshops/presentations/2024-07-13--nebular--manfred/presentation.slide.html#1) |[Video](https://www.youtube.com/watch?v=Zsl3xu_Edcc) | |2024.07.09 |Building a Deterministic Interpreter in Go: Readability vs Performance |[@jaekwon](https://github.com/jaekwon) |[Slides](presentations/2024-07-09--gophercon-us--jae) |[Video](https://www.youtube.com/watch?v=betUkghf_jo) | |2024.07.08 |Building a Decentralized App on gno.land |[@deelawn](https://github.com/deelawn) |[Slides](presentations/2024-07-08--gophercon-us--dylan) |[Video](https://www.youtube.com/watch?v=lwL2VyjaV-A) | |2024.06.17 |Envisioning a Go-Powered Ecosystem: The Ultimate Go Computer |[@moul](https://github.com/moul) |[Slides](presentations/2024-06-17--gophercon-berlin--manfred) |[Video](https://youtu.be/dLE2-8QPK64?si=IidxNLGrwwS6jbYL) | @@ -47,6 +48,8 @@ presentations. + + _This table is autogenerated based on the [./presentations](./presentations) folder._ ## Resources diff --git a/presentations/2025-02-01--fosdem--manfred/Makefile b/presentations/2025-02-01--fosdem--manfred/Makefile new file mode 100644 index 0000000..e3c861a --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/Makefile @@ -0,0 +1,6 @@ +runx: + cd ..; go run github.com/soypat/go-presentx -http 0.0.0.0:3999 -base ../.presentx + +run: + cd ..; go run golang.org/x/tools/cmd/present -http 0.0.0.0:3999 # -base ../.. + diff --git a/presentations/2025-02-01--fosdem--manfred/code/.gitignore b/presentations/2025-02-01--fosdem--manfred/code/.gitignore new file mode 100644 index 0000000..e33609d --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/.gitignore @@ -0,0 +1 @@ +*.png diff --git a/presentations/2025-02-01--fosdem--manfred/code/counter.gno b/presentations/2025-02-01--fosdem--manfred/code/counter.gno new file mode 100644 index 0000000..bc6f97f --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/counter.gno @@ -0,0 +1,13 @@ +package counter + +import "strconv" + +var counter int + +func Incr() { + counter += 1 +} + +func Render(_ string) string { + return "my decentralized counter: " + strconv.Itoa(counter) +} diff --git a/presentations/2025-02-01--fosdem--manfred/code/hello.go b/presentations/2025-02-01--fosdem--manfred/code/hello.go new file mode 100644 index 0000000..0c99376 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/hello.go @@ -0,0 +1,5 @@ +package main + +func main() { + println("Hello, Fosdem! It's Manfred.") +} diff --git a/presentations/2025-02-01--fosdem--manfred/code/hello_world.gno b/presentations/2025-02-01--fosdem--manfred/code/hello_world.gno new file mode 100644 index 0000000..044709e --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/hello_world.gno @@ -0,0 +1,5 @@ +package hello + +func Hello() string { + return "hello world" +} diff --git a/presentations/2025-02-01--fosdem--manfred/code/interop.gno b/presentations/2025-02-01--fosdem--manfred/code/interop.gno new file mode 100644 index 0000000..21f8740 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/interop.gno @@ -0,0 +1,5 @@ +package alice + +var x int +func GetX() int { return x } +func SetX(n int) { x = n } diff --git a/presentations/2025-02-01--fosdem--manfred/code/interop2.gno b/presentations/2025-02-01--fosdem--manfred/code/interop2.gno new file mode 100644 index 0000000..861dd97 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/interop2.gno @@ -0,0 +1,8 @@ +package bob + +import "alice" + +func IncrAlice() { + x := alice.GetX() + alice.SetX(x + 1) +} diff --git a/presentations/2025-02-01--fosdem--manfred/code/micropost-query.sh b/presentations/2025-02-01--fosdem--manfred/code/micropost-query.sh new file mode 100644 index 0000000..8a9b133 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/micropost-query.sh @@ -0,0 +1,4 @@ +gnokey maketx call \ + -pkgpath "gno.land/r/leon/fosdem25/microposts" \ + -func "CreatePost" \ + -args "Hello FOSDEM people! Welcome <3" ... diff --git a/presentations/2025-02-01--fosdem--manfred/code/we-are-building.txt b/presentations/2025-02-01--fosdem--manfred/code/we-are-building.txt new file mode 100644 index 0000000..5736647 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/code/we-are-building.txt @@ -0,0 +1,4 @@ +we’re building a user-owned internet +where governance is fair, +development is open, +and innovation is rewarded. diff --git a/presentations/2025-02-01--fosdem--manfred/img/micropost1.png b/presentations/2025-02-01--fosdem--manfred/img/micropost1.png new file mode 100644 index 0000000..94535b7 Binary files /dev/null and b/presentations/2025-02-01--fosdem--manfred/img/micropost1.png differ diff --git a/presentations/2025-02-01--fosdem--manfred/img/micropost2.png b/presentations/2025-02-01--fosdem--manfred/img/micropost2.png new file mode 100644 index 0000000..819ab61 Binary files /dev/null and b/presentations/2025-02-01--fosdem--manfred/img/micropost2.png differ diff --git a/presentations/2025-02-01--fosdem--manfred/img/microposts.png b/presentations/2025-02-01--fosdem--manfred/img/microposts.png new file mode 100644 index 0000000..ee2e115 Binary files /dev/null and b/presentations/2025-02-01--fosdem--manfred/img/microposts.png differ diff --git a/presentations/2025-02-01--fosdem--manfred/metadata.yml b/presentations/2025-02-01--fosdem--manfred/metadata.yml new file mode 100644 index 0000000..dc6fc34 --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/metadata.yml @@ -0,0 +1,15 @@ +# Date of the workshop +date: "2025-02-01" +# Title of the workshop +title: "building decentralized apps in go: meet gno" +# GitHub usernames of the speakers +speakers: + - "moul" +# Location of the workshop +location: "Brussels, Belgium" +# At which event the workshop took place, if any +event: "FOSDEM 2025" +# Workshop slides link. If the link is local, only put the file name, without any other path parts. +slides: "https://gnolang.github.io/workshops/presentations/2025-02-01--fosdem--manfred/presentation.slide.html#1" +# Workshop recording +#recording: "" diff --git a/presentations/2025-02-01--fosdem--manfred/presentation.slide b/presentations/2025-02-01--fosdem--manfred/presentation.slide new file mode 100644 index 0000000..96d33ac --- /dev/null +++ b/presentations/2025-02-01--fosdem--manfred/presentation.slide @@ -0,0 +1,100 @@ +# building decentralized apps in go: meet gno +Fosdem, 1 Feb 2025, Brussels +Tags: golang, gnolang +Summary: TODO + +Manfred Touron +VP Eng., gno.land +https://gno.land/ +https://github.com/gnolang +@moul + +## bonjour, FOSDEM! + +.code ./code/hello.go + +- manfred touron (@moul) +- built scaleway, berty, now gno +- stuck with go for 10 years +- unapologetically open-source maximalist + +## intro + +- go is an amazing language: simple, efficient, safe +- not built for decentralized apps (dapps) +- existing decentralized app platforms are complex, fragmented, and unfamiliar +- what if you could write dapps in pure go? +- meet gno: go for dapps, designed for modularity, composability, and safety + +## gno in one sentence + +gno is a **transactional vm**
+that lets you write **decentralized apps** in **go**,
+with built-in **state persistence** and **safe execution**. + +## gno hello world + +
+
+
+
+
+ +.code ./code/hello_world.gno + +## the gno paradigm + +- **no json, no grpc**: function calls instead of rpc +- **no orm, no db drivers**: state is a first-class concept +- **no external dependencies**: everything is go code +- **no bytecode**: interpreted, readable go syntax +- **no hidden magic**: all code is visible and auditable + +\... but it's just like go. + +## persistence: counter.gno + +.code ./code/counter.gno + +- global variables persist across transactions +- no need for external storage or db + +## microposts.gno + +.image ./img/microposts.png _ 1000 + +## microposts demo + +.image ./img/micropost1.png _ 500 + +.code ./code/micropost-query.sh + +.image ./img/micropost2.png _ 500 + +[gno.land/r/leon/fosdem25/microposts](https://gno.land/r/leon/fosdem25/microposts) + +## interoperability: alice.gno & bob.gno + +Another app could use micropost... + +.code ./code/interop.gno +.code ./code/interop2.gno + +- call functions from other contracts like normal go packages +- no need for low-level calls or address casting + +## conclusion + +
+ +.code ./code/we-are-building.txt + +
+ +- gno makes go the first-class language for decentralized applications +- if you know go, you already know gno +- opportunities for developers to contribute and innovate +- -> https://gno.land + +
+thank you!