From f15898dc1d5fb9ee9e14e461293af42b9db3bba7 Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Thu, 6 Feb 2025 21:47:03 +0000 Subject: [PATCH 1/6] WIP --- .gitmodules | 6 --- .lycheeignore | 1 + README.md | 4 +- _draft_content/getting-blog-setup.md | 0 _draft_content/python-319-new-features.md | 0 config.toml | 18 +++---- content/project-based-learning.md | 59 +++++++++++++++++++++++ index.html | 1 - Makefile => justfile | 2 - themes/after-dark | 2 +- 10 files changed, 69 insertions(+), 24 deletions(-) delete mode 100644 _draft_content/getting-blog-setup.md delete mode 100644 _draft_content/python-319-new-features.md create mode 100644 content/project-based-learning.md delete mode 100644 index.html rename Makefile => justfile (69%) diff --git a/.gitmodules b/.gitmodules index 8563deb..f6b02fc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,3 @@ -[submodule "blog/themes/after-dark"] - path = blog/themes/after-dark - url = https://github.com/getzola/after-dark.git -[submodule "blog/themes/even"] - path = blog/themes/even - url = https://github.com/getzola/even.git [submodule "themes/after-dark"] path = themes/after-dark url = https://github.com/getzola/after-dark.git diff --git a/.lycheeignore b/.lycheeignore index e69de29..1e900df 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -0,0 +1 @@ +/themes \ No newline at end of file diff --git a/README.md b/README.md index 1366cb0..a54ddb2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -## Rob's Blog +# Rob's Blog Personal blog powered by [Zola](https://github.com/getzola/zola). -### Running Locally +## Running Locally ```sh zola serve diff --git a/_draft_content/getting-blog-setup.md b/_draft_content/getting-blog-setup.md deleted file mode 100644 index e69de29..0000000 diff --git a/_draft_content/python-319-new-features.md b/_draft_content/python-319-new-features.md deleted file mode 100644 index e69de29..0000000 diff --git a/config.toml b/config.toml index a84aa9d..189aa32 100644 --- a/config.toml +++ b/config.toml @@ -7,19 +7,12 @@ compile_sass = false # Whether to build a search index to be used later on by a JavaScript library build_search_index = false - -# Blocked by: https://github.com/getzola/after-dark/pull/43 -# Alternatively downgrade to zola<0.19 -# generate_feeds = true -# feed_filenames = ["rss.xml"] +generate_feeds = true +feed_filenames = ["rss.xml"] theme = "after-dark" -taxonomies = [ - # You can enable/disable RSS - {name = "categories", feed = true}, - {name = "tags", feed = true}, -] +taxonomies = [{ name = "tags", feed = true }] [markdown] # Whether to do syntax highlighting @@ -30,13 +23,14 @@ render_emoji = true [extra] author = "Rob Hand" +codeblock = true after_dark_menu = [ { name = "Home", url = "$BASE_URL" }, - { name = "Categories", url = "$BASE_URL/categories" }, + { name = "Tags", url = "$BASE_URL/tags" }, { name = "Source", url = "https://github.com/Sinon/sinon.github.io" }, { name = "GitHub", url = "https://github.com/Sinon" }, # Blocked by: https://github.com/getzola/after-dark/pull/43 # Alternatively downgrade to zola<0.19 - # { name = "RSS", url = "$BASE_URL/rss.xml" }, + { name = "RSS", url = "$BASE_URL/rss.xml" }, ] after_dark_title = "Rob's Blog | Python • Rust • Ramblings?" diff --git a/content/project-based-learning.md b/content/project-based-learning.md new file mode 100644 index 0000000..dcbbe54 --- /dev/null +++ b/content/project-based-learning.md @@ -0,0 +1,59 @@ ++++ +title = "Project based learning" +date = 2025-02-07 +draft = true + +[taxonomies] +tags = ["rust", "learning"] ++++ + +- [Why?](#why) +- [The Failed How](#the-failed-how) +- [Project based learning](#project-based-learning) + - [Pngme](#pngme) + - [CodeCrafters](#pngme) +- [Conclusion and Next Steps](#conclusion-and-next-steps) +- [Footnotes](#footnotes) + +## Why? + +Always wanted to learn Rust, several aborted starts. + +## The Failed How + +A very brief foray pre 1.0 that got to a few simple functions before noping out and returning to the safety of my Python REPL. + +Podcasts + +The Book Dec 2020 + +Zero to Prod Oct 2023 + +Kafka + Rust for a proposal in day job. + +A return to the language as tackled Advent of Code in 2023 after an almost 10 year gap, this was more successful but as I had never generally avoided AoC I found myself more entangled in grokking how to approach solving AoC problems than I was with understanding the details of Rust. + +Followed by another lull until November 2024, again leveraging AoC as a motivator to spur myself on to do some regular Rust programming. + +In the run up to AoC start I was hunting around for some alternatives to work on in the mean time. + +## Project based learning + +### Pngme + +[1] + +[3] + +### CodeCrafters + +[2] + +## Conclusion and Next Steps + +## Footnotes + + +[1]: https://jrdngr.github.io/pngme_book/ +[2]: https://codecrafters.io/ +[3]: https://robertheaton.com/2018/12/08/programming-projects-for-advanced-beginners/ diff --git a/index.html b/index.html deleted file mode 100644 index 8b13789..0000000 --- a/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Makefile b/justfile similarity index 69% rename from Makefile rename to justfile index d4600f8..8683909 100644 --- a/Makefile +++ b/justfile @@ -1,4 +1,2 @@ -.PHONY: clean-gps - clean-gps: exiftool -gps:all= static/*.jpg \ No newline at end of file diff --git a/themes/after-dark b/themes/after-dark index 37b4516..92f883a 160000 --- a/themes/after-dark +++ b/themes/after-dark @@ -1 +1 @@ -Subproject commit 37b4516e5bb1e86fcbc9db13b961f2a4a23926f0 +Subproject commit 92f883ac897507f1b4c6de49e4bc9cc1efddfe5a From accef23b905d02e13d5a136246dfe4a1cb587dbb Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Fri, 7 Feb 2025 18:52:24 +0000 Subject: [PATCH 2/6] more wip --- content/project-based-learning.md | 73 ++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/content/project-based-learning.md b/content/project-based-learning.md index dcbbe54..b748eae 100644 --- a/content/project-based-learning.md +++ b/content/project-based-learning.md @@ -8,52 +8,95 @@ tags = ["rust", "learning"] +++ - [Why?](#why) -- [The Failed How](#the-failed-how) +- [Previous Learning Attempts](#previous-learning-attempts) - [Project based learning](#project-based-learning) - [Pngme](#pngme) - [CodeCrafters](#pngme) - [Conclusion and Next Steps](#conclusion-and-next-steps) - [Footnotes](#footnotes) +Learning a new programming language is like building muscle - sporadic gym visits won't get you far. After years of starting and abandoning Rust, I finally found a learning approach that sticks: hands-on projects that force you to write real code. This post traces my journey from tutorial hell to actually building things, and shares what worked (and what didn't) in hopes of helping others avoid the same pitfalls. + ## Why? -Always wanted to learn Rust, several aborted starts. +Always wanted to learn Rust, with several false starts along the way. The appeal is clear - Rust consistently ranks as the most loved programming language in Stack Overflow's annual developer survey for the past 8 years. It promises memory safety without garbage collection, fearless concurrency, and zero-cost abstractions. -## The Failed How +Modern systems programming demands better tools, and Rust delivers with its strict compiler, excellent tooling, and growing ecosystem. For a Python developer like myself, it offers a path to writing performant, safe code without sacrificing productivity. -A very brief foray pre 1.0 that got to a few simple functions before noping out and returning to the safety of my Python REPL. +## Previous Learning Attempts -Podcasts +My Rust journey has been a series of starts and stops: -The Book Dec 2020 +Pre-1.0 (2014): A brief experiment that ended quickly after writing a few basic functions. The borrow checker won that round. -Zero to Prod Oct 2023 +2020: My wife gifted me "The Rust Programming Language" book after overhearing my interest in Rust podcasts (particularly Rustacean Station). Finished the book and completed various small contained code examples but it was never put in to practice and started to fade. -Kafka + Rust for a proposal in day job. +2023: Two more serious attempts: -A return to the language as tackled Advent of Code in 2023 after an almost 10 year gap, this was more successful but as I had never generally avoided AoC I found myself more entangled in grokking how to approach solving AoC problems than I was with understanding the details of Rust. +- Explored Rust + Kafka integration for a work proposal +- Started "Zero to Production in Rust" in October -Followed by another lull until November 2024, again leveraging AoC as a motivator to spur myself on to do some regular Rust programming. +Late 2023: Returned to coding with Advent of Code. While this got me writing Rust daily, I soon began to spend more time learning AoC problem-solving patterns than Rust idioms. -In the run up to AoC start I was hunting around for some alternatives to work on in the mean time. +2024: Started preprating for another AoC attempt starting with some prep in November, more focused this time but still searching for a better learning approach. ## Project based learning -### Pngme +It was around this time when trying to form the habit of writing Rust with the aim of working through AoC2024 that I can across the suggestion of [PNGme][1] in a response to a similar request for guidance from someone learning Rust in [r/rust][4] + +### PNGme + +PNGme bills itself as "An Intermediate Rust Project". It comprsises of a series of Chapters each with a clear goal to build some functionality that will eventually evolve into a CLI tool for reading PNG files and then embedding or secrets messages stored within. Almost as important as the guidance are the suite of tests to verify each chapter as you go. + +[My work][5] on this has expanded as the simple library has become a test bed to experiement with other parts of the Rust ecosystem such as + +- Python to Rust binding with pyO3[6] by building a [PNGme python library][7] from the Rust library. +- Experimenting with GUI toolkit [`eframe`][8] using [`egui`][9] by building a [GUI interface for PNGme][10]. +- A [html frontend for PNGme][11] using Maud and Axum. +- Splitting a codebase into various crates in a single workspace. + +### Programming Projects for Advanced Beginners -[1] +Upon finishing up PNGme the author gives some suggestions of other projects based learning resources, one of which was [Programming Projects for Advanced Beginners][3] a blog series by Robert Heaton which consist of prompts for small self-contained projects and some guidance on how you might approach and structure solving them. -[3] +These led nicely into experimenting with [`ratatui`][12] a library designed to help you to build Text User Interfaces (TUIs) resulting in: + +- [`gridlife`][13]: A library and TUI CLI for simulating Conways Game of Life automatons. Which in some "the interest is smaller than you think", one of the maintainers of `ratatui` (Orhun Parmaksız) filed an issue on my repo, asking for some changes so they could use it in a website they were building. The reason I used `ratatui` in the first place was because of watching [a talk Orhun gave at EuroRust][14]. This also gave me the nudge I needed to publish the library to `crates.io`. +- A functionality unfinished [snake][15] game. ### CodeCrafters -[2] +After PNGme's success, I discovered [CodeCrafters][2] through Jon Gjengset's videos. The platform offers hands-on projects where you build clones of real-world tools: Git, Redis, Docker, and more. Each project breaks down into small, testable steps with clear feedback. + +What sets CodeCrafters apart is its focus on real-world implementations rather than toy problems. Building a BitTorrent client or Redis server forces you to understand both Rust and the underlying protocols. The automated tests provide immediate feedback, while the step-by-step progression keeps you motivated. + +The projects I worked on via CodeCrafters are: + +- [`loxide`][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17]. Which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. +- [`rsh][18] - A bare bones POXIS shell. ## Conclusion and Next Steps +Looking back on the last 3-4 months I am frankly shocked by how productive I have been, in that span of time I have done more development work for my own pleasure than I had in the nearly 10 years preceding it. + ## Footnotes [1]: https://jrdngr.github.io/pngme_book/ [2]: https://codecrafters.io/ [3]: https://robertheaton.com/2018/12/08/programming-projects-for-advanced-beginners/ +[4]: https://old.reddit.com/r/rust +[5]:https://github.com/sinon/pngme/ +[6]: https://pyo3.rs +[7]: https://github.com/sinon/pngme/tree/main/crates/pngme-python +[8]: https://docs.rs/eframe/ +[9]: https://docs.rs/egui/ +[10]: https://github.com/sinon/pngme/tree/main/crates/pngme-gui +[11]: https://github.com/sinon/pngme/compare/main...pngme-www +[12]: https://docs.rs/ratatui +[13]: https://docs.rs/gridlife +[14]: https://www.youtube.com/watch?v=hWG51Mc1DlM +[15]: https://github.com/sinon/snake +[16]: https://github.com/sinon/loxide +[17]: https://craftinginterpreters.com/ +[18]: https://github.com/sinon/rsh From 90e1d7b6d23c20e7a2133233c2ff9c5831f2a09f Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:00:36 +0000 Subject: [PATCH 3/6] first draft --- content/project-based-learning.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/content/project-based-learning.md b/content/project-based-learning.md index b748eae..1e5cbb5 100644 --- a/content/project-based-learning.md +++ b/content/project-based-learning.md @@ -19,9 +19,9 @@ Learning a new programming language is like building muscle - sporadic gym visit ## Why? -Always wanted to learn Rust, with several false starts along the way. The appeal is clear - Rust consistently ranks as the most loved programming language in Stack Overflow's annual developer survey for the past 8 years. It promises memory safety without garbage collection, fearless concurrency, and zero-cost abstractions. +I always wanted to learn Rust, with several false starts along the way. The appeal is clear - Rust consistently ranks as the most loved programming language in Stack Overflow's annual developer survey for the past 8 years. It promises memory safety without garbage collection, fearless concurrency, and zero-cost abstractions. -Modern systems programming demands better tools, and Rust delivers with its strict compiler, excellent tooling, and growing ecosystem. For a Python developer like myself, it offers a path to writing performant, safe code without sacrificing productivity. +Modern programming languages demands better tools, and Rust delivers with its strict compiler, excellent tooling, and growing ecosystem. For a Python developer like myself, it offers a path to writing performant, safe code without sacrificing productivity. ## Previous Learning Attempts @@ -73,12 +73,27 @@ What sets CodeCrafters apart is its focus on real-world implementations rather t The projects I worked on via CodeCrafters are: - [`loxide`][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17]. Which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. -- [`rsh][18] - A bare bones POXIS shell. +- [`rsh][18] - A POSIX shell implementation that gave me a small peak behind the curtain to the complexity behind the humble shell. + +The real value of CodeCrafters is its focus on production-grade tools rather than toy problems. Building an Intrepreter forces you to understand both Rust and Lexing, Parsing, Evalutation etc. Automated tests provide instant feedback, maintaining momentum. ## Conclusion and Next Steps Looking back on the last 3-4 months I am frankly shocked by how productive I have been, in that span of time I have done more development work for my own pleasure than I had in the nearly 10 years preceding it. +The last 3-4 months have been unexpectedly productive - more personal development work than in the previous decade. Project-based learning worked because: + +1. Clear end goals keep you motivated +2. Real-world projects force you to write idiomatic code +3. Test suites provide immediate feedback +4. Building actual tools is more engaging than solving puzzles + +Next steps: + +- Complete the Lox Interpreter from CodeCrafters, and hopefully continue onto just following the book. As the CodeCrafters is not complete and stops after implementing functions. +- Contribute to some OSS project in the Rust ecosystem. +- Build a non-trivial web service in Axum. + ## Footnotes From 3d9fecc2d0bb016de63901fba65fc64f88692e87 Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:06:32 +0000 Subject: [PATCH 4/6] fix some broken formatting --- content/project-based-learning.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/content/project-based-learning.md b/content/project-based-learning.md index 1e5cbb5..33e706d 100644 --- a/content/project-based-learning.md +++ b/content/project-based-learning.md @@ -13,7 +13,6 @@ tags = ["rust", "learning"] - [Pngme](#pngme) - [CodeCrafters](#pngme) - [Conclusion and Next Steps](#conclusion-and-next-steps) -- [Footnotes](#footnotes) Learning a new programming language is like building muscle - sporadic gym visits won't get you far. After years of starting and abandoning Rust, I finally found a learning approach that sticks: hands-on projects that force you to write real code. This post traces my journey from tutorial hell to actually building things, and shares what worked (and what didn't) in hopes of helping others avoid the same pitfalls. @@ -50,8 +49,8 @@ PNGme bills itself as "An Intermediate Rust Project". It comprsises of a series [My work][5] on this has expanded as the simple library has become a test bed to experiement with other parts of the Rust ecosystem such as -- Python to Rust binding with pyO3[6] by building a [PNGme python library][7] from the Rust library. -- Experimenting with GUI toolkit [`eframe`][8] using [`egui`][9] by building a [GUI interface for PNGme][10]. +- Python to Rust binding with [pyO3][6] by building a [PNGme python library][7] from the Rust library. +- Experimenting with GUI toolkit [eframe][8] using [egui][9] by building a [GUI interface for PNGme][10]. - A [html frontend for PNGme][11] using Maud and Axum. - Splitting a codebase into various crates in a single workspace. @@ -59,9 +58,9 @@ PNGme bills itself as "An Intermediate Rust Project". It comprsises of a series Upon finishing up PNGme the author gives some suggestions of other projects based learning resources, one of which was [Programming Projects for Advanced Beginners][3] a blog series by Robert Heaton which consist of prompts for small self-contained projects and some guidance on how you might approach and structure solving them. -These led nicely into experimenting with [`ratatui`][12] a library designed to help you to build Text User Interfaces (TUIs) resulting in: +These led nicely into experimenting with [ratatui][12] a library designed to help you to build Text User Interfaces (TUIs) resulting in: -- [`gridlife`][13]: A library and TUI CLI for simulating Conways Game of Life automatons. Which in some "the interest is smaller than you think", one of the maintainers of `ratatui` (Orhun Parmaksız) filed an issue on my repo, asking for some changes so they could use it in a website they were building. The reason I used `ratatui` in the first place was because of watching [a talk Orhun gave at EuroRust][14]. This also gave me the nudge I needed to publish the library to `crates.io`. +- [gridlife][13]: A library and TUI CLI for simulating Conways Game of Life automatons. Which in some "the interest is smaller than you think", one of the maintainers of ratatui (Orhun Parmaksız) filed an issue on my repo, asking for some changes so they could use it in a website they were building. The reason I used ratatui in the first place was because of watching [a talk Orhun gave at EuroRust][14]. This also gave me the nudge I needed to publish the library to [crates.io](https://crates.io). - A functionality unfinished [snake][15] game. ### CodeCrafters @@ -72,8 +71,8 @@ What sets CodeCrafters apart is its focus on real-world implementations rather t The projects I worked on via CodeCrafters are: -- [`loxide`][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17]. Which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. -- [`rsh][18] - A POSIX shell implementation that gave me a small peak behind the curtain to the complexity behind the humble shell. +- [loxide][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17]. Which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. +- [rsh][18] - A POSIX shell implementation that gave me a small peak behind the curtain to the complexity behind the humble shell. The real value of CodeCrafters is its focus on production-grade tools rather than toy problems. Building an Intrepreter forces you to understand both Rust and Lexing, Parsing, Evalutation etc. Automated tests provide instant feedback, maintaining momentum. @@ -81,8 +80,6 @@ The real value of CodeCrafters is its focus on production-grade tools rather tha Looking back on the last 3-4 months I am frankly shocked by how productive I have been, in that span of time I have done more development work for my own pleasure than I had in the nearly 10 years preceding it. -The last 3-4 months have been unexpectedly productive - more personal development work than in the previous decade. Project-based learning worked because: - 1. Clear end goals keep you motivated 2. Real-world projects force you to write idiomatic code 3. Test suites provide immediate feedback @@ -94,8 +91,6 @@ Next steps: - Contribute to some OSS project in the Rust ecosystem. - Build a non-trivial web service in Axum. -## Footnotes - [1]: https://jrdngr.github.io/pngme_book/ [2]: https://codecrafters.io/ From 819d40d3fbcb1967f5764d18e4931824c94a4c57 Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:27:24 +0000 Subject: [PATCH 5/6] cleanup --- content/project-based-learning.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/content/project-based-learning.md b/content/project-based-learning.md index 33e706d..a9b2538 100644 --- a/content/project-based-learning.md +++ b/content/project-based-learning.md @@ -1,7 +1,6 @@ +++ title = "Project based learning" date = 2025-02-07 -draft = true [taxonomies] tags = ["rust", "learning"] @@ -30,12 +29,12 @@ Pre-1.0 (2014): A brief experiment that ended quickly after writing a few basic 2020: My wife gifted me "The Rust Programming Language" book after overhearing my interest in Rust podcasts (particularly Rustacean Station). Finished the book and completed various small contained code examples but it was never put in to practice and started to fade. -2023: Two more serious attempts: +2023: Two slightly more serious attempts: -- Explored Rust + Kafka integration for a work proposal -- Started "Zero to Production in Rust" in October +- Explored Rust + Kafka integration for a potential work proposal +- Started on "Zero to Production in Rust" in October, though as I followed along with the book I was also [re-implementing it in Axum][19] instead of Actix Web which the book uses. -Late 2023: Returned to coding with Advent of Code. While this got me writing Rust daily, I soon began to spend more time learning AoC problem-solving patterns than Rust idioms. +Late 2023: Returned to coding with Advent of Code. While this got me writing Rust daily for a few weeks, I soon began to spend more time learning AoC problem-solving patterns than Rust idioms. 2024: Started preprating for another AoC attempt starting with some prep in November, more focused this time but still searching for a better learning approach. @@ -47,7 +46,7 @@ It was around this time when trying to form the habit of writing Rust with the a PNGme bills itself as "An Intermediate Rust Project". It comprsises of a series of Chapters each with a clear goal to build some functionality that will eventually evolve into a CLI tool for reading PNG files and then embedding or secrets messages stored within. Almost as important as the guidance are the suite of tests to verify each chapter as you go. -[My work][5] on this has expanded as the simple library has become a test bed to experiement with other parts of the Rust ecosystem such as +[My work][5] on this has expanded as the simple library has become a test bed to experiement with other parts of the Rust ecosystem such as: - Python to Rust binding with [pyO3][6] by building a [PNGme python library][7] from the Rust library. - Experimenting with GUI toolkit [eframe][8] using [egui][9] by building a [GUI interface for PNGme][10]. @@ -60,7 +59,7 @@ Upon finishing up PNGme the author gives some suggestions of other projects base These led nicely into experimenting with [ratatui][12] a library designed to help you to build Text User Interfaces (TUIs) resulting in: -- [gridlife][13]: A library and TUI CLI for simulating Conways Game of Life automatons. Which in some "the interest is smaller than you think", one of the maintainers of ratatui (Orhun Parmaksız) filed an issue on my repo, asking for some changes so they could use it in a website they were building. The reason I used ratatui in the first place was because of watching [a talk Orhun gave at EuroRust][14]. This also gave me the nudge I needed to publish the library to [crates.io](https://crates.io). +- [gridlife][13]: A library and TUI CLI for simulating Conway's Game of Life automatons. This resulted in a case of "the interest is smaller than you think". One of the maintainers of ratatui (Orhun Parmaksız) filed an issue on my repo, asking for some changes so they could use it in a website they were building. The reason I had used ratatui in the first place was due to watching [a talk Orhun gave at EuroRust][14]. This also gave me the nudge I needed to publish the library to [crates.io](https://crates.io). - A functionality unfinished [snake][15] game. ### CodeCrafters @@ -71,8 +70,8 @@ What sets CodeCrafters apart is its focus on real-world implementations rather t The projects I worked on via CodeCrafters are: -- [loxide][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17]. Which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. -- [rsh][18] - A POSIX shell implementation that gave me a small peak behind the curtain to the complexity behind the humble shell. +- [loxide][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17], which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. +- [rsh][18] - A POSIX shell implementation that gave me a small peek behind the curtain to the complexity within the humble shell. The real value of CodeCrafters is its focus on production-grade tools rather than toy problems. Building an Intrepreter forces you to understand both Rust and Lexing, Parsing, Evalutation etc. Automated tests provide instant feedback, maintaining momentum. @@ -110,3 +109,4 @@ Next steps: [16]: https://github.com/sinon/loxide [17]: https://craftinginterpreters.com/ [18]: https://github.com/sinon/rsh +[19]: https://github.com/sinon/z2p-axum From ef5aa45ae150021f931e8c33774480135d93c1e8 Mon Sep 17 00:00:00 2001 From: Rob Hand <146272+sinon@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:29:38 +0000 Subject: [PATCH 6/6] spelling --- .codespellignore | 1 + content/project-based-learning.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.codespellignore b/.codespellignore index e69de29..92e9728 100644 --- a/.codespellignore +++ b/.codespellignore @@ -0,0 +1 @@ +ratatui \ No newline at end of file diff --git a/content/project-based-learning.md b/content/project-based-learning.md index a9b2538..e347efd 100644 --- a/content/project-based-learning.md +++ b/content/project-based-learning.md @@ -46,7 +46,7 @@ It was around this time when trying to form the habit of writing Rust with the a PNGme bills itself as "An Intermediate Rust Project". It comprsises of a series of Chapters each with a clear goal to build some functionality that will eventually evolve into a CLI tool for reading PNG files and then embedding or secrets messages stored within. Almost as important as the guidance are the suite of tests to verify each chapter as you go. -[My work][5] on this has expanded as the simple library has become a test bed to experiement with other parts of the Rust ecosystem such as: +[My work][5] on this has expanded as the simple library has become a test bed to experiment with other parts of the Rust ecosystem such as: - Python to Rust binding with [pyO3][6] by building a [PNGme python library][7] from the Rust library. - Experimenting with GUI toolkit [eframe][8] using [egui][9] by building a [GUI interface for PNGme][10]. @@ -73,7 +73,7 @@ The projects I worked on via CodeCrafters are: - [loxide][16] - An implementation of an interpreter for the Lox language by Robert Nystrom for his excellent (and free) book [Crafting Interpreter][17], which has given me a new appreciation for my 4 years studying Computer Science and wishing as a new engineer all those years ago I had some work projects that would have slowed down the atrophy of all that theory that I never put into practice to make it stick. - [rsh][18] - A POSIX shell implementation that gave me a small peek behind the curtain to the complexity within the humble shell. -The real value of CodeCrafters is its focus on production-grade tools rather than toy problems. Building an Intrepreter forces you to understand both Rust and Lexing, Parsing, Evalutation etc. Automated tests provide instant feedback, maintaining momentum. +The real value of CodeCrafters is its focus on production-grade tools rather than toy problems. Building an Intrepreter forces you to understand both Rust and Lexing, Parsing, Evaluation etc. Automated tests provide instant feedback, maintaining momentum. ## Conclusion and Next Steps