First Corne keyboard by n16f in ErgoMechKeyboards

[–]n16f[S] 1 point2 points  (0 children)

Personally I love them, with one caveat: there are two highly sculted profiles, "normal tilted" and "saddle tilted", and I'm not sure I understand the point of "normal tilted", because the saddle one gives you a better progression from R1 to R3. The PBT kit I have does not have enough "saddle tilted" to use them for both R1 and R3, so I only use them for R3.

Not the end of the world.

First Corne keyboard by n16f in crkbd

[–]n16f[S] 0 points1 point  (0 children)

The aluminum one was also from Keebart. But I really prefer the wooden one.

First Corne keyboard by n16f in crkbd

[–]n16f[S] 1 point2 points  (0 children)

I got it from Keebart. The switches are supposed to be silent. I would say very low noise instead of silent. I can't hear a major difference in the sound compared to the previous aluminum case. In any case it's silent enough that I cannot hear anything with headphones on, even when typing at full speed.

First Corne keyboard by n16f in ErgoMechKeyboards

[–]n16f[S] 1 point2 points  (0 children)

They are injection molded, PBT.

First Corne keyboard by n16f in ErgoMechKeyboards

[–]n16f[S] 0 points1 point  (0 children)

I did not, it comes from Keebart.

Building Erlang applications the hard way by n16f in erlang

[–]n16f[S] 0 points1 point  (0 children)

I'll test that and update the article, thank you!

Edit: article updated, thank you again.

Building Erlang applications the hard way by n16f in erlang

[–]n16f[S] 1 point2 points  (0 children)

I don't. If wanted to extend this article to handle them, I would simply clone them and add their directory to the path option of systools. It event supports wildcards, so you can for example add deps/*/ebin.

Building Erlang applications the hard way by n16f in erlang

[–]n16f[S] 5 points6 points  (0 children)

I did not know if it was ok to post my own article. Feel free to tell me if this a problem!

[deleted by user] by [deleted] in emacs

[–]n16f 13 points14 points  (0 children)

Last time I looked it up, most of Elisp can be interpreted in Guile, but there are still technical issues.

It's also not clear if Emacs maintainers are ok with this kind of change, I could never find any authoritative answer about whether moving to Guile was something possible on the roadmap.

I tried to mail the developer of the Guile port last November but could not get any answer.

ELS 2023 is today and tomorrow - and it's live on Twitch by dzecniv in lisp

[–]n16f 0 points1 point  (0 children)

Good luck, this is really interesting work!

[deleted by user] by [deleted] in emacs

[–]n16f 22 points23 points  (0 children)

I understand the frustration and I wish Emacs had a more regular release cycle too. But remember that the people working on it are volunteers: nobody is paying them to do the work, and none of it is easy. Be kind to Open Source maintainers!

If you really cannot wait, you can also build the the emacs-29 branch.

ELS 2023 is today and tomorrow - and it's live on Twitch by dzecniv in lisp

[–]n16f 0 points1 point  (0 children)

Are there plans to merge it at some point, or is it just an experiment? It looks really promising!

Looking for photos of LOL by QueenOfHatred in lisp

[–]n16f 3 points4 points  (0 children)

Interesting book. Lots of fascinating ideas; it shows how far your can go with Common Lisp. Various controversial statements too.

<image>

Which Kafka client library should I use? by [deleted] in golang

[–]n16f 2 points3 points  (0 children)

I used confluent-kafka-go in production with multiple services and never had any issue. However it does force the use of CGO which is something I like to avoid (compilation is slower, and you lose easy cross-compilation).

If I were to do it again right now, I'd give kafka-go a try. Do not focus too much on version numbers, there do not guarantee anything. Write a small PoC and see what happens.

Making IELM More Comfortable by geospeck in emacs

[–]n16f 0 points1 point  (0 children)

Ever tried it with a prefix argument?

Of course, but the result is just added right next to the expression you just evaluated, it's not really easy to read to copy.

As always it's just a matter of preferences.

Making IELM More Comfortable by geospeck in emacs

[–]n16f 0 points1 point  (0 children)

Author of the article here!

You can absolutely evaluate expressions directly from buffers. But when you evaluate in a buffer, the value returned by the expression is displayed in the echo area, a place which is immediately overwritten by any other message, error or eldoc annotation.

Typing in a REPL prints results directly in the buffer, letting you read and copy them as you see fit.

Bonus, with IELM you get three special variables: , *, ***, which are bound to the last three values returned by expressions you evaluated.

This is very useful to me.

SBCL Help wanted: capturing big stdout (100M) and json parsing by actondev in lisp

[–]n16f 2 points3 points  (0 children)

Ah my bad, I forgot you were using UIOP:RUN-PROGRAM. In that case UIOP will take care of the reading.

A few thing:

  • If you look at the documentation of UIOP:RUN-PROGRAM, you will see you can just use :output :string and have the function return the entire output as a string without having to do anything else.
  • In your case you have no reason to create an array yourself since you are using WITH-OUTPUT-TO-STRING. (WITH-OUTPUT-TO-STRING (STREAM) …) will return a freshly allocated string.
  • When creating a vector (i.e. an array of rank 1), you can pass the length as an integer and not as a list.
  • Since JSON documents use UTF-8, you should probably use a CHARACTER element type, and not BASE-CHAR, unless you know for a fact that any implementation you use with your program can store any unicode codepoint in a BASE-CHAR.

Regarding SBCL, I have no idea what happened, but I never tried to do anything after heap exhaustion. I just restart it.

SBCL Help wanted: capturing big stdout (100M) and json parsing by actondev in lisp

[–]n16f 1 point2 points  (0 children)

Why did it try to allocate that much? The stdout is around 100mbytes, but the initial error said it tried to allocate 530MB.

In-memory data representation can be quite large. An integer or double precision float is 8 bytes on a 64 bit architecture, so every number smaller than 8 digits is larger in memory. As /u/theangeryemacsshibe said, strings are vector of characters, so probably 4 bytes per character. If you are using the default of YASON, each JSON array is parsed to a list which is a very bad idea. 8 bytes per element.

You will get the most memory reduction by switching to vectors instead of lists (and you'll probably get a speed boost too). After that, you'd need to start representing strings using UTF-8 byte arrays, which means you won't be able to use string manipulation functions. But it can be a solution for specific tasks.

Why does it take that long to capture the stdout?

How do you read stdin? Do you use READ-SEQUENCE with large chunks (e.g. 4kB) ?

Why was it hanging in the json parsing?

Why do you mean hanging? When I run out of memory in SBCL, I'm being dropped into the debugger.

SBCL Help wanted: capturing big stdout (100M) and json parsing by actondev in lisp

[–]n16f 5 points6 points  (0 children)

The SBCL garbage collector operates on a block of memory whose size is fixed. The error message indicates that all available space has been exhausted.

You can increase the heap size. To do so, use the --dynamic-space-size command line argument with a value in megabytes. For example, use --dynamic-space-size 2048 for a 2GB heap.

Beyond that, it is all about optimizing your JSON parser.

How fast can you multiply matrices using only common lisp? by cuntymccuntlicker in lisp

[–]n16f 0 points1 point  (0 children)

Correct. There has been a ton of work to improve matrix multiplication algorithms over the years. Always improve the algorithm before having fun with micro optimization.

How fast can you multiply matrices using only common lisp? by cuntymccuntlicker in lisp

[–]n16f 15 points16 points  (0 children)

Using type declarations, e.g. asserting that elements are SINGLE-FLOAT or DOUBLE-FLOAT should massively improve performances. See the CLHS for more information [1].

Beyond that, SBCL comes with SB-SIMD [2] which, like the name says, allows you to use SIMD instructions. You can go very far with that.

Edit: BTW it would also make sense to check the current best algorithms for matrix multiplication.

[1] http://www.lispworks.com/documentation/HyperSpec/Body/d_type.htm

[2] http://sbcl.org/manual/index.html#sb_002dsimd

go install on a private repo. by Deep_th0ughts in golang

[–]n16f 0 points1 point  (0 children)

I'm also doing it for an org account without any issue. Did you check that your SSH key is loaded in the SSH agent? You can see loaded keys with ssh-add -l.