···5tags = ["gleam", "college"]
6---
78-## *[]{.nf .nf-md-file_code}* Picking a language
910Every semester my college assigns us a major project. This usually meant coming up
11with a startup concept or designing a website in Figma, but we never got to
···20all that work while carefully checking for every `exception` or `null` value.
21*I wanted to try something different*
2223-## *[]{.nf .nf-fa-star}* Enter Gleam
2425```gleam
26pub fn main() -> Nil {
···32ecosystem, I wanted to give this new language a try. It's syntax is simple,
33the community is friendly and the language is incredibly small.
3435-### *[]{.nf .nf-oct-goal}* Errors as values
3637One of the main reasons why I went with Gleam was their approach to *error handling*.
38Errors in Gleam are treated as _values_ you can return from any function.
···57}
58```
5960-### *[]{.nf .nf-fa-code_branch}* Pattern matching
6162Being able to build custom error types pairs really well with
63Gleam's *pattern matching*. You can define it at the top level scope and easily `switch`
···74{.tip}
75> The compiler even _warns_ you when you're missing one or more branches!
7677-## *[]{.nf .nf-oct-server}* Handling HTTP Requests
7879For the http server, I used [mist](https://hexdocs.pm/mist) paired
80with [wisp](https://hexdocs.pm/wisp) for the web framework. Setting up the
···123}
124```
125126-## *[]{.nf .nf-fa-database}* Working with SQL
127128I'm really not a fan of using regular strings to store SQL queries,
129there's no *autocomplete*, no *syntax highlighting*, no *linting* from my editor.
···190}
191```
192193-## *[]{.nf .nf-md-file_check}* Conclusion
194195This was my first time building a backend project, and if it didn't work as expected,
196the whole group would be affected. Thankfully we ran into zero runtime errors so far,
···5tags = ["gleam", "college"]
6---
78+## [ ]{.nf aria-hidden=true} Picking a language
910Every semester my college assigns us a major project. This usually meant coming up
11with a startup concept or designing a website in Figma, but we never got to
···20all that work while carefully checking for every `exception` or `null` value.
21*I wanted to try something different*
2223+## [ ]{.nf aria-hidden=true} Enter Gleam
2425```gleam
26pub fn main() -> Nil {
···32ecosystem, I wanted to give this new language a try. It's syntax is simple,
33the community is friendly and the language is incredibly small.
3435+### [ ]{.nf aria-hidden=true} Errors as values
3637One of the main reasons why I went with Gleam was their approach to *error handling*.
38Errors in Gleam are treated as _values_ you can return from any function.
···57}
58```
5960+### [ ]{.nf aria-hidden=true} Pattern matching
6162Being able to build custom error types pairs really well with
63Gleam's *pattern matching*. You can define it at the top level scope and easily `switch`
···74{.tip}
75> The compiler even _warns_ you when you're missing one or more branches!
7677+## [ ]{.nf aria-hidden=true} Handling HTTP Requests
7879For the http server, I used [mist](https://hexdocs.pm/mist) paired
80with [wisp](https://hexdocs.pm/wisp) for the web framework. Setting up the
···123}
124```
125126+## [ ]{.nf aria-hidden=true} Working with SQL
127128I'm really not a fan of using regular strings to store SQL queries,
129there's no *autocomplete*, no *syntax highlighting*, no *linting* from my editor.
···190}
191```
192193+## [ ]{.nf aria-hidden=true} Conclusion
194195This was my first time building a backend project, and if it didn't work as expected,
196the whole group would be affected. Thankfully we ran into zero runtime errors so far,
+17-17
priv/posts/uses.md
···5tags = []
6---
78-## *[]{.nf .nf-fa-laptop}* FastFetch
910-- *[]{.nf .nf-md-arch}* *OS*: Arch Linux x86_64
11-- *[]{.nf .nf-linux-kde_plasma}* *DE*: KDE Plasma
12-- *[]{.nf .nf-fa-ghost}* *Terminal*: Ghostty
13-- *[]{.nf .nf-md-cat}* *Theme*: Catppuccin Mocha
14-- *[]{.nf .nf-md-format_font}* *Terminal Font*: Maple Mono NF
15-- *[]{.nf .nf-fa-fish}* *Shell*: Fish
1617-## *[]{.nf .nf-md-cube_outline}* Software
1819-- *[]{.nf .nf-custom-neovim}* [Lazyvim](https://www.lazyvim.org/): Modal terminal
20 code editor.
21-- *[]{.nf .nf-md-wrench}* [Just](https://just.systems/): A command runner similar
22 to Taskfile.
23-- *[]{.nf .nf-seti-notebook}* [Djot](https://djot.net/): Markup Language
24 similar to markdown.
25-- *[]{.nf .nf-fa-fly}* [Fly.io](https://fly.io/): For deploying containers.
26-- *[]{.nf .nf-md-duck}* [Yazi](https://yazi-rs.github.io/): Terminal file manager,
27 makes it easier to move around my project files.
28-- *[]{.nf .nf-seti-shell}* [Direnv](https://direnv.net/): Load enviroment
29 variables when switching directories.
3031### Programming Languages
3233-- *[]{.nf .nf-fa-star}* [Gleam](https://gleam.run/): It's still my favorite
34 programming language.
3536### Version Control
3738-- *[]{.nf .nf-md-sheep}* [Tangled](https://tangled.org/): I recently moved away
39 from Github, tangled feels like breath of fresh air.
40-- *[]{.nf .nf-fa-square_twitter}* [Jujutsu](https://www.jj-vcs.dev): Feels more
41 flexible and intuitive than Git, also tangled has support for it!
···5tags = []
6---
78+## [ ]{.nf aria-hidden=true} FastFetch
910+- [ ]{.nf aria-hidden=true} OS: Arch Linux x86_64
11+- [ ]{.nf aria-hidden=true} DE: KDE Plasma
12+- [ ]{.nf aria-hidden=true} Terminal: Ghostty
13+- [ ]{.nf aria-hidden=true} Theme: Catppuccin Mocha
14+- [ ]{.nf aria-hidden=true} Terminal Font: Maple Mono NF
15+- [ ]{.nf aria-hidden=true} Shell: Fish
1617+## [ ]{.nf aria-hidden=true} Software
1819+- [ ]{.nf aria-hidden=true} [Lazyvim](https://www.lazyvim.org/): Modal terminal
20 code editor.
21+- [ ]{.nf aria-hidden=true} [Just](https://just.systems/): A command runner similar
22 to Taskfile.
23+- [ ]{.nf aria-hidden=true} [Djot](https://djot.net/): Markup Language
24 similar to markdown.
25+- [ ]{.nf aria-hidden=true} [Fly.io](https://fly.io/): For deploying containers.
26+- [ ]{.nf aria-hidden=true} [Yazi](https://yazi-rs.github.io/): Terminal file manager,
27 makes it easier to move around my project files.
28+- [ ]{.nf aria-hidden=true} [Direnv](https://direnv.net/): Load enviroment
29 variables when switching directories.
3031### Programming Languages
3233+- [ ]{.nf aria-hidden=true} [Gleam](https://gleam.run/): It's still my favorite
34 programming language.
3536### Version Control
3738+- [ ]{.nf aria-hidden=true} [Tangled](https://tangled.org/): I recently moved away
39 from Github, tangled feels like breath of fresh air.
40+- [ ]{.nf aria-hidden=true} [Jujutsu](https://www.jj-vcs.dev): Feels more
41 flexible and intuitive than Git, also tangled has support for it!