45 | );
46 |
--------------------------------------------------------------------------------
/src/config.ts:
--------------------------------------------------------------------------------
1 | export const SITE = {
2 | title: "Noghartt's garden",
3 | website: 'https://noghartt.dev',
4 | description: "A place where I put all my thoughts",
5 | author: 'Guilherme Ananias ',
6 | }
7 |
8 | export const GITHUB_PROFILE_URL = 'https://github.com/noghartt';
9 | export const GITHUB_REPO_URL = `${GITHUB_PROFILE_URL}/blog`;
10 | export const TWITTER_URL = 'https://twitter.com/noghartt';
11 |
--------------------------------------------------------------------------------
/src/content/blog/2022-06-22T03:00:00.000Z-simplifying.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: simplifying
3 | title: Simplifying things
4 | pubDate: 2022-06-22T03:00:00.000Z
5 | tags:
6 | - self-improvement
7 | ---
8 |
9 | Simplifying things is one of the most underrated ideas that people have when doing anything.
10 | But understand why you need it and how you can do it can improve a lot of things in your daily
11 | workflow.
12 |
13 | An **abstraction** is a nice way to simplify things. But what is an abstraction?
14 | It's the process of removing implementation details of the final result. Abstracting
15 | things is a process that we, humans, do every day. You don't need to expose every
16 | detail from something, abstract it in a way that turns more easily to understand is
17 | a good way to do it.
18 |
19 | We can talk that **automation** is a way to abstract things too, in general I agreed with
20 | that. But, automate things is a way to turn it more simplified. For example, you
21 | can automate your daily workflow in some ways:
22 |
23 | - Remove spams from your email inbox;
24 | - Schedule things in your agenda;
25 | - Routine;
26 | - Write things;
27 |
28 | And lot of other things that you can do to help your daily workdflow. I think that we
29 | can agree that it's a good way to simplifcate your day, right?
30 |
31 | ## Simplification as code
32 |
33 | But thinking in programming, how we can simplify our model? What things we should do to
34 | improve our daily coding sessions? How we can turn our work easier? There are some thigns
35 | that we can do to improve it.
36 |
37 | One of the things that we could understand is: we don't need every feature from some package,
38 | framework, etc. It's a good idea know about the existence of this function, but think if it's
39 | really necessary the usage of it on the scope of your project is a way to do simplification even
40 | before write a line of code.
41 |
42 | An example about it is: did you know that Mongoose (an ODM to handle MongoDb) has a way to manage
43 | versions of your documents? If you didn't know, yes. There's a way to do it. The `__v` is a simple
44 | property that stores an incremental integer and the propose behind it is: every time that you change the
45 | structure of this document, `__v` will be incremented.
46 |
47 | In some cases, we can treat it to do something based on the version of this document. Write a migration,
48 | treat some internal logic or other things like it. But, thinking in your code, do you think that it's a
49 | good idea to handle something like it? Thinking in every thing that you need to treat when write a code
50 | to handle it, it's a good idea to do it? With every conditional branch, every corner case, every minimal
51 | detail that you need to trait when is handle some sensitive data like a document in your database.
52 |
53 | When you use a feature of the library, framework or something like that, and doesn't think in the consequences
54 | of it, it's the opposite of simplification, you are turn your work harder from now on. You just complicated the
55 | work that you or other person will have to do when maintain this code, and over time this work will be more and
56 | more complicated because the complexity will grow, and thinking in some months or a year, you or the person that
57 | will fix the bug that appears in your code will say that this code has been simplified or not?
58 |
--------------------------------------------------------------------------------
/src/content/blog/2023-02-18T03:00:00.000Z-writing-things-down.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: writing-things-down
3 | title: Writing things down
4 | pubDate: 2023-02-18T03:00:00.000Z
5 | tags:
6 | - writing
7 | - self-improvement
8 | ---
9 |
10 | How much stuffs did you write down today?
11 |
12 | As time goes by, more I believe that you need to write things down more and more. Documenting stuffs is a good way to believe in the long term game.
13 |
14 | Writing is a good way to put your thoughts in a paper (or anything else) and validate if they make sense. If you are missing some point that is important to understand all the context behind the subject.
15 |
16 | Writing is a good way to align your ideas with other people. Comparing the idea and checking what you don't know yet.
17 |
18 | Everyone should write things down. Just write things down.
19 |
--------------------------------------------------------------------------------
/src/content/blog/2023-07-08T03:00:00.000Z-blogroll.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: blogroll
3 | title: Blogroll
4 | pubDate: 2023-07-08T03:00:00.000Z
5 | tags:
6 | - blog
7 | - list
8 | ---
9 |
10 | I'm a person that likes to read a lot of things, and I have a lot of blogs that I like to read. I'll list here some of them:
11 |
12 | ## Summary
13 |
14 | - [Personal blogs](#personal-blogs)
15 | - [Self-improvement](#self-improvement)
16 | - [Computer science](#computer-science)
17 | - [Company blogs](#company-blogs)
18 | - [Newsletters](#newsletters)
19 | - [RSS Feeds](#rss-feeds)
20 |
21 | ## Personal blogs
22 |
23 | - [Joel Hooks](https://joelhooks.com/)
24 | - [Gwern Branwen](https://www.gwern.net/)
25 | - [Drew DeVault](https://drewdevault.com/)
26 | - [Eli Bendersky](https://eli.thegreenplace.net/)
27 | - [Eliot Peper](https://www.eliotpeper.com/)
28 | - [Julian Shapiro](https://www.julian.com/)
29 | - [Nikita Voloboev](https://wiki.nikitavoloboev.xyz/)
30 | - [Tom MacWright](https://macwright.com/)
31 | - [Paul Graham](http://www.paulgraham.com/articles.html)
32 | - [Seth Godin](https://seths.blog/)
33 | - [Derek Sivers](https://sivers.org/blog)
34 | - [David Perell](https://www.perell.com/blog)
35 | - [Ben Kuhn](https://www.benkuhn.net/)
36 | - [Alexey Guzey](https://guzey.com/)
37 | - [Hillel Wayne](https://www.hillelwayne.com/)
38 |
39 | ## Self-improvement
40 |
41 | - [Farnam Street](https://fs.blog/)
42 | - [James Clear](https://jamesclear.com/articles)
43 | - [Mark Manson](https://markmanson.net/articles)
44 | - [Minding your way](https://mindingourway.com/)
45 | - [Ness Labs](https://nesslabs.com/blog)
46 | - [Nat Eliason](https://www.nateliason.com/blog)
47 | - [Scott Young](https://www.scotthyoung.com/blog/)
48 |
49 | ## Computer science
50 |
51 | - [Julia Evans](https://jvns.ca/)
52 | - [TK Kinoshita](https://www.iamtk.co/)
53 | - [Dan Abramov](https://overreacted.io/)
54 |
55 | ## Company blogs
56 |
57 | - [Stripe](https://stripe.com/blog)
58 | - [Airbnb](https://medium.com/airbnb-engineering)
59 | - [Uber](https://eng.uber.com/)
60 | - [Netflix](https://netflixtechblog.com/)
61 | - [Spotify](https://engineering.atspotify.com/)
62 | - [Dropbox](https://dropbox.tech/)
63 | - [Google](https://developers.googleblog.com/)
64 | - [Facebook](https://engineering.fb.com/)
65 | - [Twitter](https://blog.twitter.com/engineering/en_us.html)
66 | - [Microsoft](https://devblogs.microsoft.com/)
67 | - [Amazon](https://developer.amazon.com/blogs)
68 |
69 | ## Newsletters
70 |
71 | - [Hacker Newsletter](https://hackernewslettr.com/)
72 | - [Hacker News Digest](https://hndigest.com/)
73 | - [The Overflow](https://stackoverflow.blog/newsletter/)
74 | - [ByteByteGo](https://blog.bytebytego.com/)
75 | - [Latent Space](https://www.latent.space/)
76 | - [The Palindrome](https://thepalindrome.org/)
77 |
78 | ## RSS Feeds
79 |
80 | A way to group all these blogs in one place is to use a RSS reader. I use [Feedly](https://feedly.com/) to read all my RSS feeds.
81 | If you want to get the OPML that I use to view these blogs, you can get it [here](https://gist.github.com/noghartt/53e05e6bccb41e9fd69e24fa36ec65ce).
82 |
--------------------------------------------------------------------------------
/src/content/blog/2023-09-12T21:58:56.609Z-2023-09-reading-list.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2023-09-reading-list
3 | title: "My reading list - September 2023"
4 | pubDate: 2023-09-12T21:58:56.609Z
5 | tags:
6 | - list
7 | - reading
8 | ---
9 |
10 | Following the ideas from [My reading list](https://samueldurantes.github.io/blog/post/my-reading-list) and [Reading List August 2023](https://poorlydefinedbehaviour.github.io/posts/reading_list_august_2023/),
11 | I'll be update this note while reading something that I think that can be useful for myself in the future.
12 |
13 | ## Computer Science
14 |
15 | - [Code without fear. Sometimes](https://reasoning.page/2023/09/12/code-without-fear-sometimes/)
16 | - [Simplify: move code into database functions](https://sive.rs/pg)
17 | - [In a git repository, where do your files live?](https://jvns.ca/blog/2023/09/14/in-a-git-repository--where-do-your-files-live-/)
18 | - [Side effecting a deopt](https://www.recompiled.dev/blog/deopt/)
19 | - [Your WiFi Can See You](https://mrereports.substack.com/p/your-wifi-can-see-you)
20 | - [64-Bit Bank Balances ‘Ought to be Enough for Anybody’?](https://tigerbeetle.com/blog/2023-09-19-64-bit-bank-balances-ought-to-be-enough-for-anybody/)
21 | - [Most UI Applications are Broken Real-time Applications](https://thelig.ht/ui-apps-are-broken/)
22 | - [How do databases execute expressions?](https://notes.eatonphil.com/2023-09-21-how-do-databases-execute-expressions.html)
23 | - [Was Javascript really made in 10 days?](https://buttondown.email/hillelwayne/archive/did-brendan-eich-really-make-javascript-in-10-days/)
24 | - [A crash course in DNS (Domain Name System)](https://blog.bytebytego.com/p/a-crash-course-in-dns-domain-name)
25 | - [The Design System Ecosystem](https://bradfrost.com/blog/post/the-design-system-ecosystem/)
26 | - [CSS Findings From The Threads App: Part 2](https://ishadeed.com/article/threads-app-css-part-2/)
27 |
28 | ### Videos
29 |
30 | - [Brazil Tried to Protect Its Computer Industry](https://www.youtube.com/watch?v=brOtbWIViWM)
31 |
32 | ## Productivity
33 |
34 | - [The Cult of Done](https://www.youtube.com/watch?v=bJQj1uKtnus)
35 | - [Collecting and curating material is good and we should do it more](https://buttondown.email/hillelwayne/archive/in-defense-of/)
36 | - [Work on what matters.](https://lethain.com/work-on-what-matters/)
37 |
38 | ## History
39 |
40 | - [Historical maps probably helped cause World War I](https://resobscura.substack.com/p/historical-maps-probably-helped-cause)
41 |
42 | ## Economy
43 |
44 | - [Airlines Are Just Banks Now](https://www.theatlantic.com/ideas/archive/2023/09/airlines-banks-mileage-programs/675374/)
45 |
46 | ## Biology
47 |
48 | - [What Makes Life Tick? Mitochondria May Keep Time for Cells](https://www.quantamagazine.org/what-makes-life-tick-mitochondria-may-keep-time-for-cells-20230918/)
49 |
--------------------------------------------------------------------------------
/src/content/blog/2023-09-18T00:14:03.062Z-my-first-talk.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: my-first-talk
3 | title: "My first talk"
4 | pubDate: 2023-09-18T00:14:03.062Z
5 | tags:
6 | - presentation
7 | - programming
8 | ---
9 |
10 | In the last September 16th, 2023, I did my first talk ever in a meetup. In Belo Horizonte,
11 | happened the first JSParty Brasil.
12 |
13 | The experience of giving a talk, seeing the public listening to you, they looking for your
14 | slides while you explaining the aiming topic is awesome.
15 |
16 | The idea behind the talk was to show a presentation about the codemod culture behind Woovi.
17 | How we scale refactor in a large codebase (more than 500k LOC) and how we move faster
18 | with these refactors.
19 |
20 | ---
21 |
22 | If you want to see the presentation slides, click [here](https://docs.google.com/presentation/d/1Y8uUNnOF1_N9w7gbkIYCGQpqPTkdjtyKbHf8fqDXpEg/edit#slide=id.p).
23 |
--------------------------------------------------------------------------------
/src/content/blog/2023-10-06T02:07:39.710Z-2023-10-reading-list.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2023-10-reading-list
3 | title: "My reading list - October 2023"
4 | pubDate: 2023-10-06T02:07:39.710Z
5 | tags:
6 | - list
7 | - reading
8 | ---
9 |
10 | - [Minor Advances in Knowledge Are Still a Worthwhile Goal](https://tratt.net/laurie/blog/2023/minor_advances_in_knowledge_are_still_a_worthwhile_goal.html)
11 | - [What scientist must know about hardware to write fast code?](https://viralinstruction.com/posts/hardware/)
12 | - [Making Hard Things Easy](https://www.youtube.com/watch?v=30YWsGDr8mA)
13 | - [Union vs Sum types](https://viralinstruction.com/posts/uniontypes/)
14 |
--------------------------------------------------------------------------------
/src/content/blog/2023-10-08T17:23:51.870Z-iterate-over-your-feedback-loop.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: iterate-over-your-feedback-loop
3 | title: "Iterate over your feedback loop"
4 | pubDate: 2023-10-08T17:23:51.870Z
5 | tags:
6 | - self-improvement
7 | - thinking
8 | - system-theory
9 | ---
10 |
11 | In the last month, I was reading the [Thinking in Systems](https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557) book.
12 | It's a good book that clarify some ideas about how to sistematically think
13 | in how systems works and the _"rational"_ behind it.
14 |
15 | Around the complexity of an entire system. A system can be defined as a network
16 | structure connecting pieces that will produces one or more things from it.
17 |
18 | One of the core aspects of a system is _feedback loop_. Everything can cause a
19 | feedback loop, and every action can produce a feedback on the system or another
20 | system.
21 |
22 | A feedback loop is the source of a side-effect that impacts in some change around
23 | an aspect of your system. The output of the system can generate a positive or a negative
24 | response, this is the feedback of your action. Giving that response, you can use it against
25 | your system as the new input, then you validate the new hypothesis and iterate over them.
26 | This is what we call the feedback loop.
27 |
28 | Thinking that everything that you do is a part of a system, it will help you to
29 | identify a set of feedback loops around your actions. But, why is important to
30 | have this conscioussness around what you're doing?
31 |
32 | Identify the effects of your actions and their responses is a cheaper way to
33 | iterate with a clearer idea of your goal. After the feedback, you can adjust
34 | your mental model and identify if you're closer to your goal.
35 |
36 | Iterate faster over your feedback loops give you advantages, more iterations over
37 | your loops give you:
38 |
39 | - A better understand about where you are. If you're reaching your goal;
40 | - A clearer understading around the rules of your system and the path that let you reach where you are;
41 |
42 | More iterations implies in a better understading of the system. A more accurate
43 | mental model.
44 |
45 | See what are the feedback loops around what you are doing.
46 |
--------------------------------------------------------------------------------
/src/content/blog/2023-10-10T01:09:53.902Z-thinking-in-systems.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: thinking-in-systems
3 | title: "Thinking in Systems"
4 | pubDate: 2023-10-10T01:09:53.902Z
5 | tags:
6 | - bookshelf
7 | - system-theory
8 | ---
9 |
10 | - **Note: 5/5**
11 | - **Finished: 2023-10-09**
12 |
13 | Thinking in Systems is one of the best books that I read in 2023. To be honest,
14 | I can't absorb all the knowledge that this work writes down.
15 |
16 | The idea around all this book is to give you a better idea around how systems works,
17 | in a internal, rational way. As an introduction to _"non system thinkers"_, the book
18 | proposes to show to you.
19 |
20 | With that idea in mind, they will presentate a lot of concepts about system domains and,
21 | based on that, it'll introduce a new _"meta"_ mental model that will allow you to see our
22 | non-linear world in a better way.
23 |
--------------------------------------------------------------------------------
/src/content/blog/2023-11-02T14:16:34.806Z-my-reading-list-november-2023.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: my-reading-list-november-2023
3 | title: "My reading list - November 2023"
4 | pubDate: 2023-11-02T14:16:34.806Z
5 | tags:
6 | - list
7 | - reading
8 | ---
9 |
10 | - [What do we mean by "the foundations of mathematics"?](https://lawrencecpaulson.github.io/2023/11/01/Foundations.html)
11 | - [Writing a storage engine for Postgres: an in-memory Table Access Method](https://notes.eatonphil.com/2023-11-01-postgres-table-access-methods.html)
12 | - [Biohacking Lite](https://karpathy.github.io/2020/06/11/biohacking-lite/)
13 | - [A BETTER EXPLANATION OF THE LISKOV SUBSTITUTION PRINCIPLE](https://www.hillelwayne.com/post/lsp/)
14 | - [Some Thoughts on Software Expertise](https://buttondown.email/hillelwayne/archive/some-thoughts-on-software-expertise/)
15 | - [Sorry, I'm a Teapot](https://thehistoryoftheweb.com/im-a-teapot/)
16 | - [Cosmic Ray Failures of Power Semiconductor Devices](https://spectrum.ieee.org/cosmic-ray-failures-of-power-semiconductor-devices)
17 | - [67 Weird Debugging Tricks Your Browser Doesn't Want You to Know](https://alan.norbauer.com/articles/browser-debugging-tricks)
18 | - [principles are products of practice, not the reverse](https://alsado.ca/posts/principles-are-products-of-practice/)
19 |
--------------------------------------------------------------------------------
/src/content/blog/2023-11-15T23:32:02.614Z-writing-a-tree-walk-interpreter-from-scratch-with-rust.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: writing-a-tree-walk-interpreter-from-scratch-with-rust
3 | title: "Writing a Tree-Walk Interpreter From Scratch With Rust"
4 | pubDate: 2023-11-15T23:32:02.614Z
5 | tags:
6 | - programming-language
7 | - rust
8 | draft: true
9 | ---
10 |
--------------------------------------------------------------------------------
/src/content/blog/2023-11-16T11:21:00.886Z-running-ghdl-on-macos-m1.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: running-ghdl-on-macos-m1
3 | title: "Running GHDL on MacOS M1"
4 | createdAt: {{createdAt}}
5 | pubDate: 2023-11-16T11:21:00.886Z
6 | draft: true
7 | tags:
8 | - mac
9 | - tutorial
10 | ---
11 |
--------------------------------------------------------------------------------
/src/content/blog/2023-12-26T14:28:10.336Z-the-awesomeness-of-lists.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: the-awesomeness-of-lists
3 | title: "The Awesomeness of Lists"
4 | pubDate: 2023-12-26T14:28:10.336Z
5 | tags:
6 | - productivity
7 | - thoughts
8 | ---
9 |
10 | Lists are a universal tool for productivity, everything can be compound into a list or can be considered one. For example, the post-its that you have in your office wall they can be treated as a list, you can handle it recursively, putting new lists inside a list.
11 |
12 | We are presented to lists being a child and they follow us for our entire life, it's an easier way to create a condensed, simplistic way to arrange data to be used. You even can have specific lists that are being written as an ordered way to instruct someone to do something, like a cooking recipe or a tutorial.
13 |
14 | You can compound and have a lot of useful data that contextualizes you about everything in a specific scope by doing a list, like me, that does a list about the key points that I want to write about in this post.
15 |
16 | The fact that you can build this solution in a lot of different solutions helps us to maintain a lot of lists easier. You can have your supermarket lists written in pieces of paper, a list of blogs that you follow written in a gist in GitHub, or even a thread at Twitter with the list of the coolest blog posts that you read, [like me](https://twitter.com/noghartt/status/1521123090587082752).
17 |
18 | Being a forgetful person with a considerably low attention-span, I found in lists an useful, disciplined way to go through my daily routine. I have lists to handle it , like:
19 |
20 | - What I need to do on my job or at home;
21 | - What are the meetings;
22 | - What I need to follow-up;
23 | - What I didn't do;
24 |
25 | These to-do lists helps me to handle my routine in an easier way, helping me to be a more organized person. Furthermore, it gives me an visibility and tracking about the things that I need to do, the urgency of them and I missed on my daily activities or my daily habits.
26 |
27 | I also handle more than my daily tasks in this structure, I like to put all my useful resources into it. My notes has a lot of lists around it. For example:
28 |
29 | - A list for the blogs and podcasts that I like to follow;
30 | - What are the tracking of the books that I'm reading (or already read) over the year;
31 | - Useful links for articles or tool resources that I believe will be useful at some moment;
32 | - And every resource that I believe will be useful for me at some moment.
33 |
34 | Lists can express a great range of communication between two or more people, they give you all the insights and the scopes related to a subject. You can structure it like a checkbox of items containing the things that you need to do with their priorities, or like an ordered list containing your favorite cooking recipe, or just an unordered list containing the summary of the presentation of a course.
35 |
36 | They are an universal, easily tool of thought that helps us to derive through your day and the entire range of things happening at the same time.
37 |
38 | Given this versatility to arrange the content and the fact that you can put everywhere, like a piece of paper, a computer file or even just structuring your thoughts as a list of things, it's what make me an enjoyer of lists and why I think that other people should be too.
39 |
40 | This is my _ode to lists_. Thanks.
41 |
42 | ---
43 |
44 | I would especially like to thank @Eckzzo and @fersilvaa16 who helped review this post.
45 | Thank you very much guys.
46 |
--------------------------------------------------------------------------------
/src/content/blog/2023-12-27T20:21:07.934Z-one-year-using-obsidian.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: one-year-using-obsidian
3 | title: "One Year Using Obsidian"
4 | pubDate: 2023-12-27T20:21:07.934Z
5 | tags:
6 | - note-taking
7 | - tools
8 | ---
9 |
10 | On December 26th, 2023, I started my new and current vault in Obsidian, and was one of the best decisions that I could bring to my 2023. Now I'm doing the review around this beautiful tool that follows me in my entire year.
11 |
12 | In the last years of my life, I turned more and more of a heavy user of note-taking tools, even those _"rudimentar"_ ones like a pen and paper, I already tried a lot of tools around this subject, like Logseq, Notion, Bear, Apple Notes, Evernote, and finally Emacs with [org-mode](https://orgmode.org/), when I thought that would be the state of the art of note-taking tools for me, and yes, I think that Emacs with org-mode is one of the best tools that I've used in my entire life. And I used it for about two years, and was good.
13 |
14 | Although I like to use org-mode, I always felt that having a tool fits my workflow more easily. I'd like to just put words into a file and push it to a place where I could find it easier in the future. And well, I think that I finally found it.
15 |
16 | ## Obsidian and My Workflow
17 |
18 | The powerful philosophy around Obsidian is the concept of [File over App](https://stephango.com/file-over-app) that Steph Ango writes about. By the fact that it's just a tool that handles Markdown files in a better way and you can enhance this experience with some community plugins, you can have infinite ways to manage your workflow.
19 |
20 | It's one of the core arguments that shows why I think that Obsidian was the best tool for me at that moment, and fit it until now. If I want to move it to another app or build my solution, I just need to handle a bunch of Markdown files and everything will work great, it's a future-proof solution.
21 |
22 | My workflow is simple despite the range of community plugins and what you can do inside a vault, I just have six plugins, being them plugins that help me automatize some jobs, such as the Commander, QuickAdd, Templater, and Dataview, a query language plugin, allows me to do some specific tooling in my notes, but avoid it as much as possible.
23 |
24 | I try to maintain each note as raw as possible, just with what we can find in Markdown by default because I want to help me to migrate to another software if I need to in the future.
25 |
26 | ## Obsidian and My Learnings
27 |
28 | I would say that was an awesome year for my note-taking habits in general. I could develop more about this habit and I can found what are the exact ways that work for me. I don't know everything yet, and every day I try to improve some aspect of this habit, but I saw a lot of improvements in my entire life just by taking some notes during my day.
29 |
30 | Some statistics about what I did in my 2023 year with Obsdian:
31 |
32 | - I wrote a total of 512 notes.
33 | - 227 of them are daily journaling, which is ~44.33% of my entire vault.
34 | - 251 of them are related to my _Zettelkasten_, which is ~49% of my entire vault.
35 | - 30 of them are drafts of blog posts that I hope someday will be the light, which is ~5.85% of my vault.
36 | - I added 107 tags between the files, being the \#computer-science the most used tag, with 130 files.
37 |
38 | These are some statistics related to my work on my vault in this year, I believe that 2024 will be greater than that.
39 |
40 | The major learning related to my adventure with Obsidian was: that note-taking isn't about the tools that you use but about your process. A great process allows you to arrange your notes in a creative, better way that fits your expectations. Regardless of being Notion, Obsidian or just using your pen and a notebook. What matters is your process.
41 |
42 | By the way, this is the graph of my Obsidian on the day that I wrote this post, let's see how it will be in the next year:
43 |
44 | 
45 |
--------------------------------------------------------------------------------
/src/content/blog/2023-12-30T19:52:17.651Z-2023-in-review.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2023-in-review
3 | title: "2023 in Review"
4 | pubDate: 2023-12-30T19:52:17.651Z
5 | tags:
6 | - review
7 | ---
8 |
9 | For the second year, following some of the most inspirational blogs that I follow, I will write about my year, and this time it will be public. Some of the coolest blogs that I follow on a day-to-day basis are doing it, so why can't do it too, right?
10 |
11 | I would say that 2023 was one of the greatest years of my life. Like everyone else, I had ups and downs, but the fact that I learned too much in a lot of areas of my life, makes me think that I'm a completely new person from how I started the year. Reading the OKRs that I wrote for this year I consider this idea even more.
12 |
13 | It's a good exercise to reflect on what happened this year and prepare for what is coming next, my idea with this post is to finish this year with a golden key and start the next one with all the excitement that I have writing here.
14 |
15 | For this post, I will cover some specific topics that I want to share here, they are:
16 |
17 | - Books and reading
18 | - Programming
19 | - Job
20 | - Writing
21 |
22 | ## Health
23 |
24 | I would say that 2023 was not my year for health. I do not prioritize it in a lot of ways, but the three great ones that I think are: food, exercise, and sleep. And the impact of this choice came at different times throughout my year.
25 |
26 | ### Food
27 |
28 | I love to cook things and do meal prepping, but I do not spend too much of the year around it. The trade-off was that what I was eating, in general, doesn't have some nutritive benefits, and as we know, what you eat in general is a fundamental part of the rest of your health. The quality of food in general wasn't too good.
29 |
30 | ### Exercise
31 |
32 | It has its ups and downs during the year. I tried a lot of times to go to the gym and turn it into a consistent habit because I love to do exercise. I love to run and take walks, it helps me a lot to clean my brain and help me with my thoughts, and it's connected with other aspects like controlling my anxiety and helps in the quality of my sleep. But I don't take the right priority on it and I lose my streak several times during the year.
33 |
34 | ### Sleep
35 |
36 | I'm an easier sleep, I don't have any issue trying to sleep and I can easily do it in any place that I want to do. But, the quality of my sleep is awful. Doing some tracking around it, I take just 6 hours of sleeping with an average of 1 hour of REM sleep. I made some improvements in the consistency: like not going to sleep every night around 4 AM and waking up almost all days at 6 or 7 AM.
37 |
38 | ## Books
39 |
40 | This was a great year around my reading habit. I proposed to myself to take 12 books and successfully read them until the last day of December. From those 12 books, I read 10. Which, for me, it's a great achievement, considering that I completely lost one of the habits that I most like: the habit of reading. If you want to check which are these books, you can check it on [my list of books that I read](/lists/list-of-books-that-i-read). For the next year, I already have a lot of books that I want to read, most of them technical books.
41 |
42 | One of the core things that I learned from this habit and that I will bring to my 2024 is: that I don't want to read more books, I just want to read those that make me learn something. This is one of the core philosophies that I will follow for 2024, ensuring that it's better to spend time with books that impact my life, like the ones related to self-improvement that bring some cool ideas or those technical ones that are related to a subject of my interest.
43 |
44 | ## Career and Work
45 |
46 | A great year related to my career! I had the first opportunity to give a talk, and I learned a lot of cool things in a lot of different subjects, like Math, Distributed Systems, Web stuff, Compilers, and other cool stuff that I have a lot of interest in. I want to write about all these things someday. I started a lot of different projects too, like these:
47 |
48 | - [nero](https://github.com/noghartt/nero), my tree-walk interpreted programming language written in Rust.
49 | - I rewrote my [blog](https://github.com/noghartt/blog) in Astro.
50 | - [Paxos From Scratch](https://github.com/noghartt/paxos-from-scratch), my attempt to learn more about consensus algorithms, also written in Rust;
51 |
52 | One thing that I want to bring to 2024 is the ambition to finish the projects that I started one day. I think that considering all these aspects, it was a great year for my career and I expect that 2024 may be the same.
53 |
54 | For my work, I continue working at [Woovi](https://woovi.com), for a total of 1 year and 9 months, and I can say that it is one of the best decisions I made for myself. I need to thank every one of my coworkers for this year, I was able to learn a lot not only about the work, but I was able to have some introspective processes thanks to conversations I had with each of them, and what best I could bring to myself. But I'm far from achieving the performance that I believe is ideal for my professional side, and that's exactly what I'm going to look for in 2024.
55 |
56 | ## Writing
57 |
58 | I started to write more about my ideas and insights related to things that I like in tech in 2022, but I would say that was 2023 the year where I consolidated it as one of my passions and one of habits that I love to have. Exposing my ideas and my beliefs in words helps me a lot to understand myself and organize my thoughts in a way that seems coherent.
59 |
60 | In 2023 I wrote a lot, I have cool blog posts that I wrote both here in this blog or [dev.to](https://dev.to), like these:
61 |
62 | - [Design System 101: Top-down Approach in Component Spacing](https://dev.to/woovi/design-system-101-top-down-approach-in-component-spacing-281m)
63 | - [Server-side Rendering (SSR) From Scratch with React](https://dev.to/woovi/server-side-rendering-ssr-from-scratch-with-react-19jm)
64 | - [Avoiding UI Regressions With Jest](https://dev.to/woovi/avoiding-ui-regressions-with-jest-49f3)
65 |
66 | Other blog posts have been written here. You can find them on the [respective list](https://noghartt.dev). 2023 was a good year for improving my writing skills and knowing how to write for the final user in a good way.
67 |
68 | ## Next steps in 2024?
69 |
70 | Well, this was a little about my year in review. I believe that 2024 will be so great than 2023 will be for me, and I hope that can be great for you too.
71 |
72 | For 2024, the core aspect of what I want to focus on is health. Believing more and more that having a healthier body and a healthier mind is a core, fundamental piece to have a peak performance in any other aspect of my life. Focusing a lot on what I already talked about before: food, exercise, and sleep.
73 |
74 | Meal prepping and cooking are some of the best hobbies that I have in my life, and improving them during 2024 will be great stuff. Even because cooking is a good way to take some rest of the _"outside world"_ and recharge your batteries.
75 |
76 | Exercise and sleep will be carefully taken as priorities too. Ensuring that I'll turn it into one of the habits for my new year.
77 |
78 | I want to write more too. I have a lot of ideas for blog posts and series that I would like to write and I will move forward to get out of the paper and put it into screens, In 2024 I will write much more.
79 |
80 | In terms of other aspects of my life, I want to take more travels with my girlfriend, one feeling that I think I've lost in the last years was the anxiety of discovering new things, new people, new languages, and/or new cultures. I believe that it is an enriching way to grow in life and learn more about yourself and others, and it's the kind of experience that you take for the rest of your life, it's what makes you alive. I already have some things planned on it and others I will discover yet.
81 |
82 | The word for my 2024 will be consistency. In every aspect of my life.
83 |
84 | I would like to say a big thank you to all the people who played an important role in my 2023. I hope your year was as special as mine. And a special thank you to these people: to my girlfriend who supports me despite my annoyance, I love you too much, to my friends who made my 2023 much better, and a special thank you to Sibelius and Ivan who were essential mentors and friends for my professional and personal growth in this year, thanks for all the advices.
85 |
86 | Happy New Year, reader! I hope that 2024 will be so great for you too!
87 |
--------------------------------------------------------------------------------
/src/content/blog/2024-01-21T14:39:29.114Z-increasing-your-friction-area.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: increasing-your-friction-area
3 | title: "Increasing Your Friction Area"
4 | pubDate: 2024-01-21T14:39:29.114Z
5 | tags:
6 | - self-improvement
7 | - career
8 | ---
9 |
10 | One of the best ways to grow in your life, in any aspect, is by increasing your
11 | exposed friction area to experiences. What I call friction area is the _"surface"_
12 | that will be exposed to the reactions you do.
13 |
14 | Everything you do in your day compounds your friction area, and everything has feedback.
15 | If you let yourself do more things, you'll iterate more over their reactions.
16 |
17 | With a bigger surface, you compound what things will happen to you. It's a way to control
18 | your life thinking in the long-term game. When you compose your surface area with good actions,
19 | you will be more likely to receive positive feedback.
20 |
21 | As Sibelius Seraphini said in the article: [How to become a Senior engineer faster?](https://sibelius.substack.com/p/how-to-become-a-senior-engineer-faster),
22 | if you want to grow faster in your career, you need to say "Yes" to every new opportunity.
23 | It's a way to let yourself live more experiences. With more experiences, you grow faster, and
24 | when you grow faster, you'll live better experiences. You increased your friction area, and you're
25 | receiving more positive feedback. Positive feedback loops compound.
26 |
27 | When Shawn "swyx" Wang said on [How to Create Luck](https://www.swyx.io/create-luck), what
28 | I called the friction area can be called the "luck surface area" too. It's the same idea. It's
29 | more about how you're building habits and a routine that lets you create a strong friction
30 | area that brings positive feedback for you.
31 |
32 | The idea of "friction area" is a way to bring a mental model that lets you move and iterate faster,
33 | building a systematic way to iterate over the feedback loop of your experiences. It allows you to reap
34 | the rewards of your actions more quickly and manage them better in the long term.
35 |
36 | Now, what are you doing to increase your friction area?
37 |
--------------------------------------------------------------------------------
/src/content/blog/2024-02-04T15:23:35.299Z-embrace-the-chaos-of-your-life.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: embrace-the-chaos-of-your-life
3 | title: "Embrace The Chaos of Your Life"
4 | pubDate: 2024-02-04T15:23:35.299Z
5 | tags:
6 | - self-improvement
7 | - thinking
8 | ---
9 |
10 | The last weeks were too hard for me. I need to spend too much time doing things
11 | in my personal life and ensure that I can bring good work to my professional life.
12 |
13 | For me, when this happens, there are always difficult moments. These moments are
14 | always complicated because they impacted me in different areas of my life, which
15 | generated a vicious cycle of bad moments and anxiety.
16 |
17 | But, the last time that this happened, in the same scenario, I learned a new aspect
18 | of life that hadn't clicked for me yet, but it's a too simple idea that someone can ask:
19 | "Dude, it's too obvious. Why in the hell you didn't understand it before?". And my
20 | answer would be: I don't know.
21 |
22 | You need to learn to embrace the chaos happening in your life and use it as a motion to
23 | stay on track with the things you need to do. As everyone one day said, life is like a
24 | rollercoaster with ups and downs, and you can't avoid the down moments of your life.
25 | What matters is how you approach them.
26 |
--------------------------------------------------------------------------------
/src/content/blog/2024-03-03T19:37:49.312Z-set-up-nix-on-macos-using-flakes-nix-darwin-and-home-manager.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: set-up-nix-on-macos-using-flakes-nix-darwin-and-home-manager
3 | title: "Set up Nix on macOS using flakes, nix-darwin and home-manager"
4 | pubDate: 2024-03-03T19:37:49.312Z
5 | tags:
6 | - nix
7 | ---
8 |
9 | About three years ago, I started using NixOS on my personal laptop. In those days, I
10 | needed a config that would allow me to have a stable system, that could be reproducible
11 | over all my machines, and that would allow me to have a development environment that would
12 | be easy to maintain and to share with others. NixOS comes to fit all these requirements.
13 |
14 | But, since I started using a MacBook Pro (2022), I do not feel the necessity of using the
15 | Nix package manager, since I can use Homebrew to install all the packages that I need and
16 | have some kind of reproducibility with shell scripts. But, for some needs, I would like to
17 | use Nix again on my macOS now, and this blog post will be about how to set up Nix on macOS
18 | like me.
19 |
20 | ## Installing Nix on macOS
21 |
22 | Installing Nix on macOS is easy. You can use the following command to install Nix on your
23 | machine:
24 |
25 | ```sh
26 | curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
27 | ```
28 |
29 | This command installs the Nix package manager based on the [DeterminateSystem/nix-installer](https://github.com/DeterminateSystems/nix-installer),
30 | based on the explanation by the [Zero to Nix](https://zero-to-nix.com/concepts/nix-installer), it gives
31 | better error messages, an installation plan (like Terraform), and other cool features that bring
32 | a better installation experience for you.
33 |
34 | Just follow the step by step of the installation flow and everything will be fine.
35 |
36 | ## Creating the flake file
37 |
38 | After installing Nix, you can create a `flake.nix` file that will be the entry point for your
39 | entire Nix configuration on your machine. This file will be used to define the packages that
40 | you want to install, the system configuration, and the home-manager configuration.
41 |
42 | ```nix
43 | {
44 | description = "Nix configuration";
45 |
46 | inputs = {
47 | nixpkgs.url = "github:NixOS/nixpkgs";
48 |
49 | nix-darwin.url = "github:lnl7/nix-darwin/master";
50 | nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
51 |
52 | home-manager.url = "github:nix-community/home-manager";
53 | home-manager.inputs.nixpkgs.follows = "nixpkgs";
54 | };
55 |
56 | outputs = inputs @ { self, ... }: let
57 | nixpkgsConfig = {
58 | config.allowUnfree = true;
59 | };
60 | in {
61 |
62 | };
63 | }
64 | ```
65 |
66 | This is the basic structure of my `flake.nix`, it defines all the inputs that I will need
67 | to use in my configuration, they are:
68 |
69 | - `nixpkgs`: The main NixOS/Nixpkgs repository, that will be used to define the packages
70 | that I want to install on my machine.
71 | - `nix-darwin`: The nix-darwin repository. It brings all modules to configure your macOS
72 | system using a declarative way.
73 | - `home-manager`: The home-manager repository. It brings all modules to configure your
74 | user environment using a declarative way.
75 |
76 | ## Configuring nix-darwin
77 |
78 | After creating the `flake.nix` file, you can configure the `nix-darwin` module. You will
79 | need to create a `darwinConfigurations` field on the outputs of your `flake.nix` file, and
80 | add the hostname of your machine with the `darwinSystem` function.
81 |
82 | ```nix
83 | {
84 | # ...
85 |
86 | outputs = inputs @ { self, nix-homebrew, home-manager ... }: let
87 | nixpkgsConfig = {
88 | config.allowUnfree = true;
89 | };
90 | in {
91 | darwinConfigurations = let
92 | inherit (inputs.nix-darwin.lib) darwinSystem;
93 | in {
94 | machine = darwinSystem {
95 | system = "aarch64-darwin";
96 |
97 | specialArgs = { inherit inputs; };
98 |
99 | modules = [
100 | ./hosts/mbp/configuration.nix
101 | inputs.home-manager.darwinModules.home-manager
102 | {
103 | nixpkgs = nixpkgsConfig;
104 |
105 | home-manager.useGlobalPkgs = true;
106 | home-manager.useUserPackages = true;
107 | home-manager.users.noghartt = import ./home/home.nix;
108 | }
109 | ];
110 | };
111 | };
112 | };
113 | }
114 | ```
115 |
116 | In that case, what I'm doing is: creating a new configuration called `machine` on the `darwinConfigurations`
117 | systems, and declaring some specific properties of that given system, they are:
118 |
119 | - The system of that machine is `aarch64-darwin`, which is the system of the new Apple Silicon
120 | Macs (MacBook Pro M1).
121 | - The `specialArgs` field is used to pass the inputs to the `darwinSystem` function. All modules
122 | are functions that accept some arguments, the `specialArgs` field lets you pass new arguments
123 | for all these imported modules.
124 | - The `modules` field is used to define the modules that will be used to configure the system.
125 | In that case, I'm using the `configuration.nix` file to define my system configuration, the
126 | `home-manager` module to configure the user environment, the `homebrew.nix` file to install
127 | all the packages that I want to install using Homebrew, and the `home.nix` file to configure
128 | my user environment using home-manager.
129 |
130 | ## Configuring my system
131 |
132 | The `configuration.nix` file is used to define some system configurations related to my
133 | MacBook Pro, like user home dir, some extra options related to Nix binaries, and other system-related configurations that you want to declare. In my case, I wrote the following `configuration.nix`:
134 |
135 | ```nix
136 | _:
137 |
138 | {
139 | services.nix-daemon.enable = true;
140 |
141 | users.users.noghartt = {
142 | home = "/Users/noghartt";
143 | };
144 |
145 | nix.extraOptions = ''
146 | auto-optimise-store = true
147 | experimental-features = nix-command flakes
148 | extra-platforms = x86_64-darwin aarch64-darwin
149 | '';
150 |
151 | homebrew = {
152 | enable = true;
153 |
154 | casks = [
155 | "discord"
156 | "visual-studio-code"
157 | ];
158 | };
159 | }
160 | ```
161 |
162 | ## Configuring the home-manager
163 |
164 | The `home.nix` file is used to define the user environment configurations using the home-manager.
165 | In my case, I wrote just a simple `home.nix` file that installs some packages for me. It is
166 | like a `configuration.nix` file but for the user environment.
167 |
168 | ```nix
169 | { pkgs, ... }:
170 |
171 | {
172 | home.stateVersion = "23.11";
173 |
174 | home.packages = with pkgs; [
175 | htop
176 | curl
177 | coreutils
178 | jq
179 | ];
180 |
181 | programs.zsh = {
182 | enable = true;
183 |
184 | shellAliases = {
185 | ls = "ls --color";
186 | };
187 | };
188 | }
189 |
190 | ```
191 |
192 | With that configuration, I can install the initial packages that I want to use on my
193 | machine using Nix, and gives me the powerful ability of reproducibility in a declarative way.
194 |
195 | ## Building and activating the configuration
196 |
197 | After creating all the files, you can build and activate the configuration using the following.
198 | You just need to run two specific commands to build and activate the configuration on your
199 | machine:
200 |
201 | ### 1. Building the configuration
202 |
203 | ```sh
204 | nix build .#darwinConfigurations.machine.config.system
205 | ```
206 |
207 | It will build the configuration of your machine targeting the `darwinConfigurations.machine`
208 | outputs. Do not forget of changing the `machine` of the given name of your system configuration.
209 |
210 | ### 2. Activating the configuration
211 |
212 | ```sh
213 | ./result/sw/bin/darwin-rebuild switch --flake .
214 | ```
215 |
216 | It will activate the configuration of your machine using the `darwin-rebuild` command. It will
217 | switch the configuration of your machine to the new configuration that you have built.
218 |
219 | ## Conclusion
220 |
221 | In this blog post, I showed how to set up Nix on macOS using flakes, nix-darwin, and home-manager
222 | like I do. I hope that this blog post can help you set up your configuration and let you
223 | use Nix on your machine too.
224 |
225 | I really love how the Nix package manager works, and I think that it is a great tool to use
226 | on your machine since it gives you a lot of power to manage your system and your user environment.
227 | You really should give it a try.
228 |
229 | If you want to see my configuration, you can check it out on my [repository](https://github.com/noghartt/nixcfg),
230 | it's all open source, feel free to use it as a base for your configuration if you want.
231 |
232 | If you have any questions, feel free to ask me on [Twitter](https://twitter.com/noghartt) or send me an [email](mailto:hi@noghartt.dev). I will be glad
233 | to help you with your doubts.
234 |
235 | ## Resources
236 |
237 | - [Some notes on using Nix](https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/)
238 | - [My first steps with Nix on Mac OSX as Homebrew replacement](https://sandstorm.de/de/blog/post/my-first-steps-with-nix-on-mac-osx-as-homebrew-replacement.html)
239 | - [How I use Nix on macOS](https://blog.6nok.org/how-i-use-nix-on-macos/)
240 | - [Setup nix, nix-darwin, and home-manager from scratch on MacBook M1 Pro](https://gist.github.com/jmatsushita/5c50ef14b4b96cb24ae5268dab613050)
241 | - [Nix Starter Config](https://github.com/Misterio77/nix-starter-configs)
242 |
--------------------------------------------------------------------------------
/src/content/blog/2024-03-09T19:43:45.612Z-database-101-understanding-b-trees.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: database-101-understanding-b-trees
3 | title: "Database 101: Understanding B-Trees"
4 | pubDate: 2024-03-09T19:43:45.612Z
5 | draft: true
6 | tags:
7 | - database
8 | ---
9 |
10 |
11 | In the last months, I'm really interested in how database works internally. One of my questions was: _"How databases manages indexes? And how they are organized into the storage?"_.
12 |
13 | I tried to find some resources to understand it, but I didn't find a good resource that could explain to me in a clear way exactly how it works.
14 |
15 | Then, I started to read the [Database Internals](https://www.databass.dev/) book, inside it they have some chapters related to B-Tree and how they work. I really recommend this book if you want to learn better how databases work internally.
16 |
17 | In this post, I'll explain to you how B-Trees works as a way I would like to learn about it.
18 |
19 | As a way to a better communication through the post, I'll be calling B-Tree, but I think that it's important to mention that it will be in notion of B-Tree as an _"umbrella"_ for a given particular family of structures. In case, for our scenario of explanation, I'll be using the "on-disk B+Tree" as our reference.
20 |
21 | If you want to understand better the differences between B-Tree and B+Tree, I recommend you to read this post [here](https://www.geeksforgeeks.org/difference-between-b-tree-and-b-tree/).
22 |
23 | ## The structure of a B-Tree
24 |
25 | B-Trees are a kind of _self-balancing tree data structure_ that maintains sorted data over a number of levels. It's composed by nodes that have two specific properties: a `key` and a `value`, where the `key` is the data that will be sorted to let the tree be balanced and handle the binary search through it.
26 |
27 | This tree are composed by three specific kind of nodes:
28 |
29 | - **Root node**: The top node of the tree, it's the only node that doesn't have a parent node.
30 | - **Internal node**: The nodes that are between the root node and the leaf nodes. They are used to guide the search through the tree.
31 | - **Leaf node**: The bottom nodes of the tree, they are the nodes that have the data that we want to search.
32 |
33 | 
34 |
35 | A core property of B-Trees is what we can call it as _"fanout"_, which is the maximum number of childrens that each non-leaf node can have. The fact that the fanout is how much pointers targeting the children nodes
36 |
37 | a node can have, it's a key property to understand how B-Trees are efficient to search through the data.
38 |
39 | In the example of the scenario above, the _fanout_ of the tree is 3. This means that each non-leaf node can have up to 3 children. For a production-ready B-Tree, this fanout number would be much higher, in the order of 100 or more, but for the sake of simplicity, we'll use 2 as a reference.
40 |
41 | ## The B-Tree Operations
42 |
43 | - Explain about insert
44 | - Explain about delete
45 | - Explain about lookup
46 | - Hook to start an explanation about the balancing in both insert/delete
47 |
48 | ## Why we need the balancing?
49 |
50 | - Explain how the balancing is important for B-Trees
51 | - Why a balanced tree has more performance than a non-balanced tree
52 | - Explain how each operation has being processed by the rebalancing of a B-Tree
53 |
54 | ## How B-Tree are being structured in storages?
55 |
56 | - Give an introduction about the difference between HDDs and SSDs
57 | - Explain about the disk structure containing cells, pages, etc
58 | - Explain how each B-Tree works handling nodes and pages
59 | - Explain about _marshalling_ and how serialized B-Tree data are organized on storage in byte sequence
60 |
61 | ## How Database applies B-Tree structure?
62 |
63 | - Explain how database implements B-Trees
64 | - How the indices are build
65 | - How they insert the B-Trees in memory and dump into storage after fulfilled
66 | - How the leaf nodes targets the offset range data for a given record data on the given table
67 |
68 | ## Conclusion
69 |
70 | - Just a conclusion lmao
71 | - Write anything that complements the dumped infos
72 |
73 | ## Resources
74 |
75 | - [Database Internals](https://www.databass.dev/)
76 |
--------------------------------------------------------------------------------
/src/content/blog/2024-03-13T01:52:37.519Z-database-internals.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: database-internals
3 | title: "Database Internals"
4 | pubDate: 2024-03-13T01:52:37.519Z
5 | tags:
6 | - bookshelf
7 | - database
8 | draft: true
9 | ---
10 |
--------------------------------------------------------------------------------
/src/content/blog/2024-05-15T01:45:37.727Z-rss-and-why-i-love-it.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: rss-and-why-i-love-it
3 | title: "RSS and why I love it"
4 | pubDate: 2024-05-15T01:45:37.727Z
5 | tags:
6 | - thoughts
7 | ---
8 |
9 | Inspired by some discussions through Twitter/X over the last few days, I decided to write
10 | about RSS and why I love them. I think it's a great technology that few people know
11 | about and I think it's worth learning more about it.
12 |
13 | One of the greatest things that the Internet could bring to us is data consumption.
14 | Do you already ask yourself how much data we consume compared with the past?
15 | How easy is it to just type something into a search engine and get a lot of information about it?
16 | Is just awesome.
17 |
18 | But, with great power comes great responsibility. And with a lot of information comes a lot of noise.
19 | I'm a person who likes to read blogs and learn new things, it's a great hobby and it's cool
20 | to see other people sharing their thoughts about something, being tech or not. And by that fact, I,
21 | being a lazy person, was thinking so hard about how to keep up with all the blogs that I like to read.
22 |
23 | And then, I found RSS feeds. I would say a cool invention from the 2000s that is still more useful for us
24 | nowadays than it was in the past. What a great idea would be just to aggregate every blog that you like to read
25 | into one place and just read it from there. Simple, but you can see how amazing is it?
26 |
27 | The ability to have all those blogs in one place, ensuring that every new update will be there for
28 | easy access, being notified about it and also being able to read it offline is just amazing. And that's why
29 | I love RSS feeds. It's a simple technology that is still useful for us nowadays and I hope it will be for a long time.
30 |
31 | 
32 |
33 | This is my RSS feed reader, NetNewsWire. On that, I have all the things I like to follow: blogs, podcasts, YouTube channels,
34 | newsletters, etc. I have more than 100 feeds there and I can't imagine my life without it. All links that you can find
35 | on [bookmarks](/bookmarks) come from that feed reader.
36 |
37 | Being an ADHD person, I think that having this kind of tool is helpful for me. I let my NetNewsWire open all the time
38 | and just read the things that I like when I have time. It's a great way to keep up with the things that I like to read and
39 | also a great way to keep my mind busy with something that I like.
40 |
41 | I hope you enjoyed this post and I hope you can give a try to RSS feeds. It's a great technology that is still useful for us.
42 |
43 | If you would like to follow my blog, you can use my [RSS feed](/rss.xml) that I have here.
44 | I am sharing my OPML file (the same one you saw in the image above), if you want some
45 | suggestions of cool blogs to follow, you can get them [here](https://gist.github.com/noghartt/53e05e6bccb41e9fd69e24fa36ec65ce).
46 |
--------------------------------------------------------------------------------
/src/content/blog/2024-06-18T00:11:26.845Z-my-first-impressions-with-neovim.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: my-first-impressions-with-neovim
3 | title: "My first impressions with Neovim"
4 | pubDate: 2024-06-18T00:11:26.845Z
5 | draft: false
6 | tags:
7 | - neovim
8 | - editor
9 | ---
10 |
11 | I consider myself a kind of heavy Emacs user. During some time, about 3
12 | years, I was using Emacs as my daily driven tool for literally everything.
13 |
14 | I even used it as [my desktop manager](https://github.com/ch11ng/exwm) for some time.
15 | And to be honest, I loved it. It's cool to have everything in one place, and
16 | seeing all the pieces of the system interconnected, it's cool.
17 |
18 | But, I suffered some _skill issues_ when talking about a piece of software that, for me, is
19 | important: LSPs. I spend too much time trying to debug performance issues related to
20 | Emacs and LSP, and I was not able to find a solution to it, for large codebases it triggers
21 | some I/O blocking issues that freeze the entire editor, this wasn't the ideal kind of experience
22 | that I wanted. For that reason, I decided to switch to Neovim.
23 |
24 | ## The first attempt
25 |
26 | I'm a real fan of editors who bring the ability to have my config and let me do it in a
27 | "declarative" way. Neovim is a great example of that. Just put some code into your `init.vim` (or `init.lua`)
28 | and take some motions. I appreciate it a lot.
29 |
30 | Then, I decided that on a weekend I would try to have a minimal configuration for Neovim and let it
31 | be my daily driver for the rest of the next week. The idea was just a simple config to bring what I
32 | consider essentials to my daily workflow:
33 |
34 | - Some keybindings to navigate between files, buffers, windows, and tabs.
35 | - Some keybindings that improve my quality of life during the usage of Neovim.
36 | - An LSP client to have the ability to use the language server of my choice, given all the languages that I try to use.
37 | - A cool theme, because I want to be cute.
38 | - Some kind of plugin manager, because I think that it's a great improvement to have it.
39 | - A plugin that lets me easily know the keybindings of the editor, because I can't remember them all.
40 |
41 | ## The selection of plugins
42 |
43 | It was just like 10 plugins, being them:
44 |
45 | - `lazy.nvim`, to manage the plugins.
46 | - LSP support using `lsp-config`, `mason.nvim`, and `nvim-cmp`.
47 | - A theme based on Gruvbox.
48 | - `which-key.nvim`, similar to the Emacs one, to have a list of all the keybindings that have been defined through the configuration.
49 | - `oil.nvim`, to have a better experience navigating through files.
50 | - I remapped by myself some keybindings to have a better motion experience using them, mainly for editor/window/file navigation.
51 |
52 | It was everything that I wanted, and I think that was the right decision because it gave me some great
53 | experience trying to learn more about the native features of Neovim, mainly related to the Vim motions.
54 |
55 | ## Setting up Neovim and documentation
56 |
57 | I think that one great feature of Neovim is Lua. Seems to be a great, simple, but powerful language to write code. It has a familiar
58 | syntax that can be easily learned if you have a background and don't need any tricks (that was one of my concerns with EmacsLisp, even though I like EL and Lisp in general).
59 |
60 | After you have done the right setup and installed at least the plugins related to Lua and their LSP, you can easily code all the
61 | configurations to Neovim. For that, I suggest you use the [`neodev.nvim`](https://github.com/folke/neodev.nvim) plugin, which
62 | will help you to have a better experience with the configuration of Neovim.
63 |
64 | One aspect of Neovim that I missed a lot was the documentation. I don't know if is something related to my mental model, but
65 | the `:help` command from Neovim isn't great compared to the similar one from Emacs. Isn't easier to iterate through the documentation or
66 | even iterate through a Lua code to understand if some piece of code is doing what I want, like executing a piece of the buffer or
67 | putting a function into a REPL that can be easily used.
68 |
69 | Just in case, I know the existence of the `:lua` command, but seems to be a bit limited through the developer experience to use it, I think
70 | that is the most similar feature that we can have in Neovim to compare through the Emacs part. I need to test more the [`iron.nvim`](https://github.com/Vigemus/iron.nvim)
71 | to validate if it gives some kind of good developer experience at all.
72 |
73 | But, the thing that I was most during the first days was: documentation and some tooling to easily iterate to understand something
74 | on Neovim.
75 |
76 | By the way, after I discovered the `Telescope help_tags` command, turn made it easier to go through the documentation, it helped me a lot to understand
77 | some of the concepts and read them. However, I'm still a bit confused about some aspects of the navigation in the documentation.
78 |
79 | ## Daily workflow and motions
80 |
81 | In general, my experience using it as my daily editor was surprisingly good. I think that most of the time, it's more related to how
82 | easily is to navigate through the files and have some kind of ergonomics to do it. For the first days, I was struggling and being a little upset
83 | because the learning curve was a bit steep for motions, I was using the Neovim with a cheat sheet to get at least the basic motions, so I don't look
84 | like a gorilla using keyboards and, after a while, I was able to easily use all the simple motions that I needed to do, like those to navigate,
85 | to move around the editor, to move to the next/previous line, to move to the next/previous word, etc.
86 |
87 | I think that I miss some specific micro-features that I found in other editors, like the ability to move to the previous/next line when hitting the
88 | `j` or `k` key at the start or end of the line, or the ability to move the line up or down following my cursor, etc. I already saw some custom
89 | implementations of all these features, so I think that isn't a big problem, I'll just need to implement it by myself.
90 |
91 | But, I still struggle with some aspects of the editor, like the substitutions, the search and replace, the undo/redo, etc. I'll need to better learn how
92 | they work to understand it and apply it in the right way easily.
93 |
94 | ## Final thoughts
95 |
96 | In general, it was a great experience to use Neovim as my daily driver. It was easier than I expected, and I think that I'm going to stick with it.
97 | Although I'm still hitting some issues, I think that all the pros of Neovim are worth it, having a better experience with the editor
98 | pay by itself.
99 |
100 | If you want to see the configuration of Neovim that I used, you can [check it out here](https://github.com/noghartt/dotnvim). Feel free to use it as a base
101 | for your configuration, and if you have any questions, feel free to ask me on [Twitter](https://twitter.com/noghartt) or send me an [email](mailto:hi@noghartt.dev).
102 |
--------------------------------------------------------------------------------
/src/content/blog/2024-07-09T02:05:24.305Z-software-engineering-is-more-than-just-coding.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "software-engineering-is-more-than-just-coding"
3 | title: "Software Engineering is More Than Just Coding"
4 | pubDate: 2024-07-09T02:05:24.305Z
5 | draft: false
6 | tags:
7 | - engineering
8 | - thoughts
9 | ---
10 |
11 | I have a strong belief that most of the time, there is a clear separation
12 | between two concerns: software engineering and coding. Both look similar, both
13 | work together, but they aren't the same.
14 |
15 | Software engineering is more than coding in the aspect that it involves more about
16 | your work than just your pull request on GitHub. It's more about the processes
17 | and patterns that you apply through your workflow that impact what I mean by
18 | engineering here, in this blog post.
19 |
20 | Software engineering is about the guarantee that, from the macro perspective,
21 | the product and the code that you are working on will correspond to the
22 | expectations that they have, both from the product and technical sides.
23 |
24 | About the product side, it follows the expectations around the culture and what
25 | your company, product or anything else you're working on has, like:
26 |
27 | - If it is what the customer wants;
28 | - If it will bring some quality of life improvement for your customer;
29 | - If it will be a building block for a greater feature,
30 | - And anything else that gives a clear objective for the final customer.
31 | Assuming that your _"customer"_ here could be anything in that scenario
32 | that will consume the product that you are working on.
33 |
34 | About the technical side, the core properties that should be followed in my vision
35 | are:
36 |
37 | - The guarantee that everything related to your code
38 | will follow the expectations around the patterns, the code guidelines that have
39 | been discussed in your company, project, etc.
40 | - Ensure that your feature has been tested, by yourself, by systematic tests,
41 | here being any kind of test (integration, unit, property, end-to-end, anything).
42 | - Ensure that the documentations are available and up-to-date according to the
43 | expectations that you and your coworkers have around the feature/code that you
44 | are working on.
45 | - Ensure that the code won't break the existing codebase.
46 |
47 | About my thoughts around what I believe are responsibilities of software
48 | engineers that are more than coding, I will write some of my thoughts below:
49 |
50 | ## Documentation as a Resource for the Future
51 |
52 | Documentation is one of the most important parts of a project, in my opinion.
53 | It's about the guarantee that the decisions and the resources that you have at
54 | the moment you wrote a code have been saved in a way that can be validated in the
55 | future, by yourself or any other developer that will need to maintain your code.
56 |
57 | Having a powerful context of the past decisions brings to the table the ability
58 | to review it and understand why some options have been taken or not. Some projects
59 | have been written by people that aren't in the company anymore and you can't contact
60 | them, so think how much easier it would be for you when you try to run that old
61 | project if they had at least one documentation about _"How to run Project X"_.
62 |
63 | Documentation brings to you a safe guarantee that, in the future, yourself from
64 | the past prepared all the place answering some of the future doubts that could
65 | exists.
66 |
67 | Documentation should be an atemporal feature for anyone that wants to build
68 | a resilient, scalable, and maintainable software.
69 |
70 | ## Tests as The Reinforcement Guarantee
71 |
72 | If your code isn't supported by tests, your code isn't production-ready. I would
73 | say that for the majority of scenarios, you should have at least 1 test that
74 | guarantees the behavior of a given scope.
75 |
76 | Recently, I read a great piece of blog posts from Matklad: [How to Test](https://matklad.github.io/2021/05/31/how-to-test.html),
77 | it brings some great material around how you could exactly test your software.
78 | And I believe that a strong software should be test oriented, in a perspective
79 | where you have the guarantee that, even if you inserted some specific new thing
80 | into your system, the feedback loop of the tests that you have will ensure that, if
81 | something has been broken, it will be caught up.
82 |
83 | Tests are the proof of the _axioms_ of your systems, the rules and the guarantee
84 | that your system will be working in a specific way. They aren't about what exactly
85 | users shouldn't do, but it's the guarantee that, based on what users really can do,
86 | you won't have a breaking change.
87 |
88 | Tests also let you move fast, with the security that if there is any breaking
89 | change, it will be easily caught by those ones.
90 |
91 | In any other kind of engineering, you have tests, redundancy, and tools that
92 | provide safety through their work, like a civil engineer building a bridge.
93 | Tests, for software engineers, follow the same idea.
94 |
95 | ## Migrations and Refactors as Engineers
96 |
97 | As [Linus said some time ago](https://lore.kernel.org/lkml/CA+55aFy98A+LJK4+GWMcbzaa1zsPBRo76q+ioEjbx-uaMKH6Uw@mail.gmail.com/):
98 |
99 | > WE DO NOT BREAK USERSPACE!
100 |
101 | At the moment that your code goes to production, you have more concerns than just
102 | the usability of your code. How many people will be using it? How will a breaking
103 | change impact them if you inserted a new one? What are the implications?
104 | The second and third order effects of those changes? Can you think of the entire
105 | chain of consequences of this action?
106 |
107 | You, as an engineer, should be carefully thoughtful about the decisions in your
108 | code. The implications of a specific change can impact a lot of customers in a
109 | harmful way that even you can't imagine.
110 |
111 | [Backward compatibility](https://en.wikipedia.org/wiki/Backward_compatibility)
112 | is a term that I like a lot. Being the guarantee of the interoperability of an
113 | older system (as said by Wikipedia), on the software side, it's the guarantee that
114 | we will ensure the same behavior of our APIs even for old clients.
115 |
116 | Even for internal tooling or between shared modules across your codebase, you
117 | should carefully think about backwards compatibility. You will always have a consumer
118 | of an API and, in that scenario, your API is the interface that has been exported
119 | by your functions and is being consumed on the other side of your codebase. The guarantee
120 | that it won't break, or that it will change in every place, is a guarantee of less
121 | entropy throughout your entire codebase.
122 |
123 | ## Conclusion
124 |
125 | This is what I believe are some specific parts of a job of a software engineer,
126 | coding is one of the easier parts of the job. You have a lot more concerns to think
127 | about regarding your product, your code and other related aspects of the company.
128 |
129 | And I believe that we should be more engineers and not just developers.
130 |
--------------------------------------------------------------------------------
/src/content/blog/2024-07-13T02:19:37.399Z-not-about-writing-but-about-reviewing.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "not-about-writing-but-about-reviewing"
3 | title: "Not about writing, but about reviewing"
4 | pubDate: 2024-07-13T02:19:37.399Z
5 | draft: true
6 | tags:
7 | - writing
8 | ---
9 |
10 | - The powerful act of learn isn't on writing, but on reviewing what you wrote.
11 | - You should review what you wrote, being your study notes, lists,
12 | - Reviewing is like a cleaning, it's a way to clean which is garbage and what really matters.
13 | -
14 |
--------------------------------------------------------------------------------
/src/content/blog/2024-07-20T05:25:03.568Z-notes-about-logical-and-vector-clocks.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "notes-about-logical-and-vector-clocks"
3 | title: "Notes About Logical and Vector Clocks"
4 | pubDate: 2024-07-20T05:25:03.568Z
5 | draft: true
6 | tags:
7 | - distsys
8 | - tla+
9 | ---
10 |
11 | - Explain about the Times, Clocks and Ordering of Events paper
12 | - Explain about why order matters
13 | - Introduction to Logical Clocks
14 | - Intrduction to Vector Clocks
15 | - Explain about the difference between Logical and Vector Clocks
16 | - Implementation of Logical and Vector Clocks using TLA+
17 |
--------------------------------------------------------------------------------
/src/content/blog/2024-07-20T05:28:26.342Z-notes-and-learnings-with-tla.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "notes-and-learnings-with-tla"
3 | title: "Notes and Learnings with TLA+"
4 | pubDate: 2024-07-20T05:28:26.342Z
5 | draft: true
6 | tags:
7 | - distsys
8 | - tla+
9 | - formal-methods
10 | ---
11 |
--------------------------------------------------------------------------------
/src/content/blog/2024-07-25T01:24:19.992Z-do-not-trust-on-yourself-trust-on-checklists.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "do-not-trust-on-yourself-trust-on-checklists"
3 | title: "Do not trust on yourself, trust on checklists"
4 | pubDate: 2024-07-25T01:24:19.992Z
5 | draft: false
6 | tags:
7 | - thoughts
8 | ---
9 |
10 | ## Introduction
11 |
12 | Recently, I saw a specific project from [Lukeberry](https://x.com/LukeberryPi) called ["Como Debugar Frontend"](https://como-debugar-frontend.vercel.app/), in English, it would be called "How to Debug Frontend".
13 |
14 | The UI behind this project is very simple, it's just a list of checkboxes that you can follow to match your situation
15 | and validate that you are following the right steps to debug any issue that you could have through your front-end code.
16 | But, the idea behind this project is powerful: we are susceptible to failure, and we shouldn't trust ourselves, instead,
17 | we should have a fault-tolerant system that can help us to trust in the process.
18 |
19 | ## Why do checklists matter?
20 |
21 | A checklist is a [specific kind of list](https://noghartt.dev/blog/the-awesomeness-of-lists) that we can use to validate if we are following the expected steps to do something.
22 | You can see through the entire internet a range of cases of usage of checklists, like those being applied to the
23 | aviation or medical fields.
24 |
25 | In a scenario of stress or fatigue, you will be compromised by a decrease in your ability or cognitive functioning. The
26 | usage of a checklist will give you a way to _"metavalidate"_ your capabilities and will let you reason about the
27 | the current state of the situation you are facing.
28 |
29 | On ["The checklist — a tool for error management and performance improvement"](https://www.ucl.ac.uk/anaesthesia/sites/anaesthesia/files/hales-2006.pdf), the authors of the paper bring some interesting data related to the
30 | usage of checklists in some fields like aviation, medicine, and product manufacturing.
31 |
32 | We even have a book called _"The Checklist Manifesto"_, that clarifies some ideas about the usage of checklists and the
33 | spread of the concept. I suggest you read it, also read the [review from Murat Demirbas](http://muratbuffalo.blogspot.com/2024/01/the-checklist-manifesto-dr-atul-gawande.html), it's a great review that explains some ideas of the book too.
34 |
35 | ## How can I create my checklist?
36 |
37 | Now that you already know the importance of checklists to bring a better experience to your work, you, being an engineer (I suppose that you are one), do you agree that you should have a checklist for your daily work?
38 |
39 | It will give you a documented, structured way to validate if some aspect or scope of your work is being followed as expected.
40 | It will help to bring clarification to your work in the future for yourself and for the team that will need to work with you.
41 |
42 | So, which things from my work should have a checklist?
43 |
44 | - A checklist for the feature that you are working on.
45 | - A checklist with the step-by-step process to test a new feature.
46 | - A checklist with the step-by-step process to release a new version of your product.
47 | - A checklist with the step-by-step process to debug a feature, like the ["Como Debugar Frontend"](https://como-debugar-frontend.vercel.app/).
48 | - A checklist with the playbook when you're talking with a customer.
49 | - A checklist with the presentation of your product for an internal team.
50 |
51 | Those are just some examples of the things that you can have a checklist for. With that, you can validate
52 | the reality and check if it matches the expectations of the situation.
53 |
54 | ## Conclusion
55 |
56 | With that in mind, I hope that you can see how much valuable is to have a checklist for your daily work.
57 | You can apply this concept to everything that you do, even outside your work, like the way you talk with your customers.
58 |
59 | I want to find some papers and articles that bring some data related to the usage of checklists and their reduction
60 | in incidents and errors. But, clearly is a good idea to have a checklist with yourself to guarantee
61 | a pragmatic approach to how you do your work, also it's a way to reduce the noise from outside and focus on the important things.
62 |
--------------------------------------------------------------------------------
/src/content/blog/2024-09-16T14:16:57.322Z-writing-a-lambda-calculus-interpreter-from-scratch.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "writing-a-lambda-calculus-interpreter-from-scratch"
3 | title: "Writing a Lambda Calculus Interpreter From Scratch"
4 | pubDate: 2024-09-16T14:16:57.322Z
5 | draft: true
6 | ---
7 |
8 | - A brief explanation of the lambda calculus
9 | - Explain the tokenizer
10 | - Explain the parser
11 | - Explain the interpreter
12 | - Explain the alpha conversion and the beta reduction
13 |
--------------------------------------------------------------------------------
/src/content/blog/2024-09-17T22:56:12.488Z-always-focus-on-the-long-term.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "always-focus-on-the-long-term"
3 | title: "Always Focus on the Long Term"
4 | pubDate: 2024-09-17T22:56:12.488Z
5 | draft: true
6 | ---
7 |
--------------------------------------------------------------------------------
/src/content/blog/2024-09-25T22:24:04.178Z-on-bookmarks-lists-and-the-habit-of-reading-later.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "on-bookmarks-lists-and-the-habit-of-reading-later"
3 | title: "On Bookmarks, Lists and the Habit of Reading Later"
4 | pubDate: 2024-09-25T22:24:04.178Z
5 | draft: false
6 | tags:
7 | - thoughts
8 | ---
9 |
10 | Bookmarks are underrated features. It's a good way to help you keep track
11 | of not only what you need to read but also what you need to do. Further, your
12 | bookmarks can be a way to structure your reading and your knowledge, for future
13 | reference, as Josh Leeb talked about [here](https://joshleeb.com/posts/organizing-bookmarks.html).
14 |
15 | ## About the organization of my bookmarks
16 |
17 | Inspired by a friend of mine, in January 2024 I started having a "reading list"
18 | of my bookmarks. As commented on [RSS and why I love it](https://noghartt.dev/blog/rss-and-why-i-love-it),
19 | I have an RSS feed that I use to read a lot of things during the day. But, one thing
20 | that I missed was the ability to have a list of things that shall store: what I
21 | already read and what I need to read (in the future, that kind of list always
22 | increases).
23 |
24 | So, as you can see on my [bookmarks page](https://noghartt.dev/bookmarks), I have
25 | a list containing all the content that I have consumed since January 2024, not just
26 | articles, but also videos, podcasts, etc. I have [another page](https://noghartt.dev/bookmarks/tags)
27 | to see them grouped by their tags, so I can easily find a specific bookmark given
28 | the tag I want.
29 |
30 | ### How do I store my bookmarks?
31 |
32 | The tool that I use to manage my bookmarks is [Omnivore](https://omnivore.app/),
33 | an open-source bookmark manager and "read-it-later" app. For my use case, it's a
34 | great tool, I have their extension for the browser installed that I use to store
35 | the tab that I'm seeing.
36 |
37 | Also, I'm using their mobile app, which lets me read all bookmarks that I have.
38 | In that case, I'm using it mostly to read my "read-it-later" articles while in
39 | the gym, for example.
40 |
41 | ## About the list of my bookmarks
42 |
43 | As mentioned before, further the list on Omnivore, I have a list of my bookmarks
44 | inside this blog. I have two specific ways to organize them: grouped by
45 | month and grouped by tags.
46 |
47 | Most of the time, I'm using it based on tags because I think that it's how my brain
48 | works, so it's faster to remember what I exactly want. For example, if I want to
49 | read something that I didn't read yet, I can just go to the tag `#for-later`. If
50 | If I want to recover something related to a computer science topic, I can go to the
51 | tag `#cs` or one of their specific subtags like `#cs/distsys`.
52 |
53 | Specifically about tags, mentioning again Josh Leeb, who wrote a post about
54 | [Scopped Tagging Bookmarks](https://joshleeb.com/posts/scoped-tagging.html). where
55 | he tries some approaches explains some of the problems and presents some approaches
56 | for it.
57 |
58 | In my case, I have a kind of implementation of what he mentioned as HNT (Hierarchical
59 | Namespaced Tagging), so on Omnivore and, you can see here at my blog, I did a hierarchical
60 | structure for my tags. But, I think that it's a process that can be error-prone
61 | sometimes, like when you need to be a more specific tag or a less specific one,
62 | or when You didn't find a specific tag that matches your need for some bookmarks.
63 |
64 | ## About the habit of reading later
65 |
66 | Then, as mentioned before, one of my specific tags that I use (and I believe that
67 | is one of the most used by myself), is `#for-later`. Specifically this tag, I use
68 | to store every bookmark that I didn't read yet but I think that it's interesting.
69 |
70 | I don't like the idea of storing "read-it-later" articles at all seems to be more
71 | a product of a FOMO rather than a real interest, but it's something that I am
72 | still maintaining just as a "habit".
73 |
74 | Also, I think that it's a trade-off that you need to deal with, your list of read-it
75 | later articles will be growing over time, and you will need to choose and validate
76 | if that content really will be interesting for you in the future.
77 |
--------------------------------------------------------------------------------
/src/content/blog/2024-11-02T06:23:50.930Z-on-the-agency-of-doing-things.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "on-the-agency-of-doing-things"
3 | title: "On the agency of doing things"
4 | pubDate: 2024-11-02T06:23:50.930Z
5 | draft: true
6 | tags:
7 | - thoughts
8 | - management
9 | ---
10 |
11 | Just a test with a footnote[^1]
12 |
13 | [^1]: Lol
14 |
--------------------------------------------------------------------------------
/src/content/blog/2024-12-30T23:58:32.012Z-2024-in-review.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "2024-in-review"
3 | title: "2024 in Review"
4 | pubDate: 2024-12-30T23:58:32.012Z
5 | draft: false
6 | tags:
7 | - review
8 | ---
9 |
10 | Following the tradition, writing my annual review. This year, being from ups and downs, a lot of things happened.
11 | I can consider 2024 a good year looking from the macro perspective, but far from what I would like. I was able to
12 | conclude my biggest objective for this year, but looking from the personal side, I wasn't good as I expected.
13 |
14 | Reflecting on what happened in this year, gave us some insights about what are the things that is going well and
15 | which things we will need to fix on the next year. And, in my case, I have a lot of things to fix.
16 |
17 | Similar to last year, the structure of the post will be following like this: we will have some core points like "health",
18 | "reading", "habits", "coding", "career", etc. And, for this year, I'll be doing a kind of comparison to see how much
19 | we improved on those ones or if we was able to maintain it.
20 |
21 | ## Health
22 |
23 | In the opposition from what I said in the expectations for 2024, I didn't take too much care from my health this year. I
24 | was a lot below the average on the three critical points on health that I believe that would help me: sleep, gym and nutrition.
25 |
26 | Specifically about those three points, I didn't dedicate myself enough to fit what I expected from those ones, and all those threes
27 | are interconnected, which had side-effects in other aspects of my life, like, for example, feeling tired during the days. In this year,
28 | I could see how much having an unhealth life impacts in our life and, in my case, mostly having psychological effects about it.
29 |
30 | From my experience, it was pretty hard to have a good night of sleep, staying focused for long times or even not being too stressful during the
31 | day. Also, it seems that it impacts a lot on "ADHD crisis", where, in some days, it was just impossible to work without my medicines.
32 |
33 | Also, from sleep routine, I think that this year was a bit difficult to stay focused on that too. Even because my new apartment is on the downtown,
34 | there's more noise and chaos, then being more disciplined on that was very hard. My sleep time average was about 6 hours, but knowing myself, I know
35 | that this isn't enough to be 100% functional on the next day. Also, I completely lost my habit of waking up between 6AM and 7AM.
36 |
37 | I'm not fully commited on gym too, it's a pretty hard habit to maintain, I need to commit hard on that and being focused on the long term objectives.
38 | But, not just from bad things, my year in health is going on, this year I discovered a new sport that I really loved: climbing. I really love it. It's one of
39 | the things that I really want to maintain in the next year.
40 |
41 | ## Reading
42 |
43 | This year, I started the year maintaining the goal of 12 books until the end of the year, but I reached out only about 6 or 7 of them, to be honest, some
44 | of them are so useless in their concepts that is completely insignificant for myself. During the year, I noted this bad behavior, I wasn't reading because
45 | I'd like to read more about the theme, I just read because of the quantity. After that, I decided to slow down my reading and coming back with better books
46 | that I'd like to read. Some of the books that I can mentioned that I read was:
47 |
48 | - Database Internals, by Alex Petrov
49 | - Antifragile, by Nassim N. Taleb
50 | - Fooled by Randomness, by Nassim N. Taleb
51 |
52 | Also, I started a lot of books that I dropped after some time, because I was feeling that the reading wasn't productive as I expected, like: _"Noise: A Flaw in Human Judgement"_
53 | and _"Thinking Fast and Slow"_, both from Daniel Kahneman, are two of those books that I dropped after some time.
54 |
55 | In the moment I'm writing this, I'm reading what I believed that will be my first readings from 2025: _"Godel, Escher, Bach: an Eternal Golden Braid"_, by Douglas R. Hofstadter,
56 | and _"The Mind Illuminated"_, by John Yates, the last one as a recommendation from a friend, because I'm really interested in investigate some long term effects from meditation
57 | in my life. Further that, for the next year, I have a lot of good books to read, most of them focused on technical aspects, but I want to reread some of the old books that I read too.
58 |
59 | ## Career and Work
60 |
61 | I think that, from the career perspective, this year was awesome. I was able to complete the most import objective from my year in this aspect. Now, I have the great opportunity of
62 | working with awesome guys at [Fireflies.ai](https://fireflies.ai), and it's being awesome in every sense. I'm working with a lot of good engineers and having the opportunity to bring
63 | innovation for millions of users, further the aspect of learning a lot of new skills and technologies around it.
64 |
65 | From my career perspective, I could be better on that, I believe I could dedicate myself more during the year and investing more time on side projects and learning in general. I
66 | have some advances on the distributed systems topics, but below my expectations. For the next year, one of my goals is bringing a more actively approach on this topic.
67 |
68 | ## Writing
69 |
70 | From the writing side, I'd say that was an year in average. I have a feeling that I could do it better, but I have some great works this year, like: [Increasing Your Friction Area](https://noghartt.dev/blog/increasing-your-friction-area/),
71 | [Implementing Simple Paxos Consensus Algorithms With Rust](https://noghartt.dev/blog/paxos-made-simple-with-rust/) and [RSS and why I love it](https://noghartt.dev/blog/rss-and-why-i-love-it/).
72 |
73 | Not considering the drafted posts and this one, it was 10 posts during the entire year. It was in average, better than zero. For the next year, I will be more consistent on that.
74 | I think that one of the greatest issues with writing is not trying to writing the perfect article, I need to write, just it. That will be my mantra for the next year.
75 |
76 | ## Next steps for 2025
77 |
78 | This as a summary review from my year, for sure there's a lot of other things that I didn't mentioned, either because I wouldn't like to do or because I forgot. And, for 2025,
79 | I have a strong feeling that, given my 2024, it will be a better year in all aspects. I have a lot of plans for the next year and I'll commit in all of them.
80 |
81 | From the same thing I said last year, this next year I **need** to focus on my health. It's not only about being a healthier person, but, if I want to be a high-performance person,
82 | I need to have a healthier body and a healthier mind. That's why I'll be doing some checkups and working intensively to improve in this aspect of my life. From the psychological side,
83 | I'll be leaving my social medias for a time and trying to reduce my screentime. As said before, I'm really interested in meditation, I want to see how my mind, that is agitated by nature,
84 | will perform after gym and meditation, if I can think better, improve my sleep, and other related things.
85 |
86 | Being more organized is other aspect of my life for 2025 that I will being focused on. Having a better scheduled time, will bring to me some improvements on my routine, which implies in having
87 | a consistent performance accordingly to the tasks I need to work on. And, looking from the long term perspectivee too, being more organized can give me some useful insights around the things
88 | that I worked on during the week, month, quarter, semester or year. Then, I can review and change the direction of something when necessary.
89 |
90 | From the point I mentioned above, with that in mind, writing will be one of the core habits I'll maintain and improve on the next year. Not writing blog posts, but writing my thoughts. Documenting
91 | what I did, documenting things that I'm looking on, documenting how I'm doing things, because, in the future, those resources will be the reference for the next annual review, for example. I want
92 | to have more quantitative date from my life too, following the idea from Stephen Wolfram [here](https://writings.stephenwolfram.com/2019/02/seeking-the-productive-life-some-details-of-my-personal-infrastructure/),
93 | I want to track my life in quantitative perspective to bring some useful insights about the correlation of data.
94 |
95 | My focus for the next year will be more on increasing consistency on good habits, that is, guarantee that the things that I'm doing is coming from a good feedback loop and tha
96 | it will have a good return in the long term.
97 |
98 | It wasn't the best year of my life, but I'd say that one of the most importants. I'd like to thanks my girlfriend for this incredible year at her side, I love you so much, I learn a lot from you.
99 | Also, thanks for each of my friens that gave me the opportunity to share this year with them, it was incredible.
100 |
101 | The next year, for me, will be a year of consistency, reconstruction, maintenance and improvement.
102 |
103 | Happy New Year, reader! Hope that, in 2025, I bring a better version of me here.
104 |
--------------------------------------------------------------------------------
/src/content/blog/2025-01-04T18:58:22.287Z-writing-your-first-nix-overlay.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "writing-your-first-nix-overlay"
3 | title: "Writing Your First Nix Overlay"
4 | pubDate: 2025-01-04T18:58:22.287Z
5 | draft: false
6 | tags:
7 | - nix
8 | ---
9 |
10 | ## Introduction
11 |
12 | After about 1 year, I came back to Nix as one of my main tools for my workflow.
13 | In case, you can see my entire macOS configuration, written in Nix, [here](https://github.com/noghartt/).
14 |
15 | After having to change MacBook devices twice during the end of the last year, I really missed
16 | Nix on my daily usage, where I need to setup my config every time, instead of just running a command.
17 | That's why I'm using Nix again after some period without it.
18 |
19 | Now, I reached a specific scenario last week, where I need to write a specific overlay for a tool. In my case,
20 | [beanprice](https://github.com/beancount/beanprice). I'm using [beancount](https://github.com/beancount/beancount), as
21 | my daily-driven tool to track my finances, and I'd like to track the value of my stocks in an easier way, instead
22 | of having to manually adding it everytime.
23 |
24 | Doing some search, I discovered that the beancount's brewfile didn't install this binary for me. After trying the
25 | `nixpkgs` version of this binary, I discovered another thing: with that version, it comes with the `bean-price`
26 | binary, but it comes with an old version, where it didn't contain a specific module to fetch some of the stock
27 | prices that I'd like to fetch (more specifically, the [alphavantage source](https://github.com/beancount/beanprice/blob/master/beanprice/sources/alphavantage.py)).
28 | For that reason, it seems to be a good argument to have an overlay for that. That's what I did, and was my first
29 | time writing an overlay from scratch.
30 |
31 | ## Writing the Module File
32 |
33 | The overlays on Nix are a kind of function, it gives for us the ability to provide some overriding some specific configurations
34 | for a given module, package or anything else that your creativity let you think about.
35 |
36 | In my case, what should I be doing? Writing a new overlay that would add a new package called `bean-price` into all Python
37 | packages modules. For that, I used this [Python section](https://github.com/GaetanLepage/nixpkgs/blob/master/doc/languages-frameworks/python.section.md) as my reference to do that.
38 |
39 | That's the output of what I did:
40 |
41 | ```nix
42 | {
43 | lib,
44 | buildPythonPackage,
45 | python3Packages,
46 | fetchPypi,
47 | isPy3k,
48 | }:
49 |
50 | buildPythonPackage rec {
51 | version = "1.2.1";
52 | format = "setuptools";
53 | pname = "beanprice";
54 |
55 | disabled = !isPy3k;
56 |
57 | src = fetchPypi {
58 | inherit pname version;
59 | hash = "sha256-0/W1q25z6xNjhb7mZFpJUZ6TVNNA1BK341gOxlpOGVc=";
60 | };
61 |
62 | # Tests require files not included in the PyPI archive.
63 | doCheck = false;
64 |
65 | propagatedBuildInputs = with python3Packages; [
66 | python
67 | python-dateutil
68 | beancount
69 | ];
70 |
71 | meta = with lib; {
72 | homepage = "https://github.com/beancount/beanprice";
73 | description = "Daily price quotes fetching library for plain-text accounting ";
74 | longDescription = ''
75 | A script to fetch market data prices from various sources on the internet and render them for plain text accounting price syntax (and Beancount).
76 |
77 | This used to be located within Beancount itself (at v2) under beancount.prices. This repo will contain all future updates to that script and to those price sources.
78 | '';
79 | license = licenses.gpl2Only;
80 | maintainers = [ ];
81 | };
82 | }
83 | ```
84 |
85 | What we're doing here? We're calling the `buildPythonPackage` function accordingly to the Python interpreter. And will run four steps,
86 | accordingly to this documentation [here](https://github.com/GaetanLepage/nixpkgs/blob/master/doc/languages-frameworks/python.section.md#buildpythonpackage-function-buildpythonpackage-function): `buildPhase`, `installPhase`, `postFixup` and `installCheck`.
87 |
88 | With that, we will be able to build and have our own binary of a given package, that, in case, we're fetching all those
89 | informations based on the `src` with the `fetchPypi` function.
90 |
91 | Finally, we had this overlay done, now, we need to let both `nixpkgs` and `home-manager` know about that.
92 |
93 | ## Consuming the Overlays
94 |
95 | In my opinion, as a good pattern for that, I like to have the overlay being "exported" on a main file.
96 | For my config, I wrote a `overlays/default.nix` that does it for me:
97 |
98 | ```nix
99 | # /overlays/default.nix
100 |
101 | final: prev:
102 |
103 | let
104 | pythonPackageExtensionsOverrides = self: super: {
105 | bean-price = prev.callPackage ./bean-price {
106 | inherit (super) buildPythonPackage isPy3k;
107 | };
108 | };
109 | in
110 | {
111 | pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [pythonPackageExtensionsOverrides];
112 | }
113 | ```
114 |
115 | Now, what I'm doing is: getting all my overrides related to python and overriding it on `pythonPackagesExtensions`.
116 | Which basically override it for every Python extension (`python3`, `python`, `python39`, `python312`, etc).
117 |
118 | Now, we just need to add it on the imported `nixpkgs` and on `home-manager`, to guarantee that everything is good.
119 |
120 | From another post that I wrote last year, where I teach [how to install Nix + nix-darwin + home-manager on macOS](https://noghartt.dev/blog/set-up-nix-on-macos-using-flakes-nix-darwin-and-home-manager). My `flake.nix` config was like that:
121 |
122 |
123 |
124 | flake.nix config without overlays
125 |
126 | ```nix
127 | {
128 | inputs = {
129 | nix-homebrew.url = "...";
130 | home-manager.url = "...";
131 | };
132 |
133 | outputs = inputs @ { self, nix-homebrew, home-manager ... }: let
134 | nixpkgsConfig = {
135 | config.allowUnfree = true;
136 | };
137 | in {
138 | darwinConfigurations = let
139 | inherit (inputs.nix-darwin.lib) darwinSystem;
140 | in {
141 | machine = darwinSystem {
142 | system = "aarch64-darwin";
143 |
144 | specialArgs = { inherit inputs; };
145 |
146 | modules = [
147 | ./hosts/mbp/configuration.nix
148 | inputs.home-manager.darwinModules.home-manager
149 | {
150 | nixpkgs = nixpkgsConfig;
151 |
152 | home-manager.useGlobalPkgs = true;
153 | home-manager.useUserPackages = true;
154 | home-manager.users.noghartt = import ./home/home.nix;
155 | }
156 | ];
157 | };
158 | };
159 | }
160 | }
161 | ```
162 |
163 |
164 |
165 | Now, we will need to adjust it in two parts to guarantee that everything is good:
166 |
167 | ```diff
168 | {
169 | inputs = {
170 | nix-homebrew.url = "...";
171 | home-manager.url = "...";
172 | + nixpkgs.url = "github:NixOS/nixpkgs";
173 | };
174 |
175 | - outputs = inputs @ { self, nix-homebrew, home-manager, ... }: let
176 | + outputs = inputs @ { self, nix-homebrew, home-manager, nixpkgs, ... }: let
177 | + overlays = [ (import ./overlays) ];
178 | +
179 | + system = "aarch64-darwin";
180 | +
181 | + pkgs = import nixpkgs { inherit system overlays; };
182 | +
183 | nixpkgsConfig = {
184 | + inherit overlays;
185 | +
186 | config.allowUnfree = true;
187 | };
188 | in {
189 | + packages = pkgs;
190 | +
191 | darwinConfigurations = let
192 | inherit (inputs.nix-darwin.lib) darwinSystem;
193 | in {
194 | machine = darwinSystem {
195 | system = "aarch64-darwin";
196 |
197 | specialArgs = { inherit inputs; };
198 |
199 | modules = [
200 | ./hosts/mbp/configuration.nix
201 | inputs.home-manager.darwinModules.home-manager
202 | {
203 | nixpkgs = nixpkgsConfig;
204 |
205 | home-manager.useGlobalPkgs = true;
206 | home-manager.useUserPackages = true;
207 | home-manager.users.noghartt = import ./home/home.nix;
208 | }
209 | ];
210 | };
211 | };
212 | }
213 | }
214 | ```
215 |
216 | With that, you will be able to add both overlays to `nixpkgs` side, so you can add the overlays
217 | at a system-level, for NixOS, nix-darwin, or any place you're using it. And, inheriting `overlays`
218 | at the `nixpkgsConfig` at L16, will let you use the overlay in `home-manager` level.
219 |
220 | Now, in your home-manager config, you can do something like that:
221 |
222 | ```nix
223 | { pkgs, config, lib, ... }:
224 |
225 | {
226 | home.stateVersion = "25.05";
227 |
228 | home.packages = with pkgs; [
229 | fava
230 | python3Packages.beancount
231 | python3Packages.bean-price
232 | ];
233 | }
234 | ```
235 |
236 | ## Solving Conflicts on Overlays
237 |
238 | One issue that I had on this `bean-price` overlay is, as I said, the `nixpkgs` version of the `beancount`
239 | adds the `bean-price` binary. So, both packages are conflicting to decide which of the binaries should
240 | be chosen.
241 |
242 | The first solution that I saw, was adding a `meta.priority = 10;` on the overlay. But haven't success, it
243 | still getting the outdated version of the `bean-price` binary. In that case, I did a different approach:
244 |
245 | ```diff
246 | # /overlays/default.nix
247 |
248 | final: prev:
249 |
250 | let
251 | pythonPackageExtensionsOverrides = self: super: {
252 | bean-price = prev.callPackage ./bean-price {
253 | inherit (super) buildPythonPackage isPy3k;
254 | };
255 | +
256 | + beancount = super.beancount.overrideAttrs (oldAttrs: {
257 | + postInstall = ''
258 | + ${oldAttrs.postInstall or ""}
259 | + rm $out/bin/bean-price
260 | + '';
261 | + });
262 | };
263 | in
264 | {
265 | pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [pythonPackageExtensionsOverrides];
266 | }
267 | ```
268 |
269 | I added an overlay to `beancount` package too, where add a step on `postInstall` that just remove
270 | the binary related to `/bin/bean-price`. With that, everything works as expected.
271 |
272 | > **DISCLAIMER!**
273 | >
274 | > I didn't find any other way to solve this issue. Everyone that knows a better, elegant approach to do
275 | > it, feel free to reach me out. I would really like to have a better way to solve this.
276 | >
277 | > Also, if I find something, I come back to this post and update it accordingly to what I find.
278 |
279 | ## Conclusion
280 |
281 | This is just a brief tour around how you can approach to write your first overlay. And a good introduction
282 | to understand how useful is Nix at all, you can do a lot of things or extend things that you already had as you want.
283 | It's a powerful tool in the right hands.
284 |
--------------------------------------------------------------------------------
/src/content/blog/2025-04-24T01:10:19.298Z-its-all-about-solving-problems.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "its-all-about-solving-problems"
3 | title: "It's All About Solving Problems"
4 | pubDate: 2025-04-24T01:10:19.298Z
5 | draft: true
6 | tags:
7 | - thoughts
8 | ---
9 |
10 | A characteristic of a good engineer is the ability to solve problems. It's not about knowing the answers to every question,
11 | but rather about having the skills to find solutions to the problems that arise. That's what bring value to the real world.
12 | That is something that even goes beyond engineering. It's a skill and a mental model that should be applied in other areas (or even in life in general).
13 |
14 | In the end, it doesn't matter if you wrote the algorithm in a specific paradigm, using a specific language with the most elegant patterns.
15 | What will really matter is from your "final customer" and how it solves their problem. It always depends in your customer.
16 |
17 | A good mental model is breaking problems into small, deliverable solutions and how much valuation has on its delivering. Even you can be your own
18 | "final customer", for example, when you're writing a script that automates a boring process, which problem do you want to solve? Focusing on the problem
19 | is a good way to start working on a small piece of the puzzle. You can always iterate and compose it, doing small steps, but doing it well.
20 |
--------------------------------------------------------------------------------
/src/content/blog/2025-04-29T04:37:06.302Z-lessons-learned-from-hosting-a-tech-event.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "lessons-learned-from-hosting-a-tech-event"
3 | title: "Lessons Learned From Hosting a Tech Event"
4 | pubDate: 2025-04-29T04:37:06.302Z
5 | draft: true
6 | tags:
7 | - dev
8 | ---
9 |
--------------------------------------------------------------------------------
/src/content/changelog/changelog.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "time": "2024-08-30T22:30:29.205Z",
4 | "title": "Add a table of contents section on the bookmarks page."
5 | },
6 | {
7 | "time": "2024-08-30T22:41:29.205Z",
8 | "title": "Add a new [/changelog](/changelog) page."
9 | },
10 | {
11 | "time": "2024-12-31T18:18:15.937Z",
12 | "title": "New article: [2024 in Review](/blog/2024-in-review)."
13 | }
14 | ]
15 |
--------------------------------------------------------------------------------
/src/content/config.ts:
--------------------------------------------------------------------------------
1 | import { defineCollection, z } from 'astro:content';
2 | import { rssSchema } from '@astrojs/rss';
3 |
4 | const blogCollection = defineCollection({
5 | type: 'content',
6 | schema: z
7 | .object({
8 | title: z.string(),
9 | pubDate: z.coerce.date(),
10 | tags: z.array(z.string()).default([]).optional(),
11 | draft: z.boolean().optional(),
12 | })
13 | .merge(rssSchema)
14 | });
15 |
16 | const listsCollection = defineCollection({
17 | type: 'content',
18 | schema: z
19 | .object({
20 | title: z.string(),
21 | tags: z.array(z.string()).optional(),
22 | }),
23 | });
24 |
25 | const tilCollection = defineCollection({
26 | type: 'content',
27 | schema: z.object({
28 | title: z.string(),
29 | tags: z.array(z.string()).default([]).optional(),
30 | createdAt: z.coerce.date(),
31 | }),
32 | });
33 |
34 | const changelogCollection = defineCollection({
35 | type: 'data',
36 | schema: z.array(z.object({
37 | time: z.string().datetime(),
38 | title: z.string(),
39 | })),
40 | });
41 |
42 | export const collections = {
43 | blog: blogCollection,
44 | lists: listsCollection,
45 | til: tilCollection,
46 | changelog: changelogCollection,
47 | }
48 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-awesome-talks.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "List of Awesome Talks"
3 | tags:
4 | - list
5 | ---
6 |
7 | - [Scaling Yourself](https://www.youtube.com/watch?v=FS1mnISoG7U) by Scott Hanselman (2013)
8 | - [We Really Don't Know How to Compute!](https://www.youtube.com/watch?v=HB5TrK7A4pI) by Gerald Sussman (2011)
9 | - [CPU Caches and Why You Care](https://www.youtube.com/watch?v=WDIkqP4JbkE)
10 | - [Time, Clocks and Ordering of Events in a Dist. System by Dan Rubenstein](https://www.youtube.com/watch?v=hK6m6WBk-d8)
11 | - [Reconciling Everything](https://www.youtube.com/watch?v=MuK6lmsfX1E)
12 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-awesome-youtube-channels.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: List of Awesome Youtube Channels
3 | tags:
4 | - list
5 | ---
6 |
7 | - [A Byte of Code](https://www.youtube.com/@AByteofCode)
8 | - [@aarthificial](https://www.youtube.com/@aarthificial)
9 | - [Adam Something](https://www.youtube.com/@AdamSomething/videos)
10 | - [Aidin Robbins](https://www.youtube.com/@AidinRobbins)
11 | - [Alpha Phoenix](https://www.youtube.com/@AlphaPhoenixChannel)
12 | - [Applied Science](https://www.youtube.com/@AppliedScience)
13 | - [Asianometry](https://www.youtube.com/@Asianometry)
14 | - [Arvin Ash](https://www.youtube.com/@ArvinAsh/videos)
15 | - [Attic Philosophy](https://www.youtube.com/@AtticPhilosophy)
16 | - [Bartosz Milewski](https://www.youtube.com/@DrBartosz)
17 | - [Ben Eater](https://www.youtube.com/@BenEater)
18 | - [BigThink](https://www.youtube.com/@bigthink)
19 | - [Ben Vallack](https://www.youtube.com/@BenVallack/videos)
20 | - [Carla Quem Disse](https://www.youtube.com/@CarlaNegriLintzmayer)
21 | - [ByteByteGo](https://www.youtube.com/@ByteByteGo)
22 | - [Branch Education](https://www.youtube.com/@BranchEducation)
23 | - [Carneades](https://www.youtube.com/@CarneadesOfCyrene)
24 | - [Carnegie Mellon Computer Architecture](https://www.youtube.com/@CMUCompArch)
25 | - [Computer History Archives Project](https://www.youtube.com/@ComputerHistoryArchivesProject)
26 | - [Code Bullet](https://www.youtube.com/@CodeBullet)
27 | - [Context Free](https://www.youtube.com/@contextfree)
28 | - [Craft Computing](https://www.youtube.com/@contextfree)
29 | - [Creel](https://www.youtube.com/@WhatsACreel)
30 | - [CS Primer](https://www.youtube.com/@cs_primer)
31 | - [Explaning Computers](https://www.youtube.com/@ExplainingComputers)
32 | - [Faster than Lime](https://www.youtube.com/@fasterthanlime)
33 | - [healthyGamerGG](https://www.youtube.com/@HealthyGamerGG)
34 | - [Hackers at Cambridge](https://www.youtube.com/@HackersatCambridge)
35 | - [Low Byte Productions](https://www.youtube.com/@LowByteProductions)
36 | - [Matt D'avella](https://www.youtube.com/@mattdavella)
37 | - [Michele Minerbo](https://www.youtube.com/@micheleminerbo)
38 | - [Minute Food](https://www.youtube.com/@MinuteFood)
39 | - [Nanobyte](https://www.youtube.com/@nanobyte-dev)
40 | - [Numberphile](https://www.youtube.com/@numberphile)
41 | - [PapersWeLove](https://www.youtube.com/@PapersWeLove)
42 | - [Park Notes](https://www.youtube.com/@ParkerNotes)
43 | - [QED](https://www.youtube.com/@QED.)
44 | - [Practical Networking](https://www.youtube.com/@PracticalNetworking)
45 | - [pikuma](https://www.youtube.com/@pikuma)
46 | - [Tiago Forte](https://www.youtube.com/@TiagoForte)
47 | - [The Engineering Mindset](https://www.youtube.com/@EngineeringMindset)
48 | - [The Math Sorcerer](https://www.youtube.com/@TheMathSorcerer)
49 | - [The Computer Chronicles](https://www.youtube.com/@ComputerChroniclesYT)
50 | - [The Strange Loop Conf](https://www.youtube.com/@StrangeLoopConf)
51 | - [Software Internals](https://www.youtube.com/@eatonphil)
52 | - [Sixty Symbols](https://www.youtube.com/@sixtysymbols)
53 | - [Scott Yu Jan](https://www.youtube.com/@ScottYuJan)
54 | - [Ruri Ohama](https://www.youtube.com/@ruriohama)
55 | - [Quanta Magazine](https://www.youtube.com/@QuantaScienceChannel)
--------------------------------------------------------------------------------
/src/content/lists/list-of-best-articles-that-i-read.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "List of Best Articles That I Read"
3 | tags:
4 | - list
5 | ---
6 |
7 | - [Effective Spaced Repetition](https://borretti.me/article/effective-spaced-repetition), by Fernando Borretti
8 | - [Linux Guide for Power Users](https://xnacly.me/posts/2022/linux-for-powerusers/), by xnacly
9 | - [How to Build a Computer Using Origami](https://apieceofthepi.substack.com/p/how-to-build-a-computer-using-origami)
10 | - [The Myth of the Myth of Learning Styles](https://nedbatchelder.com/blog/202309/the_myth_of_the_myth_of_learning_styles.html)
11 | - [There's Math.random(), and then there's Math.random()](https://v8.dev/blog/math-random)
12 | - [What I Wish Someone Had Told Me](https://blog.samaltman.com/what-i-wish-someone-had-told-me)
13 | - [What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)
14 | - [What Every Computer Scientist Should Know About Floating-Point Arithmetic](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
15 | - [Know your "One Job" and Do It First](https://charity.wtf/2021/03/07/know-your-one-job-and-do-it-first/)
16 | - [Becoming a go-to person gets you promoted. Here's how to do it as a software engineer.](https://careercutler.substack.com/p/becoming-a-go-to-person-gets-you)
17 | - [An accessible introduction to type theory and implementing a type-checker](https://mukulrathi.com/create-your-own-programming-language/intro-to-type-checking/)
18 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-blogs-and-personal-websites.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: List of Blogs and Personal Websites
3 | tags:
4 | - list
5 | ---
6 |
7 | - [Gwern.net](https://gwern.net)
8 | - [Paul Graham](http://www.paulgraham.com/)
9 | - [Farnam Street](https://fs.blog)
10 | - [Hundredrabbits](https://100r.co/)
11 | - [Kalzumeus](https://www.kalzumeus.com/)
12 | - [Maggie Appleton](https://maggieappleton.com/)
13 | - [The Sephist](https://thesephist.com/)
14 | - [Monetary Mechanics](https://maroonmacro.substack.com/archive)
15 | - [Bruce Schneier](https://www.schneier.com/)
16 | - [Xe Iaso](https://xeiaso.net/)
17 | - [Martin Kleppmann](https://martin.kleppmann.com/)
18 | - [Logic ForAll](https://logic-forall.blogspot.com/)
19 | - [Ken Shiriff](https://www.righto.com/)
20 | - [TK](https://www.iamtk.co/)
21 | - [Bartosz Millewski](https://bartoszmilewski.com/)
22 | - [Phil Eaton](https://notes.eatonphil.com/)
23 | - [Werner Vogels](https://www.allthingsdistributed.com/articles.html)
24 | - [Josh Comeau](https://www.joshwcomeau.com/)
25 | - [Overreacted by Dan Abramov](https://overreacted.io/)
26 | - [Alexey Guzey](https://guzey.com/)
27 | - [Dan Luu](https://danluu.com/)
28 | - [Steph Ango](https://stephango.com/)
29 | - [Julia Evans](https://jvns.ca/)
30 | - [Jamie Tanna](https://www.jvt.me/)
31 | - [Arne Bahlo](https://arne.me/)
32 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-books-that-i-read.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: List of Books That I Read
3 | tags:
4 | - list
5 | ---
6 |
7 | This is a list containing all the books that I read
8 | or will read at some time.
9 |
10 | ## 2024
11 |
12 | - Database Internals, by Alex Petrov
13 |
14 | ## 2023
15 |
16 | - Retorica, from Aristotles
17 | - Meditations, from Marcus Aurelius
18 | - The Lean Startup
19 | - Designing Data Intensive Applications
20 | - How to Take Smart Notes
21 | - Thinking in Systems
22 | - Design Systems
23 | - Discourse on the Method
24 | - Clear Thinking
25 | - Make It Stick
26 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-computer-science-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "List of Computer Science Resources"
3 | tags:
4 | - list
5 | - computer-science
6 | ---
7 |
8 | ## Books
9 |
10 | - [Haskell Programming for First Principles](https://haskellbook.com/)
11 | - [Types and Programming Languages](https://mitpress.mit.edu/books/types-and-programming-languages)
12 | - [Essentials of Compilation](https://github.com/IUCompilerCourse/Essentials-of-Compilation)
13 | - [How to design computer programs](https://htdp.org)
14 | - [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html)
15 | - [Introduction to Theory of Computation, Michael Sipser](https://www.amazon.com.br/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X)
16 | - The Art of Computer Programming, Donald Knuth
17 | - [Programming Language Pragmatics](https://cs.rochester.edu/~scott/pragmatics/)
18 | - [Language Implementation Patterns](https://pragprog.com/titles/tpdsl/language-implementation-patterns/)
19 | - [Crafting interpreters](https://craftinginterpreters.com)
20 | - [Introduction to Algorithms](https://amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
21 | - Practical Foundations for Programming Languages
22 | - [Computer Organization and Design RISC-V edition](https://www.amazon.com/Computer-Organization-Design-RISC-V-Architecture-dp-0128203315/dp/0128203315)
23 | - [Database Systems: The Complete Book](http://infolab.stanford.edu/~ullman/pub/dscbtoc.txt)
24 | - [Introduction to Algorithms: A Creative Approach](https://doc.lagout.org/science/0_Computer%20Science/2_Algorithms/Introduction%20to%20Algorithms_%20A%20Creative%20Approach%20%5BManber%201989-01-11%5D.pdf)
25 | - High Performance Browser Networking
26 | - [Reasoned programming](http://www.doc.ic.ac.uk/~susan/firstyearbook.pdf)
27 | - The Mythical Man-Month
28 | - [Debugging](http://debuggingrules.com/)
29 | - [The Computer Science book](https://thecomputersciencebook.com/book/)
30 | - [Computer Organization and Design RISC-V edition](https://shop.elsevier.com/books/computer-organization-and-design-risc-v-edition/patterson/978-0-12-812275-4)
31 | - Database Internals
32 | - [Type Theory and Functional Programming](https://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ttfp.pdf)
33 | - Specifying Systems
34 | - Land of Lisp
35 | - Purely Functional Data Structure
36 | - Virtual Machines
37 | - Practical TLA+
38 | - Distributed Systems
39 | - Programming Languages: Principles and Paradigms
40 | - Programming Distributed Systems
41 | - Essentials of Compilation
42 | - Thiking in Distributed Systems
43 | - Understanding Software Dynamics
44 | - Transaction Processing: concepts and techniques
45 | - Modern Computer Architeture and Organization
46 |
47 | ### Books and Resources
48 |
49 | - [CS Curriculum Text Books and references](https://github.com/AB1908/CS-Books/)
50 | - [Elementary Computer Science: From Bits and Bytes to the Big Picture](https://github.com/ckirsch/book)
51 | - [Concrete Mathematics: A Foundation for Computer Science (2nd Edition)](https://www.amazon.com/gp/product/0201558025/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=theende-20&linkId=112d0fc8c90030c9a9c1027cd888e7d5&language=en_US)
52 | - [Crafting interpreters](http://www.craftinginterpreters.com/)
53 | - [Free Programming books](https://github.com/EbookFoundation/free-programming-books)
54 | - [The Elements of Computing System: Building a Modern Computer](https://www.amazon.com.br/Elements-Computing-Systems-Building-Principles/dp/0262640686)
55 | - [Reading for graduate students - Computer Science](https://matt.might.net/articles/books-papers-materials-for-graduate-students/)
56 | - [Book list for streetfighting computer scientists](https://nick-black.com/dankwiki/index.php/Book_list_for_streetfighting_computer_scientists)
57 |
58 | ## Links and Projects
59 |
60 | - [Build your own X](https://github.com/codecrafters-io/build-your-own-x), a repo containing a lot of projects teaching how to build cool things, from a database from scratch, 3D stuffs and other cool features
61 | - [tpetricek/Teaching](https://github.com/tpetricek/Teaching) a repo containing study material to things like PL design, software engineering and human-computer interaction
62 | - [Timeline of Computer Science](https://scottaaronson.blog/?p=524)
63 | - [Ask Lobsters: Good theory books would you recommend?](https://lobste.rs/s/wbwtgm/good_theory_books_you_would_recommend)
64 | - [Alistair's university notes](https://github.com/johnyob/University-Notes), some notes about Computer Science university related theme
65 | - [Computer Science video courses](https://github.com/Developer-Y/cs-video-courses), a collection of courses in video about a lot of subjects related to computer science and other stuffs
66 | - [A small collection of cheatsheet](https://github.com/merveenoyan/my_notes) about DS, ML, Algorithms and other stuffs
67 | - [Knowledge sharing](https://github.com/xinrong-meng/knowledge-sharing), repository containing materials about tech stuffs related to architecture and tech-specific
68 | - [Every programmer should know](https://github.com/mtdvio/every-programmer-should-know)
69 | - [Computer science projects learning](https://github.com/practical-tutorials/project-based-learning)
70 | - [Reading for CS' graduate students](https://matt.might.net/articles/books-papers-materials-for-graduate-students/)
71 | - [Matemática fundacional para computação](https://www.tsouanas.org/fmcbook/)
72 | - [On Recursion, Continuations and Trampolines](https://eli.thegreenplace.net/2017/on-recursion-continuations-and-trampolines/)
73 | - [Preliminary discussion of the logical design of an electronic computing instrument](http://www.cs.unc.edu/~adyilie/comp265/vonNeumann.html)
74 | - [Thread of some of the best materials related to Computer Science](https://news.ycombinator.com/item?id=36088224)
75 | - [The Python Paradox](http://www.paulgraham.com/pypar.html), how _"esoteric"_ languages is attractive to smarter people
76 | - [Fantastic Learning Resources](https://matklad.github.io/2023/08/06/fantastic-learning-resources.html#Fantastic-Learning-Resources) for computer science stuffs
77 | - [Computer Science from the Bottom Up](https://www.bottomupcs.com/)
78 | - [What CS majors should know?](https://matt.might.net/articles/what-cs-majors-should-know)
79 | - [Timeline of Computer Science](https://scottaaronson.blog/?p=524)
80 | - [Computer Science Is Not About Computers, Any More Than Astronomy Is About Telescopes](https://quoteinvestigator.com/2021/04/02/computer-science/)
81 | - [The Architecture of a Simple 8-bit Computer](https://www.docdroid.net/GEfy9JB/8bitcomputer-pdf)
82 | - [Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/)
83 | - [Project Based Learning](https://github.com/practical-tutorials/project-based-learning), computer science projects based on practical stuffs
84 | - [Challenging Projects that Every Programmer Should Try](https://austinhenley.com/blog/challengingprojects.html)
85 | - [Architecture of Open Source](https://aosabook.org/en/)
86 | - [DevDocs](https://devdocs.io/)
87 | - [BinVis](https://binvis.io/#/) binary file visual analyzer
88 | - [Computer History Wiki](https://gunkies.org/wiki)
89 | - [Professional Programming](https://github.com/charlax/professional-programming), lerning topics for programmers
90 | - [BitSavers](https://bitsavers.org/), a place where it's being save a lot of content about everything as a way to rescue and access in the future
91 | - [Great Ideas in Theoretical Computer Science](https://www.cs251.com/)
92 | - [List of challenging software projects](https://www.andreinc.net/2024/03/28/programming-projects-ideas)
93 | - [CS Curriculum Text Books and references](https://github.com/AB1908/CS-Books/)
94 | - [Elementary Computer Science: From Bits and Bytes to the Big Picture](https://github.com/ckirsch/book)
95 | - [Concrete Mathematics: A Foundation for Computer Science (2nd Edition)](https://www.amazon.com/gp/product/0201558025/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=theende-20&linkId=112d0fc8c90030c9a9c1027cd888e7d5&language=en_US) #math
96 | - [Crafting interpreters](http://www.craftinginterpreters.com/)
97 | - [Free Programming books](https://github.com/EbookFoundation/free-programming-books)
98 | - [The Elements of Computing System: Building a Modern Computer](https://www.amazon.com.br/Elements-Computing-Systems-Building-Principles/dp/0262640686)
99 | - [Reading for graduate students - Computer Science](https://matt.might.net/articles/books-papers-materials-for-graduate-students/)
100 | - [Book list for streetfighting computer scientists](https://nick-black.com/dankwiki/index.php/Book_list_for_streetfighting_computer_scientists)
101 | - [Reading stuffs for Computer Sciences](https://github.com/amilajack/reading)
102 |
103 | ## Articles
104 |
105 | - [Things You Should Never Do, Part I](https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/), you shouldn't never rewrite an entire codebase from scratch. It's the worst decision that you could take.
106 | - [C Is Not a Low-Level Language](https://queue.acm.org/detail.cfm?id=3212479)
107 | - [State machines work for logic too](https://tritarget.org/#State%20Machines%20work%20for%20logic%20too)
108 | - [Project Oberon](https://people.inf.ethz.ch/wirth/ProjectOberon/PO.System.pdf), the story behind creating a Compiler, Programming Language and a Computer
109 | - [Project Oberon](https://www.projectoberon.net/)
110 |
111 | ## Papers
112 |
113 | - [A brief history of liquid computers](https://royalsocietypublishing.org/doi/10.1098/rstb.2018.0372)
114 | - [Computer Science papers](https://github.com/jeffrey-xiao/papers) a link with a lot of cool scientific papers related to computer subjects
115 |
116 | ## Blogs
117 |
118 | - [Xe Iaso's personal blog](https://xeiaso.net/)
119 | - [Martin Klepmann's blog](https://martin.kleppmann.com/) #computer-science/distsys
120 | - [Bruce Schneier](https://www.schneier.com/), an awesome person behind cryptography #cryptography
121 | - [Josh W Corneau](https://www.joshwcomeau.com/), the guy that has a lot of content about front-end, CSS and other related stuffs
122 | - [Bytes](https://bytes.zone/posts/)
123 | - [TK](https://www.iamtk.co), TeeKay personal blog, an aesthetic blog
124 | - [Bartosz Millewski](https://bartoszmilewski.com/), Bartosz is some of the best references about Category theory in the world, and has a lot of good topics about the theme #math/category-theory #math
125 | - [Not a Number, by Nanda Syahrasyad](https://www.nan.fyi/)
126 | - [All things distributed](https://www.allthingsdistributed.com/articles.html), the blog from Werner Vogels, former CTO from Amazon, an authority in distributed systems, event-driven, etc. #computer-science #computer-science/distsys
127 | - [Firstyear's blog-a-log](https://fy.blackhats.net.au/blog/)
128 | - [graydon2](https://graydon2.dreamwidth.org/), the personal blog/website from the creator of Rust language
129 | - [Ken Shriff's Blog](http://www.righto.com/), one of coolest blogs that talks about reverse-engineering on hardwares, CPUs and other cool things in computer area.
130 | - [NetworkProfile](https://blog.networkprofile.org/), a cool blog related to hardware and network stuffs. A great find.
131 | - [PoorlyDefinedBehavior](https://poorlydefinedbehaviour.github.io/), personal blog containing a lot of useful resources about Distributed systems and other really stuffs.
132 | - [Phil Eaton](https://notes.eatonphil.com/), a blog about databases and other computer stuffs
133 | - [tmp.out](https://tmpout.sh/) is a really cool blog from ELF group researcher, has an ASCII-style;
134 | - [Programming Blogs](https://danluu.com/programming-blogs/) from Dan Luu recommendation
135 | - [Ariel Davis](https://azdavis.net/)
136 | - [Fred Hebert](https://ferd.ca)
137 | - [Hirrolot](https://hirrolot.github.io/)
138 | - [Dek Engineer](https://dek.engineer/) — related to computer graphics, gamedev, etc
139 | - [Ludwig](https://ludwigabap.bearblog.dev/) — a cool blog related to CS stuffs
140 | - [Surfing Complexity](https://surfingcomplexity.blog/), a personal blog related to Distributed/Complex Systems
141 |
--------------------------------------------------------------------------------
/src/content/lists/list-of-math-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "List of Math Resources"
3 | tags:
4 | - list
5 | - math
6 | ---
7 |
8 | ## External links
9 |
10 | - [nCatLabs wiki](https://ncatlab.org/nlab/show/HomePage), a wiki to logic, topology and other stuffs
11 | - [An awesome list containing resource contents to study math and computer science](https://github.com/bobeff/programming-math-science)
12 | - [Interactive Linear Algebra](https://textbooks.math.gatech.edu/ila/), a book by Dan Margalit
13 | - [A mini-book about Category Theory](https://github.com/jonsterling/math)
14 | - [The Fourier Transform, explained in one sentence](https://blog.revolutionanalytics.com/2014/01/the-fourier-transform-explained-in-one-sentence.html)
15 | - [MathWiki](https://github.com/zhaoshenzhai/MathWiki)
16 | - [Papers of Per Martin Lof](https://github.com/michaelt/martin-lof)
17 | - [Physics and Math self study project](https://www.diegovera.org/recommendations)
18 | - [Math books that made you significantly better at math?](https://news.ycombinator.com/item?id=34439828)
19 | - [MathPages](https://mathpages.com/home/index.htm)
20 | - [The Stack Project](https://stacks.math.columbia.edu/browse)
21 | - [A Guide to Writing Mathematics](https://web.cs.ucdavis.edu/~amenta/w10/writingman.pdf)
22 | - [An Interactive Guide to the Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/)
23 | - [Teach Yourself Math](https://teachyourselfmath.app/), a site containing a lot of cool exercises related to Math
24 | - [ProofWiki](https://proofwiki.org/wiki/Main_Page), a wiki containing all proofs
25 | - [From the Circles to Epicycles](https://www.andreinc.net/2024/04/24/from-the-circle-to-epicycles), a visual introduction to Fourier Series
26 | - [Matemática Fundacional para a Computação](https://github.com/tsouanas/fmcbook)
27 | - [Ask yourself dumb questions – and answer them!](https://terrytao.wordpress.com/career-advice/ask-yourself-dumb-questions-and-answer-them/)
28 |
29 | ## Resources
30 |
31 | - [Mathematics Roadmap](https://github.com/TalalAlrawajfeh/mathematics-roadmap)
32 | - [The Open Source Mathematics Degree](https://github.com/shanirivers/open-source-mathematics-degree)
33 | - [ossu/math](https://github.com/ossu/math)
34 | - [Math link resources](https://github.com/bobeff/programming-math-science)
35 | - [rossant/awesome-math](https://github.com/rossant/awesome-math)
36 | - [UBL/Matematica](https://github.com/Universidade-Livre/matematica)
37 | - [MTH225 - Discrete Structures for Computer Science 1](https://publish.obsidian.md/mth225/)
38 | - [Handbook of geometry for competitive programmers](https://victorlecomte.com/cp-geo.pdf)
39 | - [Mathematics for Computer Science](https://www.cs.princeton.edu/courses/archive/spring10/cos433/mathcs.pdf)
40 |
41 | ## Tools
42 |
43 | - [Penrose](https://github.com/penrose/penrose) write beautiful diagrams with a DSL
44 |
45 | ## Math Books
46 |
47 | - Thomas'Calculus: Early Transcendentals
48 | - Precalculus: Mathematics for Calculus
49 | - Elementary Linear Algebra
50 | - Introductory Discrete Mathematics
51 | - [Linear Algebra Done Right](https://link.springer.com/book/10.1007/978-3-031-41026-0)
52 | - [Matemática Fundacional Para Computação](https://www.tsouanas.org/fmcbook/)
53 |
54 | ## Linear algebra
55 |
56 | - [Vectors, Matrices, and Linear Algebra](https://web.stanford.edu/class/nbio228-01/handouts/Ch4_Linear_Algebra.pdf)
57 | - [Introduction to Linear Algebra, Fifth Edition (2016)](https://math.mit.edu/~gs/linearalgebra/ila5/indexila5.html)
58 | - [The Art of Linear Algebra](https://github.com/kenjihiranabe/The-Art-of-Linear-Algebra), graphic notes on Gilbert Strang's _"Linear algebra for everyone"_.
59 | - [Linear Algebra for Programmers](https://coffeemug.github.io/spakhm.com/posts/01-lingalg-p1/linalg-p1.html)
60 | - [Immersive Math](https://immersivemath.com/ila/index.html), learning linear algebra with fully interactive figures
61 |
--------------------------------------------------------------------------------
/src/content/til/2025-04-20T02:49:57.614Z-skiplists.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "skiplists"
3 | title: "Skiplists"
4 | createdAt: 2025-04-20T02:49:57.614Z
5 | ---
6 |
7 | Skiplist is a kind of probabilistic data structure that allows for fast search, insertion, and deletion operations.
8 | It's basically a linked list with multiple levels of links, where each levels is a subset of the previous level.
9 |
10 | It can be used to handle some operations at data level for databases, like handling LSM trees. Check more [here](https://en.wikipedia.org/wiki/Skip_list).
11 |
--------------------------------------------------------------------------------
/src/content/til/2025-04-22T00:36:47.233Z-introduction-to-bayes-rules.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "introduction-to-bayes-rules"
3 | title: "Introduction to Bayes' Rules"
4 | createdAt: 2025-04-22T00:36:47.233Z
5 | ---
6 |
7 | The Bayes' rule is a fundamental theorem in probability theory which describes the probability of a given event
8 | based on a prior knowledge of the conditions that might be related to the event.
9 |
10 | $$
11 | P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
12 | $$
13 |
14 | Where:
15 | - $P(A|B)$ is the posterior probability of event A given event B.
16 | - $P(B|A)$ is the likelihood of event B given event A.
17 | - $P(A)$ is the prior probability of event A.
18 | - $P(B)$ is the marginal probability of event B.
--------------------------------------------------------------------------------
/src/content/til/2025-05-25T04:55:25.068Z-running-an-http-server-in-a-single-command-with-python.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: "running-an-http-server-in-a-single-command-with-python"
3 | title: "Running an HTTP server in a single command with Python"
4 | createdAt: 2025-05-25T04:55:25.068Z
5 | ---
6 |
7 | I was running my [Forester](https://git.sr.ht/~jonsterling/ocaml-forester) setup locally, found a specific way to expose an HTTP server easily in Python:
8 |
9 | ```bash
10 | python3 -m http.server -d
11 | ```
12 |
13 | This command starts an HTTP server on the specified port and serves files from the specified directory.
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/src/layout/Layout.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { ViewTransitions } from 'astro:transitions';
3 |
4 | import Footer from "../components/Footer.astro";
5 | import { SITE } from '../config';
6 |
7 | export interface Props {
8 | ogImage?: string;
9 | head?: {
10 | title?: string;
11 | description?: string;
12 | }
13 | }
14 |
15 | const {
16 | ogImage = 'og.png',
17 | head = {
18 | title: SITE.title,
19 | description: SITE.description,
20 | }
21 | } = Astro.props;
22 |
23 | const ogURL = new URL(
24 | ogImage,
25 | Astro.url.origin,
26 | ).href;
27 |
28 | const canonicalURL = new URL(Astro.url.pathname, Astro.site).href;
29 | const rssFeedURL = new URL('rss.xml', Astro.site).href;
30 |
31 | ---
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | {head.title}
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/src/pages/blog/[slug]/_post.tsx:
--------------------------------------------------------------------------------
1 | import { SITE } from '../../../config';
2 | import type { CollectionEntry } from 'astro:content';
3 | import dayjs from 'dayjs';
4 |
5 | export const post = (props: CollectionEntry<'blog'>) => {
6 | return (
7 |
32 | I'm a {year} year old software engineer from Brazil. With interests in distributed systems, compilers, databases, hardware, PL theory and other cool stuff.
33 | If you want to reach me, feel free to contact on Twitter or via email.
34 |
35 |
36 | If you want to see what I'm doing right now, you can check out my /now page. I have a place where I put all the articles
37 | that I read, you can see it on my bookmarks. On my GitHub profile you can find
38 | all the repositories that I'm working on, and on my blog repository you can find the source code of this blog.
39 |
40 |
41 | The blog is under GNU AGPLv3
42 | and CC BY-SA 4.0 licenses.
43 |