@ramin_hal9001@emacs.ch
@ramin_hal9001@emacs.ch avatar

ramin_hal9001

@ramin_hal9001@emacs.ch

I'm just some kind of nerd: software developer, big fan of functional programming, especially Haskell and Scheme. I also love old Macintosh computers. Haskell programming since 2007, Linux user since 2008, Emacs user since 2018. Currently working as an app developer at a small machine learning consultancy. You could call me a "full stack" engineer, but server-side is where I am really in my element.

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

ramin_hal9001, (edited ) to fediverse
@ramin_hal9001@emacs.ch avatar

Why #FediPact is important (1/3)

The #fediverse should all agree to never federate with #Facebook

#FediPact is an agreement between all current Mastodon instances to never federate with #Facebook, in response to the #Meta corporation's recent announcement that they will be making Facebook compatible with the #ActivityPub standard, and thus allow Mastodon and other ActivityPub services to federate with Facebook.

Most of the arguments I hear in favor of federating with Facebook come down to trying to expand the reach of the fediverse and Mastodon in particular. If people on Facebook can interact with Mastodon, this can only grow the fediverse and make it more relevant. This is a failure to recognize the real threat of Meta.

This pro-Facebook sentiment is usually accompanied by accusations of #FediPact supporters being irrationally dogmatic, overly paranoid about advertising and other for-profit ventures, overly concerned with privacy, and/or ignorant of how technology works. The attitude here is "Don't be so paranoid, just try it and you will see the benefits." This is a straw-man argument against #FediPact.

(1/3 continued)

#Mastodon #Kbin #Lemmy #Pixelfed #PeerTube #Fediverse #Facebook #Meta #FediPact

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

I just built and installed ECL (hompage) onto my computer, and after playing around with it for only a few minutes, I am quite impressed with it!

  • First off, the entire installation is only 40 MB, so this is definitely one of the more compact Common Lisp implementations I have ever seen.
  • It emits C code, native shared libraries, native static libraries, and native executables.
  • It uses libffi for C interoperability.
  • It provides ASDF, and the ability to install packages from QuickLisp
  • It implements Lisp standard processes on top of Pthreads
  • It provides some bindings to Qt4 for GUI programming
  • It implements all of CLOS

All of that in just 40 MB (not including Qt, which you need to install separately). The only drawback so far is that the documentation has some gaps in it.

But I definitely want to play around with some more. The trouble is most Common Lisp packages written nowadays only support SBCL. I would like to see how much of the Common Lisp ecosystem I can actually use through ECL. I wonder if I could maybe port something like the Lem text editor over to ECL instead of building it with SBCL, but that might prove impossible.

Anyway, my overall impression right now is that I have a very lightweight but powerful Common Lisp compiler at my disposal now that can easily be embedded into any C program I want, which is very exciting!

Thanks to @screwtape and @rml and @louis for turning me onto ECL!

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

"Oh good, finally some free time! Now I can try writing that code in that I have been wanting write for months!" I say to myself.

(Opens new ".scm" file, M-x geiser-guile<RET>)

"...There. Now I will just open the Guile info-docs in and oh yes, there is the section on HTTP servers..."

(4 hours later...)

  • 40 sections down the reference manual rabbit hole
  • 10 tabs open at Akku
  • 0 lines of code written

"Oh, cool. the guile-lib package has an asynchronous message queue! I can use that... Hmm, it seems there are a few different efforts on Akku to pull in a bunch of portable code into a single library. I had better bookmark these... oh, wow, Guile 3.0 has SRFI-171 (Transducers) built-in now! Amazing! I need to rewrite that algorithm I wrote last time to use Transducers... Oh wow, so when you parse XML you don't need to parse the whole structure into memory, you can use Oleg Kiselyov's SSAX framework and just supply callbacks that are triggered as each part of the tree is parsed, discarding the parts you don't need... so now how do you... oh, NOW I get it! So the (cond ((VALUE GUARD => LAMBDA))) syntax specified in SRFI-61 lets you test the value then applies it to a function if the test passes! So you can combine that with things like Transducers and SSAX to create super-advanced queries over various data structures... now this is starting to make sense..." (falls asleep at desk)

ramin_hal9001, to python
@ramin_hal9001@emacs.ch avatar

Yet another rant about Python and JavaScript:

I hate it when someone tells me, "well Python and JavaScript can be programmed in functional programming style, so they are just as good as any other functional programming language," and "something something objects are the same thing as closures."

Then my program crashes and I spend 20 minutes debugging only to find that for the 100th time I wrote a method like this:

def getThing(self): self.thing

instead of like this:

def getThing(self): return self.thing

...where basically the problem is most of my program is written in functional programming style, except you STILL have to write the fucking "return" statement as the last line of the function.

If your language has "return" as a built-in control flow, it is hopelessly imperative not functional, and there is not a single monad framework or higher-order-function library anywhere that will make your language functional.

Stop telling me imperative languages like Python and JavaScript are just as good as functional languages, they are objectively worse than functional languages.

ramin_hal9001, to reddit
@ramin_hal9001@emacs.ch avatar

Reddit Threatens to Remove Moderators From Subreddits Continuing Apollo-Related Blackouts

(quoting the article)

> "As some subreddits continue blackouts to protest Reddit's plans to charge high prices for its API, Reddit has informed the moderators of those subreddits that it has plans to replace resistant moderation teams to keep spaces 'open and accessible to users.'"

#Reddit #RedditMigration

ramin_hal9001, to Lisp
@ramin_hal9001@emacs.ch avatar

The Scheme language's small size isn't necessarily a strength

So I was reading through part of the EmacsWiki and in the article on the Scheme programming language there are references to this ancient online debate from August of the year 2000 at the comp.lang.lisp Usenet group started by the late Erik Naggum, who was apparently a somewhat opinionated and inflammatory individual, who brought up the Scheme/Common Lisp debate on comment thread about someone being confused about how the CASE clause works.

The Scheme language standard at the time was R5RS, Naggum's argument is a common refrain from Scheme fans such as myself, and he was arguing with Kent Pitman ( @kentpitman ) who was one of the sub-committee chairs of the Common Lisp X3J13 standardization process, and is the editor and maintainer of the Common Lisp HyperSpec, an online form of the Common Lisp specification. Kent Pittman's reply I thought was very well-reasoned, and worth re-posting here (quote):

I just absolutely don't believe the Scheme standard is fairly cited as a model of a "better" standard. It is enormously vague on numerous matters of consequence. It omits really essential functionality that would be needed to write any seriously portable programs. It was stagnant for years on quibbles over some of the silliest syntax details. In my opinion, it's a toy language. There are real commercial Scheme implementations, but only by the sheer will of those implementers who've gone beyond the so-called standard and written in the things that the standard ought to have said in order to make the language finally useful. It achieves its "prettiness" and its "smallness" on the back of just plain leaving stuff out where it would appear to "clutter", and whatever you think of CL, I personally reject any claim that the Scheme is a model of improvement.

(end quote)

I wouldn't go so far as to call Scheme a "toy language" because the parts of the standard that are well-defined are solid and very useful. But yes, it seems the only useful implementations do solve these problems not addressed by the standard in completely different ways that makes it very difficult to write a Scheme program on one implementation that runs on another. Try to write one program that runs on MIT Scheme, Guile, Chez, Racket, Bigloo, Cyclone, Stklos, and Gambit. Try to even compute what set of SRFI (language extensions) are common to all of them. Most Scheme programmers have to pick just one implementation and stick to it without much hope of ever porting their programs to other implementations. It is possible to do it, easier than porting a program from Python to C++, but still not at all as easy as running the same Common Lisp program on SBCL, ECL, ABCL, or Franz.

So I do agree with @kentpitman that there are some pretty important details left up to the implementers simply because none of them could agree on what to do and punted the issue rather than resolve it. Later (after the aforementioned Usenet debate) R6RS would try to solve these issues, but that standard was mostly rejected by the larger part of the Scheme community due to a lack of consensus. Much of that work lives on in the SRFIs, while Chez Scheme (R. Kent Dybvig) seems to be sticking to R6RS and is one of the most well-respected Scheme implementations, and a kind of flagship of that standard.

I still have hope for R7RS-large though, which might end up being even larger than X3J13 when all is said and done. Unfortunately, recently John Cowan, chair of the R7RS-large standardization committee threw his hands up in resignation a few months ago after almost 10 years of trying to hammer-out consensus over details of the new R7RS-large standard. Daphne Preston Kendal ( @dpk ) has taken over and is fully capable of continuing the work.

It might be interesting if some Schemers could get together and write a new fully R7RS-compliant Scheme-to-Scheme compiler in R7RS-small Scheme, with all of the COND-EXPAND expressions in place to run on all of the major R7RS-compatible Scheme implementations. This compiler would simply translate its input into code that the host Scheme compiler can compile, deferring low-level implementation details to the host. The compiler should be one massive file that you could just load into any Scheme compiler and it just works. Then this compiler maybe, just maybe could become The Scheme Standard. A good starting point would be the work of Marc Nieper-Wißkirchen who has written Rapid Scheme which compiles R7RS Scheme to another host Scheme, but it only supports Chibi and Larceny as the hosts.

ramin_hal9001, to cpp
@ramin_hal9001@emacs.ch avatar

C++ is everywhere, that makes ECL very valuable.

The software industry, especially in the realm of free software, has mostly settled on a pattern of using C++ for creating performance critical libraries, and creating Python binding to the C++ libraries for scripting. I was hoping Rust might come along and change all this, but it will take decades.

In the mean time, if you want to use C++ but not actually write C++, you can make use of the ECL Common Lisp compiler, which can compile Lisp to C++ code. This gives you all the best features of Common Lisp for programming with the universe of C++ code libraries available to you. You can use a C++ library and still have Common Lisp macros, garbage collection, high-level scripting, S-expressions as serialization, domain specific languages, a proper meta-object protocol that wraps C++ classes nicely, and wealth of choices for functional programming systems from the untyped lambda calculus all the way up the lambda cube to System-F and the Calculus of Constructs. This not only makes ECL a viable alternative to Python for scripting and app development, but objectively better than Python since you can actually turn your Common Lisp scripts into code that gets compiled into a larger C++ application.

With ECL I would have all sorts of C++ libraries available to me:

  • game engines like Unreal and Godot
  • 3D modeling: FreeCAD, OpenSCAD, Blender
  • Machine learning, big data, and HPC with PyTorch, TensorFlow, OpenCV, OpenCL

I will continue to contribute to the Scheme and Haskell communities as much as I can. I will continue to pursue my dream of an Xfce-like desktop environment written in Scheme. But no matter how I look at it, I am going to more productive in the long run using ECL and C++.

I was hoping that the software industry would gradually shift over to better, more functional languages like Rust and Haskell. And I would love it if Scheme languages could ever begin to seriously replace Python as a scripting language. But realistically, I think I am going to change tack and meet the industry half way. I think I should probably start using ECL as my language of choice, as much as I would prefer Scheme or an ML-family language like Haskell.

ramin_hal9001, to threads
@ramin_hal9001@emacs.ch avatar

is / using the old 4-E strategy strategy to destroy Mastodon:

  1. Embrace: what they are doing now, launch a competing but compatible service with that of Mastodon. The vast majority of users, most of whom don't care about the privacy and intimacy of the Mastodon network will go with the brand with the most name recognition.
  2. Extend: attract users to their centralized network with features like search, which they have the resources to do but the rest of the Mastodon network does not. But also include features for tracking and advertising, sell this as a good thing, "a better place to grow your perasonal brand, your business."
  3. Extinguish: after attracting a critical mass of users large enough to decimate the user base of the competing Mastodon network, queitly remove compatibility with the Mastodon network, this will effect only 10% of Mastodon users because the other 90% will be on Threads. "Who cares if we lose contact with that tiny minority of old Mastodon users, they should have just joined Threads by now anyways, they still can. It has search, and more people voted for it with their patronage it, and you don't have to think about what instance to join, its easier!"
  4. Enshittification: without any real competition to keep people from leaving for an alternative, start exploiting users for more and more content for ad revenue, exploit advertisers with ever-increasing costs of ad revenue.

They are scared to death about losing control over the Internet that they had gained over the past 15 years or so, and they are fighting to take that control back for themselves. We built this, but now a corporation like Meta/Facebook feels they have the right to exploit it for all its riches until it is destroyed.

Don't let it happen. is the only way to protect our home-grown community from corporate take-over.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

I have an unhealthy addiction to relatively obscure computers that I probably wouldn't actually use very much. Here is the latest one that the little voice in my head is telling me I need to buy so I can get my fix: the HiFive Pro P550 running the RISC-V ISA:

  • MicroATX form factor
  • 4-core 2.2 GHz
  • 16GB DDR5
  • Gigabit ethernet
  • PCIe expansion slot
  • NVMe

And it should be able to run Guix OS. The thing is, I don't really hack on operating systems or compilers very often, so I would only be using it as an ordinary end-user with the limited software available for it, which I can do right now, and with more available software, using any old x86_64 computer.

So logically, I don't actually need an awesome high-powered RISC-V development board for anything. But that doesn't stop me from seriously considering buying one.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

There is an old joke about the #Scheme programming language, that it is the only language with more implementations than there are users.

It's funny because it is very nearly the truth. 81 different choices for implementations!? Are you fucking kidding me?

#FunctionalProgramming #ProgrammingLanguage

ramin_hal9001, to emacs
@ramin_hal9001@emacs.ch avatar

#Magit is too easy to use sometimes: almost lost an important bug fix to a hard reset

I was trying to reset just one file, for that you press X f but I absentmindedly pushed X h instead which deleted all changes. Fortunately #Emacs saved me, I was able to remember all of the files I had changed, visit each of those buffers and press C-/ (undo) in each of them to recover my work. The correct copy of my files were on the Undo stack. I can see why some people love those backup files with the tilde characters at the end of the file name.

But then again, #Emacs , or rather #Magit was the problem to begin with. Is there any way to configure it to ask for confirmation before doing a hard reset?

ramin_hal9001, to scheme
@ramin_hal9001@emacs.ch avatar

Playing around with Guile/Goblins: so much fun!

I have learned a lot about the Guile platform recently, and it is starting to feel a bit more familiar to me now. The programming language does have support for multithreading, but in classic Scheme fashion, is much more minimal than what something like provides (Haskell concurrency is what I know best). What Haskell calls a "mutex variable" or MVar is actually a combination of two fundamental components: "mutexs" and "condition variables." After coding my own Haskell-like MVar, I feel like I understand Scheme multithreading well enough to implement any concurrent algorithm...

...which I don't need to do because Guile Scheme provides just about every single algorithm to you already, between Andy Wingo's (@wingo) Fibers library, and the Actors Library, which they describe as "a standard library of sorts ... for a variety of common actor model patterns." I can see why @cwebber occasionally shows bouts of hubris over this project, it is truly an achievement! With a little more work, Guile could become a fully networked software platform, like the World Wide Web itself.

I am also working with the Guile-GI library to program GUIs using Gtk. At the moment I am trying to figure out how to define my own class of Goblins "Vat" objects using GLib Threads so I can run a Gtk application within a Vat. I want to update the Gtk Application view from the Scheme REPL. (Any help is appreciated.)

(Shout-out to @spritelyinst )

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

EDIT 2023-11-13:

I am soft-deleting this post because of recent controversy around the Nivenly project all detailed here: https://twokitties.neocities.org/

(Original post)

Keeping bad actors away from the is a problem that cannot be solved with alone. However technology is one tool we can use to reduce the negative impact of bad actors as a first line of defense.

For anyone interested using technology for keeping bad actors off of and the fedeiverse to the greatest extent possible, check out (at)Are0h(at)ubiqueros.com website: https://thebad.space/about . It has an block-list API which in my opinion should be incorporated into the Mastodon reference implementation to make it easier for instance maintainers and system operators to share and coordinate efforts. Since (as far as I can see, at the time of this writing) these features are NOT built-in to the current Mastodon reference implementation, which shows an unfortunate lack of concern and understanding by the maintainers of mastodon.social, we have to resort to these round-about means to keep malicious users from attacking our communities.

Also related is the work of @oliphant who has created a similar blocklist: https://writer.oliphant.social/oliphant/the-oliphant-social-blocklist

ramin_hal9001, to Futurology
@ramin_hal9001@emacs.ch avatar

Just a thought on and and : I am kind of seeing a classic worker/proletarian versus capital/aristocracy split here. As soon as Threads went online they got like 30 million new users within the first day or two, and notably, they have already collected almost all corporate brand accounts, celebrities, and mainstream media talking heads, especially those dissatisfied with and his new trajectory for . After that, they got a sizeable number of and users who were curious and maybe excited to see their favorite brands and celebrities on "the new Twitter."

So I guess that is how it is going to be from now on? The and democracy (the poor) versus the various and services and autocracy (the rich)?

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

(Via @futurebird ) So Republican lawmakers in Iowa appear to be (effectively) rolling dice to decide which books to ban from schools now.

> "Frankly, we have more important things to do than spend a lot of time trying to figure out how to protect kids from books," (emphasis mine)

> "We are confident this process will ensure the spirit of the law is enacted here in Mason City,"

> "For those titles within Mason City’s library collections, administrators asked ChatGPT the specific language of Iowa’s new law, "Does [book] contain a description or depiction of a sex act?"

> "If the answer was yes, the book will be removed from circulation and stored,"

You can't make this shit up.

They could also complain that the neural network has bias set by their political opponents, and then train a neural network on a data set constructed by "the right kind of people" who want to ban books of any kind and ask it whether it contains objectionable material.

I have seen humans do more elaborate things than that to try and justify various acts of oppression. All you need to do is come up with a seemingly "objective" process of justifying your every psychotic whim, and you can trick most people into thinking your psychotic behavior is perfectly logical and reasonable.

ramin_hal9001, to opengl
@ramin_hal9001@emacs.ch avatar

Question:

Does anyone know of an APL compiler or transpiler that can generated Vulkan or OpenGL shader scripts? (Free/libre would be most appreciated.) I think Aaron Hsu might have engineered something like this at some point, but I can't find anything about it at all right now, probably thanks to our amazing new "AI-enhanced" search engines.

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

David Pierce of

It is nice he thinks ActivityPub is the Internet of the future, calling it "the post-platform" world in which journalists, individuals, organizations all run their own ActivityPub services rather than create accounts on platforms like Ex-Twitter or Facebook. But his perspective is still limited to a world where all applications run on the HTTP protocol with DNS identifying services. He talks about the "Post On (your) Own (host), Syndicate Everywhere" (POSSE) model, and how organizations and individuals can deploy Mastodon instances on their own servers. They also interviewed @pluralistic (Cory Doctorow) which was nice.

They really should have interviewed the @spritelyinst folks to see the real Internet of the future, in which HTTP is replaced with the Object Capability Network (OCapN). But to be fair, this tech is still pretty new and maybe not yet to the point where tech journalists at The Verge would be interested in doing articles about it.

ramin_hal9001, to linux
@ramin_hal9001@emacs.ch avatar

Guix maintainers Janneke Nieuwenhuizen @janneke and Ludovic Courtès @civodul have announced just today that their "seed" C compiler "Mes" is now in production in Guix OS. Mes can, after several boostraping stages eventually compile GCC which in turn compiles Linux, Guile, and Guix. The bootstrap program (as I understand it) is written in Guile Scheme, and compiles to a 357 byte binary. Now when you do guix pull you will see that the entirety of the core operating system (some 22,000 expressions) all depend on that single 357-byte bootstrap program. The idea is to eliminate the footprint of trusted binaries that build the software for the OS and compiler toolchain -- the famous "Trusting Trust" problem outlined by Ken Thompson which he presented while receiving his Turing Award. Thanks to their hard work, we now have an operating system for which every stage of the build can be verified by a human. https://guix.gnu.org/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/

Nix OS people do not need to feel left out, a new issue on the Nix OS GitHub page has announced that they will begin a similar project. https://github.com/NixOS/nixpkgs/pull/227914

ramin_hal9001, to emacs
@ramin_hal9001@emacs.ch avatar

tip of the week

Yet another serendipitous accident that taught me something today.

So if you use Emacs to develop software, you probably know about the M-x compile command, which captures the log of whatever command you run and uses regular expressions to find mentions errors, along with the files (and line and column numbers) at which the error occurred.

What I just learned: you can navigate around errors in your code very rapidly by keeping your cursor in the *compilation* buffer. Use these keys to navigate quickly:

  • "C-o" has the same action as when used in Occur-mode or Dired-mode: when on an error message, similar to pressing Enter, this shows exactly where the error occurred in the source code but without moving the cursor to the file, so you can stay in the *compilation* buffer and continue navigating.
  • "M-n" and "M-p" to jump the cursor to the next error or previous error, same thing as pressing the tab key or shift tab key, but lets you keep your fingers on the navigation keys.
  • "M-{" and "M-}" to jump to the next file or previous file. These are the same keys used by Dired to jump between marked files. Compiler errors are almost always clustered by file, and there may be dozens of errors in one file. Often, all errors can by triggered by a single error. The "M-{" and "M-}" keys let you jump over these clusters.

This is so great for navigating stack traces!

I jump over to the *compilation* buffer, jump to the bottom of the log pressing ">" (greater-than), then "M-p" to jump to the bottom of the stack.

I press "C-o" to view the cause of the error. "Hmm, why is the X variable less than zero, what called this function?" I press "M-p" to go up the stack and "C-o" again to see the function that called this one. "Hmm, I got X from this structure, but this structure was passed as an argument from where?" (I press "M-p") "I didn't write that code..." (presses "M-{") "...not my code..." (presses "M-p C-o") Oh! Silly me, I wrote "(pt - len)" instead of "(len - pt)" in the constructor there!

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

PC world has an article here about whether you can use a VPN to circumvent the .

No. Just, no. Not , nor any other technology is a solution, because the problem is much deeper than that. The US banning TikTok is just the beginning, they will simply continue expanding of any content the government finds objectionable. We may soon find governments like the US passing legislation that running an server of any kind is illegal "terrorist activity" before long, and all NATO countries will follow suit (they must, or else risk losing NATO membership).

And of course the stated reason for the US blocking whole portions of the Internet is for "cypersecurity" reasons. Anyone with half a brain knows the real reason is to try to prevent sharing knowledge across borders, because that is the real threat to the politicians and their bosses.

It is really no different than what countries like China does with their Great Firewall, or what Iran does whitelisting only certain blocks of the Internet that exists outside of their borders, also for "cybersecurity" reasons. Of course the US government will continue to cite censorship of free speech as a reason that countries like China or Iran are inherently evil. This deranged political double-speak is the norm nowadays, as "antisemitism" is used as a justification to arrest Jewish people who protest war at their universities, but I digress.

ramin_hal9001, to FreeBSD
@ramin_hal9001@emacs.ch avatar

A pretty thorough write-up on the differences between FreeBSD and OpenBSD

OpenBSD and FreeBSD are two operating systems that have unique features and differences. OpenBSD is a security-focused operating system that emphasizes cryptography, whereas FreeBSD is more geared towards performance and scalability. Both are free and open-source, but each has a distinct user base and target market.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

I just ran across the FAQ for the Carnegie Melon University Common Lisp (CMUCL) compiler, and I saw one item (item 4) that made me chuckle:

Q: Why does CMUCL say it's called Python 1.1 when it starts up? Isn't that the name of a scripting language?

A: The CMUCL native code compiler is called Python. This use of the name predates the existence of that other scripting language.

ramin_hal9001, to FreeBSD
@ramin_hal9001@emacs.ch avatar

WTF? You can use on now?!?!

It's the sysutils/nix package... er, "port" or whatever. This could be awesome, because I would be able to have reproducible builds an an operating system that provides support, which on is possible but still a bit experimental. And also you can make use of "jails" or "zones" as app containers, which on is not possible at all. (And no Docker doesn't even come close to providing the isolation and security features that BSD jails provides.)

But still, so many questions...

  • so when you install stuff using Nix, does it still build it using the Clang compiler that FreeBSD uses for the rest of it's stuff? Or does it force you to use the from Nix Packages?
  • Is there an easy way to configure which compiler you want to use for building all of your stuff?
  • Or (and I hope this is not the case, but) does it make use of some kind of BSD comparability layer for Linux kind of like what WSL2 does on Windows? I wouldn't think so, but it is possible that this is how it works.
  • Is it possible to build Nix packages into BSD jail? I know Nix provides support for creating Docker containers, but is there support for jails?
  • Is there a Nix expression that can construct a Nix derivation from a BSD "port" itself? I would assume so, but then, not necessarily.
ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

Just a reminder:

The word coined by Cory Doctorow ( @pluralistic ) does not mean "degrades in quality." It means more specifically, a product or service that degrades in quality due to revenue streams depending on selling ads to audiences. Perhaps over time it might come to mean more generally a product or service that degrades in quality due to stingy corporate managers cutting corners and eliminating the good bits of a product or service to increase profit margins. Feel free to read Doctorow's book Chokepoint Captialism to learn more.

I mention it only because I just had a most unpleasant conversation with some reactionary who seems to be trying to appropriate the term "enshittification" to simply mean "degrading in quality." My concern here is that these reactionaries want to erase from the word's meaning any evocation of Doctorow's more specific critique of products/services that profit from ad revenue, and maybe also to spread fear, uncertainty, and doubt about federated alternatives like Lemmy or Mastodon (they were talking about the "enshittification" of Mastodon and Lemmy, which is pure nonsense).

Please be aware. Thanks for your time.

ramin_hal9001, to scheme
@ramin_hal9001@emacs.ch avatar

I have been giving MIT/GNU Scheme a try

TL;DR it is pretty amazing!

According to the Ecraven's Scheme benchmarks, MIT/GNU Scheme is the 6th fastest major Scheme implementation (Guile is the 7th), and I have found it has several incredibly nice, ergonomic features unique to it. It even has its own text editor built-in (Edwin) which is a clone of Emacs 18, so it is quite archaic, but still gets the job done when you need to debug your Scheme programs. MIT/GNU Scheme is also quite minimal, which is good, but it unfortunately does not have as big a package ecosystem as Guile, Racket, or Chez.

I wrote a library for Functional Lenses in Guile Scheme, and I was going out of my way to stick to the R7RS standard, and to only use SRFIs (official Scheme language extensions), and not use absolutely any feature specific to Guile or the Guile namespaces. Then I tried to port my library to MIT/GNU Scheme, putting in the necessary "cond-expand" expressions... and it didn't work at all, even though MIT/GNU Scheme is in fact R7RS compliant. To be fair, I could probably make it work with a little more effort, for example, I have not yet learned how to use the debugger, and without the debugger, MIT/GNU Scheme tells you nothing when an error occurs.

I am just a little disappointed with how much effort it takes to make a R7RS compliant Scheme program work across just two different implementations. I hope I might have more luck building it with Larceny, Gambit, Racket/CS, Loko, and STklos. If I ever get my Lens library to work across all of the R7RS compatible implementations listed at docs.scheme.org, I'll report on what steps I had to take in order to make my R7RS Scheme code truly portable.

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