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

emacs, to random

Our instance uptime is 326 days. That was the day when Emacs.ch was launched publicly.

29 days to go and we can celebrate 1 year of Emacs.ch. 🥳​

galdor,
@galdor@emacs.ch avatar

@emacs What is using that much memory?

galdor,
@galdor@emacs.ch avatar

@louis Indeed, this is a shame. This pretty much guarantees that I would never deploy a personal Mastodon node.

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

@bahmanm I don't want yet another Datadog clone, I want a simple and practical Open Source system to store logs and search through them.

One of those numerous cases where if you want something, you're going to have to make it yourself.

galdor,
@galdor@emacs.ch avatar

@louis @bahmanm I learned years ago that a company cannot make decent money on a product with "just" log storage/search; pricing is dominated by storage cost, it's just not interesting. Companies doing just that end up sold and integrated to some kind of platform (e.g. Logmatic bought by Datadog). This is also why Elastic is so much more than just logs.

Relational databases work for tiny volumes, but it's not the right tool for the job (good luck storing gigabytes of logs a day with months of history, and yes this is a small number). And you still have to write a decent web interface.

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).

louis, to Ergonomics
@louis@emacs.ch avatar

Finally it arrived! It took me almost a year to decide and hit the order button. It was built on order in Norway and shipped today.

It's made out of Ash wood and wool and feels very good.

Now let's see if it will change my bad sitting posture and how long it will last on my desk 🙂

galdor,
@galdor@emacs.ch avatar

@louis Your regular chair looks like a torture device.

You can pry my Aeron from my dead cold hands.

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

@oantolin One of the main rules of screen work ergonomics is that your eyes are mostly at the top of the screen to reduce neck stress. Does not mean you never look down, just that you focus at the top.

Having the minibuffer at the top would be the natural choice. I'm just surprised there's not an option for it.

amoroso, (edited ) to Lisp
@amoroso@fosstodon.org avatar

I've done something I very rarely do, request a refund for a book: "Programming Algorithms in Lisp".

In the name of clarity, the author uses in the book his own pet binding forms instead of LET* and others that have been second nature to lispers for over half a century. This is gratuitous for coding basic algorithms, obscures code, and is not a good use case for building DSLs in Lisp or extending the language.

As the book's author puts it, I'm an oldtimer.

galdor,
@galdor@emacs.ch avatar

@amoroso Regular issue with Common Lisp. It is easy to create your own language-level abstractions, so developers do so. On Lisp and Let Over Lambda are similar in that regard. But at least for LoL it feels that the point is precisely to show you how far you can go (and actually demonstrates why it's not a good thing).

louis, to golang
@louis@emacs.ch avatar

What would be the fastest and most compact (possibly binary) type-aware data exchange format between a Common Lisp and a Go process?

galdor,
@galdor@emacs.ch avatar

@louis Writing a gob (https://pkg.go.dev/encoding/gob) encoder/decoder in Common Lisp would be ideal if you're primarily concerned with the ability to represent everything Go supports.

If not, MessagePack is very simple.

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.

louis, to golang
@louis@emacs.ch avatar

Preparing for a bad weather weekend. :blobcatgoogly:

galdor,
@galdor@emacs.ch avatar

@louis Curious to know what you think of it. My recent experience dabbling in compilers written in Go has been frustrating. Go is not good at modelling complex data hierarchies, and the only thing in my mind was how much I missed Erlang sum types and pattern matching.

louis, to apple
@louis@emacs.ch avatar

In one and a half hours starts the Apple event. They will announce that the iPhone will now be even more expensive, because it has even more emojis, with even less hardware.

Millions will applaud.

And Tim Cock will go home that night, being $40.000 richer than yesterday.

galdor,
@galdor@emacs.ch avatar

@louis They don't even need the extra emoji, announcing new colors will do it. It's that simple.

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

@defanor Is it a recurring argument. I suspect lots of developers are mocking their database in tests which is an incredibly bad idea.

galdor,
@galdor@emacs.ch avatar

@louis @defanor Your argument is that fast application code is better than slow database functions. I cannot really argue ;)

galdor, to random
@galdor@emacs.ch avatar

I love email (especially with Gnus) and I've handled patch submission by email before (in a professional context, believe it or not). But I also recognize that it is much more complex than GitHub, Gerrit & co, with so many non-obvious processes (enjoy dealing with message ids? I don't)

Is there a clear doc explaining clearly how to deal with all the usual workflows in details? I have the feeling most of the know-how has been internalized by those who use it on a day to day basis. But preaching that it was better before does not help without actual information.

galdor, to random
@galdor@emacs.ch avatar

Observing various Open Source software maintainers is fascinating. There is a direct correlation between the way they behave and the entire mood in the community. Infortunately some are incredibly rude, leading to tense exchanges where participants always assume the worst. Others understand you can have heated exchanges and still maintain a minimal amount of professionalism. Something to think about.

galdor, to random
@galdor@emacs.ch avatar

My Firefox add-on has been approved! It annotates GitHub projects to clearly identify Open Source projects and help spotting those using non Open Source licenses such as the BUSL or the SSPL.

Feel free to open a GitHub issue if you find a bug.

https://addons.mozilla.org/addon/github-license-observer/

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

@louis Ah I understand, they added a line before the Copyright text, it clearly messes up with GitHub.

Good news is that I should be able to detect this kind of SPDX identifier.

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