@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 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

The old "we don't want competitors to undercut us" thing is such a bad justification for switching to non Open Source licenses (e.g. Elastic, Hashicorp…). You can absolutely keep some features in proprietary extensions and make them available to enterprise clients while keeping the main software OSS.

Cluster mode, SSO, SCIM, audit logs, account impersonation, integrations with proprietary software, the list goes on and on. And these features are usually hard to replicate, good for you.

galdor, to random
@galdor@emacs.ch avatar

Quick article about REDUCE in Common Lisp, its surprises, and a comparison with fold. Enjoy!

https://www.n16f.net/blog/reduce-vs-fold-in-common-lisp/

galdor, to random
@galdor@emacs.ch avatar

Go 1.21 introducing min and max is good. Go devs finally realizez that "c := max(a,b)" is better than:

c := a
if b > a {
c = b
}

If we're luck in a couple years they'll finally understand why so many have been asking for the conditional ternary operator. One can dream.

galdor, to emacs
@galdor@emacs.ch avatar

The value of is not in the packages that are available (Gnus, org-mode, Magit, etc.). It is the fact that these packages live in the same application, manipulate text the same way, and can interact with each other to do exactly what you want them to do.

galdor, to random
@galdor@emacs.ch avatar

Daily standups and biweekly cycles are the embodiment of the assembly line mentality. They are based on the belief that you must slice and dice development into fixed parts and micro manage "human resources" at each step. Of course it does not solve anything.

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?

galdor, to random
@galdor@emacs.ch avatar

The reason you want to cut code lines at 80 columns is not to blindly respect an old tradition, it is to improve readability. This is a well known fact in typography. Being able to have three columns in your text editor is a bonus.

galdor, to random
@galdor@emacs.ch avatar

In #Go, you cannot call the String method on a literal URL struct ("cannot call pointer method String on url.URL") because the String method has a pointer receiver. String does not modify the object, but it uses a pointer receiver to avoid copying the object for each call.

This is what you get when 1/ you design a language with pointers (why would you do that in 2009?) and 2/ you do not have "const".

Just bad design.

galdor, to random
@galdor@emacs.ch avatar

If you're trying to sell me on a programming language which uses "+" for string concatenation, you've lost. You should not have to ask why.

galdor, to random
@galdor@emacs.ch avatar

When someone says email sucks, what they actually mean is that they don't know how to:

  • use groups ("labels" in GMail);
  • use filtering rules;
  • properly keep context and reply below.

Also if your email uses HTML, you're part of the problem.

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 random
@galdor@emacs.ch avatar

I do not know if this is a Glitch thing, but pasting more than ~700 characters in the post textarea will break the interface and hide the "Publish!" button.

I really wish that Mastodon/Glitch understood that some users can write more than a single sentence and offer something else than a stamp-size composition box.

galdor, to random
@galdor@emacs.ch avatar

Gnus often asks how many messages to fetch. Annoying. If your connection is fast enough to fetch lots of messages, you can disable these prompts:

(setq gnus-large-newsgroup nil)
(setq gnus-large-ephemeral-newsgroup nil)

The first line is for groups (i.e. IMAP folders), the second for ephemeral groups (e.g. search results).

galdor, to programming
@galdor@emacs.ch avatar

type declarations are a life saver, but they are fundamentally limited: you cannot use them to express that a list contains elements of a specific types. Frustrating given how ubiquitous lists are. type specifications are much more flexible.

galdor, to random
@galdor@emacs.ch avatar

My Firefox add-on to identify Open Source GitHub projects now analyzes the license file if GitHub failed to do so.

Matching the infinite variety of custom licenses is going to be hard, but I suspect lots of people will be happy to help!

Release soon, need to sign and publish.

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

Please don't hate me, I still love Common Lisp I swear.

galdor, to random
@galdor@emacs.ch avatar

If you're writing C code and you are hiding pointer types with typedef, there is a special hell waiting for you.

I'm looking at you libssh with "typedef struct ssh_key_struct* ssh_key". It's already bad enough to hide "struct".

galdor, to programming
@galdor@emacs.ch avatar

The frustrating part of is that the language is so well designed that I always want to go back to it even though the ecosystem is a huge PITA. I should probably start to extend what I already wrote on the build part to handle more complex systems with dependencies.

galdor, to random
@galdor@emacs.ch avatar

Fun Sunday: trying to profile my PostgreSQL client for a performance issue. SB-SPROF is unable to capture any sample, no idea why. SB-PROFILE does not show anything suspicious. And yet there is a 40ms delay between two messages (parse and bind) sent to the server. Time to try with another implementation I guess.

galdor, to random
@galdor@emacs.ch avatar

Interesting but disappointing: my HTTP server in non-blocking mode (epoll) has 5x lower throughput and 200x higher latency compared to the multithreaded blocking approach.

Way too much time spent in read/write calls, method invocation and text encoding/decoding.

galdor, to random
@galdor@emacs.ch avatar

In , the convention is to name macros or function defining constructions either with a "DEF" prefix for single words or a "DEFINE-" prefix for multiple words.

So it is "DEFUN" or "DEFCLASS", but "DEFINE-COMPILER-MACRO".

One exception, "DEFINE-CONDITION". I'd love to learn the rational behind this one.

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

REST does not make any sense for HTTP APIs. A request is just data: encode it in the request, use the request path as the name of the operation you are performing, the end. Same thing for responses. Forget about nested routes, query strings, path variables… They just make your life more complicated and do not bring anything to the table.

I've been using this model for multiple HTTP APIs and I only regret I did not realize that sooner. BTW I'm not alone, see the AWS API or the Telegram one.

Also makes writing API clients magnitude order easier.

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