605 private links
I just realized why my plays keep re-running roles when running a certain role.
It is because I have dutifully replicated the same parameters used in the play for each role in the dependencies
list, which includes the tags
parameter.
So when I call the play with --tags R
, the R
role (which is tagged eponymously) triggers, but also any role in the play which lists R
in its dependencies
, because I tagged the dependencies!
The solution is obvious and I am embarrassed it has taking me so long to realize: do not tag roles in the dependencies
list!
Considered because I was trying to answer the question:
Can we use a different R version per directory/project?
With my R role it has been easy to maintain multiple different R versions on a server. But I have not really been able to pick-and-choose which R version to use with any particular project since there was only one version symlinked globally (/usr/local/bin/R -> ...
).
Could we not set a different version locally, in a particular R project?
- https://github.com/r-lib/rig - this would do it, but does much more than I want, would interfere with my Ansible role
- https://www.monicathieu.com/posts/2024-05-21-multiple-r-versions.html
- https://support.posit.co/hc/en-us/articles/200486138-Changing-R-versions-for-the-RStudio-Desktop-IDE -
export RSTUDIO_WHICH_R=/usr/local/bin/R
- https://github.com/vubiostat/Renv - good, but last commit 13 yrs ago
- https://direnv.net - this probably fits the bill
- https://github.com/hyperupcall/autoenv - similar to
direnv
but smaller in scope - https://github.com/jdx/mise - direnv, make and asdf all in one tool https://news.ycombinator.com/item?id=34583080
- https://github.com/untitaker/quickenv - like
direnv
but less intrusive, more light-weight - https://asdf-vm.com
- https://modules.sourceforge.net - Environment Modules, the OG in this space
apt install modules
- https://github.com/TACC/Lmod - LMod, this is what's used by UPPMAX
asdf
After reading about it a little, I get the feeling it would be more cumbersome than direnv
.
I am not sure I understood correctly, but sounds like the R plugin actually wants to manage the
entire R installation (essentially what rig
does).
- https://github.com/asdf-vm/asdf
- https://asdf-vm.com/guide/introduction.html
- https://github.com/asdf-community/asdf-r - community plugin for R
direnv
I cannot find anyone talking about direnv
with R
on the web. Weird.
- https://direnv.net/#man/direnv.1
- https://direnv.net/#man/direnv-stdlib.1
- https://perrotta.dev/2022/01/direnv-automate-your-environment-variables
- https://rnorth.org/practical-direnv
- https://rnorth.org/more-practical-direnv
- https://pinnsg.com/direnv-take-control-of-your-development-environment
- https://www.digitalocean.com/community/tutorials/how-to-manage-python-with-pyenv-and-direnv
- https://shivamarora.medium.com/a-guide-to-manage-your-environment-variables-in-a-better-way-using-direnv-2c1cd475c8e
- https://platfrastructure.life/post/direnv
- https://github.com/direnv/direnv/issues/73 - some quite interesting example code here
- https://thelinuxcode.com/managing-per-directory-environment-variables-effortlessly-with-direnv
[So what I want] is a "shim" binary that dispatch to the desired binary
https://mise.jdx.dev/dev-tools/shims.htmlThe
.envrc
file is treated like a shell script, where you can also list arbitrary
shell commands that you want to be executed when you enter a project directory.
http://rednafi.com/misc/direnv/#why-envrc-file-and-not-just-a-plain-env-file
My direnv example
Machine in question is Ubuntu 22.04 x64.
$ apt install direnv
$ printf 'if hash direnv >/dev/null 2>&1; then\n eval \"$(direnv hook bash)\"\nfi' >> ~/.bashrc
In the R project directory, I created a subdirectory bin
(for convenience) and created a symlink to the R
binary I wanted, naming it R
. Also added this subdirectory to .gitignore
(and .Rbuildignore
if it's an R package).
In the package directory I created .envrc
containing simply:
PATH_add bin
And enabled with direnv allow
the first time I cd
into the directory.
Now the R
command defined in bin
successfully overrides the system-wide command:
$ ls -l `which R`
lrwxrwxrwx 1 taha taha 18 maj 3 21:47 /media/bay/R/periodicdata/bin/R -> /opt/R/4.5.0/bin/R
Note that this works in the terminal. I am pretty sure we will need to do more to have IDEs such as RStudio Server or Codium Server take heed on a per-directory basis. Will investigate further as time permits.
Support for direnv in RStudio Server, Codium, et al.
code-server
just works. Well, except for the "Attach R" button, which still only uses the system-wide R binary.
VSCodium would have worked, except I installed and configured direnv
on the server, and VSCodium runs on my desktop. Expected, and easily fixed by installing and configuring direnv
on the desktop too, if desired.
VSCodium with the Remote SSH plugin. It's complicated. Seems the languageserver
component (which the VSCodium R plugin uses) sees the system-wide R binary, despite definitely picking up on the directory-specific renv
.
And the VSCodium "Attach R" button (in the statusbar) works but attaches the system-wide R binary. But running R
in the built-in terminal respects our direnv
config.
RStudio Server fares similarly, in that the built-in terminal behaves like any terminal and respects our direnv config, but the built-in "R Console" does not, and neither do the other built-in buttons etc. But it feels worse because a lot of stuff will automatically run in the Console and thus use the wrong R version. Unfortunately Posit still to this day lock their "multiple versions of R" functionality behind a "Pro" license.
I guess one (really ugly) work-around would be to run multiple RStudio Server instances, each with a hard-coded R version: export RSTUDIO_WHICH_R=...
. For R package development it's primarily R-release and R-devel that matters, so it's not unworkable. And I have been known to run multiple instances anyway (one per LXC container).
More links and notes
- https://github.com/rstudio/renv/issues/254 - How to deal with different versions of R?
- https://stackoverflow.com/questions/63291613/how-to-set-r-version-in-rproj-file - that's not possible
- https://support.posit.co/hc/en-us/articles/200486138-Changing-R-versions-for-the-RStudio-Desktop-IDE
R versions
At present 2025-05-03:
- R-devel is NA
- R-patched is NA
- R-release is 4.5.0
- R-oldrel is 4.4.3
This is best determined using the rversions::
package!
Play this unique twist on the classic snake game, where your mission is to eat as many apples as you can given their location and navigate the globe.
This was fun :-)
Perhaps the snake moves a tad too fast for my liking, but I imagine that could depend on clock speed or similar.
Via https://googlemapsmania.blogspot.com/2025/04/snakes-on-planet.html?m=1
Something I would like to be able to do: mirror all my issues that I own from across various code forges (Github, Codeberg, etc.) into a single list of my choosing, for example, as an RSS feed or a Markdown list or whatever.
Actually, as RSS feeds this already works (one feed per forge).
But what I have in mind would go further than that. Ideally, any tags associated with each issue should be visible, and full-text search should be possible. Also, the list should clearly indicate closed issues as such.
The point is, to have a single place to check to remind myself of any issues I have opened. This kind of mirroring would also insulate you from short-term service interruptions on the forge, assuming the project in questionn is still available locally (which it always is, thanks to git). But moreso, this would also help as a sort of backup in case the forge went away completely (say Github gets sold and scuppered, or whatever).
I am considering this today because I just spent the better part of the afternoon moving, manually, "tasks" from my Nextcloud instance to their proper place as issues on my Codeberg repos.
I don't know how to achieve this. I am pretty sure it needs to involve authentication to each forge. Is anyone aware of some existing work in this vein?
Links
- https://github.com/jlord/offline-issues Here is a rudimentary Node.js project. Unfortunately does not appear maintained, last commit 8 years ago. Only for Github, and requires your password (no auth token support).
Post and vote for questions or messages using mobile phones or other internet devices during large lectures, classes, meetups, or conferences: free-of-charge, anonymous, ad-free, easy-to-use.
Huh, neat.
I'm not sure if the source code is openly published, but there's a derivative code-base (Dockerized version) that is. The author of the original website is Prof. Dr. Thorsten Thormählen at Marburg University, where the website is also hosted.
Personally I prefer Ansible to Docker/Docker Compose every day of the week. But some projects make it really hard to extract them from Docker's grip.
- https://www.ansible.com/blog/how-i-switched-from-docker-compose-to-pure-ansible
- https://stackoverflow.com/questions/62452039/how-to-run-docker-compose-commands-with-ansible
- https://dev.to/kuwv/why-i-use-ansible-over-docker-compose-edg
- https://docs.ansible.com/ansible/latest/collections/community/docker/docker_compose_module.html
- https://techviewleo.com/manage-docker-containers-with-ansible
This is something I'm still collecting more information on. If you have any tips, please do bother me.
Google's strangehold on casting is seriously annoying. Alternatives?
RaspiCast
- https://github.com/HaarigerHarald/omxiv - archived repo since 2023-05
- https://github.com/HaarigerHarald/raspicast - source code for Android app, last commit 2 yrs ago
- https://www.instructables.com/Raspberry-Pi-As-Chromecast-Alternative-Raspicast
PiCast
Has to be considered no longer maintained. May or may not actually work at this point.
- https://github.com/lanceseidman/PiCAST - last commit 8 yrs ago
- https://pypi.org/project/picast
PyCaster
Built on PiCast and youtube-dl
using NodeJS.
You connect to the Pi, the server-side JavaScripts delivers a simple webpage. The communication is done in real time thanks to the socket.io library. Your browser connects to the Pi, you send the URL you want to stream, and the Pi streams it for you through omxplayer and youtube-dl.
- https://github.com/DevonLian/PYCASTER - last commit 8 yrs ago
Pipecast
- https://github.com/TeamNewPipe/PipeCast - archived repo since 2022-11. By the NewPipe team.
- https://news.ycombinator.com/item?id=23873892
NymphCast
Alpha stage. But interesting, worth testing it. They already offer Android APK and server software which could run on a Raspberry Pi, for example.
- https://github.com/MayaPosch/NymphCast - 2.5k stars, 80 forks, last commit 3 months ago
- http://nyanko.ws/nymphcast.php
So it seems that around 2020 there was a flurry of posts about this project, describing it as "alpha". So the fact that the project is still alpha five years later is perhaps not very encouraging. But it is still actively developed, which is more than you can say about most other projects in this field. The Google stranglehold on casting continues to be heavily felt, unfortunately.
- https://features.jellyfin.org/posts/1706/nymphcast-the-gentlepersons-google-cast
- https://old.reddit.com/r/linux/comments/fhdnav/nymphcast_an_opensource_alternative_to_chromecast
- https://news.ycombinator.com/item?id=27482699
- https://audiophilestyle.com/forums/topic/58714-nymphcast-network-audio-chromecast-replacement
- https://www.opensourceforu.com/2020/03/open-source-nymphcast-lets-you-use-raspberry-pi-like-a-chromecast
- https://www.tomshardware.com/news/using-raspberry-pi-like-a-chromecast-open-source-nymphcast-project-makes-it-happen
- https://old.reddit.com/r/selfhosted/comments/ter8fx/nymphcast_an_opensource_chromecast_alternative
- https://news.ycombinator.com/item?id=22457351
- https://old.reddit.com/r/raspberry_pi/comments/flgzu1/nymphcast_an_opensource_alternative_to_chromecast
MPV Cast for Jellyfin
Strictly Jellyfin only, but works nicely by casting from the Jellyfin Android app to the computer (by playing the video using mpv
). Does not yet support IP-TV though (see issues 237 and 303).
- https://github.com/jellyfin/jellyfin-mpv-shim
- https://github.com/jellyfin/jellyfin-mpv-shim/issues/303
- https://github.com/jellyfin/jellyfin-mpv-shim/issues/237
Mirrorcast
- https://github.com/ASHS-School/mirrorcast - last commit 7 yrs ago, 49 stars, 7 forks
AirTame
Proprietary dongle with a proprietary app. Pricing really only meant for businesses.
Supports AirPlay, Miracast and Google Cast.
TeeWe 2
Proprietary dongle. It was sold in India around 2015. Very likely long since dead.
- https://www.crazyengineers.com/threads/teewe-2-review-this-hdmi-dongle-packs-a-punch-for-the-price.81277
- https://www.purevpn.com/blog/best-chromecast-alternatives
iPazzPort Cast
It's just a Miracast dongle. Out of stock and probably long dead. Chinese no-name webstore.
- https://www.ipazzport.com/product-category/ipazzport-cast/miracast-dongle
- https://www.purevpn.com/blog/best-chromecast-alternatives
TV Buddy Caster
Looks like vaporware.
- https://old.reddit.com/r/TVDetails/comments/g175t4/tv_buddy_is_it_legit_or_is_it_a_scam
- https://www.amazon.ca/Streaming-Smartphone-Widescreen-AirMirror-Cross-System/dp/B081SYDYXJ
- https://www.purevpn.com/blog/best-chromecast-alternatives
Google Cast reimplementations
- https://github.com/vishen/go-chromecast - 900 stars, 86 forks, last commit a month ago
- https://github.com/tristanpenman/go-cast - 8 stars, 1 fork, last commit 3 weeks ago
Notes
- https://github.com/enen92/script.tubecast - learnt about it while researching Youtube on Kodi
- https://helpdeskgeek.com/the-best-4-alternatives-to-google-chromecast
- https://old.reddit.com/r/privacy/comments/11ygmqx/chromecast_alternative
- https://old.reddit.com/r/fossdroid/comments/8vavp2/chromecast_netflix_w_microg
Interesting presentation with a good introduction. By Dr Geoff Emberling of the International Kurru Archaelogical project.
Via https://ikap.us/2019/01/02/memories-of-the-kings-and-queens-of-kush
I had no idea this sort of project existed. Great, hope more and more health professionals and hospital administrators hear about it.
This post replaces two of my previous posts on the same subject and adds more links.
Please do NOT include any websites that require registration or signup to play, even if they have a "free trial".
Sound libraries and generators
- https://mynoise.net - a large library of noise generators, nature sounds and ambient music
- https://www.ambient-mixer.com - large crowd-sourced library of ambient sounds, with a voting system if you signup (effectively Stackoverflow for ambiance)
- https://noises.online - a selection of masking sounds (requires WebAudio support in your browser)
- https://coffitivity.com - a dynamic selection of ambiance sounds
- http://www.rainymood.com - sound of rain and thunderstorm
- http://asoftmurmur.com - let's you mix your own soundscape from a selection of ten sounds
- http://rainycafe.com - selection of either cafe or rain ambiance
- http://raining.fm - rain ambiance, optionally add thunder
- https://29a.ch/noise-generator - a noise generator (requires WebAudio support in your browser)
- https://onlinetonegenerator.com/noise.html - a rather limited tone generator (white, brows or pink)
Tracks or videos
- https://youtube.com/watch?v=xNN7iTA57jM - forest sounds, woodland ambiance, bird song
- https://youtube.com/watch?v=cUZbRc0lwjA - jazz bar in Paris (jazz piano)
- https://youtube.com/watch?v=tChc64ikVR8 - cozy cabin in the mountains, rain sounds, thunderstorm
- https://youtube.com/watch?v=8lW8CrVL95g - underwater study room
- https://www.youtube.com/watch?v=qYnA9wWFHLI - Marconi Union, Weightless (10 hours)
- https://www.youtube.com/watch?v=bQ4KSllyROs - Marconi Union, Weightless & Beyond (24/7)
- https://www.youtube.com/watch?v=KZV9FmHOsRg - coffee shop ambiance (2 hours)
Via
- Analysis Of The IUPAC Gold Book Support for Chemical Ontologies, 10 min video by NFDI4Chem
I occasionally encounter feeds that my feed reader cannot subscribe to because the site uses Cloudflare DDoS protection, which Cloudflare implements in a manner contrary to the ethics of the open web, in the process making it near impossible for feed readers or read-it-later services to access the content.
I have no simple work-around for such RSS feeds - they are effectively rendered useless by Cloudflare's discriminatory and user-hostile blocking implementation.
Cloudflare themselves claim doing nothing wrong, and that it is in fact the site operators that have misconfigured their Cloudflare firewall and that users should contact the site operator. Which is simply ridiculous.
If Cloudflare cared at all about the open web, this issue would not be relegated to a few obscure forum posts. They could also easily implement some form of automatic exemption from their page blocking for common feed endpoints, such as /feed
, rss.xml
and similar.
- Cloudflare considered harmful, 2019-10-23, Hugo Landau
- https://git.nixnet.services/you/stop_cloudflare
- Stay away from Cloudflare, 2017-12-20, unixsheikh.com
- https://news.ycombinator.com/item?id=12646055 (thread on the subject of Cloudflare and RSS)
- https://reddit.com/r/selfhosted/comments/qars38/rss_feed_behind_cloudflare_protection/
- https://stackoverflow.com/questions/11886711/curl-cant-fetch-rss-from-website-because-of-cloudflare
- https://github.com/VeNoMouS/cloudscraper (a work-around in Python, but I don't know how to incorporate with TinyTinyRSS...)
My list of places where you can find RSS feeds. Quality may vary, buyer beware.
- RSS Database by FeedSpot. I have no knowledge of the quality of these collections.
- https://codeberg.org/solarchemist/svenska-tidskrifter-rss - my own collection of RSS feeds to Swedish newspapers.
Note that this is a German affair.
Still, the hall of fame (below) might give you some ideas.
... and good alternatives, where available. To the best of my knowledge, and no guarantees obviously. All the apps listed here are distributed with libre licences (except where otherwise stated), but some may rely on non-libre backends.
Productivity
- DAVx5 - the easiest way to synchronize your Nextcloud contacts/calendar/tasks with corresponding Android apps. GPLv3. Available on F-Droid.
- K-9 Mail, or these days it is perhaps just as well to use Thunderbird for Android.
- Nextcloud
- Nextcloud Notes
- Tasks.org - a great tasks app that synchronizes with your Nextcloud tasks.
Chat, messaging
- Signal messenger. The app is FOSS, but relies on a proprietary and centralized service.
- Nextcloud Talk
- Beeper
Keyboard
- Unexpected Keyboard, F-Droid - keyboard with a smart swipe-inside-each-key UX that exposes a massive amount of special characters in a smart way.
- HeliBoard, F-Droid
- https://github.com/futo-org/android-keyboard
- Thumb-Key - cool keyboard meant for thumb typing and swiping inside each key.
Audio & video
- Audio Recorder, F-Droid. Easy to integrate with Nextcloud's "Auto Uploads" functionality, in my experience. But the default quality settings (bitrate, etc.) are quite low and I suggest raising them.
- Jellyfin, F-Droid - mobile client for Jellyfin media server.
- NewPipe, F-Droid - I recommend you install it on F-Droid using their repo to get updates faster (but note that this means you trust their repo to push updates to your phone).
- Tempo - music client for Subsonic-compatible servers.
- VLC
Misc
- Binary Eye, F-Droid - a competent QR code scanner.
- FreeOTP+, F-Droid - 2FA authenticator.
- Kvaesitso launcher - it looks great by default and can be customized in lots of useful ways.
- Librera Reader, F-Droid.
- OpenKeychain - in combination with Password Store to sync
pass
to Android. - OsmAnd - OpenStreetmap for Android.
- Tailscale - app is FOSS, but the underlying service is proprietary, but can replaced with Headscale (but unfortunately I cannot recommend it - tried it once and never figured it out).
- Transdroid - Bittorrent client that lets your monitor and control your server.
- Transportr - public transport timetables. Works well in Stockholm.
- Tusky - Mastodon client that works well with multiple accounts across different instances.
- Wallabag
The issue is when you don’t have an account, it’s quite difficult… For someone who doesn’t know where to look for. Let’s see how we can bypass their “Join LinkedIn or Sign in” message.
First, you need to find the profile of the user targeted. Any search engine should do the trick. Usually, it’s something like :https://www.linkedin.com/in/username
Copy that URI, and paste it to … wait for it … A Google website. The address is : http://search.google.com/test/mobile-friendly. It’s a page to test if your website is mobile friendly 😂.
Hit the test button, wait a bit, and then click on View tested page.
Copy all the HTML, and paste it to https://codebeautify.org/htmlviewer, and hit the RUN button. Now, you should be able to see more information on that profile.
Of course, if you prefer you can copy/paste the HTML code in a text file. Rename it with the .html extension before opening it with your browser.
Reproduced most of the original note above just in case of linkrot.
- Mobilizon - developed by the well-known Framasoft. With a web forum and a Matrix chat, awesome choices.
Mobilizon instances
kv4p HT is a homebrew VHF radio that makes your phone capable of voice and text communication completely off-grid [...] radio simply plugs into the USB C port on your Android smartphone and transforms it into a fully-fledged handheld radio transceiver.
Looks really cool. But then of course I know nothing about ham radio.
From Better Posters I learned about the idea and that there is a serious effort to create such a registry: ConfIDent.
But is it ready for prime-time?
- Terms of use only available in German, as far as I can tell.
- Account creation flow involves manually requesting an account,
but it is not clear to me who is behind this service. Strike that, the Imprint makes it clear: the Ministry for Science and Culture of Lower Saxony, Germany.