@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, to scheme
@ramin_hal9001@emacs.ch avatar

To anyone writing programs in right now, this is just a reminder that you can search through a huge cluster of Scheme libraries indexed by procedure name, including all SRFIs, at the https://index.scheme.org/ website. If you need code to do something, try searching by keyword to see if someone has already written it. Most APIs listed there even have Haskell-like types and are tagged as "pure" if they are pure.

Radical_EgoCom, to random
@Radical_EgoCom@mastodon.social avatar

The Capitalist Cycle

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "In American mythology, people are rich because of "hard work" yet nobody can explain why those who do all the actual work have no money."

@bhasic @Radical_EgoCom the scripted reply to this is "some people work smarter, not harder." But then you have to ask, is a CEO really 1000 times smarter than one of his employees, or is it just that how "smart" or "intelligent" a person is is defined by the amount of money they have?

sirlan, to programming

just now thought about something

scratch, the 'language' for teachings kids the basics of , has better first class support for async work than a bunch actual programming languages

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@luis_in_brief @sirlan well, it is easier to do async when there aren't any actual hardware threads to worry about, and it is all happening in a virtual machine.

I prefer Snap because you can do first-class functions, plus they have some pretty incredible lanugage additions like "SciSnap!" which give you access to SQL databases and linear algebra primitives, and they even have an APL implementation. Anyway, Async works the same as in Scratch.

But it does get a little tedius if you need to create more complex chains of async actions, like for doing animation. Then I start to wish it had a good built-in nonlinear editor.

jhx, to xfce
@jhx@fosstodon.org avatar

A very nice launcher (and much more) is rofi.
I use it with to quickly run a application. It is easy to use and the defaults are sane.
Bin it to a keyboard shortcut of your liking and it will be your best buddy soon 😎

https://davatorium.github.io/rofi/

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@jhx @puppygirlhornypost Xfce's own WhiskerMenu (which is a panel app) is also very good, and that is what I use. I have tried Rofi, but for all of the features that I use in a launcher, it did not really provide anything new that was not already present in WhiskerMenu.

ArneBab, (edited ) to random German
@ArneBab@rollenspiel.social avatar

define-typed: a static type syntax-rules macro for to create API contracts and help the JIT compiler create more optimized code:

https://www.draketo.de/software/guile-snippets#define-typed

Improved thanks to feedback from Vivien and Zelphir in the Guile User mailing list.

Just 26 lines to get argument and return value typing without changing Guile.

I love the flexibility of ❤️

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@ArneBab this is awesome! I want to explore this type system a bit myself!

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@ArneBab I have been playing around with monadic code in Guile myself lately, and I can see a fairly easy way to incorporate type checking into my system as well, and you have already given me some ideas here.

What is nice is that if you make use of record types as a kind of Functor, and all of your monadic code constructs functors, and the compiler does constant folding and dead code elimination passes, the optimizer would probably be able to tell right away any time you use a procedure wrapped in the Functor type that a "cond" or "case" expression will always evaluate only along a single branch. So it should be able to eliminate code branches that cannot pass type checking.

But I have more experimentation to do before I can confirm whether this is the case. Also, I don't think those optimizations can apply everywhere, only at top-level declarations. But I could be wrong, it might work in arbitrarily nested closures as well.

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@ArneBab that is precisely what I intend to do. Thanks for that link to David Thompson's article, I don't think I had seen that one before.

noondlyt, to fediverse
@noondlyt@mastodon.social avatar

You know what's nice about here...knowing I can criticize and call out any corporation, politician, or wealth hoarder without being suppressed, hidden, etc at the whim of advertisers or megalomaniacs.

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@noondlyt I like the fact that I can learn about transgender issues and use the word "cisgender" without having my post flagged or my account suspended...

unlike at that other site...

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.

seachanger, (edited ) to random
@seachanger@alaskan.social avatar

For every $1000 you purchase at a small business...

pay by credit card: about $30 to credit card corporation, $970 to small biz

pay by cash or paper check: $1000 to small biz

pay by e-check: about $10 to banks, $990 to small biz

most small businesses have 10-30% profit margin, so a 3% credit card fee may actually be 1/10 -1/3 of their profit on your transaction

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@seachanger but that is just the free market, these don't count as taxes, so its totally OK. (sarcasm)

Seriously, the "small government, less taxes" people are always complaining about the wrong thing.

louis, to linuxmint
@louis@emacs.ch avatar

I jumped ship and hopped over to the Linux Mint crowd. I used Pop_OS for ~3 months and it was an overall good experience on my ThinkPad X1 Gen 8.

But I always liked the Cinnamon desktop as I have used Mint for over a year before. And I didn't want to be part of the Rust-based re-invented desktop experience (COSMIC) driven by a company. Ultimately I believe that Linux is and should continue to be a community effort. Also, there were some minor annoyances (like the Pop_OS store eating up 1.2 GB of RAM all the time even when it is not running, an issue System76 is aware of for quite a while). And also, Snap.

If feels good to be back to a trusted distro whose maintainers generally make the right decisions (i.e. removing Snap).

Let's see how long it will last ;-)

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

@louis I am definitely going to switch from Ubuntu to another distro pretty soon, and I have been torn between standard Debian with Xfce, or Mint with Cinnamon. I think I will go with Xfce because they are mostly keeping up with the latest Gtk. They long ago moved to Gtk+ v3 and are gradually transitioning to Gtk4, probably to prepare for the larger transition to Wayland.

But Cinnamon has forked Gtk+ v2 into its own widget toolkit now, so it is kind of its own platform based on GLib and GObject, and it seems to be quite stable and over all a good user experience. It would be nice to have some of my apps programmed to work with either Cinnamon or Xfce. We will see if they will be able to port it to Wayland without the help of upstream Gtk.

ramin_hal9001, to ubuntu
@ramin_hal9001@emacs.ch avatar

ItsFoss reporting: disappointed with Ubuntu 24.04

The problem: the Ubuntu app store will no longer install ".deb" files, only Snaps. If you are a Linux "power user", this isn't much of an issue, Ubuntu is still based on Debian package management after all, and you can still use the "apt-get" command in the CLI. And you can still install FlatPaks.

But as Abhi points out, this could cause problems for people looking for an alternative to Windows or iOS. They are now pretty strongly locked-in to the Snap format and the Ubuntu's official app store unless they bother to learn about and install alternatives.

I think I am going to start recommending Fedora or Mint as my best Linux distro for beginners from now on.

DrALJONES, to Israel
@DrALJONES@mastodon.social avatar

Report

As many as 300 protesters were arrested in Brooklyn on Tuesday night, where thousands of mostly Jewish New Yorkers gathered for a “Seder in the Streets” to stop arming Israel.

The demonstration was held one block away from the home of Chuck Schumer & came just hours before the Senate overwhelmingly approved $14 billion in arms funding to Israel.

https://www.democracynow.org/2024/4/24/schumer_seder

..

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "As many as 300 protesters were arrested in Brooklyn on Tuesday night, where thousands of mostly Jewish New Yorkers gathered"

@DrALJONES (emphasis my own), and these are the people Joe Biden is calling "antisemitic" when he says shit like:

> "I condemn the antisemitic protests. That's why I have set up a program to deal with that..."

This delusional political double-speak is just getting more and more absurd by the day, I just can't handle this, my reflexive face-palmming is starting to hurt.

sachac, to random
@sachac@emacs.ch avatar

Starting to learn 2x2 blindfolded following J Perm's tutorial. Day 2: I'm slowly getting the hang of moving pieces and moving them back during a sighted solve and I can sometimes close my eyes for one or two pieces in a row. Let's see if I can get the hang of it and if I can keep my brain on-task that long...

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@sachac I know there must be some mnemonic, some "words" you can say to yourself, for the moves of the algorithms that can help you remember how to do them forward and backward. But personally, I have not learned of any mnemonic that I can remember very easily.

Also, I am really bad at recognizing patterns on the cube that would let me predict which algorithm to use in a given situation. I have to apply the procedure and see if it gives me the result. I can't imagine trying to do it blindfolded.

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "For pattern recognition, the tutorials tell you what colours to look for (ex: look for two corners of the same colour on one of the sides, put them in the back, then do this alg)."

@sachac yeah, I guess my problem is that I really only know 3 algorithms for the 3-cube, which is enough to solve it, but I should probably learn more if I want to solve it faster. I know all algorithms are basically "merging" of those basic 3 algorithms, but it limits my ability to recognize patterns and determine which algorithm to apply.

DrALJONES, (edited ) to random
@DrALJONES@mastodon.social avatar

For those enquiring:

A partial list of US client states & their aquisition dates ⬇️

Note Israel, UK, France, Germany, Canada, Japan, Australia, etc. not just the old banana republics.
(some end dates might be missing, eg, Iran, 1979)

Source
https://faculty.washington.edu/majeski/isa03.pap.pdf

..

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@DrALJONES next to "Iran" it should say "ends 1979".

ZacBelado, to firefox
@ZacBelado@hachyderm.io avatar

Giving @librewolf a try. I like the idea of a browser specifically hardened against browser fingerprinting and tracking. Runs all of my existing Firefox plugins with no problems

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@baritone_edge Some of the "hardening" that @ZacBelado is talking about is making sure not to report any information about plugins, installed fonts, or other things, it produces a false report when this information is requested. Also @Apollo2323 LibreWolf forges its signature, making itself appear to be like that of Chrome running on Windows. Occasionally while I use it, I see websites conform themselves to this signature, e.g. offering me Windows versions of apps to download.

I have also heard LibreWolf praised by differently-abled people for its good accessibility features as well.

hanspeter, to random
@hanspeter@emacs.ch avatar

Hmm, how can one write intelligibly on the (web) walls for all to see AND at the same time prevent the 'datavores' (@thegibson) from devouring it and getting stronger by it???
(referring to chatGPT and all..)

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@louis @hanspeter @thegibson I have been meaning to create a procedural nonsense generator from something like GPT2 or some LLM that is small enough to run on a laptop. Then I am going to flood my online content with nonsense at a 1/100 signal/noise ratio and let the LLM scrapers have at it. Of course I'll make it easy for a human to filter out, by placing the noise content in hidden <div>s, or by removing it with a bit of JavaScript, or coloring it the same as the background.

Gopher is a good idea too, I could put non-obfuscated versions of my documents there.

louis, to emacs
@louis@emacs.ch avatar

Haven't used VS Code a single time for over two months now. All Emacs now. Since I switched to LSP mode, Makefiles and Dap.

I think it's time to press the delete button now with confidence.

Congratulations appreciated 🙂

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@louis congratulations! I tried VSCode a few years ago, and honestly it was pretty good. But I won't use it unless you are paying me good money to use it, and besides Emacs has me covered on just about everything.

rml, to emacs
@rml@functional.cafe avatar

about every two years I ditch my init.el and build back up from scratch, and every time it feels great. I'm finally breaking off from org-roam which, for all the good its done me, has become a thorn in my side due to the centralized store. about to give a try, which I've been interested in for a while now.

learning via @ramin_hal9001's presentation a couple years ago at conf
https://emacsconf.org/2022/talks/rolodex/

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@dekkzz76 Hyperbole creates a set of rules for identifying links which are only activated when you press the hyperlink activate key chord "M-RET" key. Of course, Emacs can already assign hyperlink properties to arbitrary text, but Hyperbole provides two advantages over an ordinary hyperlink:

  1. Since the Hyperlink rules are only applied on the "activate" key chord, you can apply very sophisticated rules to just the text under the cursor without having to parse the whole buffer and assign hyperlink properties to text, which would be very slow. This makes the Hyperbole hyperlinking rules much more versatile.
  2. The key chord is enabled as a global minor mode, so the hyperlink rules work in any buffer, regardless of what mode the buffer may be in. It is basically a markdown for links that can be included anywhere. The advantage of markdown is of course that it is human-readable, even if your editor does not recognize it as markdown. So you can include Hyperbole links in the comments of source code, in e-mail messages, or as the output of shell scripts, and the hyperlinks all just work (as long as you are in Emacs).

@rml

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "If I'm understanding links/buttons correctly, it would enable me to create commands from text (and at any point I want to do so)?"

@zyd yes, there are two button markups for calling arbitrary Emacs Lisp commands:

  • Curly bracket-delimited key chords will run whatever command is bound to those key chords, for example {C-20 M-g M-g} will call "goto-line" with 20 as an argument. (Make sure the cursor is placed somewhere within the brackets, not on or before the brackets).

  • Angle bracket notation executes arbitrary Emacs Lisp code within the brackets. (It is safe because you can see what code will be executed.) For example:

    <mark-whole-buffer>

    <eval (save-excursion (goto-char (point-max)) (insert "Hello, world!n"))>

And of course you can define your own functions and commands with descriptive names:

<my/git-fetch-and-pull-here>

@dekkzz76 @rml

louis, to random
@louis@emacs.ch avatar

Or, we could just build our own Mastodon client with Common Lisp.

Took me less time to build this with than desparately trying to fetch that data in the Web UI.

Who knows what this will morph into. :p

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "Or, we could just build our own Mastodon client with Common Lisp."

@louis this would be my solution. Although I would go with Guile Scheme instead of Common Lisp, because of Guix packaging. And I would make a server too, and make it more like Kbin where you can do both Mastodon and Lemmy like posing.

civodul, to random
@civodul@toot.aquilenet.fr avatar

In Nixpkgs, the ‘shepherd’ package is not what I’d expect.
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/sh/shepherd/package.nix

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

@Mehrad @civodul I think if you go to the Guix hompage, there is a "Help" menu, and there are links there to a Guix reference card, the Guix cookbook, and the Guix manual. So this serves as a single entry point, does it not?

Part of the problem is that Guix can be used as an Linux distro and a package manager, and the package manager is highly configurable with various channels. So your "entry point" to Guix might be different from other people, depending on how you want to use it. I think the Guix homepage does a pretty good job of providing resources for general purpose use cases. It seems to me that if you are using the HPC channel, you are not in the group of people who use Guix for general purposes.

> "For example as one of the most confusing parts: there is https://packages.guix.gnu.org/ and https://hpc.guix.info/browse to search for packages, (why?)"

The reason why is because there are multiple channels for packages. I recommend you use Guix command line tools to search for packages, rather than using the websites, because the Guix command line will search all the channels that you have access to, rather than you needing to know which channel provides which package and searching the channel website.

guix package --search='name-of-thing*'

> "Guix extremely relies on info pages. But that is not well known to 99.9% of world population."

For what it's worth, I really love the Info manual pages, it is very easy to find all the information I am looking for in this documentation, as long as you use Emacs (which I do) or the stand-alone "info" CLI utility. All you need to do is use the search features: index search (press "i" and type your query with tab completion) and menu search (type "m" and type your query with tab completion). The "index" is the index of all keywords in the manual, it is good to use if you do not yet know what you are looking for. The "menu" is a list of all documentation subsection titles, it is good to use if you already know what you are looking for.

rml, to random
@rml@functional.cafe avatar

Under communism will be the mandatory first programming language for all aspiring programmers.

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "2023: Guile , Guix

> 2024: Stalin scheme, Red Star OS"

@rml ah, the compiler that single-handedly defeated the Nazis during the second world war. I get the sense that we again have a need nowadays for some good Nazi-smashing technology.

I have never tried Stalin, but I think it is R5RS only, and that would make it a bit difficult to run on the majority of my code which is R7RS.

ramin_hal9001,
@ramin_hal9001@emacs.ch avatar

> "Legend has it that intermittently flashes the word across the screen as a subliminal "fuck you" to the man. I think its working."

@rml "git grep" wont work as-is because it is encoded in the source code with ROT-13, so you would have to grep for the ROT-13 encoded string for "COMMUNISM" in order to find it. They aren't stupid enough to leave a subliminal clue like that as plain text right there in the source code.

LBH UNIR ABGUVAT GB YBFR OHG LBHE PUNVAF

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