Skip to content

Commit 41bffcc

Browse files
chore: remove typos from the posts
1 parent 4c51530 commit 41bffcc

File tree

3 files changed

+31
-31
lines changed

3 files changed

+31
-31
lines changed

posts/2018-06-23-AN-YEAR-WORK-ON-B2RENT.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,38 @@
33
- Date: 2018, Jul 23
44

55
About a year and many cups of coffee ago, I was invited to work on a project in
6-
Fortaleza. That was what finally made me move to a new citysomething I had
6+
Fortaleza. That was what finally made me move to a new city, something I had
77
been postponing for two years, insisting on staying in Sobral.
88

99
The project was incredible: working on a Laravel 5.1 application aimed at helping
1010
companies manage rentals. Initially, I was going to be the sole developer leading
11-
this endeavor, with B2rent being just one of the products of Pilps GP.
11+
this effort, with B2rent being just one of the products of Pilps GP.
1212

1313
I felt like the perfect developer for the job. Working with legacy code in a
1414
startup environment had become almost second nature over the past two years. That
15-
periodworking as a freelancer or building my own startupwas one of the best
16-
times of my life up to that point. I met many people who helped me and radically
17-
changed my worldview.
15+
period, working as a freelancer or building my own startup, was one of the best
16+
times of my life up to that point. I met many people who helped me and changed
17+
the way I see things.
1818

19-
That energy of creating new things and learning every second is an intrinsic
19+
That energy of creating new things and learning every second is a core
2020
part of who I am today. The challenge was to expand the project's functionalities
21-
while streamlining the codebasea Herculean task, to say the least.
21+
while streamlining the codebase, a Herculean task.
2222

2323
A prime example of this is that, even a year later, there are still Controllers
2424
I have never touched. The reason for the bloated codebase was the number of
2525
developers who had worked on it before me, implementing isolated features
26-
without considering maintainability—each with a different vision of what the
26+
without considering maintainability. Each had a different vision of what the
2727
project should be.
2828

29-
Most tasks always came with extensive refactoring of the codebase: removing
30-
business logic from Controllers, optimizing massive queries, extracting
31-
useless code, and, more often than not, negotiating scope adjustments. Through
29+
Nearly every task came with extensive refactoring of the codebase: removing
30+
business logic from Controllers, optimizing massive queries, removing
31+
dead code, and, more often than not, negotiating scope adjustments. Through
3232
this, I learned that much of what makes software complex is the lack of
3333
structured processes on the client’s end.
3434

3535
The result of this work can be seen in the following graph, which shows the
3636
number of lines added and removed in my contributions to B2rent. These numbers
37-
aren’t what truly matter—the key takeaway is that, even as the product gained
37+
aren’t what truly matter. The point is that, even as the product gained
3838
more features, we managed to keep the codebase as lean as possible.
3939

4040
| Commits | Lines Added | Lines Removed |
@@ -44,13 +44,13 @@ more features, we managed to keep the codebase as lean as possible.
4444
The frontend was another challenge. Laravel comes with a built-in structure for
4545
Vue.js 1.0, but that setup had been completely removed at the project's start.
4646

47-
Since I was particularly a fan of the library, one of my first tasks was to recreate
48-
its setup. Although Vue 2.0 had already been announced at the time, bringing some
49-
incompatibilities, we built most of our components with the new version’s requirements
47+
Since I was a big fan of the library, one of my first tasks was to recreate
48+
its setup. Although Vue 2.0 had already been announced at the time, which introduced
49+
some breaking changes, we built most of our components with the new version’s requirements
5050
in mind.
5151

5252
The goal was to reduce the percentage of jQuery and plain HTML while increasing
53-
Vue’s presence by creating components of various parts of the application. We also aimed
53+
Vue’s presence by creating components for various parts of the application. We also aimed
5454
to remove AdminLTE from our app. I have nothing against templates like that, but
5555
if you don’t want to give the impression that you’re just another generic app,
5656
don’t use them.

posts/2025-10-10-COMPOSE-SORTING-RULES.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ad-hoc sorting logic scattered all over the place, reproduced multiple times, fu
1717
statements. Things get gnarly the moment complex, nested rules arrive, and maintaining or extending that code quickly
1818
becomes a nightmare.
1919

20-
Enough "lero-lero", let's see how this works in practice. First, let's lock down our acceptance criteria:
20+
Enough talk, let's see how this works in practice. First, let's lock down our acceptance criteria:
2121

2222
```markdown
2323
**0001: Products must be ordered according to these rules:**
@@ -27,7 +27,7 @@ Enough "lero-lero", let's see how this works in practice. First, let's lock down
2727
3. Product categories must be ordered alphabetically by their `name`.
2828
```
2929

30-
With that in mind we can start modeling the problem we want to solve. We face two entities: Product and Category. In
30+
With that in mind we can start modeling the problem we want to solve. We have two entities: Product and Category. In
3131
this example the relationship is 1:1. We'll introduce them with interfaces, which lets us reuse them freely while
3232
abstracting away any concrete implementation details that do not matter right now.
3333

@@ -74,8 +74,8 @@ const ordCategoriesAlphabetically: Ord.Ord<Category> = pipe(
7474
```
7575

7676
Now we have an `Ord<Category>` (and, by extension, an `Ord<Product>`) that partially solves criteria 1 and 3. Next we
77-
have to handle criteria 2, which we can rephrase as: "Products must be ordered by category." Once again we face the same
78-
shape of problem, we want a type to follow the ordering of one of its internal attributes. So we can reuse the exact
77+
have to handle criteria 2, which we can rephrase as: "Products must be ordered by category." Once again we're looking at the same
78+
kind of problem, we want a type to follow the ordering of one of its internal attributes. So we can reuse the exact
7979
same
8080
strategy:
8181

@@ -98,13 +98,13 @@ const ordProductsAlphabeticallyByCategory: Ord.Ord<Product> = pipe(
9898
)
9999
```
100100

101-
Although we've addressed each requirement individually, and in a reusable way that extends beyond the original problem.
101+
Although we've addressed each requirement individually, and in a reusable way that extends beyond the original problem,
102102
we
103-
still need a mechanism to combine these rules so they deliver the result we actually want. This is where a remarkably
104-
powerful tool steps in: the Monoid[^3].
103+
still need a way to combine these rules so they deliver the result we actually want. This is where the Monoid[^3]
104+
steps in.
105105

106-
Yes, the name sounds odd, but there's no reason to panic. Think of Monoids as pressure cookers: surprisingly easy to
107-
operate and capable of making your life a lot simpler.
106+
Yes, the name sounds odd, but there's no reason to panic. Think of Monoids as pressure cookers: easy to
107+
operate and they make your life a lot simpler.
108108

109109
```ts
110110
import * as M from 'fp-ts/Monoid'
@@ -128,7 +128,7 @@ const ordProducts: Ord.Ord<Product> = combineMultipleOrds([
128128
])
129129
```
130130

131-
The result is still an `Ord<Product>`, but now each criteria lives in isolation, making maintenance equally isolated.
131+
The result is still an `Ord<Product>`, but now each rule lives in isolation, making maintenance equally isolated.
132132
The implementation also becomes a semantic entry point for understanding the sorting rules. By combining them in a list
133133
we get a ranking view where we can quickly see which rule takes precedence. We can toggle them on or off with nothing
134134
more than a comment.
@@ -162,7 +162,7 @@ const ordProducts: Ord.Ord<Product> = M.concatAll(Ord.getMonoid())([
162162
])
163163
```
164164

165-
Stop the machines! The users started complaining, the unavailable products buried the items they actually wanted to see.
165+
Stop the presses! The users started complaining, the unavailable products buried the items they actually wanted to see.
166166
A new requirement pops
167167
up:
168168

posts/2025-10-23-A-BIT-MORE-CONTRAMAP.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ alphabetically without changing the original `Ord<string>`. The same pattern sho
3434
module [^3] is a good example because it helps you model rules, filters, and guards that capture your business logic.
3535
These tiny pieces feel simple, but they can be used to build complex logic.
3636

37-
Let us turn that into requirements and code.
37+
Let's turn that into requirements and code.
3838

3939
```markdown
4040
0001: As a user, I want to see products as unavailable when the category is disabled.
@@ -43,7 +43,7 @@ Let us turn that into requirements and code.
4343
2. The products with disabled categories must be considered unavailable.
4444
```
4545

46-
Let us model these requirements with types:
46+
Let's model these requirements with types:
4747

4848
```ts
4949
interface Category {
@@ -110,7 +110,7 @@ const isReviewInactive: P.Predicate<Review> = pipe(
110110
)
111111
```
112112

113-
For teaching purposes, we can inline every step so this bridge's behavior becomes crystal clear:
113+
For teaching purposes, we can inline every step so the full chain becomes crystal clear:
114114

115115
```ts
116116
// Review module
@@ -132,7 +132,7 @@ const isReviewInactive: P.Predicate<Review> = pipe(
132132
Conclusion
133133

134134
`contramap` works like that universal adapter you carry when you travel. It bridges shapes that don’t naturally fit,
135-
keeping what already works untouched. The trick is simple but powerful: instead of changing your logic, you adapt
135+
keeping what already works untouched. The trick is small: instead of changing your logic, you adapt
136136
the data to match it. Once you start thinking this way, composition stops being an abstract principle and becomes
137137
a habit. You spend less time rewriting and more time connecting the pieces that are already there.
138138

0 commit comments

Comments
 (0)