Nicolas Martyanoff
banner
n16f.net
Nicolas Martyanoff
@n16f.net
Contrarian software engineer. Hire me to solve your technical problems.

https://n16f.net
If you're a tech professional and the email address on your resume is gmail dot com (or worse outlook dot com), people will notice. And no it does not look good.
January 16, 2025 at 7:14 PM
I thought that Go telemetry was supposed to be opt-in, but I just saw "gopls ** telemetry **" processes running on my machine. Had to run "go telemetry off" (which writes ~/.config/go/telemetry) and restart gopls to get rid of them.

Scary that this is widely accepted.
January 15, 2025 at 5:29 PM
Most software projects succeed not because they have good management and processes but because they are staffed with the right people doing their best to get it done while working around stupid rules.
January 14, 2025 at 1:45 PM
I do not have anything against htmx, it certainly is miles ahead from React/Vue/Angular & co. But I still think its main value is to get web developers on the path to the realization that no, they do not need a framework.
January 6, 2025 at 10:40 AM
[1/2]
UNIX sockets are underestimated. They can be used for connections between programs on a local machine (e.g. a CLI program for a server, or a controller and its workers) the same way as a TCP socket, but with the advantage of being actual files with permissions for access control.
January 5, 2025 at 12:10 PM
Still working on configuration validation. Most softwares treat configuration errors as an afterthought: print a terse error message and exit.

I'm investing time to do it the right way for Boulevard and for other projects. Worth it.
December 30, 2024 at 4:16 PM
So this is what an example Boulevard configuration would look with the new format on the left compared to YAML on the right.

Obviously it's longer, but it is more readable to me, especially for nested handlers. I'm not 100% convinced though, maybe I'm missing something.

What do you think?
December 27, 2024 at 3:01 PM
I wrote a tokenizer and parser for my configuration language. The important part is making sure users get clear and accurate errors when they make mistakes.

This is starting to look good:
December 15, 2024 at 6:56 PM
People leave bosses, not companies. They just don't talk about it publicly because image.

Average tenure in tech companies is ~2y. Enough said.
December 15, 2024 at 11:27 AM
With software, learn to be as strict as possible. Then you'll understand when you can afford to be sloppy. If you start with sloppiness, you'll never be able to be strict when it's necessary. And it applies to everything, not just software.
December 10, 2024 at 1:04 PM
An important step of your journey as a professional is to realize that guidance may never come. If you find a good mentor, wonderful, but it's rare. The earlier you accept that, the faster you'll get back on tracks.
December 9, 2024 at 11:45 AM
[1/2]
There's a serious problem with encoding/json in #Go: DisallowUnknownFields is useless. When set, the decoder will reject objects with unknown fields, but

1/ the error cannot be identified because it has no specific type (fmt.Errorf);
December 8, 2024 at 2:55 PM
I'm a bit disappointed that #CommonLisp functions such as COUNT, POSITION or FIND work for sequences but not for arrays. I would love to know the rational here, surely there is a reason.
December 6, 2024 at 9:27 AM
[1/2]
HTTP is a huge mess. Let us take range requests:

- Ranges are closed interval: "3-8" includes byte 8. Makes every calculation harder and defies all conventions.
- A server can send back any subset of the requested ranges. Ask for A, get B, yup that makes total sense.
December 4, 2024 at 12:03 PM
Fun fact, with #Go's standard HTTP router, ServeMux, HEAD requests will match routes defined with an explicit GET method. This is documented but unexpected. Why would you accept anything but the method that was explicitely specified?
December 3, 2024 at 3:07 PM
If you use Dired to manage files in #Emacs, it will automatically update buffers visiting files affected by the operations you execute. Invaluable when working on large projects, much better than trying to locate which buffers have to be reopened.
December 2, 2024 at 1:27 PM
[1/2]
The problem with most static linters —here staticcheck for #Go— is that they mix useful diagnostics (e.g. detecting calls to deprecated functions) with pure opinion (noooo you cannot early return with a branch, you have to use the full expression in a single return statement!).
December 1, 2024 at 12:43 PM
It's Decembre 1st, meaning that the #AdventOfCode is starting again! Of course I'll be using #CommonLisp.

First day is just a warm-up as usual. A good time to remember that MAP & co. support multiple input lists, so there is no need to code a ZIP function.
December 1, 2024 at 11:32 AM
[1/3]
I've settled on HTTP over UNIX sockets for the control API of Boulevard. It simple and secure (UNIX sockets are files, you can enforce ownership and permissions) and the #Go standard library supports it. Great.
November 30, 2024 at 4:21 PM
Working hard and being productive are two very different things. The former looks good and will get you praised, but it's the later that leads somewhere.

Being aware of the difference for your own work is critical. And it's hard.
November 29, 2024 at 4:41 PM
One of the infortunate consequences of the "devops" movement is that we now have an entire generation of tech professionals —from ICs to top execs— who truly believe that managing servers and networks is something any developer can do.
November 28, 2024 at 3:08 PM