@galdor@emacs.ch
@galdor@emacs.ch avatar

galdor

@galdor@emacs.ch

Contrarian software engineer. Hire me to solve your technical problems.

$argon2id$v=19$m=64,t=512,p=2$0rwNagYG9nw58bd3D5HBfw$ZDMVWlX+adPhtQKcnrqI5A

This profile is from a federated server and may be incomplete. Browse more on the original instance.

galdor, to random
@galdor@emacs.ch avatar

Funny how so many whine about SBCL executable cores. But with compression, my example program is 12MB even though it comes with a complete compiler. In comparison Go static binaries can easily grow beyond 100MB and I don't remember anyone complaining.

Lots of complaints are just a way to avoid saying "I don't like parentheses".

galdor, to programming
@galdor@emacs.ch avatar

TIL that in , _ can be used in type specifications and has the same meaning as term() or any(). I love this kind of discovery because it makes total sense and is consistent with pattern matching. Erlang is one of these rare sane languages.

galdor, to random
@galdor@emacs.ch avatar

Most software engineers never really learn. Their X years of experience actually mean X times 1 year: always re-doing the same things, never getting to the next level. Spotting these people in interviews is essential.

galdor, to random
@galdor@emacs.ch avatar

Google is making it harder and harder to get access to software primary sources (official doc, source code, mailing list…). Due to an unhealthy focus on SEO, most searches yield pages and pages of blog articles (lots of them from companies writing a blog for marketing/PR purposes) fulled of second or third hand information. Really bad for people currently learning.

galdor, to random
@galdor@emacs.ch avatar

I've worked with a lot of software engineers in my career. For three of the best among them:

  • One has zero presence on social media.
  • One writes Brainfuck for fun.
  • One does not have a resume because he thinks they are stupid.

All of them know C very well, all of them use Linux or BSD on a daily basis, all of write code in Vim or Emacs.

Some lessons here.

galdor, to random
@galdor@emacs.ch avatar

A lot of projects are managed with the assumption that having more contributors is intrinsically good for the project. From what I've seen both in the open source world and in companies, it is actually quite the opposite.

galdor, to random
@galdor@emacs.ch avatar

Stack Overflow did not exist when I learned programming and I'm grateful for that. I'm convinced that this website is a net negative for beginners:

  1. You mostly do not have to figure things out by yourself and can just copy/paste/adapt complete answers. Digging in documentations and source codes is essential.

  2. You mostly learn to do it wrong: there is good information out there, but the signal/noise ratio is incredibly low and you as a beginner have no way to distinguish good and bad advices.

galdor, to random
@galdor@emacs.ch avatar

I just finished my article on interactive development. Turned out to more than I expected and less that it should be. One could probably write a small book on the subject. Hopefully it will still be useful.

https://www.n16f.net/blog/interactive-common-lisp-development/

galdor, to emacs
@galdor@emacs.ch avatar

I just learned today that the builtin sqlite module cannot load arbitrary SQLite extensions: there is a short list of allowed extensions, and you cannot work around it without patching Emacs.

I really hope Emacs is one day freed from the FSF, this is getting embarassing.

galdor, to random
@galdor@emacs.ch avatar

I've seen some of the most recents improvements on LLMs and I'm now convinced of how useful they can be as interfaces to obtain information from large amount of data.

But all large models are heavily censored, that kills the buzz for me. We need open data, not just open source.

galdor, to random
@galdor@emacs.ch avatar

A frustrating aspect of niche programming languages is that their small communities are easily dominated by even a tiny number of toxic people. In larger communities they are marginalized and easy to ignore. In small ones, they can dominate most discussions and poison the well.

galdor, to random
@galdor@emacs.ch avatar

As a software engineer working 8+ hours a day on a computer, a good chair, keyboard, screen, headphones are not luxury: they are essential both for your health and for your productivity. Also ergonomics are not just for people with disabilities; forget it and you will get hurt.

galdor, to random
@galdor@emacs.ch avatar

Fun fact, GitHub still does not support IPv6 in 2023. IPv6 in general has been one of the largest engineering failure of the last decades.

galdor, to emacs
@galdor@emacs.ch avatar

I just released rfc-mode v1.4.1, an mode to help navigating RFC documents. It fixes page-based navigation which was broken with Emacs 29.

galdor, to random
@galdor@emacs.ch avatar

Guess what is printed here. Yes the Go type system is completely broken. Act surprised.

galdor, to random
@galdor@emacs.ch avatar

It is often said that one of the upsides of Lisp is its homoiconicity. And yet this is not true for : various types have printed representations which are not readable, for example hash tables. Erlang is surprisingly better at this.

galdor, to random
@galdor@emacs.ch avatar

Now that I've seen the price of Elastic Cloud (and no I don't want to deal with Java software on my servers), I really want to build a sane Open Source log storage platform. Store raw data on a S3 or on a NAS, treat indices are disposable, and split in shards to scale. I need more time.

galdor, to random
@galdor@emacs.ch avatar

Just finished support for Unicode general category lookups in . While CL-UNICODE generates a binary tree, I used a vector of 64 bit integers instead, each one representing a character block (start and end code point) and its category as an integer (used later with a lookup table).

Then I can do a binary search to find the category of a code point. Much faster than a tree and uses a lot less memory.

Bonus, I have a second table for immediate lookups of ASCII characters, making the common case the fastest.

That was fun!

galdor, to random
@galdor@emacs.ch avatar

Sunday fun, diving into environment manipulation. Not standard but defined in CLtL2 (8.5. Environments) and available on most implementations. Can be used to do code analysis (e.g. a type checker) or to generate documentation (extracting function types).

galdor, to random
@galdor@emacs.ch avatar

Instagram scaled to 14 million users with 3 engineers. If you need to grow your engineering head count as fast as your business, you're doing it wrong. And you're hiring the wrong engineers.

galdor, to emacs
@galdor@emacs.ch avatar

The very useful Paredit mode does not bind C-<backspace> by default. If you use it to delete the last word, you will potentially break S-expressions.

Fortunately Paredit comes with paredit-backward-kill-word:

(use-package paredit
:bind
(:map paredit-mode-map
("C-<backspace>" . paredit-backward-kill-word)))

galdor, to emacs
@galdor@emacs.ch avatar

Despite its endless feature list, I just learned that has no way to move the minibuffer to the top. Too bad, this would be the ergonomic choice: this is where you eyes are looking with Emacs running fullscreen.

I wonder if I can patch the C code to do it.

galdor, to emacs
@galdor@emacs.ch avatar

sort-fields and sort-numeric-fields are life saver when dealing with tabulated data in . Use the prefix argument to select the column. E.g. [C-u 2 M-x sort-fields] to sort lines based on the second column.

galdor, to random
@galdor@emacs.ch avatar

Parser generators are how you end up with software spitting useless errors such as "syntax error at or near "("" without any explaination about what's wrong. PostgreSQL in this case.

Yes, you need to write the parser yourself.

galdor, to random
@galdor@emacs.ch avatar

There are reasons to avoid putting too much business logic in the database with user-defined functions, but the most bizarre reason I've seen is that they are hard to test. Your application can execute SQL queries, but somehow you cannot execute one in tests?

  • All
  • Subscribed
  • Moderated
  • Favorites
  • megavids
  • ngwrru68w68
  • everett
  • InstantRegret
  • magazineikmin
  • thenastyranch
  • rosin
  • GTA5RPClips
  • Durango
  • Youngstown
  • slotface
  • khanakhh
  • kavyap
  • DreamBathrooms
  • JUstTest
  • tacticalgear
  • osvaldo12
  • tester
  • cubers
  • cisconetworking
  • mdbf
  • ethstaker
  • modclub
  • Leos
  • anitta
  • provamag3
  • normalnudes
  • lostlight
  • All magazines