/me is listening to “I Can’t Be” by Sally Dige
Musing with three types of backup systems on my old Macbook: Arq, Borg and Kopia. I was able to mount every backup folder correctly. Now I just need to put the years end-to-end!
With that damn machine crash last week, I’m in the process of retagging my music library (after re-downloading some albums from YT for the second time), and soon everything should be ready to join my iTunes library, neglected since 2016. The last title I bought from Apple was the Glenn Gould album, BTW.
Currently rebuilding my iTunes library. Back in 2016 it wasn’t the time to switch to Apple Music and TV. I’m on an unsupported laptop and OS right now, but it feels so good. Yet, congrats to Apple because I can retrieve all my data in just two or three clicks. #apple
I’m not in the mood of writing a full blog post to summarize my recent comeback to OS X. It’s still OS X on my machine, but I know it evolved as something else since 2018. I don’t know if I’m ready to buy a new Macbook with the accompagnying OS. I liked and I still like Mojave so much. Yet it was pretty painful to resurrect this laptop: Homebrew has no “bottles” for oldy software, which means I had to recompile everything from scratch for 60% of the software I reinstalled. I got into trouble with GPG, GitHub https auth, zsh misbehaving on OS X for no reason, minor annoyances with the Linux -> OS X switch, and so on. Finally, I’m close to the end of the migration process. It took me 5 full days! And I had to somehow relearn macOS shorcuts. Muscle memory helped in most cases, but still… So long, Apple #apple
TIL that TERM=xtermm
on Darwin behaves like TERM=xterm-mono
on Linux. That was helpful to force Neomutt or Cmus to use mono color by default. Moreover, if you use TERM=vt100
for Neomutt, it behaves more smoothly when fetching new mail with mbsync. #apple
I’ve spent a few more or less pleasant days, long ones in any case, reconfiguring my old 12-inch macbook. Guess what about my Dell laptop and my fresh configuration of Ubuntu 24.04 LTS: the power supply blew up and the SSD along with it. Now everything seems workable (at the very best, for a 6-year old OS). More to come in a blog post later.
/me is listening to “Love Hides” by The Doors
The Beauty of $\LaTeX$: Some of the crap that has kept me from using MS Word for years. Now I’m too old and remain a happy $\TeX$er for the days ahead. Fun thing: we did the same MSc (which was called a DEA at that time in France) one year apart!
I’m pretty happy with new management system for my audio file. Thanks to Beets I now have access to the whole power of command line utilities. Here’s a brief overview of the top genres in my library:
» beet summarize | head -n 12
genre | count
---------------------- | -----
Rock | 3045
Post-Punk | 2754
Jazz | 2509
Alternative | 1212
Electronic | 948
Indie Rock | 838
Pop | 817
Classic Rock | 679
Alternative Rock | 497
Indie Pop | 424
How many total tracks having a genre tag, excluding tracks from playlists which contain, following poor design choice, duplicate records?
» beet summarize ^context:playlist | head -n 12 | cut -f2 -d\| | tail -n +3 | paste -sd+ | bc
10603
And so on… Wanna looks at the tlistening stats for the current song?
» beet ls -f '$artist ($album): $title ($length) [$genre, $play_count, $last_played]' $(mpc current | sed s/-//)
Diana Krall (The Girl in the Other Room): Narrow Daylight (3:31) [Contemporary Jazz, 12, 2024-11-11 20:38:09]
/me is listening to “Darkening of the Light” by Concrete Blonde
Ncmpcpp with no color enabled. Much better for my eyes!
I was going to spent some times trying to output the sound of my built-in speakers to my old Apple TV which is connected via a DAC to my wi-fi system, until I realized it is as simple as loading Pipewire RAOP module, pactl load-module module-raop-discover
. Then, launch pavucontrol and switch to your Airplay device.
The Airplay system is now listed in the list of available devices.
» wpctl status
PipeWire 'pipewire-0' [1.0.5, chl@aliquote, cookie:758904776]
└─ Clients:
32. WirePlumber [1.0.5, chl@aliquote, pid:1915]
33. WirePlumber [export] [1.0.5, chl@aliquote, pid:1915]
34. pipewire [1.0.5, chl@aliquote, pid:1916]
54. gnome-shell [1.0.5, chl@aliquote, pid:2575]
55. GNOME Shell Volume Control [1.0.5, chl@aliquote, pid:2575]
56. GNOME Volume Control Media Keys [1.0.5, chl@aliquote, pid:2728]
57. xdg-desktop-portal [1.0.5, chl@aliquote, pid:3033]
58. Music Player Daemon [1.0.5, chl@aliquote, pid:1905]
64. Mutter [1.0.5, chl@aliquote, pid:2575]
65. gsd-power [1.0.5, chl@aliquote, pid:2732]
81. pipewire [1.0.5, chl@aliquote, pid:1916]
88. Firefox [1.0.5, chl@aliquote, pid:82644]
102. speech-dispatcher-dummy [1.0.5, chl@aliquote, pid:90304]
103. wpctl [1.0.5, chl@aliquote, pid:90700]
Audio
├─ Devices:
│ 50. Built-in Audio [alsa]
│
├─ Sinks:
│ * 51. Built-in Audio Analog Stereo [vol: 0.28]
│ 66. Apple TV Salon [vol: 1.00]
│
├─ Sink endpoints:
│
├─ Sources:
│ * 52. Built-in Audio Analog Stereo [vol: 1.00 MUTED]
│
├─ Source endpoints:
│
└─ Streams:
59. Music Player Daemon
61. output_FL > Apple TV Salon:send_FL [active]
63. output_FR > Apple TV Salon:send_FR [active]
82. speech-dispatcher-dummy
98. output_FR > ALC3254 Analog:playback_FR [init]
101. output_FL > ALC3254 Analog:playback_FL [init]
We can even make it the default output audio channel:
Now, since Pipewire supports multiple streaming output devices, much like mpd, I just need to configure the audio source in their config files to get everything right for the next time.
/me is listening to “Man of Anatomy” by Tom Hickox
/me is listening to “Amor Fati” by Washed Out
I guess all is working now ;-) I’ve converted my automated script that shows current track on the micro-blog (for casual IRC users), I’ll just need to figure out how to manage tagging and playlist management under ncmpcpp.
/me is listening to “Back In Black” by AC/DC
Trying out mpd in combination with ncmpcpp as a replacement for my long-time friendly TUI Cmus. I"m still in the process of discovering the functionalities. Everything seems okay on the mpd side – I even got MPRIS support after reading the Arch wiki (this Go solution didn’t work for me). I’m just looking for a direct way to listen to my music library without resorting on virtual playlist in ncmpcpp.
100 Exercises To Learn Rust. #rust
♪ Mini Trees · Carrying On
In fact, you rarely have anything to do with the operating system on a PC desktop or laptop, you mostly only deal with desktop applications - and they can suck equally bad regardless of operating system. — There is only one reason why Microsoft Windows is the dominating operating system on the PC desktop
Failing at Combinatorics with Haskell. #haskell
I believe the Haskell LSP already provides that, but in case you don’t use it here are two blog posts that explain how to integrate ghcid into your (Neo)vim workflow: How I integrate ghcid with vim/neovim, Haskell dev workflow with ghcid and neovim. #haskell
Everything I Know About The Fast Inverse Square Root Algorithm. Dealing with floating point math from Quake 3 to the present day.
The nice thing about boringness (so constrained) is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood. — Choose Boring Technology
Hot off the kitchen!
♪ Siouxsie And The Banshees · Arabian Knights
If there is ONE THING the Unix world needs, it is for bash/ksh/sh to stop diverging further by permitting STUPID INPUT that cannot plausibly work in all other shells. We are in a post-Postel world. — OpenBSD now enforcing no invalid NUL characters in shell scripts
♪ Romain Dubois · Ardoise
Accept multiple ways that users can ask for help and respond in kind. — Shell Script Best Practices
One of my favorite post-punk band from the 80’s. Big Ups: Bauhaus’ Kevin Haskins Dompe and David J Haskins Pick Their Bandcamp Favorites.
Python’s multiprocessing performance problem. Lot of interesting tips and tricks for those using the multiprocessing module. #python
Plotting data in the terminal with gnuplot. Still one of the most underated plotting tool for quick one-liner.
Some Stata tutorials on survival analysis that are worth a read. #stata
If we do not understand both the data and the models completely, it becomes very difficult to spot problems in the software we use to work on them: unexpected behaviour arising from software bugs may be mistaken for a peculiarity in either of them. It is then crucial that we minimise the chances of this happening by applying all the best engineering practices we have at our disposal. — The Pragmatic Programmer for Machine Learning.
Dissecting the GZIP format. Very interesting read for those interested in compressing techniques. #clang
If you need an easy way to convert MS docx to a PDF from the command line, don’t forget that lowriter
(from Libre Office) has option to convert any document on the fly.
Stick with the mainstream & boring unless a competing alternative that is so much simpler and/or more powerful, and that has an acceptable learning curve, so that it will justify leaving the flock, exists.
Best resume I read in a while.
All mainstream, general purpose programming languages are (basically) Turing-complete, and therefore any programme you can write in one you can, in fact, write in another. There is a computational equivalence between them. The main differences are instead in the expressiveness of the languages, the guardrails they give you, and their performance characteristics (although this is possibly more of a runtime/compiler implementation question). — Why Haskell?
♪ The Cure · A Night Like This
Recorded live at the Roskilde Festival 2019.
Pesto tart with goat cheese and pine nuts. It wasn’t too bad a job after all.
It’s both delightful and surreal to see that Valgrind is still in wide use today. — Twenty years of Valgrind
From Julia to Rust. See also Where to Start with Rust. I’ve been wanting to learn both of those languages but I’ve never really found the time for it, or perhaps the motivation to embark on new adventures. One day, maybe one day.
Old post but still an interesting personal roadmap with Vim. #vim
Curiosities in Vinyl: Nice read. Looks like the author has a really comfy setup. I’ll keep the references handy.
A small table of interesting manpages.
♪ Antony & The Johnsons · You Are My Sister
(Special dedicace to K.)
TIL about a nice replacement for tldr: tealdeer.
It looks like 0x0.st is up and running again. I believe it was down for a few months and I had to resort to https://transfer.sh/.
This photo reminds me of the time when I was studying computer vision. Back in the time, we were happy with newly released LCD displays, although we got some CRTs lurking around. Now I can display images in my terminal (foot + sixel).
Commit Mono is an anonymous and neutral programming typeface focused on creating a better reading experience.
Installing wxpython on Ubuntu just takes 25 min. on an Intel i7-10610U (8 cores) @ 4.900GHz (389 Mo, virtual environment included). BTW, there’s no wheel for GTK4. #python
Sometimes I miss my time with macOS Mojave.
♪ Wire · Outdoor Miner
Putting Xs into squares is all the rage with statisticians. We should test that they can use bitstring macros for that. — CVS: cvs.openbsd.org: src
IRC has historically been one of the most important chat programs in my life. — My IRC client runs on Kubernetes
Poor or lazy solution on my side: irrsi runs on a uni server, and I rsync the logs on my laptop when I’m in. I also concatenate all channel logs into monthly logs so that it’s easier to read what’s going on. This is why I may be slow to respond to /msg sometimes.
Cleaning up the mess accumulated in my ~/.local/bin
and updating binary releases here and there. I wish I was not so lazy and wrote a quick install.sh
script once for all.
What scientists must know about hardware to write fast code: Great read, even for those not familiar with Julia.
Yet another TUI app that I recently added to my toolbet, with the hope that it will improve over time: tdf. I heavily rely on Zathura for things related to PDF (espacially for bidirectional sync when using Texlab), altough I came to appreciate Evince with time (it can open DVI and PS file, by the way). With async rendering and hot reloading, I can imagine that tdf could be a great add-on for previewing $\TeX$ compilation results.
TIL about theme.sh which is amazing: no dependency, self-contained, and it can be used online without setting up anything in your bashrc or zshrc config. You can not only preview colorscheme using Fzf, but you can also import your own colorscheme (it will be added in theme.sh
itself. See also Foot FAQ to implement dynamic color changes. #unix
Some really nice Gnome extensions are landing on GitHub, see openbar and forge. See also Exploring the Default Tiling Windows Feature in Ubuntu 24.04 (and Enhancing it). I still have Tactile around, but I rarely used it these days, unless I’m mirroring my desktop on a larger screen. #unix
♪ Wire · The Boiling Boy
Racket parallel build in action.
Churn and Weight: Or how to get interesting statistics for your Git projects.
kitty has to run on what I’m remoting from. tmux can work on what I’m remoting into. And that makes all the difference. — tmux is worse is better
♪ Timber Timbre · Moment
Efficient rolling statistics. #haskell
Looks interesting: Render and include figures in Pandoc documents using your plotting toolkit of choice .
♪ Tindersticks · Factory Girls
Hopefully other email clients can get to state where they too can do all of this. — Patch Workflow With Mutt 2019
Configuration, scripts and tips for using mpv as an image viewer. See also this GH issue for extended discussion.
♪ Tindersticks · Raindrops (John Peel 1993)
Just when I spent about half an hour compiling swayimg with all its dependencies, wondering how long it would take to compile the latest version of zathura and zathura-mupdf, it just came up to my mind that Ubuntu 24.04 LTS was released a few months ago. Time to upgrade the whole system I guess. #vim
Yet another round of computer cleansing today. I also removed VirtualBox since I can certainly manage everything with qemu, and lot of unused Gnome garbage that I installed for testing purpose. Ironically, I also uninstalled Gapless since I always returned to Cmus with which I am so comfortable and which fits my TUI workflow so perfectly. #unix
♪ Tindersticks · Raindrops (John Peel 1993)
Flat is a good thing but at some point I wish there could be a way to avoid unecessary duplication of core frameworks. I mean, below you’ll find that I need 4 versions of the Qt goodies that I don’t even use on my system.
This all results in several Gig of wasted space, IMO. But this probaby is the way to go, as far as containerization is concerned.
» du -sh /var/lib/flatpak
11G /var/lib/flatpak
Someone’s Been Messing With My Subnormals!: one can only appreciate the obstinacy and quality of the data munging using Python and shell scripting!
I wanted to get rid of raw <img>
tags and replace then with <figure>
, available as a shortcode in Hugo. It turned out I had a lot of replacements to perform:
» rg -nc "\!\[.*\]\(" content/post | cut -d: -f2 | paste -sd+ | bc
688
Here’s a classical one-liner using Sed:
sed "s/^\!\[.*\](\(.*\))/{{< figure src=\"\1\" >}}/ content/post/*.md
I took the opportunity to add a small colored insert to each figure using the following CSS code:
figure {
box-shadow: 0 0 0 .5em #f3f3ed;
margin: 2em 4em;
}
TIL that \%V
can be used to replace only in a visual selection (very handy for rectangular selection with <C-V>
). #vim
And so, one year later, we got a few dozens of additional functions and a brand new name.
♪ The Doors · The Crystal Ship
Creating and managing a package seemed much harder than I expected. — An unbiased evaluation of environment management and packaging tools
… to put it very mildly… This, however, does constitue a very good overview of what’s available in the Python ecocystem as of this writing. #python
I try to use all the features of fzf-lua, and it’s quite easy to reproduce a Git time machine with the bcommit
command. If you’re not, you may want to give a shot to git-time-lapse: It does the job pretty well with zero dependencies (e.g. Telescope, plenary), and it can be installed as a simple optional plugin. #vim
From time to time, I make a few infidelities with cmus and use gapless (formerly g4music). It’s a great piece of software which I initially compiled from scratch until I decided to rely on the Flathub version. I once generate m3u
playlists for relevant folders in my global library and they come up nicely in the playlist view. See my review here.
Lot of useful tips and tricks for Zsh users. I particularly like the hash -d
approach for directory bookmarks. #unix
♪ Editors · Formaldehyde
♪ Archive · Sleep
I finally got ride of most of the (Neo)vim packages I was only using on an occasional basis, which led me to the following setup: (I barely use Rust, but I happen to read some Rust code from time to time.)
~/.config/nvim
» tree -L 3 pack
pack
└── plugins
├── opt
│ ├── haskell-tools.nvim
│ ├── molten-nvim
│ └── rustaceanvim
└── start
├── fzf-lua
├── nvim-treesitter
├── nvim-treesitter-textobjects
└── vimtex
Also, I deleted my custom colorscheme, even if I was just using zenbones for the past few months, and I switched to the builtin quiet
colorscheme, which is great (pending some minor changes which I implemented in an autocommand
). Good-bye orgmode as well, especially since I don’t use the agenda and capture stuff. #vim
♪ Northside · Tour de World
After 4 years I think fzf-lua remains one of my favorite Neovim plugin. That being said, it is also one of the most astonishing GitHub project where the author is so active that all issues are resolved in due time while he is also providing useful tips all time. Last find is how live grep could potentially handle current word (C-r C-w
doesn’t work when using Fzf terminal). #vim
“Vim experts” don’t prefer buffers over tabs: they use buffers as the file proxies they are and tab pages as the workspaces they are. Buffers and tab pages have different purposes so preferring one to the other makes no sense whatsoever. — Why do Vim experts prefer buffers over tabs?
A good understanding of Vim’s various lists is a massive productivity boost — it’s taken me many years of Vim use to truly appreciate this. — Vim’s useful lists.
♪ New Order · Truth
TIL that Racket comes with a migration utility for packages installed using a preceding release: raco pkg migrate
.
♪ Tindersticks · What Is A Man
Grabbing some new tracks from https://archive.org, mostly good old post-punk. Together with music I bought and music I found here and there, I’m nearing 18,000 tracks on my HD. Time to get a NAS I guess.
I had noticed that many of our live shows were ending really early: a couple times recently, the last band was done and we were closed by 10pm. That seems weird and wrong to me. Especially in the summer: who wants to show up at a night club while the sun is still up? “Why are we doing that?”, I asked. Well, Devon did some research, and the answer seems to be, “Because everyone else is doing that too.” — Wherein this is just a sleepy seaside town now
♪ Good Lovelies · Blurry Days
I just tried musikcube as an alternative to cmus. The UI is really great, but I fear I will miss some cmus features, like having different views for albums and playlists, filters, and so on.
The history of the ROC curve: Interesting read which highlights how it is worth double checking Wikipedia with historical records.
Lasagna were tasty last week!
“When the underlying measurements are normally distributed, you can “convert” a range measurement into an estimate for the standard deviation” using the D2 constant. As always, Rick Wicklin wrote a very interesting article for those involved in QC or dealing with small samples. See also On using flexible distributions to fit data for another interesting story.
Some estimators provide reasonable estimates even when there are correlations among observations, but estimates of uncertainties of estimates can be badly affected by correlations. — What Does a Statistical Method Assume?.
I have almost two years of backup data for my home directory, thanks to kopia. It works great, it runs smoothly and doesn’t harm the RAM or disk, and it wakes up nicely when the laptop returns from idle.
~/tmp
» kopia snapshot list
chl@aliquote:/home/chl
2022-10-31 21:00:37 CET k105eb1435351bfdfba85874cd06ebf75 14.9 GB drwxr-xr-x files:226411 dirs:45856 (monthly-18)
2022-11-30 22:00:39 CET k01dd605c67ca579cbec33fb5eb386648 15.5 GB drwxr-xr-x files:232391 dirs:46879 (monthly-17)
2022-12-31 23:00:38 CET k5a01672b76af59461061c3fe25003785 15.7 GB drwxr-xr-x files:234220 dirs:47516 (monthly-16,annual-3)
2023-01-31 21:00:13 CET kec7a24dd874b20376f160f1fe3e0acd8 15.4 GB drwxr-xr-x files:226071 dirs:45741 (monthly-15)
2023-02-28 21:00:08 CET kc707921ee53be6aa7ff2be4da99387c4 14.6 GB drwxr-xr-x files:228097 dirs:46041 (monthly-14)
--%<-----------------
2024-03-25 08:12:51 CET k9cb5afcc7ce355e2b64c8f980ef6bb24 14.1 GB drwxr-xr-x files:218701 dirs:35849 (hourly-11)
2024-03-25 09:00:14 CET kdec17d1a1ed35833b0eed730c491ed87 14.1 GB drwxr-xr-x files:218716 dirs:35849 (latest-10,hourly-10)
2024-03-25 10:00:35 CET ka52066cb5588c88a7d259140e5c02683 14.1 GB drwxr-xr-x files:218702 dirs:35849 (latest-9,hourly-9)
2024-03-25 11:00:35 CET kd96a4c841b76c75e4b5b569594f9e87b 14.1 GB drwxr-xr-x files:218704 dirs:35849 (latest-8,hourly-8)
2024-03-25 12:00:35 CET k0ec385fbd40ce68a14250da3e4e72ac9 14.1 GB drwxr-xr-x files:218710 dirs:35849 (latest-7,hourly-7)
2024-03-25 13:00:35 CET k635fb4cf4fd0e3f4c45c58b7a14ed690 14.1 GB drwxr-xr-x files:218730 dirs:35850 (latest-6,hourly-6)
2024-03-25 14:00:35 CET k722ecc32f98028829e258d2582548281 14.1 GB drwxr-xr-x files:218741 dirs:35851 (latest-5,hourly-5)
2024-03-25 15:00:35 CET k87f64132d71b14eccbc7f5bb362b53aa 14.1 GB drwxr-xr-x files:218732 dirs:35851 (latest-4,hourly-4)
2024-03-25 18:07:22 CET k4af30387d39daf1dd1b3002dffde3543 14.1 GB drwxr-xr-x files:218733 dirs:35851 (latest-3,hourly-3)
2024-03-25 19:00:35 CET k66f7a97a2b50611e047524da6cc0e640 14.1 GB drwxr-xr-x files:218745 dirs:35851 (latest-2,hourly-2)
2024-03-25 20:26:20 CET kbd44c2958916a894deab100da949f302 14.1 GB drwxr-xr-x files:218745 dirs:35851 (latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1)
♪ Flock of Dimes · Given/Electric Life
Writing Python like it’s Rust. Or how to make use of Python types in a meaningful way.
♪ Passenger · Summer Rain
TIL about Faircamp which looks amazing.
I recently switch from MC 1.19.4 with Forge and Optifine to MC 1.20.4 with Iris and Sodium. Now I got a lot more mods available with less frictions overall. And it looks like we can now play MC on a laptop with texture packs and shaders all time long.
It’s probably time to stop building on 1.19.4 I guess, and just start a new survival journey.
This difficulty is often not due to math - because of the aforementioned frameworks machine learning implementations do not require intense mathematics. An aspect of this difficulty involves building an intuition for what tool should be leveraged to solve a problem. This requires being aware of available algorithms and models and the trade-offs and constraints of each one. — Why is machine learning ‘hard’?
♪ Kendra Morris · Dry
Lots of tips and tricks for Mathematica aficionados.
When optimising code, never guess, always measure. — When Optimising Code Measure
TIL about Asahi Linux. Looks cool, although Ubuntu LTS already runs fine on my Mac, but it’s an old one, not one of the newest cool kids made in Silicon.
No, really, I’m astonished at how much software is basically useless without an internet connection. Net is no longer something additional to your daily tasks, it is essential for your daily tasks. — We’ve become overdependent on the net
♪ Jelly Cleaver · Black Line
Wanna get a plain text list of your Pocket bookmarks? Go to getpocket.com/export, then apply the following snippet on the HTML result file:
cat YOURFILE.html | grep -o '<a .*href=.*>' | sed -e 's/<a /\n<a /g' | sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d' > pocket.txt
What strikes me about my personal experience with LLMs is that I have learned precisely when to use them and when their use would only slow me down. I have also learned that LLMs are a bit like Wikipedia and all the video courses scattered on YouTube: they help those with the will, ability, and discipline, but they are of marginal benefit to those who have fallen behind. I fear that at least initially, they will only benefit those who already have an advantage. — LLMs and Programming in the first days of 2024
A simplified boxplot, with (much) fewer Stata commands than the one proposed in this old post:
sysuse auto
graph box mpg, over(foreign) box(1, color(white)) ///
medtype(marker) medmarker(mcolor(black) mlwidth(0)) ///
cwhiskers alsize(0) lines(lpattern(solid) lwidth(medium)) ///
ylabel(, nogrid) yscale(noline) ///
title("{bf}Box Plot", pos(11) size(2.75)) ///
subtitle("City Mileage over number of cylinders", pos(11) size(2))
graph export /home/chl/tmp/better-bxp.eps
I still hold 14 draft posts in my inbox, but for now let’s start this fresh new year with some good vibes.
TIL that you can use xeyes to check if an app is running under Wayland or XWayland.
Micro-posting goes well as far as I can tell.
Just when I was about to try out boosting and bagging in Stata (rforest and boost), I realized that most programs now require Stata 15 or newer. Even Lasso penalization has been integrated in the core modeling facilities starting with Stata 18. At least, I can still run lassopack to perform L1, L2 regularization or a combination thereof. They use the same convention as in glmnet, where the parameter $\alpha$ stands for the elasticnet mixing parameter ($\alpha=0$ corresponds to the ridge penalty while $\alpha=1$ is the lasso penalty). The authors compared Stata builtin and R regularized estimation, which is great: Replication of glmnet and StataCorp’s lasso. See also An introduction to the lasso in Stata on the Stata blog. #stata
To choose an implementation is to choose a tribe. Since Scheme is so minimal, you begin to rely on extensions that are only present in your implementation, and so through code you bind yourself to a world of code, people, and practice, loosely bound to the rest of the Scheme world through a fictional first-person-plural. This is OK! Going deep into a relationship with an implementation is the only way to do great work. The looser ties to the rest of the Scheme world in the form of the standards, the literature, the IRC channel, and the mailing lists provide refreshing conversation among fellow travellers, not marching orders for a phalanx. — an opinionated guide to scheme implementations
♪ Jelly Cleaver · Black Line
iMessage, explained: When you learn what com.apple.madrid
does on your machine, and all the other goodies Apple put into their APNs.
A good explanation of how Shazam work in practice, and an implementation in Python.
A Very Subtle Bug, or how to re-enable SIGPIPE in the subprocess child. #python
My general advice for maximizing the battery is only use your battery as much as you need, i.e. charge it as often as possible, and as little as possible. If you need a rule of thumb, stay within 30%-80%. Wouldn’t charging a lithium battery to 80% only defeat the purpose of putting the battery into longer use in the first place?
Poor man “fd(find)” command:
#!/bin/sh
find . -iname "*$1*" 2>/dev/null
♪ New Order · Sub-Culture
TIL that Spotify originally relied on Fisher-Yates algorithm to shuffle their playlists.
A computer game taking the shape of instant messaging software. The inherently paradoxical goal of the game requires no small amount of strategy, wit and cunning: The main objective is gaining as large a following of people as possible while simultaneously getting as many people as possible banned from the game. — Explaining the Internet in 2020
Environment variables for Wayland hackers.
Note to myself:
$MOZ_ENABLE_WAYLAND
Enables Wayland for Mozilla products (notably Firefox) if set to 1. Firefox uses GTK so setting GTK_BACKEND=wayland will force it to run on Wayland regardless of if MOZ_ENABLE_WAYLAND. However, it will default to X on GDK_BACKEND=wayland,x11 unless MOZ_ENABLE_WAYLAND=1 is set.
There are a lot of small websites on the Internet: Interesting websites, beautiful websites, unique websites. Unfortunately they are incredibly hard to find. You cannot find them on Google or Reddit, and while you can stumble onto them with my search engine, it is not in a very directed fashion. — The Small Website Discoverability Crisis
Human optimism leads us to believe that we can easily know where a program spends most of its time. — Four Kinds of Optimisation
♪ Millie Turner · January
Still decent timing…
aliquote master*
» make deploy
[+] Building public files in /home/chl/Sites/aliquote/public
hugo --gc --minify
Start building sites …
hugo v0.92.2+extended linux/amd64 BuildDate=2023-01-31T11:11:57Z VendorInfo=ubuntu:0.92.2-1ubuntu0.1
| EN
-------------------+-------
Pages | 4705
Paginator pages | 381
Non-page files | 1
Static files | 1318
Processed images | 0
Aliases | 1
Sitemaps | 1
Cleaned | 0
Total in 10170 ms
Recursive data suggest recursive solutions. This is the key insight you need for understanding recursion. Not only does it make sense once you think about it, it also demonstrates why most other approaches to teaching recursion are essentially incorrect. — How Not to Teach Recursion
pytest supports running Python unittest-based tests out of the box. — How to use unittest-based tests with pytest
This is great since it allows me to use the same compiler (pytest) in Neovim, independent of the testing framework.
During the Internet’s adolescence, words (and thus blogs) were easier to come by, because for the most part, almost all of the interaction we had online was using devices designed for interaction via text. With the shift to phones as a more popular interaction device, the ease of pouring thoughts into a textual medium has decreased. — Blogging Shift
♪ Marianne Faithfull · Broken English (12" Remix)
Profiling in Haskell for a 10x Speedup: Great read. #haskell
Editing Lisp dialect in Neovim like a pro: beside Vim’s builtin (e.g., vib
to select inside brackets), paredit.vim (e.g., [[
go to top-level form), treesitter and nvim-treesitter-textobjects lets you navigate around your code easily, and incremental selection is a breeze. I originally used vv
(init the selection), va
(aka increase or <C-a>
) and vx
(aka decrease or <C-x>
), but now I just use <tab>
that other folks often use as an alias for %
. #vim
incremental_selection = {
enable = true,
keymaps = {
init_selection = "<tab>",
node_incremental = "<tab>",
node_decremental = "<S-tab>",
},
}
If you get such a garbage when launching Firefox (official deb package, not the crappy snap one) from the command line or as an external browser for Newsboat, try force disabling accessibility as suggested here.
» firefox
~
» [Parent 25471, Main Thread] WARNING: invalid (NULL) pointer instance: 'glib warning', file /build/firefox-LOPdVD/firefox-119.0+build2/toolkit/xre/nsSigHandlers.cpp:167
(firefox:25471): GLib-GObject-WARNING **: 11:46:47.027: invalid (NULL) pointer instance
[Parent 25471, Main Thread] WARNING: g_signal_emit_by_name: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed: 'glib warning', file /build/firefox-LOPdVD/firefox-119.0+build2/toolkit/xre/nsSigHandlers.cpp:167
(firefox:25471): GLib-GObject-CRITICAL **: 11:46:47.027: g_signal_emit_by_name: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
[Parent 25471, Main Thread] WARNING: invalid (NULL) pointer instance: 'glib warning', file /build/firefox-LOPdVD/firefox-119.0+build2/toolkit/xre/nsSigHandlers.cpp:167
(firefox:25471): GLib-GObject-WARNING **: 11:46:47.027: invalid (NULL) pointer instance
[Parent 25471, Main Thread] WARNING: g_signal_emit_by_name: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed: 'glib warning', file /build/firefox-LOPdVD/firefox-119.0+build2/toolkit/xre/nsSigHandlers.cpp:167
(firefox:25471): GLib-GObject-CRITICAL **: 11:46:47.027: g_signal_emit_by_name: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
Scheme from Scratch by Peter Michaux: intro, and full list of posts. #scheme
♪ sean thornton · edith says
Solving the puzzle of the address-of operator. #clang
Other subtleties of the C language: There are two ways to index an array a
, either a[i]
or i[a]
, as illustrated below:
#include <stdio.h>
int main(void) {
int arr[5] = {1, 2, 3, 4, 5};
int i = 2;
printf("i[arr]: %d\n", i[arr]);
printf("arr[i]: %d\n", arr[i]);
}
Almost 50, I remain philosophical because I spent about the first ~45 of them living without Youtube. Did that well enough. — https://lists.ubuntu.com/mailman/listinfo/ubuntu-users
I generated a docset for Purescript with pursuit.docset. However, I’m skeptical about its added value. I’m using Dash docset in Neovim via vim-dasht, and I noticed that oftentimes the online help for simple query like filter
or partition
are pretty vague. E.g., in the case of filter
the very first hits are all about _filter :: forall r a. Lens' { ... } a
, while none of the first matches for partition
yields the same result as a simple query on Pursuit (filter :: forall a. (a -> Boolean) -> Array a -> Array a
).
This document is a sort of quine. If you select the whole page in your browser and paste it into a file, this text shows up encoded in a weird Markdown variant embedded in a string literal inside a Racket lisp script. Evaluating the file with
racket -f $FILE
evaluates the lisp, converting the weird Markdown and producing the same HTML document that your browser received. — https://cgad.ski/
Compiling Chicken Scheme scripts. #scheme
Vim is not an IDE. It can be customized to look like one, but the more you try to make it to look like an IDE, the less it behaves like vim (fast and lightweight). If you need a full-fledged IDE features, use a real IDE. — Why I Use Vim
Ashby’s book “Introduction to Cybernetics”: One of the very first English textbook I bought when I was a PhD student involved in some kind of Neurosciences back at the time.
♪ Fay Claassen · Almost Blue
I keep getting this kind of weird stuff on my pretty old iPhone. Internet was less complicated back in the time, especially when Apple was not tying up software to hardware to such an extent.
Everything you ever wanted to know on how to execute a command in multiple files in Vim. I mostly use argo
and cdo
. #vim
TIL that there are some interesting C programming tips on Neovim wiki. #vim
#clang
No more nvim-lspconfig means 15 ms less time spent in starting up! #vim
TIL that you can clear your Tmux paste buffers by tagging everything (C-t
) then deleting it (D
).
Pytest is really great: even simple assert
statements get processed, no need to write complex fixtures or test suite. This means you can write your scripts as usual and just import pytest
. To avoid contaminating your current directory with __pycache__
and .pytest_cache
directories, set the exported variable PYTHONDONTWRITEBYTECODE=1
and call pytest with -p no:cacheprovider
. You can set a simple compiler and errorformat for (Neo)vim by following this blog post. Personally, I use makeprg=pytest\ --tb=short\ -vv\ --no-header\ -p\ no:cacheprovider\ $*
instead. #python
#vim
Ergonomic mappings for code formatting in Vim: Very nice tutorial on code formatting and how to write VimL functions that exploit gq
. #vim
OpenBSD Handbook. #unix
But let’s just put it this way (and here I’m being charitable): in all my years of using Word, this happened more than once. In all the time I’ve used text editors, it’s never happened, even once. — Why (and How) I Wrote My Academic Book in Plain Text
The most important thing to learn correctly about Vim is to understand that you talk to Vim when you edit text. Vim has a grammar. The next important thing is to learn how to use Vim macros. Vim - I hate to love you
But just think back. In the past say ten years, what changes and innovations have had a real and true life changing impact on you? I am sure you can think of something, but I am also pretty sure that nothing has happened on a monthly or weekly basis that was so important that you absolutely had to know about it at that very moment. — Do you feel overwhelmed trying to stay up to date with the latest tech news?
No more plugin manager, yet a fast startup time. #vim
♪ Foo Fighters · Shame Shame
Vim is great for cleaning a text file using search and replace, but sometimes Unix tools are even better: if you want to remove consecutive blank lines, just call cat -s
on your text file.
Over the last decade or so, Apple has been hard at work in simplifying the user interfaces that power its myriad platforms. I’ve welcomed most of that work, but it’s hard to deny that we’ve all lost some things along the way. — The History of Cover Flow
Interesting read on enumerating trees. #haskell
The discrete logarithm. #math
There is a phenomenon in society which I find quite bizarre. Upon our entry to this mortal coil, we are endowed with self-awareness, agency, and free will. Each of the 8 billion members of this human race represents a unique person, a unique worldview, and a unique agency. Yet, many of us have the same fundamental goals and strive to live the same life. — Going off-script
There was a time we were able to wait the end of film or series credits to learn about the song titles and things like that. Thanks to Netflix, this is no longer possible, you will switch to the next ep. before you have time to reach the end of (all due) credits. Old times good times.
Linux is borrowing unused memory for disk caching. This makes it look like you are low on memory, but you are not! Everything is fine! — Linux ate all my RAM
Picking when to assert is much like picking when to comment, except more explicit and more effective. — How to assert for fun and profit
Exploratory Data Analysis for Humanities Data, and a load of Awk and Python scripts on the Literature as Data homepage.
What is in a modern code editor? Auto-formatters and terminal emulators are really a plus, indeed.
Out of curiosity, I plugged my DAC (the little box above the Denon amp in this post) onto my computer and, guess what, it just worked!
♪ Arlo Parks · Black Dog
Software used to be less demanding at one time.
Cc: haskell-cafe <haskell-cafe@haskell.org>
Date: Tue, 3 Oct 2023 06:46:02 +0200
Subject: Re: [Haskell-cafe] two HLS processes with same name
macOS needs just 1-2GiB of wired RAM, don’t worry…
I’d gone to buy some charcoal fixative but there was none in the bookshop. Hold my beer, I came away with these books:
TIL about paps, as a replacement for a2ps for printing to a PS file (this is useful to print Neomutt email when there’s no default printer on your machine). h/t jimifiki
set print_command="paps --font='Monospace 10' > /home/chl/tmp/mail.ps"
♪ Alfa Mist · Sorry
It was the precursor of what was later known as the Gifi System, which is a large reorganization of descriptive multivariate analysis techniques in such a way that they apply both to numerical and non-numerical data. That covers regression and principal components analysis, factor analysis, all those techniques in one common framework and ultimately in a series of computer programs as well. My dissertation was basically the first programmatic statement of that program. The Gifi project itself ran until about 1990, I left in 1987, but there was still some ends to wrap up and the Data Theory group in Leiden that still existed at the time, wrapped up those loose ends. They produced a book, the final version of the Gifi book. — Interview of Jan de Leeuw by Lisa Wijsen
I was surprised to learn that he’s still publishing peer-reviewed papers and I was also very impressed to see that he’s still hard at work on working papers and books. h/t
♪ Portishead · The Rip
Measured: Typing latency of Zutty (compared to others): Sadly no stats for foot. Given the existing benchmarks, I would expect it to be in lowest range of typing latency as well but this would need some perf tests. #unix
♪ P!nk · Glitter In the Air
Building LISP, in under 6 C files (876 LOC). #lisp
Sidenotes In Web Design: I didn’t know there were so many JS and non-JS based framework for HTML sidenotes.
TIL about Harlequin which looks really great. #database
Thanks to notify-send.sh I can now update the mail notification from Neomutt in Ubuntu notification center since it allows to replace an existing notification. This should be available in more recent versions of notify-send
(Ubuntu ≥ 22.10).
set new_mail_command="notify-send.sh --replace-file=/tmp/muttnotification -a neomutt -u low -i neomutt 'New Email' '%n new messages, %u unread.' &"
Beforehand I tried notify-send.py which didn’t quite work.
The idea is to take a train somewhere (unspecified) for four hours, have lunch, then take another train home. The train would be my 90mph office with scenery for those four hours in each direction, and I’d get to enjoy lunch somewhere new. I’d do a full days work with the view out the window constantly changing. — The 90mph office
(Python) types are very broad hints and they are sometimes lies. — Compiling typed Python
Trying out texlab since yesterday. So far it has been working smoothly alongside vimtex and null-ls (to format bibtex files). Last year I played with Tectonic, which looks great, especially if you don’t want to manage a full installation of the $\TeX$ system. Both seem to play well together. #vim
#tex
Exploring the Top Neovim Distributions: LazyVim, LunarVim, AstroVim, and NVChad — Which One Reigns Supreme?: either you get limited capabilities or you are blowing your RAM, right? #vim
Lovely: pastel.
Another nice article by Brian Hayes, on AI and the end of programming.
It appears that Neomutt can be quite slow when filtering/searching emails using body keyword or patterns and the “limit” (l
) command. It seems that Neomutt needs to open all emails beforehand, which makes sense but slow down any search operation. Now, as suggested in #3273, we can speed up things a lot by disabling the auto_view text/html
feature. My benchmarks confirm those of the poster, with around 13K messages in my Archives. I don’t know how to disable auto_view temporarily, but since I can use mu-find
to search my email database, with almost the same syntax, I do’nt have to worry much: results are almost instantaneous!
macro index \Cf "<shell-escape>mutt-mu " "mu find"
macro index gf "<change-folder-readonly>~/.mu/results<enter>" "mu find results"
Here, mutt-mu
is a short shell script for mu find --clearlinks --format=links --linksdir=~/.mu/results "$1"
.
Category Theory Illustrated “is a primer in category theory and other mathematical theories that is made to be really accessible to people with no prior exposure to the subject, without being dumbed down, by utilizing visual explanations.”
OMG, now they call it Drive… #apple
Common Lisp Nova Spec: A better (?) help center than the CLHS. #lisp
In the end, the main thought here is the following: build using simple proven techniques even if you’re using a technology like Haskell. For anything extra (like dependent types, formal verification, etc.) you might want to think twice and thrice. And still remain uncertain. — The types got you
Yet Another Rust Resource (YARR!): If you ever wanted to quickly get some insights about Rust, it offers a nice overview of the language.
A slightly updated version of all my emails as discussed in a post in 2014. Note that I’ve reduced my mailbox to 20% of its original size since I wrote the blog post, and I keep archiving very few new messages. Also I resubscribed to a bunch of mailing-lists in 2022, which I keep in separate Maildirs but they are included in this chart. I’m still a happy user of mu.
Updated code (because mu-find
now uses the system locale to format dates):
$ export LC_ALL=C
$ mu find --sortfield=date --fields="d" date:17y..1d | \
awk -F " " '{print $5 "-" $2}' | \
uniq -c | awk '{print $2 " " $1}' > 1.dat
library(ggplot2)
library(scales)
library(zoo)
Sys.setlocale("LC_ALL","C")
d <- read.table("1.dat", header = FALSE)
d$V1 <- paste(d$V1, "15", sep = "-")
d$V1 <- as.Date(as.POSIXct(d$V1, format = "%Y-%b-%d", tz = "GMT"))
names(d) <- c("Time", "Emails")
p <- ggplot(data = d, aes(x = Time, y = Emails)) +
geom_line(color=grey(.5)) +
geom_line(aes(y=rollmean(Emails, 12, na.pad=TRUE)), linewidth = 1.5) +
scale_x_date(breaks = "1 year", minor_breaks = "2 months",
labels = date_format("%Y")) +
xlab("") +
theme_bw()
ggsave("allmyemails.png", p, width = 12, height = 5)
A little wrapper around the terminal version of What-The-Format.
One of the guiding lights of the UNIX utilities or software tools has been the deeply-felt conviction that text should be stored in as simple, as general a format as possible so that any program can easily process it. This idea (it seems to have been present from the beginning) has had the widest impact possible on UNIX in all its varieties. However, there has been a regrettable tendency to move away from it in recent times, especially among commercial software developers. — UNIX Evolution: 1975-1984
The point is, there’s no reason why this bug — and it is a bug! — should have stuck around for so long. If your terminal emulator gets told to make text blue, and instead it makes it unreadable, then you can’t say that’s not a problem with the terminal emulator. — That Annoying Shade of Blue
♪ Bentley · Left Right Goodnight
Visual explanations of core machine learning concepts: Very nice and interactive illustrations. #statistics
TIL about CIEL, an an Extended Lisp that looks really cool. It includes a bunch of useful libraries (Alexandria, Trivia, arrow macros, etc.) and provide an IPython-like REPL experience (shell pass-through, helper commands, documentation and lisp-critic). #lisp
♪ Angel Olsen · All The Good Times
Curl supports a crazy number of protocols, from HTTP, FTP and TELNET to IMAP, LDAP and GOPHER. It runs on 92 operating systems and has over 20 billion installations worldwide. — Mastering curl: interactive text guide
binary search trees: A thorough treatment of binary search trees enriched by an interesting comment thread.
Doppler looks like iTunes reinvented. (via Tom Macwright)
An Intuition for Logarithms. #math
13 ways to look at table joins. #database
Carole Zalberg, Tes ombres sur les talons (Grasset).
Among many of the text-based UIs advantages, I found that the ability to copy-paste almost anything using Vim shortcuts via tmux or the shift+ctrl combo of my terminal emulator is one of my preferred. Here is an excerpt from my long-running (server side) Irssi session, as a tribute to Vim’s creator:
23:57 -A_Dragon(A_D@libera/staff/dragon)- [Global Notice] The Matrix bridge is experiencing continued stability and privacy issues; we have requested it be shut down until they are resolved. Matrix have agreed
to shut down the bridge no later than 1400UTC on Saturday. Feel free to ask further questions in #libera-matrix
---- Day changed to 05 août 2023
17:35 WALLOP kline: Bram Moolenaar finally :wq after many years contributing to free software, his relentless hard work making vim arguably the #1 editor in the world. RIP Bram, and thank you for your work.
https://groups.google.com/g/vim_announce/c/tWahca9zkt4
---- Day changed to 06 août 2023
TIL that GitHub renders warning or note blocks with a special formatting in Markdown document, e.g. here.
Nushell isn’t exactly a shell, at least not in the traditional Unix sense of the word. Nushell is trying to answer the question: “what if we asked more of our shells?” — The case for Nushell
With recent support for data frames, it becomes an interesting challenger for tiny on-the-fly data wrangling scripts. Beware that it relies on polars-arrow which (most of the time) require a recent stable Rust. Also, if you encounter an E0034 (“multiple applicable items in scope”) when compiling polars-related dependencies, try adding --locked
to cargo install
. When you’re done, enjoy the power of data frames right into your shell!
With my last timing for processing a 30 Mb CSV file, loading the file in Nu shell is a breeze:
~/tmp> timeit {dfr open ./nycflights.csv}
70ms 682µs 766ns
~/tmp> timeit {open ./nycflights.csv}
1sec 194ms 477µs 961ns
First instruction uses dfr open
while the second instruction relies on builtin open
command.
♪ Benoît Delbecq · Anamorphoses
Until now when reading my feeds using Newsboat, I was simply filtering unread feeds, sorted by count using a dedicated keybinding (bind-key S rev-sort
, which allows me to simply press Su
to get the desired output). Now, I learned about l
which filters unread feeds. It is quite handy since it acts as a filter and the list of unread feeds empties itself as you read articles.
Understanding Automatic Differentiation in 30 lines of Python: A simplified yet effective illustration of AD in the context of neural network training. #python
My thoughts on Haskell in 2020. tl;dr Stick to Simple Haskell. #haskell
A Modern C Development Environment: A complete step by step tutorial to develop using Docker and GitHub workflow. Note that clang-tidy is available in ALE for Vim. If you use Neovim, the the clangd LSP already uses clang-tidy, or you can just add --clang-tidy
to clangd parameters. Extra options can also be added in a .clang-tidy
file. See also clang --help-hidden
.
As a sequel of one of my last benchmarking post, here’s a rough estimate of Polars vs. Datatable performance when reading a 34 Mb file (NYC Flights Dataset, available from avrious sources; see e.g., this post):
import time
import datatable
import polars
tic = time.time()
flights = polars.read_csv("nycflights.csv", null_values="NA")
toc = time.time()
print(f"Elapsed time: {(toc-tic) * 10**3:.2f} ms")
## => Elapsed time: 54.61 ms
tic = time.time()
flights = datatable.fread("nycflights.csv")
toc = time.time()
print(f"Elapsed time: {(toc-tic) * 10**3:.2f} ms")
## => Elapsed time: 57.60 ms
Polars also offers a lazy CSV reader using scan_csv
, which is way faster (1.22 ms). #python
Identity Beyond Usernames. For random UUIDs, see also Fixed Bits of Version 4 UUID.
Now, I’ll be quick to admit that you probably shouldn’t spend a huge amount of time trying to install something from source. For many packages the best case scenario is a complicated process requiring specific build tools and dependencies with their own complications. The worst case scenario is poor or lacking documentation and no idea how to even get started. — Try installing from source first
I did install from scratch almost any app/program on my Mac 15 years ago. At that time, Mac systems were transitioning from 32 to 64 bits, and it was kind of a mess for some programs. Then I got bored and I choose to rely on Homebrew. Then Homebrew got sort of broken on my Macbook, and I was back at the magic incantation configure && make && make install
.
Email Authentication: A Developer’s Guide: I got my emails treated as spam by Gmail when using my www provider (OVH), which is probably why. And this doesn’t happen when I send emails via may mac.com account. Note that Google only started rejecting my principal domain name a few months ago, or maybe last year.
Also, whenever someone tells me that Arch never breaks, “You just have to read the blog”. Uh, okay. No thanks. I’m not reading all the latest news about any other device I allow updates to. I’m not starting that nonsense in my fifties. — Why I use Ubuntu
If you cannot solve the proposed problem try to solve first some related problem. Could you imagine a more accessible related problem? A more general problem? A more special problem? An analogous problem? Could you solve a part of the problem? — G. Polya, How to Solve It
Which is probably why we face so many times the XY problem on forum, QAs sites, and mailing lists.
This post is a detailed discussion into user profiles, their directories, and how they are—to put it bluntly—in total disarray on Windows and Linux (I haven’t used a Mac in ages, but I assume the situation is very similar there, too). Applications treat the user profile as a dumping ground, and any user with a reasonably wide list of installed software will find their user profile very difficult to traverse after some time in use. There are platform conventions and attempts to standardise things on more open-source platforms, but a lot of developers resolutely refuse to change the behaviour of their software for a variety of reasons (some less valid than others). —
$HOME
, Not So Sweet$HOME
TIL about lei: Using lei, b4, and mutt to do kernel development.
Non-Euclidean Geometry Online: a Guide to Resources: As the title suggests, a bunch of online resources to learn more about elliptical and hyperbolic geometries.
GNU Parallel, where have you been all my life?: Yet another nice example of why parallel
is such a great program. I learned to use it a while ago, after having read Jearoen Janssens’ wonderful book, Data Science at the Command Line, in its first edition. BTW, the 2nd edition is available online for free.
Home sweet home.
Usually I send read-only documents to clients. They don’t know or care what program created the PDF I sent them. The fact that they cannot edit my reports is a feature, not a bug: if I’m going to sign off on something, I need to be sure that it doesn’t include any changes that someone else made that I’m unaware of. Convert LaTeX to Microsoft Word
I used to do the same for years when I was consulting. Main issue was tabular output, which can be beautifully rendered in $\LaTeX$, but not so in plain MS Word.
Data-oriented design takes its cues from the data which is seen or expected. Instead of planning for all eventualities, or planning to make things adaptable, there is a preference for using the most probable input to direct the choice of algorithm. Instead of planning to be extendable, it plans to be simple and replaceable, and get the job done. Extendable can be added later, with the safety net of unit tests to ensure it remains working as it did while it was simple. Luckily, there is a way to make your data layout extendable without requiring much thought, by utilising techniques developed many years ago for working with databases. — Data-Oriented Design
Desktop Linux Hardening. Lot of useful advices in this article. E.g.,
snapd (Snap) assigns a unique ID to your installation and uses it for telemetry. While this is generally not a problem, if your threat model calls for anonymity, you should avoid using Snap packages and uninstall snapd.
Moving Blazingly Fast With The Core Vim Motions, but see the whole tutorial. The author makes use of sound illustrations and takes us on a tour of Vim’s core concepts, with casual or VS Code users in mind. #vim
Just found out that we can get cover art with cmus thanks to this fork!
Functional Programming in Data Science Projects: Interesting thoughts about FP for statistical computing. Another take was once available on Brian Lee Yung Rowe’s weblog, soon to be published as Modeling Data With Functional Programming In R. Thomas Mailund also wrote some words about that approach (see Functional Data Structures in R). And of course, Mathematica with its native support for multiple programming paradigms would be a good candidate too. #statistics
Interesting Lisp-related stuff on this HN thread about Reddit. #lisp
>>> import sqlean as sqlite3
. #database
#python
Shell programming is remarkably easy in many cases; what’s sad is that this common case (file processing) is far complicated than it needs to be. This is not a problem limited to shell; while shell is especially tricky, it is difficult to correctly process POSIX pathnames in all languages. — Filenames and Pathnames in Shell: How to do it Correctly (via The shell scripting trap)
In my view this isn’t about adhering to the XDG standard[3], it’s about getting things out of
$HOME
. Unix dotfiles were always a (somewhat accidental) hack[4], and over the years we’ve accumulated entirely too many of them in our$HOME
s. The XDG option isn’t particularly perfect, but it’s at least a standard approach and it achieves the goal of getting dotfiles out of$HOME
. As a side effect the XDG approach makes things more legible if you look in~/.config
. — Where your program’s configuration files (‘dotfiles’) should go today
♪ Johanna Warren · I’d Be Orange
Your true audience (those who care) is about 1% of your subscribers. 1000 followers on Twitter? Your audience is 10 people. 10000 email subscribers? 100 people. — Blogging Myths You Should Care About
But the language landscape has changed a lot since then, and realistically no programmer today cares about what made a language stand out 50 years ago. Clearly, the good ideas have been copied into other languages. Paul Graham even suggests this convergence towards Lisp is inevitable. I wouldn’t go so far. But this begs the question: Is there anything left? Are there any features that couldn’t be copied so easily into the various descendants of Algol? — What Are the Enduring Innovations of Lisp?
Reduce vs fold in Common Lisp: Interestingly, R whihc is often referred to as a Scheme-like language has Reduce
as one of its higher-order function, but no fold[lr] functions in base. Modeling Data With Functional Programming in R (whole book available in 2024 maybe?) looks like an interesting take on this topic. #rstats
#lisp
The idea is that if I found it confusing, lots of other people probably did too, even though the information might theoretically be out there on the internet somewhere. Just because there is information on the internet, it doesn’t get magically teleported into people’s brains! — Some blogging myths
Shoot at night
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it? (Brian Kernighan) — Clever Code Considered Harmful
it also confirmed another sad aspect of being on the spectrum: you can have a very large tolerance for people having bad expectations of you because you learn at an early age that you must accommodate others in order to survive. — Autism is everywhere and in everything
Pretty little music player. See this review for more details.
♪ P!nk · Bad Influence
Or maybe I’m just an old guy looking back and romanticizing the early days. I’m back to coding in C again, writing little inconsequential games to amuse myself. Or maybe there was something a little magical then. Simpler times? — Same Stop
The people who insist that the manpages are all you need will sometimes dismiss guide-type documentation as tedious to work through; they’d rather learn things from a reference, they say, because that way they can jump around in it and look for the specific bits that are relevant to them right now. And that’s fine—if they’re right that the stuff they’re skipping over isn’t relevant to them. But it also has negative practical consequences. — I Didn’t Learn Unix By Reading All The Manpages
Nice stuff. The evolution of a Scheme programmer. You may also like The Evolution of a Haskell Programmer. #scheme
#haskell
At the time, however, Linux didn’t seem to have a word processor (I’m sure it actually did). What did people use to write documents? When I asked someone at the local Linux Users’ Group about this, they told me about LaTeX. And that began a very long love affair with typesetting in general and TeX in particular. I have used some variation of TeX/LaTeX to write pretty much every paper, every article, every talk, every letter, every slide, and every lecture I’ve written for the last twenty-five years. — Beautiful Documents with Groff
It basically boils down to two things - using type hints as much as possible, and upholding the good ol’ making illegal states unrepresentable principle. — Writing Python like it’s Rust
TIL about click, a package for creating beautiful command line interfaces in a composable way with as little code as necessary. #python
Autocompletion is not an aid to make it easier to write code. It does not do that. What it does actually do is make it easier to architect code. Writing code is easy; all it involves is writing text. Any trained monkey can write code. Deciding what to write is decidedly harder. That’s the true task that programmers do. Following from that assertion, writing code and deciding what code to write (designing or architecting) are distinctly separate tasks. Therefore you should not decide what to write as you are writing code. — Why I Don’t Use Autocomplete
First peonies of the year.
For example, you remove an attribute from a class definition. Your existing objects get (lazily) updated to reflect that change, following a rule you even have control upon. You don’t have to restart a process and then re-create your objects. The same is true for Lisp web development. You can create a new route, compile it and try it live without restarting the server. You didn’t have to restart a process. It’s all very interactive with instant feedback! — Why Lisp?
Spinach, goat cheese and chorizo.
Today I had to rollback nvim to a previous state: one or some of the last pushes on the nightly branch broke my LSP setup, which would no longer autostart. No luck, just when I said I never encountered a single breaking change in Neovim core in months. #vim
Config (282.0 total hours, 5.0% of all time): Time spent on actual Emacs configuration. — 916 days of Emacs
But there’ll be winners and losers – everyone agrees. If it’s good, then the productivity gains will be unevenly distributed and those with only basic abilities - in programming, writing, music will be replaced by the machines, or by someone using a machine to produce a lot more of the product. If it’s bad, the people using the AI will benefit but those at the other end of the algorithm, those subjected to AI-powered policing, healthcare, or hiring are subject to the inaccuracy, bias, or malice built into the system. — The one about AI
Back to Kitty, as a replacement for Alacritty which I enjoyed using the past few months. I still use Tmux, though. #unix
Interesting blog post if you want to learn more about Chicken Scheme’s internals: CHICKEN internals: data representation . #scheme
Functors and monads are powerful design patterns used in Haskell. They give us two cool tricks for analyzing data. First, we can “preprocess” data after we’ve already trained a model. The model will be automatically updated to reflect the changes. Second, this whole process happens asymptotically faster than the standard method of preprocessing. In some cases, you can do it in constant time no matter how many data points you have! — Functors and monads for analyzing data
♪ Lady Blackbird · It’ll Never Happen Again
Blade Runner 2049: +1. Although, (1) it is way too long (163’), and (2) the end (I mean, the last hour really) leaves much to be desired. Now, I started watching The Last Kingdom, after Vikings and Vikings Valhala. I guess I will still prefer Vikings over the two other ones. #self
The Serokell and Tweag blog are really amazing if you are interested in Haskell (or Rust, or Python). Even older posts are still relevant today: Enter the matrix, Haskell style. #haskell
At some point, I should make a chart to inspect how the tags on the main blog evolved over time. I expect that R progressively faded in after 2016, and that the rate of functional programming language-related posts increase in recent years, while readings and other technical reviews actually remain quite the same as in previous years. #this
A ChatGPT Emacs shell. Of course. What if we can’t put this right under an Emacs key chord? ;-) Nice work by the way! See also Building A ChatGPT-enhanced Python REPL.
TIL about another DB backend: How RocksDB works.
Most of the software I write is not for sure going to become a big system. — Why Perl?
♪ Cabaret Voltaire · Be Free
♪ Adam Wakeman · Sunrise Over L.A.
Today’s lunch.
In a perfect world, I imagine a little robot reading everything alongside me. He records the references and key ideas of each piece. After I write a post, he’d comb through my post sentence by sentence, linking every important phrase to its source. — Keep Stuff Linkable
You want to work with a co-worker on a piece of software? If you’re in the same room, sitting at the same table, looking at screens side-by-side, any communication between those two computers is actually happening [by sending signals] across the ocean to some data center, to some other server and then coming back to you. One: that’s crazy. But two, it’s also very slow and expensive and it doesn’t have to be that way. — Offline Is Just Online With Extreme Latency
Back from the old town.
Time to go back watching God’s Crooked Lines.
Looks nice: “I like Janet so much that I wrote an entire book about it, and put it on The Internet for free, in the hopes of attracting more Janetors to the language.” — Why Janet?
Common Lisp Tweaks. #lisp
Writing lets me do that while also helping me avoid going around in circles. When thoughts are in my head, it’s easy for them to get jumbled up. I miss things, and I keep coming back to the same thoughts, leading to the unproductive ruminating. But writing my thoughts down stops that process. I am forced to organize my thoughts in a coherent manner and to acknowledge when they don’t make sense. Thoughts in my head are like a mixture of dirty water, while writing is like a filter. It removes the nonsense from my thinking. — Why I Blog
TIL about closing a stale SSH connection.
Farewell @kinkybambou. Even after I left Twitter, I have been following you irregularly to hear from you. I have no words. All of my thoughts to you, Minette, Loulou and Nono.
Fast reference to common SRFI. Handy bookmark. #scheme
TIL about ruff, for linting Python code. #python
If you see a count: int, what kind of guarantee do you have that the count name is actually bound to an int object at runtime? — The different uses of Python type hints
No guarantee at all since Python’s type hints do not enforce type safety: “The Python runtime does not enforce function and variable type annotations.” However, the author makes a good point in exposing the different use cases of type hinting.
The immediate future is easy to predict, because the same things that has been happening for years will continue to happen: Some of the exciting recent advances will be cancelled out by new compiler regressions due to fancy new compiler features. We users will create still deeper code stacks that racks up latency, even more so with Julia 1.9 now that latency has improved and we can “afford” to do so. — Julia’s latency: Past, present and future
♪ Avenged Sevenfold · So Far Away
The Many Faces of an Undying Programming Language. An entertaining discussion of Lisp, Scheme(s), and other dialects. #lisp
#scheme
Deforming programs so they are ‘iterative’ in order that they do not run out of the stack we imagine to be so costly is ridiculous: if you have a program which is inherently recursive, let it be recursive. — The absurdity of stacks
The LAPACK (Linear Algebra PACKage) online document browser is really nice. TIL there’s even a routine to perform QR factorization without pivoting to a real or complex matrix (related R package: QR).
littler 0.3.18 on CRAN. It’s been a faithful and reliable alternative to Rscript for a long time now (17 years and counting). #rstats
Multiple Linear Regression in SQL with Only SUM() and AVG(). For those interested in multiple regression and residualized regressors as well! #statistics
If you type something that looks like a filename, you probably want to prioritize filename matches. When your search query looks like a filepath, you probably want to use an algorithm designed for filepath matching. This makes zf a “do what I mean” program. — A different approach to fuzzy finding
♪ Plain White T’s · Hey There Delilah
Together with Vinfo, dpans2texi makes it easy to navigate through CL help files. Be sure to apply the following patch as well. #vim
#lisp
Peonia is waiting for its time…
Testing my new mapping of the month:
nnoremap <expr> <tab> tabpagenr('$') ==? 1 ? "<C-^>" : ":tabnext<cr>"
Basically, use TAB to switch to the alternate buffer when there’s no other tab, otherwise go to next tab (and cycle). #vim
♪ Washed Out · Amor Fati
Each time I take a look at This week in Neovim (#33 right there), I feel like there’s so much new stuff published every week that we will get another (M)ELPA for Neovim packages at some point. #vim
European Route Planning: Clear and elegant use of postgres and shell scripting.
I’ve been using part of mini.nvim last year but for now I’m just loading the completion module. I noticed there’s an increased number of modules developed since last time I checked. I warmly recommend those modules if you want something light, easy to install and to setup. #vim
My IRC bouncer (BNC4FREE) has been down for one week. Time to go back running Irssi in a detached Tmux session on a local server.
Spatial sampling with R. Lot of pretty illustrations and good old base R code. #rstats
♪ Memory Tapes · Bicycle
Kopia is ridiculously fast and over-optimized. I don’t miss Arq or Borg. I have an hourly schedule for local snapshots, and a weekly sync to an external HD, which never failed me so far.
I successfully installed Forge and Controllable for the Minecraft (Java Edition) running on my laptop. Now I can use a PS5 controller to play instead of keyboard shortcuts. Okay, it must be 5 years since I last played, but I’m glad to find a game environment close to the PS4. Sadly, I can’t play my old PS4 maps on the Java edition, which means I need to create a new one.
♪ Marianne Faithfull · Crazy Love
♪ Lou Reed · Lisa Says
The highest upvotes I got on Cross Validated is for a quick reply where I mentioned the Gifi “nom de plume”, which I miss a lot. Enjoy your “unfinished” retirement, Mr./Dr. Jan de Leeuw, and happy foometrics (PDF)!
If Foo is a science then Foo often has both an area Foometrics and an area Mathematical Foo. Mathematical Foo applies mathematical modeling to the Foo subject area, while Foometrics develops and studies data analysis techniques for empirical data collected in Foo. Each of the social and behavioural sciences has a form of Foometrics, although they may not all use a name in this family. — de Leeuw, 2006
The thing I really appreciate under Ubuntu or OpenBSD compared to macOS is the package manager. So bad Apple decided to move away from the Un*x world. I miss the old good stuff that was lying around there. #apple
#unix
Also, I deleted Apple Music on my iPhone. Thanks for the goodies. Back to listening to ripped CDs!
I recently came across some Racket code on Reddit that implements Fenwick trees, aka binary indexed trees (BIT). Fenwick’s article, which is not the original paper on that particular data structure, A New Data Structure for Cumulative Frequency Tables (PDF) explains all the details, but there’s also a nice tutorial, as well as some applications for competitive programming.
So basically, I pay a yearly fee to get access to their SDK? Most manufactures provide that to you for free because they really want you to build apps for their platform. — Apple doesn’t want you developing hobby apps
UNIX contains a number of features very seldom offered even by larger systems. — Unix Edition Zero.
Dear LazyWeb: Setting up a new Mac, what are some groovy new monospace fonts for terminals and IDEs? — Modern Mono
I like screenshots. See also Monospace Acid Test for a more elaborated overview of modern monospace fonts.
Perhaps I’m on one of my periodic ‘minimalist’ adventures (which would seem to be borne out by my keyboard choice), but Emacs has recently felt a bit much to me, and made me curious about the current state of the art in Neovim. — Neovim again
I’m also quite happy with my minimal setup these days. It’s been running smoothly for several months now.
Alacritty with font ligature support, Tmux, Cmus, Neovim nightly.
Made with ♡ using Stata. See this blog post for details.
Shells are Two Things. The Python scripting example reminds me of a blog post written by Mathias Fußenegger who uses Haskell in interpreted mode as one of his scripting engine (see Why Haskell became my favorite scripting language), even if this totally unrelated to the points raised by Fernando Borretti.
I’ve been following Darren Wilkinson’s work for a long time now, and even if I’m not really interested in Scala I keep checking his blog and GitHub from time to time. He just released a course on functional programming for scientific computing, available at GH. Go check his blog to learn more: An introduction to functional programming for scalable statistical computing and machine learning.
The GIL is a major obstacle to concurrency. For scientific computing tasks, this lack of concurrency is often a bigger issue than speed of executing Python code, since most of the processor cycles are spent in optimized CPU or GPU kernels. The GIL introduces a global bottleneck that can prevent other threads from making progress if they call any Python code. There are existing ways to enable parallelism in CPython today, but those techniques come with significant limitations (see Alternatives). — PEP 703 – Making the Global Interpreter Lock Optional in CPython
♪ Sheri Weldon · A Taste Of Honey
I just made my GH biostats public, just so you know how I like playing with translating R code to other languages, without any hope of finishing this new side project anytime soon. Details in this longer blog post. Want some crazy plots? Go to the figs
directory in each language and compare the output. Be aware this is highly work-in-progress, as advertised on the GH repo, and there are many bugs lying around. Anyway, no more raw Matplotlib for me, I felt in love with plotnine.
Best way to learn about recent (non-breaking) changes in ggplot2 is to rerun your old R code. Now I know that :
Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. Please use `linewidth` instead.
The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as of ggplot2 3.3.4.
Other than that, I found that the theme_minimal()
is as good as the hrbrthemes:theme_ipsum
. Less dependencies, clear and elegant graphical output.
Listening to the last album from Tindersticks, Stars at Noon. Great artwork, as always. Now I need to buy their Past Imperfect compilation, which featured a limited edition box set comes with a double LP of Live at Glasgow City Halls, 5th October 2008.
Users who want to block all such external mediaanalysisd look-ups can do so using a software firewall to block outgoing connections to Apple’s servers by that process through port 443. That may well disable other macOS features. — Is Apple checking images we view in the Finder?
Twenty years-old stuff that are still lying around, even though I wear the ring most of the time.
Secure Ubuntu 18.04 server setup: Never tried to use an encrypted LVM volume unlockable via SSH. It looks like an interesting approach:
Applying encryption is fast when it is done upon creation: since the initial contents of the partition are ignored, they are not encrypted; only new data will be encrypted as it is written. — Ubuntu LVM Encryption
♪ Massive Attack · Inertia Creeps
Algorithms for Modern Hardware is a gold mine in the field of high performance computing.
Elements of Data Science is “an introduction to data science for people with no programming experience. My goal is to present a small, powerful subset of Python that allows you to do real work in data science as quickly as possible.” Great work by Allen Downey as always.
In fact, the vast majority of my editing tasks – probably as much as 98% – are performed exactly as if I was in Vim. (For the other 2% I’ve invented my own Vim-style keybinds.) Normally, I don’t notice that I’m actually not in Vim. The fact that I happen to be running the Emacs process is a mere technicality. — On Escape Meta Alt Control Shift
♪ Carpenter Brut · Maniac (feat. Yann Ligner)
As a sequel of this old post of mine, here is the complete archive of the 467 answers I provided on Cross Validated during ten years or so. Note that this a raw (unedited) HTML, with many tiny bugs along the way, mostly related to Unicode encoding and missing images from imgur. I can probably with the UTF-8 issue by using a different processor than htmldoc. As for the latter, I believe the issue comes from Pandoc, since I retrieved a larger number of images manually using curl (tarball archive).
The family therapist Salvador Minuchin declared, “The human experience of identity has two elements: a sense of belonging and a sense of being separate.” This is as good a description of digital identity as it is of our psychological identity. A digital identity contains data that uniquely describes a person or thing but also contains information about the subject’s relationships to other entities. — Defining Digital Identity
♪ John Scofield · Danny Boy
In the beginning, there were blogs, and they were the original social web. We built community. We found our people. We wrote personally. We wrote frequently. We self-policed, and we linked to each other so that newbies could discover new and good blogs. I want to go back there. — Bring back personal blogging (h/t Jack Baty)
TIL that TeXlive now includes pdfxup
as a replacement for the good old pdfnup
. Time to update my oldie shell alias alias p2x1="pdfnup --nup 2x1 --landscape --suffix '2x1' --batch "
.
♪ Kaiser Chiefs · Ruby
Have been sick during two weeks. One week later, here are my top tags on Last.fm:
ooh.directory: If you’re looking for unusual or hard-to-find websites via Google or friends… (h/t bsag).
♪ Wolfsheim · Once In a Lifetime
Happy lazy loading of Neovim plugins (actually 15 plugins, including 13 opt plugins):
» vim-startuptime -vimpath nvim
Extra options: []
Measured: 10 times
Total Average: 15.662100 msec
Total Max: 16.085000 msec
Total Min: 15.505000 msec
♪ Matthew E. White · Will You Love Me
Introduction to Locality-Sensitive Hashing. #statistics
The Boxer, the Wrestler, and the Coin Flip: A Paradox of Robust Bayesian Inference and Belief Functions (PDF, 5 pp.). #statistics
APITable, an API-oriented low-code platform for building collaborative apps and better than all other Airtable open-source alternatives.
Wavefunction Collapse is a very independent-minded algorithm, and needs almost no outside help or instruction. You feed it an example of the vibe you’re going for, and it figures everything else out for itself. Despite this self-sufficiency, it is surprisingly simple. It doesn’t use any neural networks, random forests, or anything else that sounds like machine learning. — The Wavefunction Collapse Algorithm explained very clearly
Reanimate: Build declarative animations with SVG and Haskell. #haskell
How I still use Flash in 2022. I sometimes miss that time. CSS is great but Flash was really adding value to some indie websites back in the day.
♪ Joy Division · Love Will Tear Us Apart
JSXGraph: Dynamic Mathematics with JavaScript.
LosslessCut: The Swiss Army Knife of Lossless Video/Audio Editing.
♪ Mal Waldron · Mistral Breeze / Sieg Haile
Code can only ever be fast if it’s written with the contraints of computer hardware in mind, and idiomatic Python isn’t. — What’s great about Julia?
♪ New Order · 5 8 6 (2020 Digital Master)
And we see that machines can fail Statistics, just like college students. — Just How Good Is ChatGPT in Data Science?
The Database Cookbook For Developers. #database
♪ Neil Young · Heart Of Gold
♪ Norah Jones · To Live
So many things already built-in in Mathematica… via Using Julia from Mathematica
Introduction to Genomics for Engineers. #bioinformatics
The short version is that most of your Instagram photos are hidden from your followers unless they receive engagement in the form of likes and comments. — The Indie Web is Dead, Long Live the Indie Web
Ranking is a farce. Apparent performance is actually attributable mostly to the system that the individual works in, not to the individual himself. — W. Edwards Deming, via Statistical process control after W. Edwards Deming
♪ Anthony Joseph · Swing Praxis (Kaidi Tatham Remix)
GNOME doesn’t need to be that huge. #apple
#unix
Using a 12-bit colour depth limits the available colours, so slight changes to hue, chroma, and luminance must be made, but these are small enough not to be noticeable. The resulting palette has evenly-spaced hues, only small variations in chroma, and smoothly increasing and decreasing luminance. — The 12-bit rainbow palette
Quirks of C. #clang
Python Tips & Tricks. #python
Today’s readings: Clojure’s Transducers in Haskell, and Understanding Clojure transducers through types. #clojure
#haskell
♪ Catherine Moan · Drop It!
Blot/Painting p5js sketch. Lovely.
Build Your Own Text Editor. #clang
Get ready to read a sentimental post about a data structure, and don’t tell I didn’t warn you. — In defense of linked lists
♪ Bauhaus · In The Night
Why does calloc exist?. #clang
Privacy is necessary for an open society in the electronic age. Privacy is not secrecy. A private matter is something one doesn’t want the whole world to know, but a secret matter is something one doesn’t want anybody to know. Privacy is the power to selectively reveal oneself to the world. — A Cypherpunk’s Manifesto
Great set of lecture notes: QuantEcon Lectures.
♪ Anna Smyrk · Wallace Street
♪ Patti Smith Group · Seven Ways of Going
Futhark is a small programming language designed to be compiled to efficient parallel code.
♪ The White Stripes · Truth Doesn’t Make A Noise
It’s easy to get hung up on this. I’ve definitely felt the self-imposed pressure to only write something if it’s new, and unique, and feels like it’s never been said before. This is a mental trap that does nothing but hold you back. — What to blog about
Performance Musings. #unix
Before we embark on yet another defense of the language along the lines of: parentheses in Lisp are great, but only insiders can understand them. Let’s notice a second element that often confuses those who learn the language: in Lisp everything is prefixed. — Why Lisp
♪ Joy Division · Transmission
♪ Melanie De Biasio · Your Freedom Is the End of Me
Shell Script Best Practices. #unix
On the one hand, the hardware is great and so is the performance. On the other, getting a new Mac today means it comes with Ventura or Monterey preinstalled, which is unfortunate, and of course there is no downgrade path. — My next Mac might be the last
Little shell script to listen to some free internet radios:
#!/usr/bin/env bash
# sources
jazz="https://jazzradio.ice.infomaniak.ch/jazzradio-high.mp3"
misc="https://www.lemellotron.com/stream"
piano="https://pianosolo.streamguys1.com/live"
case "$1" in
jazz)
src=$jazz
;;
misc)
src=$misc
;;
piano)
src=$piano
;;
*)
echo "Unknown streaming source..."
;;
esac
mpv --no-video $src
♪ Clan of Xymox · A Day
TIL that sending Fzf results to the quickfix list is as simple as pressing <cr>
after selecting items using <tab>
. #vim
I find the developer experience of Common Lisp to be superior to almost anything imaginable, and this is not an empty statement: having used all sorts of IDEs and editors for over 25 years, I have seen many. — Between two Lisps
♪ Kavinsky · Nightcall
Python 3.11 is much faster than 3.8. #python
That’s right: what’s good for the lurkers is also good for everybody else. Just like all the great practices that enable remote work also made things better for anybody working in an office (if you remember what that was like and can believe that so many people just put up with that for so long), so does favoring transparency and following up on questions in the open improve all your team dynamics. — Learning By Lurking
♪ Johnny Klimek & Tom Tykwer · Neo and Trinity Theme (Johnny Klimek & Tom Tykwer Exomorph Remix) [from “The Matrix Resurrections”]
Render looks like an interesting alternative to Heroku.
Howdie! Eglot has landed on master
I think it all stems from Apple’s desire to simplify things for themselves, architecture-wise — Apple Silicon is quite innovative in bringing the advantages of iOS devices to Macs (performance + power efficiency). The terrible decision, in my view, has been to also want to bring the iOS look and feel to the Mac. It was unnecessary, it has broken so many tried-and-true Mac interface guidelines, and it has delivered a massive blow to the whole operating system’s identity. Just to make the Mac what, more fashionable? — My next Mac might be the last
I’m definitely not in favor of fossilizing Unix, but there’s a difference between avoiding fossilization and the kind of minimal, mathematical purity that we see GNU Grep trying to impose here. Unix has long since passed the point where it had that sort of minimalism in the standard commands. Modern Unix has all sorts of duplications and flourishes that aren’t strictly necessary, and for good reasons. One of them is that it’s nicer for the actual people using Unix. — We are stuck with egrep and fgrep (unless you like beating people)
Despite the fact that I spend hundreds of dollars a year and hours of work to host my own email server, Google has about half of my personal email! Last year, Google delivered 57% of the emails in my inbox that I replied to. They have delivered more than a third of all the email I’ve replied to every year since 2006 and more than half since 2010. — Google Has Most of My Email Because It Has All of Yours
Compilation database. #clang
♪ Adam Wakeman · Speak
Eggplant is a self-hosted music streaming service.
I dread the day in which I will hear a loud knock on my door and one of those programmers will barge in informing me that he is going to store a piece of his furniture in the middle of my living room, if I don’t mind. — Dotfile madness
OpenBSD Minimalist Desktop. #unix
TIL about FiraGO. Togther with Fira Math, it makes for a perfect combination of fonts for handouts and slides. Now, it’s a matter of adding the following declaration in my $\LaTeX$ preamble:
\documentclass[presentation,9pt]{beamer}
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
\setmainfont[Numbers={Tabular}]{Fira Sans}
\setsansfont{Fira Sans Condensed}
\setmonofont{Fira Code}
\usepackage[mathrm=sym]{unicode-math}
\setmathfont{Fira Math}
\usepackage{lstfiracode}
And it works perfectly well using Emacs Org export facilities!
♪ Clan of Xymox · Equal Ways
Instagram users can only write plaintext without any formatting and it even doesn’t look nice on the phone and you have to insert an image even in case you only want to post a message and you know what? Nobody cares. I can only talk about russian speaking segment of the platform but the amount of activity there is just crazy. People not only share cat photos there, but also buy and sell stuff, write analytical articles, do workshops and trainings without any problem. The fact that sometimes they have to literally edit the photo and put a text overlay on top of it (and it often looks like some of the worst myspace examples) doesn’t bother anyone. And all the communication is solved with a restricted instagram account or a closed whatsapp group. — From the basics to complexity and back
Typing Haskell in Haskell (PDF, 38 pp.). #haskell
Never got into J, but what a language! Random walk in 2 lines of J.
https://www.solopianoradio.com/. A good deal of piano for everyone!
The academic prestige of Latin and Greek underwent a steady, centuries long decline. Where do C and assembly fit on this map? We certainly aren’t in a Medieval University, where these topics were mandatory, but neither are we in a post-modern sociology class, where the classics are not only dead, but whose distant memory haunts our conscience. — Learn enough C to survive
(…) code should be as evident and transparent as possible in it’s intent and declarative programing (therefore functional programming) help us achieve this goal more effectively and efficiently than imperative programing. — Why I use typed functional programming
♪ London After Midnight · Demon
♪ Dead or Alive · You Spin Me Round (Like a Record)
If you just want the executive summary, here it is: these are definitely interesting algorithms from an arithmetic complexity theory standpoint – especially for the case of 4×4 matrices over finite fields, where (to the best of my knowledge) Strassen’s algorithm from 1969 was still the reigning champion. These algorithms are also practically relevant, meaning that not only do they have better asymptotic lower bounds than Strassen’s algorithm, they are still algorithms you might actually use in practice, unlike essentially everything else that has been written on the topic in the last 50 years: these algorithms are correct, and will in principle win over Strassen’s algorithm with large enough matrices, but that cut-off is well beyond the sizes that anyone is actually doing computations with. — On AlphaTensor’s new matrix multiplication algorithms
Partitioning in Postgres, 2022 edition. #database
An open-source tribute to the macOS Drift screensaver. I always enjoyed the “flame” screensaver, but that may well do the job as well! #apple
♪ Front 242 · Headhunter
How to configure neovim to properly format python code?. Simpler solution is to add this mapping to your after/ftplugin/python.vim
: nmap <buffer> g= :!black --quiet %<cr>:redraw!<cr>:!isort -q %<cr>:redraw!<cr>
. Not sure if we really need two redraw
, but it works quite well. This could be put in an autocommand if we want to format on save, say. #vim
Move a running process into a tmux session. This happened to me in the past, and I came up with a different solution, which involves the same steps but without reptyr IIRC. Now I forgot how I did…
♪ Bauhaus · Bela Lugosi Is Dead
♪ This Mortal Coil · Song to the Siren
Newsboat can use any external browser for displaying posts. E.g., Elinks instead of Firefox to allow for a more comfortable browsing experience while staying in a terminal:
Homotopy Type Theory. #maths
My personal productivity cycle is tied to this industry hype cycle. My schoolfriend back in 2003 was my personal “technology trigger.” From him, I rapidly learned some standard tools from Gartner’s plateau of productivity: PHP, MySQL, Apache. Then I surveyed the plateau more widely, finding Python, Postgres, and Nginx. A little further away, I had heard of Gartner’s trough of disillusionment. I sneered at the Perl, Java, CORBA. I’ll keep my Python, thanks. — The hacker hype cycle
The full text of my Introduction to the Theory of Programming Languages book (second printing, 1991) is now available.
♪ The Dresden Dolls · Coin-Operated Boy
♪ Nadje Noordhuis · Migration
The relationship between developers and App Store reviewers is tense at best. Most people are trying to build well-designed, useful mobile apps. Apple has instituted App Store reviews to maintain a high-quality bar for apps and weed out spammy or nefarious actors, using human evaluators to test individual apps and provide direct feedback. However, malicious apps are relatively rare; arguably, Apple doesn’t do a great job filtering them out anyway. — Outdated vs. Complete
Data types à la carte. #haskell
Types at the edges in Python. #python
TIL about Rclone, thanks to the following blog post: An Upside-Down Backup Strategy.
Cmus revamped!
I don’t tap my own phone. I don’t xerox postcards before I mail them back from vacation. I don’t take a voice recorder when I go out with friends. And I don’t have a copy machine at home to duplicate hand written notes I may send. — The cost of saving sent e-mail
I do like having local copies, both of my handxritten notes and of my sent e-mails. Digital nomadism, with one foot in the analog world.
The internet is no longer a place where a relatively-small fraction of the human population go to find something different than everyday life. It is everyday life for billions of people. As long as life is megacorps and information gatekeepers, so too is the global ubiquitous internet. Mission accomplished. — Searching the Creative Internet
I keep trying to quit vim. I keep ending up inside a terminal, inside vim, writing code. Like SQLite, vim is an island of stability over my career. While I wish IDEs were better, I am extremely thankful for tools that work and respect the effort I have taken to learn them, decade after decade. — Software I’m thankful for
♪ The Only Ones · Peter and the Pets (2008 Remastered)
Lovely.
One way to solve the delays is to disable your internet connection. This is tough medicine, but if you notice these delays, try it for an hour just to verify that indeed the issue is resolved by disabling internet connectivity. — macOS 10.15: Slow by Design
Purely functional programs are easier to test, they make better and more reliable APIs, and our environments, compilers, and run-time systems take advantage of functional style. — Getting rid of set-car! and set-cdr!
Algorithms for Competitive Programming. See also my review of The Competitive Programmer’s Handbook.
♪ New Order · Blue Monday (Instrumental Outtake)
Common Lisp is a fine language with exceptional interactivity, multiple implementations providing the potential for acceptable performance, useful features like condition system, and a stable standard base. This, in theory, makes is very much suited toward data processing and analysis. Although practice paints a less favorable picture, there are still use cases where Common Lisp could be considered to be a very good pick. Also, I simply like writing Lisp code. — sirherrbatka/vellum
♪ Killing Joke · Sun Goes Down
♪ Helen Merrill · You’ve Got a Date With the Blu
mvp.css: A minimalist stylesheet for HTML elements.
I have an IDE, but I keep going back to essentially the same setup you have. I find that GUI IDE’s tend to try to be too many things at the same time. I like having nothing on the screen that isn’t directly related to what I’m doing, and I strongly dislike ribbons of things I could click on but rarely, if ever, do. — I don’t use an IDE, should I be using one?
SQLite Doesn’t Use Git. #git
♪ Antony & The Johnsons · You Are My Sister
The historical justification for a /bin, /sbin and /lib separate from /usr no longer applies today. They were split off to have selected tools on a faster hard disk (which was small, because it was more expensive) and to contain all the tools necessary to mount the slower /usr partition. Today, a separate /usr partition already must be mounted by the initramfs during early boot, thus making the justification for a split-off moot. In addition a lot of tools in /bin and /sbin in the status quo already lost the ability to run without a pre-mounted /usr. There is no valid reason anymore to have the operating system spread over multiple hierarchies, it lost its purpose. — The Case for the /usr Merge
I Tracked Everything I Read on the Internet for a Year. It reminds me of my defunct Emacs refiled links.
Tip of the day: If you want to get ride of Ubuntu putting screenshots with arbitrary filenames in arbitrary folder, without resorting on the good old gnome-screenshot
tool, just use:
% xdg-user-dirs-update --set PICTURES ~/Media/Pictures
% cd ~/Media/Pictures/Captu* ## NOTE: update according to your settings
% rename 's/Capture\ d’écran\ d[eu]\ //g;s/\s/-/g' *
Don’t forget to update the last instruction to reflect basename on your system, use a Makefile or shell script to automate the process. Usually, Ubuntu will create a subfolder (“Screenshots” or “Captures d’écran” or whatever) in the default PICTURES
folder. What’s funny is that instead of a straight single quote, Ubuntu decided for whatever reason to use a curly quote!
I used to use the following Bash script on X11, but it no longer works under Wayland:
scrot '%Y-%m-%d-%H-%M-%S.png' --thumb 300x200 -e 'mv $m $f ~/Media/Pictures/screenshots'
Here, screenhots
is a soft link to the default subfolder where screenshots are saved.
♪ Apoptygma Berzerk · Until The End Of The World
I have had my eye on Julia for many years, and I now consider it ready to be my “everyday” programming language. — From Common Lisp to Julia
The story is different with a REPL: you will have played with each piece of code in isolation before running the whole program, which makes you quite confident that each of the sub-tasks is well implemented. — What makes a good REPL?
♪ Lords of the New Church · Russian Roulette
Waiting for a reply to my query on Vim Vixen GH repo. Would be great to have the same facilities as on Nyxt browser to yank both URL and title at some point.
The WHATWG spec follows the good old browser mantra of being very liberal in what it accepts and trying to guess what the users mean and bending backwards trying to fulfill. (Even though we all know by now that Postel’s Law is the wrong way to go about this.) It means it’ll handle too many slashes, embedded white space as well as non-ASCII characters. — My URL isn’t your URL
Persistent SSH sessions with proper scrollback. I have to try this with both ssh jump and Tmux instead of Screen, and with scrolbback buffer enabled because i like it.
♪ Placebo · Teenage Angst
Trying out Tactile as an additional Window Manager for Gnome shell. Looks great. No auto-tiling (you have to manually assign new windows to predefined tiles on a grid, but this is flexible. However, it works like a charm right (and out of the box), unlike Forge or gTile. Gnome default tiling behavior works alongside, which is great. Together with Simple terminal or Gnome terminal (preferred), this makes for a great tiling WM. Also, none of the shell extensions (Unite, undecorate, …) I tried were able to properly remove window decorations, and it seems like there always are edge cases anyway.
I think I still prefer Cmus and Irssi over Rhythmox and Element. Lean text interfaces forever. #unix
Regular cleaning of $HOME
done: +4 Go. Also removed a lot of unused stuff on /
, including Discord which I no longer use.
Just replaced ranger with fff. Looks great and lightweight, and ultra-fast. I had problem with displaying images with ranger now that I am under Wayland. With fff, I can simply open them in feh or eog and browse an entire directory using keyboard shortcuts only. (h/t DJ Adams, Exploring fff part 2 - get_ls_colors #unix
Some interesting Bash notes. #unix
TIL that I no longer need to worry with launching ssh-agent
automagically in case it isn’t already running in the background using the following hack:
if [ -f ~/.ssh/agent.env ] ; then
. ~/.ssh/agent.env > /dev/null
if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
echo "Stale agent file found. Spawning a new agent. "
eval `ssh-agent | tee ~/.ssh/agent.env`
ssh-add
fi
else
echo "Starting ssh-agent"
eval `ssh-agent | tee ~/.ssh/agent.env`
ssh-add
fi
There’s probably a better way: Howto: auto-start ssh-agent with systemd on Debian Bullseye.
If you spend a lot of time typing plain text, writing programs or HTML, you can save much of that time by using a good editor and using it effectively. — Seven habits of effective text editing
Only fast languages are interesting. Don’t know if lush is still a thing nowadays, but some benchmarks were quite impressive back in 2011. #clojure
#lisp
Suckless life.
Ubuntu 22.04 LTS. Suckless terminal. Cmus music player.
Here’s a rather long list of RSS feeds accumulated over the years. It has been purged on several occasions, depending on my mood and succesive jobs (e.g., rstats
and stats
stuff has been severely impacted in the past 6 years). It targets Newsboat, so all you have to do is put this file in your $HOME/.config/newsboat
directory. Tags are not always very accurate, as the original posters may have changed their posts over time.
All of a sudden, those brackets look kind of cool! — An Intuition for Lisp Syntax
Website’s look’n feel should now respect your system color theme. Dark theme heavily inspired from the Nord color palette of course. Last thing to fix is transparent background images.
TIL Ubuntu and its default WM allows to move and resize windows without even touching the mouse with Alt-F7
and Alt-F8
.
I somewhat forgot about this sticky TUI for processing spreadsheet data: VisiData is an interactive multitool for tabular data.
And a great Firefox plugin to review soon: Vixen Vim.
Ubuntu Dock completely hidden now, which makes for a cleaner desktop!
gsettings set org.gnome.shell.extensions.dash-to-dock autohide false
gsettings set org.gnome.shell.extensions.dash-to-dock dock-fixed false
gsettings set org.gnome.shell.extensions.dash-to-dock intellihide false
I also installed the Suckless terminal, as a popup terminal always opened on second workspace, with semi-transparency enabled thanks to Luke Smith’s patch and no border (Stein Gunnar Bakkeby ’s path). I can launch Cmus without messing my current Tmux workspace, and forget about it.
Labeling mail with mutt. Interesting idea, especially for those who rely on notmuch for mail processing. But, well, it’s been a long time I left Gmail and I don’t regret those pesky virtual folders.
Hugo documentation theme as simple as plain book.
Combinator Formatting. #scheme
The 10 stages of Vim. #vim
With Vim as a sort of secondary editor, I want to be able to fire it up unconfigured and continue to be nearly as productive. A pile of remappings would prohibit this. In my mind this is like a form of emergency preparedness. Other people stock up food and supplies. I’m preparing myself to sit at a strange machine without any of my configuration so that I can start the rewrite of the software lost in the disaster, so long as that machine has vi, cc, and make. If I can’t code in C, then what’s the point in surviving anyway? — My Journey with Touch Typing and Vim
Beautiful code is likely to be simple – clear and easy to understand. Beautitful code is likely to be compact – just enough code to do the job and no more – but not cryptic, to the point where it cannot be understood. Beautiful code may well be general, solving a broad class of problems in a uniform way. One might even describe it as elegant, showing good taste and refinement. — A Regular Expression Matcher
A simple way to make HTML websites: https://john-doe.neocities.org.
Look what came up in the mailbox a few days ago:
I’ll take economy over excess any day - give me a nice, uncluttered interface, a simple man page and power to spare for those occasions when I need it, and I’m a happy guy. My dream email client is a lot like my dream car, the Ferrari F355 Spider: plain-vanilla seats, a simple dashboard and the ability to accelerate from 0 to 60 miles per hour in under six seconds. — A Man And His Mutt.
Searching this site using Pagefind. Looks like it works quite well with Hugo website.
Great! You can now use default keybindings from https://getpocket.com in Nyxt 3 (pre release).
The way I look at it, the apps themselves are the workspaces. On a smaller screen I usually full screen everything and on larger display scenarios, I have nearly everything laid out in front of me so I really just want to be able to switch between apps as fast as possible. — How I GNOME or Why I Don’t Use a Tiling Window Manager by Josh Sherman
That’s the conclusion I reached as well on OS X and Ubuntu when I started (re)using native window manager facilities. This remains so even after me trying i3 then Regolith, since Tmux can do a lot of tiling too, and the only thing I really need is to have apps maximized on screen, or split vertically (who need to fully split a 16:10 or 4:3 laptop screen horizontally these days?).
SQLite works with hundreds of millions of records just fine. Regular INSERTs show about 240K records per second on my laptop. And if you connect the CSV file as a virtual table (there is an extension for that) - inserts become 2 times faster. — SQLite is not a toy database
Tom Mitchell’s Machine Learning book is a bit old but it’s now free. Note that the PDF version offered on the website is huge (60 Mo) since it’s a scanned copy.
Glmnet for python. I somewhat missed or forgot about that package. #python
I’m done with Season 1 of Mindhunter. Beautiful script, brilliant actors, nicely orchestrated plots. Informal ratings of others TV shows available here.
Expect to pay, now or later. — Give nothing, expect nothing: GitLab’s the latest punching bag for entitled users
Where things really got broken was when multithreaded applications became commonplace. That’s when ctrl-c basically stopping working at all. — Ctrl-C: Why Programmers Can’t “Reset” Programs With Ctrl-C, but Used to Be Able To, and Why They Should Be Able to Again
more-itertools is yet another gem when working with Python’s iterables. #python
Top 20 Latex Fonts. #tex
Git is built on a graph. Almost every Git command manipulates this graph. To understand Git deeply, focus on the properties of this graph, not workflows or commands. — Git from the inside out
Mathematical Python. #python
25,011 scrobbles on Last.fm in 9 months.
Oh Shit, Git!?!. #git
And another round of cleansing for my Neovim setup: down to 15 plugins now (the screenshot below includes popup.nvim
which is no longer needed).
Just started watching Sense8 a few days ago. Looks great so far. It’s the fourth TV shows I watch after a long break (December 2021).
Time to quit, I guess.
Unix History Repository. #unix
While it’s tempting to switch to one of the endless new apps out there, there are good reasons to trust old tools. — Cool desktops don’t change
Run any code on any client. With WebAssembly and Wasmer.
Even with a lot of help from a good text editor, writing HTML can be a drag. Nice documents end up as tag-swamps with little bits of content perched atop hills of tabs. — Write HTML Right
(…) being overly tense works against giving your best performance. — The 85% Rule - When Giving It Your 100% Gets You Less than 85%
Now I know that even installing the rms
package implies crap packages from so-called “modern R”…
Saying that I’ve been maintaining my dotfiles for a decade is like saying that I’ve been decorating my home for a decade. I probably know what works for me, but that doesn’t mean I know what you’ll like! — A decade of dotfiles
Well, it looks I could not wait any longer, and I just upgrade to Ubuntu 22.04 LTS. Great distro. #unix
The big endian advantages tend to be cosmetic or convention based, or of minor usefulness. The little endian advantages offer real world performance boosts in many cases (given the right algorithm or encoding to take advantage of it). — On Endianness
What’s in which Python. #python
Useless Use Of dd. #unix
Shy away from numbers or concrete analysis during design. Good engineers estimate. Great engineers speculate. — The mindless tyranny of ‘what if it changes?’ as a software design principle
Logging C Functions. #clang
I suppose this is another one of those things we all end up doing: Write a printf() implementation, create an IRC bot, and author a book about Open Source. — Uncurled
Unfinished Business with Postgres. #database
So, having spent hundreds of frustrating hours developing a working OAUTH2 solution for GMail, I am defeated at the final hurdle. Google’s demands mean that I am simply not going to be able to support GMail past May 31st, however much it hurts me to feel that I am letting my users down. My deepest apologies to you all. — http://www.pmail.com/newsflash.htm
Real-time LaTeX Using (Neo)Vim. #vim
#tex
menyoki: Screen{shot,cast} and perform ImageOps on the command line.
My conclusion after using Julia for many years is that there are too many correctness and composability bugs throughout the ecosystem to justify using it in just about any context where correctness matters. — Why I no longer recommend Julia
R Workflow by Frank Harrel. #rstats
Lisp has a specific world view which makes it less compatible with the current outside world. — Why Lisp is different
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypertext.
Giant salad for today’s lunch!
Tuning and overoptimizing Neovim startup time (19 plugins, including 7 opt ones).
I just rewrote (again) the build policy for my Stata lecture notes. Org markup language is fantastic after all!
Vim’s useful lists. #vim
The point is to support programming interactively. You don’t want to have to kill your program and rebuild it from scratch just because you changed a definition. That’s silly; adding and changing definitions is most of what you do! If your development environment is going to support interactive development, then it had better know how to keep your program running when you change some definitions. — On repl-driven programming
Roll A Lisp In C - Evaluation. #clang
#lisp
Running a personal website is an emotional roller coaster. This fact seems strange to me, because I feel I do a fairly good job of keeping my ego disengaged from the process. I realize that whether people like what I write or hate it has absolutely nothing to do with my worth as a human being. Yet, receiving comments and emails from readers who say they enjoy my website and understand its value feels good. — The Joys and Sorrows of Maintaining a Personal Website
Lush plants on the loggia…
The /bin vs /usr/bin split (and all the others) is an artifact of this, a 1970’s implementation detail that got carried forward for decades by bureaucrats who never question why they’re doing things. It stopped making any sense before Linux was ever invented, for multiple reasons (…) — Understanding the bin, sbin, usr/bin , usr/sbin split
4,000 static pages!
Core values are self-reinforcing. They attract like-minded people, who will then defend them. — The values of Emacs, the Neovim revolution, and the VSCode gorilla
Pollen’s sequel? Quad: document processor. #racket
Parquet and Postgres in the Data Lake. #database
I’m on holydays, btw. First week and a half since the start of the year. It’s going to be a good break, or I hope so.
First draft done: A minimal Org setup to write scientific notebooks (PDF). Needs some polishing, but it’s almost finished.
I know you’re going to be tempted to reply with “you’re using it wrong” - but I’m not. This is how I like to use my computer. And it is clear that the MacBook isn’t my computer - it is Apple’s. — Things I can’t do on MacOS which I can do on Ubuntu
Working at producing elegant (or at least less common) notebooks using Org babel.
You dumbass. You thought you needed media queries to be responsive, but no. Responsive means that it responds to whatever motherfucking screensize it’s viewed on. This site doesn’t care if you’re on an iMac or a motherfucking Tamagotchi. — This is a motherfucking website
I don’t think it was a big technical innovation (it’s obvious that you want to separate a language-agnostic editor and a language-specific server). I think it’s a rather bad (aka, “good enough”) technical implementation (stay tuned for “Why LSP sucks?” post I guess?). But it moved us from a world where not having a language IDE was normal and no one was even thinking about language servers, to a world where a language without working completion and goto definition looks unprofessional. — Why LSP?
Helix: A post-modern modal text editor. Looks cool.
Choosing the Right Integers. #clang
#rust
LaTeX A Modern Approach. #tex
Memray is a memory profiler for Python. #python
Nixery provides ad-hoc container images that contain packages from the Nix package manager.
Being `pure functional’ does not eradicate state; it merely changes the way state is handled – which could be either more or less clearer and convenient. — Grasping ‘all-the-apples-at-once’
Git Jump to Vim Quickfix. #vim
Vim Key Combinations. #vim
Unlike systems software, the values demanded from text editors or IDEs vary greatly depending on who you ask. These are much more personal tools and make room for a diverse set of desires. — The values of Emacs, the Neovim revolution, and the VSCode gorilla
How I Vim: Andy Stewart, a.k.a airblade. #vim
Starship: The minimal, blazing-fast, and infinitely customizable prompt for any shell!
What Is Rust’s unsafe? #rust
After Nova, yet another code editor for Mac: Zas Editor.
Textbook examples are there to illustrate a method. The recommended approach is to first give two examples where the method works, then one where it fails. But we, the textbook writers, are busy, so we’ll often just give the one that works and stop. As I wrote once, “the book has a chapter on regression discontinuity designs. That’s fine. But all we see in the chapter are successes.” — The examples you see in the textbooks are not representative of the sorts of problems you see in the real world
Sometimes, though, I think there’s a value in doing things the old fashioned way, if only to get a little “closer to the ground” on what our tools are doing behind the scenes. — The Simple Joy of Coding by Hand
Consume input from stdin, produce output to stdout. Put another way, your program should be a filter. Filters are easily integrated into shell pipelines, arguably the most important utility for Unix tools composition. — Hints for writing Unix tools
Atom Editor was, and still is, an amazing piece of technology. It was the first practical example of web technologies running locally, applied to a really hard problem: text editors. It it was, and still is, darn good at handling code. — The impossibility to maintain Atom
Hot off the kitchen
Note that “semantic understanding” is mostly unrelated to the traditional interpretation of “IDE” as Integrated Development Environment. I personally don’t feel that the “Integrated” bit is all that important. I commit&push from the command line using Julia scripts, rebase in magit, and do code reviews in a browser. If anything, there’s an ample room for improvement for the integration bits. For me, I in “IDE” stands for “intelligent”, smart. — Why an IDE?
Like many here, I turned off commenting years ago. My motivation had less to do with spam. (I’m on WordPress and it does a pretty good job with that.) It had more to do with the conversations moving from my site to the social web. Folks wanted to talk about stuff where they already were, rather than centralizing that conversation on individual blogs. — Ask HN: Are blog comments a thing of the past?
Some developers won’t use an editor without a debugger, or linting, or Git built-in. For me, these aren’t hard requirements but are bonuses. Indeed, most good editors have these, or plugins that enable them. How useful they’re all depends on the language and platform you’re developing for. — Why Neovim is the best code editor / IDE for developers
Authors always say the best way to write better is to read more, which I can vouch for in blogging. Building up some RSS feeds in an aggregator like The Old Reader can be a great source of inspiration.
But it’s also important to stress that this is only one approach. 8,000 posts sounds superficially impressive, but doesn’t speak to quality or detail. Writing a few posts a year is just as valid and worthwhile. If you’re having fun doing it, who cares. — 8,000 post feedback, and regular writing
[I]n biology, when one research team publishes something useful, then other labs want to use it too. Important work in biology gets replicated all the time—not because people want to prove it’s right, not because people want to shoot it down, not as part of a “replication study,” but just because they want to use the method. So if there’s something that everybody’s talking about, and it doesn’t replicate, word will get out. — Biology as a cumulative science, and the relevance of this idea to replication
Random effects/mixed effects models shine for multi-level data such as measurements within cities within counties within states. They can also deal with measurements clustered within subjects. There are at least two contexts for the latter: rapidly repeated measurements where elapsed time is not an issue, and serial measurements spaced out over time for which time trends are more likely to be important. An example of the first is a series of tests on a subject over minutes when the subject does not fatigue. An example of the second is a typical longitudinal clinical trial where patient responses are assessed weekly or monthly. For the first setup, random effects are likely to capture the important elements of within-subject correlation. Not so much for the second setup, where serial correlation dominates and time ordering is essential. — Longitudinal Data: Think Serial Correlation First, Random Effects Second
Rust ownership, the hard way. #rust
Nice add-on to hide Firefox tab when there’s only one.
First peony on the balcony.
Foliate: A simple and modern eBook viewer for Linux desktops. I should note that Zathura handles Epub documents perfectly well.
My initial reasons for giving up on OS X / macOS were due to my frustrations around developer tooling and package management, problems now largely solved by Homebrew. I got tired of being able to easily do certain kind of development on Linux and then struggle to get all the required pieces set up in the same way on OS X. Then, as soon as Homebrew began to resolve all that, Apple decided to ruin its laptops through the introduction of the awful and annoyingly-loud butterfly keyboard and touchbar. — Linux Developer Laptops: Dell’s Precision 5500 series reigns supreme
Many services have self-service account deletion tools, but often hide them so well that I failed to locate them without deferring to their customer support. On average, it took 24 interactions (menu clicks, password entries, etc.) after an initial login to request and confirm a deletion request. — Some discouraging anecdotes on how services handle account deletions
The two most important ways to make your text easy to read are a short line-length and the copious use of paragraphs. Viewing a single large block of run-away text with no line breaks immediately puts stress on the reader, as absorbing the information provided therein requires a high degree of concentration and eye movement. — The art of plain text
Python Design Patterns. #python
I love Emacs, but doing everything in it is the wrong move. Doing it with this site was proof of that for me. — Wherein org-mode was a pain
By carefully examining every album you own, you get to become more familiar with your library, its extent, its variation, and its quirks. People used to spend hours lovingly sorting and resorting their shelves of LPs. In the iTunes age, many of us toss our music into a heap and forget about it. This is great for some people. But there’s value in intimate, complete familiarity with your collection. So instead of a chore, try thinking of correcting tags as quality time with your music collection. That’s what I do. — Using the Auto-Tagger
Python built-in functions to know. #python
Practical Python Programming. #python
SymSpell: 1 million times faster spelling correction & fuzzy search through Symmetric Delete spelling correction algorithm.
You’re using email wrong. My philosophy is much simpler: Inbox zero, block toxic people as well as spams and hoaxes.
When the software changes, people want to know why and how. — Keep a Changelog
I’ve long been ignorant of i3 scratchpad. Now that I use it, my music dispatcher looks much more comfortable.
Symbols vs. Strings (via Irreal). #lisp
Debugging with GDB. See also GDB dashboard. #clang
Every few years a new company says you should use their special format. You have to pay them a monthly fee to use it — or keep all of your documents in their care. They offer some convenience or features, but at the cost of flexibility, portability, and independence. — Write plain text files
jless — a command-line JSON viewer.
I thought I would write a short post to explain how to fetch genome data from NCBI the old way, but here’s the gist, assuming you want to fetch all bacterial genomes:
% wget ftp://ftp.ncbi.nih.gov/genomes/refseq/bacteria/assembly_summary.txt
% mkdir bacteria_refseq
% awk -F '\t' '{if($12=="Complete Genome") print $20}' assembly_summary.txt > assembly_summary_complete_genomes.txt
% for record in $(cat assembly_summary_complete_genomes.txt); \
do wget -P bacteria_refseq -e robots=off -r --no-parent -A "*genomic.fna.gz" "$record"/; done
Then wait, like me.
Finally got a decent Twitter client… No more unsolicited tweets from nowhere/nobody, maybe?
Spoiler: twterm
vim cheatsheet. #vim
Vim’s useful lists. #vim
Read three books on a topic and you know more about it than 99% of the world. Watch news all day for years and you have a distant, water-cooler-level awareness of thousands of stories, at least for the few weeks each is popular. — Five Things You Notice When You Quit the News
Live Streaming a Macintosh Plus (or Any Compact Mac). Amazing stuff as always.
magma-nvim: Interact with Jupyter from NeoVim. Great plugin! #vim
Personally, in every activity I’ve participated in where it’s possible to get a rough percentile ranking, people who are 95%-ile constantly make mistakes that seem like they should be easy to observe and correct. “Real world” activities typically can’t be reduced to a percentile rating, but achieving what appears to be a similar level of proficiency seems similarly easy. — 95%-ile isn’t that good
I generally consider theory to be useful background knowledge but fastidious study a poor substitute for firsthand experience. I “learn with my hands,” is the way I’ve always put it. it has its upsides and downsides — how I think when I think about programming
Tired of Tmux prefix (C-b or C-a, depending on your taste)? Let’s rebind everything we used on the Alt key using bind-key -n M- whatever. It may not work on all terminals, but let’s that not stop us adding more aliases to our Tmux config file.
vim-wordy: Uncover usage problems in your writing. #vim
My journey from macOS to FreeBSD. #apple
#unix
What makes old manuals so fascinating to me is that they document the history of applied computer science. This gives the entire field, including tech comms, the resemblance of a past. Let’s not dismiss that: in a sector where startups seem to build new things on top of blurry or nonexistent foundations, reading about old software reminds us that there’s indeed a giant upon whose shoulders we’ve climbed. — Why I collect and read old computer manuals
Fancy algorithms are slow when n is small, and n is usually small. — Rob Pike’s 5 Rules of Programming
What you don’t realize is that you’ve been self-censoring yourself from searching most of the things you would have wanted to search. You already know subconsciously that Google isn’t going to return a good result. — Google Search Is Dying
Monad is the name of the class for “and_then”, defined in a sensible way, with some laws for how it should behave predictably, and then a bunch of library code works on anything that implements “and_then”. — A plain English description of monads without Haskell code
Brave New Hacktoberfest — Learn4Haskell. #haskell
How Postgres Stores Rows. #database
Time finds problems, people fix them. — Software Deployment, Speed, and Safety
I still have 57 RSS feeds out of 727 unread in my inbox. Work in progress.
A boring statusline for Neovim. #neovim
In December, in my article When dropping support feels like sabotage, I was complaining that Apple was limiting the support of security updates to just the two previous versions of Mac OS, and not extending such support to even older versions like High Sierra or Mojave given the amount of people that are still using them. But I was forgetting that on iOS the situation is even worse. — → No more security updates for iOS 14
Lovely, #apple
. I’m still on Mojave and iOS 12.5 ;-)
The Common Lisp Document Repository is a repository of documents that are of interest to the Common Lisp community. The most important property of a CDR document is that it will never change: if you refer to it, you can be sure that your reference will always refer to exactly the same document. #lisp
Mike Caulfield invented the term “a chorus of explanations” several years ago to explain why sites like Stack Overflow are useful. Where a lesson typically explains something once, SO and similar sites present several explanations with different levels of detail, different assumptions about the reader’s background, and quite possibly different solutions to the original problem. Most readers may be satisfied by the top answer, but others can scroll down to find one that’s a better fit for who they are, what they are ready to understand, and what they’re trying to do. — A Cacaphony of Explanations
Radix Sort Revisited. #clang
Fundamentally I think C trusts developers while C++ trusts compilers. This is a massive difference that sharing the same native types or syntax for while loop cannot hide. — The problem with C
Magma: Interact with Jupyter from NeoVim. #vim
Update on Regolith Desktop: Now installed on my own laptop for more precise control. Back to a dark theme (Nord) – long time no see. One of the main advantage of Regolith over, say, i3 or i3-gaps, is that all Ubuntu apps and settings remain available, including controllers that would have to be defined manually otherwise (e.g., brightness or volume control, screen sharing or screen capture). The integration of native apps (e.g., nautilus or gnome-terminal) is also really nicely handled by the WM without excessive RAM usage (< 800 Mo).
Regolith Desktop looks awesome. I’m currently testing it on a work machine: it worked right out of the box after reboot, and it provides sensible default settings to i3 WM. #unix
‘Clean code’ means a different thing to everyone. — There’s No Such Thing as Clean Code
TIL about Convos, an IRC client that runs in your browser and brings the IRC experience into the 21st century.
One of the most worthwhile exercises I recommend here is to consider how you would solve your immediate problem without adding anything new. First, posing this question should detect the situation where the “problem” is that someone really wants to use the technology. If that is the case, you should immediately abort. — Choose Boring Technology
Hooray! racket-langserver got a proper Hover method, which displays full help when pressing K
in Neovim, and not only a link to the online doc. #racket
#vim
Got nvim-dap to work for all languages I configured (C, Python, Rust), except Haskell for the moment. Together with ’nvim-telescope/telescope-dap.nvim’ and ’theHamsta/nvim-dap-virtual-text’, it provides a neat interface to DAP. #vim
You can fix spelling error by selecting the first suggested alternative automagically using 1z=
. Add this to your (Neo)Vim config, and you will thank me later:
inoremap <C-s> <c-g>u<Esc>[s1z=`]a<c-g>u
(Or bind whatever key you want.) This allows to fix any previous error(s) (thanks to the last bit of magic) using the first suggested entry while you’re in insert mode. #vim
What Gemini is doing, is saying “we don’t need no videos, images, stylesheets, nor JavaScripts, because we want to have a lightweight web experience, so we throw all that crap out!”. Fine, sounds great. But why does it require a new protocol for that? Why couldn’t one simply build on top of existing HTTP infrastructure, throw away all the baggage and instead implement a new Content-Type, which existing browsers then could parse? — Gemini is Solutionism at its Worst
Postgres Indexes for Newbies. #database
Luschny’s webpage cites, for example, recent treatments of the subject by leading mathematicians such as Terence Tao. And his most compelling argument, from my personal perspective, is the way he unveils the early publications: I learned from him that my own presentation of the story, in The Art of Computer Programming and much more extensively in Concrete Mathematics, was a violation of history! I had put words and thoughts into Bernoulli and Euler’s minds that were not theirs at all. This hurt, because I’ve always tried to present the evolution of ideas faithfully; in this case I’d fooled myself, by trying to conform what they wrote to what I’d learned. — Concrete Mathematics and Bernoulli
The worst possible way to learn Rust is by vaguely looking at it, or trying some small stuff, in short scattered sessions at night after your demanding work. Sure you did learn a few languages like this before, so you may be confident in your abilities. But at some point in Rust, and it may come soon, you’ll encounter a higher step and if you don’t fight it with concentration and dedication, you risk not overcome it. — How not to learn Rust
Lesser Known PostgreSQL Features. #database
Tasty
Halfway through my RSS reading list of the week. It’s amazing how much I learn from all those posts, even if I don’t necessarily have enough time to recollect all the interesting stuff I read. I should take more note, but I’ve became so lazy lately.
YYMMDDHHMM … will no longer fit into a signed 32 bit number.
The last value for last year is December 31, 2021 at 23:59, and in this format it becomes 2112312359. That just fits into a signed 32 bit number (which tops out at 2147483647).
The first value for this year is January 1, 2022 at 00:00, which turns into 2201010000, and that does not fit! — YYMMDDHHMM just overflowed a signed 32 bit int
Pointers/references in Python. #python
My ideal Rust workflow. #rust
The Rust Performance Book. #rust
Scientific computing with Rust:
Database-like ops benchmark. Interesting to note that Polars wins over well-established competitors from Apache or Python. #rust
Why I Use a Debugger. #rust
The Art of Lisp & Writing. #lisp
Cognitive load is important. I don’t expand much on this here, but if a programming language or a library makes me feel stupid, then I’m less likely to use it or like it. C++ does that a lot :) — “Modern” C++ Lamentations
The real enemy addressed by inlining is unexpected dependency and mutation of state, which functional programming solves more directly and completely. However, if you are going to make a lot of state changes, having them all happen inline does have advantages; you should be made constantly aware of the full horror of what you are doing. When it gets to be too much to take, figure out how to factor blocks out into pure functions (and don.t let them slide back into impurity!). — John Carmack on Inlined Code
While browsing GitHub, I noticed that the nvim-lua organization offers a “starter kit” init.lua
file for Neovim users. It is a single Lua file, which is quite handy when you want to quickly bootstrap a sane config on external servers. I tested it in my own environment and it’s pretty good actually. If you are new to Neovim, and especially Lua config files, I recommend taking a look at how this file is organized. Except for a few packages (theme and snippets), and the default key mappings, you will likely find a working setup for your daily editing tasks. I like the idea of having a single file for the whole config, although I can understand why we may want to split our whole config in separate files, which is actually what I do.
csview: A high performance csv viewer with cjk/emoji support.
… there are thousands of reusable patterns I’ve picked up … Unfortunately, I’ve forgotten about 95% of them. … The point is to reflect on what actually stuck, so that others may save time by spending their time learning what is more likely to stick. — Practical Shell Patterns I Actually Use (via John D. Cook)
xsv: A fast CSV command line toolkit written in Rust. Handy (and faster) alternative to csvkit.
Bayesian Modeling and Computation in Python. #python
#statistics
During discussions with my friends and colleagues, whenever the topic of chat protocols comes up, I often remark how simple the Internet Relay Chat (IRC) protocol is and how this simplicity has fostered creativity in the lives of many young computer hobbyists growing up in the late 1990s and early 2000s. — Simplicity of IRC
Finally:
Fast and Elegant Clojure: Idiomatic Clojure without sacrificing performance. #clojure
First Steps With Clojure. #clojure
Hugo documentation theme as simple as plain book.
Strange little diff.
The “blast+” term get recognised as part of the diff even if I deleted the whole line beforehand.
The inferential analogy here is that our knowledge grows by a process that is partly random but also involves a struggle for survival amongst ideas. You May Believe You Are a Bayesian But You Are Probably Wrong (PDF)
Beej’s Guide to Unix IPC. #unix
A succinct cheat sheet for newbie linux coders and system administrators. #unix
I will always miss you.
Circa. 2011
Old times good times. I came across this (archived) post where comments on a blog really add values to the post itself. #scheme
All I want to say with all these abstractions is that proper logging architecture is hard. It is not just about writing logger.log() here and there. It is a complex process of creating proper abstractions, composing them, and maintaining strict layers of pure and impure code. — Do not log
A graphic overview of the events in the history of data visualization, by Michael Friendly & Daniel J. Denis. #dataviz
A Closed and Common Lisp. #lisp
Julia Data Science. #julia
All the functions in Abramowitz & Stegun are now fully computable in the Wolfram Language. — Launching Version 13.0 of Wolfram Language + Mathematica
Idle puzzles. #lisp
Using databases with Shiny. #rstats
It’s all well and good that SQLite is scalable and reliable enough for most needs, but what’s the point of using it instead of a more traditional client/server database? — Consider SQLite
It’s been my experience that our intuition of what is and isn’t a pathological or malicious input is about as accurate as time estimates. Requirements change and any and all attack vectors will be found and exploited. The mental burden of remembering the assumptions made to correctly check for pathological or malicious inputs in all cases and keep them updated during refactoring is far too enormous to successfully maintain. — Almost Always Unsigned
Seeing Theory: A visual introduction to probability and statistics. I already mentioned this amazing website but it is still worth a retweet.
From Last.fm, this week
Haskell tutorials:
Happy New Year Eve!
10 things I love about Julia. #julia
I’m back.
Vellum is a data frame library build for Common Lisp. #lisp
Off for Christmas.
r-ci: Easy and portable CI for R packages. #rstats
Wingman for Haskell. #haskell
You are here because you are somehow interested in what the “Web3” or “NFT” thing is about. Maybe someone gave you this link, maybe you follow me somewhere. In this document I’ll try to explain what those terms mean, what ideas and politics they are based on and what I think about them. I will do my best to represent the Web3/NFT ideas as fairly as possible but for transparency’s sake I should note that I am not a fan. — The Third Web
Common Lisp - Oldie but goldie . #lisp
Again, amazing work by Nicolas Rougier hacking on GNU Emacs: GNU Emacs - Notebook. #emacs
Polars: Lightning-fast DataFrame library for Rust and Python. #rust
Dependencies matter. Every dependency you add to your project is an invitation to break your project. — Lightweight is the right weight
jc: CLI tool and python library that converts the output of popular command-line tools and file-types to JSON or Dictionaries. (via Simon Willison)
Data Integration, Manipulation and Visualization of Phylogenetic Trees. #rstats
#bioinfo
https://plotdigitizer.com/: really handy when you do not have raw data and want to revisit a 2D chart.
Using vi/vim properly, you don’t use it modally. You are always in normal mode, and only enter insert mode for short bursts of typing text, after which you press
to go to normal mode. Thus, the remembering-the-mode problem just doesn’t exist: you don’t answer the phone in insert mode to get back to vi and not remember where you were. If you are typing text and the phone rings, you exit insert mode and then answer the phone. Or you press when you come back. But you never think about insert mode as a mode where you stay. — Why, oh WHY, do those #?@! nutheads use vi?
GDB dashboard. #clang
Design Issues for Foreign Function Interfaces: A survey of existing native interfaces for several languages and some suggestions.
Emacs Docs: The modern documentation website Emacs deserves. #emacs
Julia 1.7 Highlights. #julia
It took little under a decade for the headline feature developer Jon Skinner added to Sublime Text’s second version to become one of the defining features of this decade’s software. — The History of Command Palettes: How Typing Commands Became The Norm Again
When I first started using Rust, I really missed monads. But here’s the thing. Having used lots of monads in Haskell, and read lots of blog posts about monads, I’ve learned that in systems contexts, it’s often best to just have a simple monad stack that just consists of Reader + IO (and Maybe’s and Option’s sprinkled about occasionally). Huge monad transformer stacks often raise more problems than they solve. But Reader + IO is essentially the “default monad stack” of Rust. — Haskell’s Children
First attempt looks nice:
Not to say, but this should be the 2958th post since 2018-02-15, when I first launch this micro-blog. Other than that there are 586 posts available on the regular blog, of which 319 were written the last 4 years. #this
If you are looking for some small or largish dataset for your statistical machinery, don’t forgetStatSci.org.
The Kelly Coin-Flipping Game: Exact Solutions. Also worth taking some time to explore the whole site which is beautifully designed.
//
// Dear maintainer:
//
// Once you are done trying to 'optimise' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 16
//
It is oddly satisfying to know that no matter the kind of machine I find myself on or the kind of restrictions it has (no network to download Emacs and/or my custom configuration, corporate policy against fetching packages from MELPA, etc.), that there will always be an editor that I can happily use without needing to make it “my own”. — vi, my favorite config-less editor
How Python List Works. #python
Computing prime numbers with Clojure. #clojure
Old times, good times.
Project Euler, problem 10:
Total @ Prime @ Range @ PrimePi[2*^6]
(apply + (filter prime? (range 1 2e6)))
((require math/number-theory)
)Scientific visualization Course, by Nicolas Rougier.
Rewind the web to 2002. Thanks, that was one of my preferred website back in 1999. This also remember me of those CD covers I was crafting together.
Clojonic: Pythonic Clojure. #clojure
Let’s Decentralize: Alternatives to the standard internet stack.
BSD is what you get when a bunch of Unix hackers sit down to try to port a Unix system to the PC. Linux is what you get when a bunch of PC hackers sit down and try to write a Unix system for the PC. — BSD vs Linux
The short version of the answer is that Lisp is not merely a different notation, it’s a fundamentally different way of thinking about what programming is. The mainstream model is that programming consists of producing standalone artifacts called programs which operate on other artifacts called data. Of course, everyone knows that programs are data, but the mainstream model revolves around maintaining an artificial distinction between the two concepts. Yes, programs are data, but they are data only for a special kind of program called a compiler. — Why Lisp
A Bit About Checkpoint/Restart. #rstats
Interesting discussion on how to handle negative zero (IEEE754) in Scheme. #scheme
Functional Programming and Advanced Functional Programming. #haskell
One of my favorite definitions of “hacking” is the creative reuse of tools for new and unexpected purposes. Hacking is using your email account as a hard drive, using your bicycle seat to open a beer, using Minecraft’s red bricks to create a calculator in the game. — Hacking is the opposite of marketing
Introduction to High Performance Scientific Computing, by the author of $\TeX$ by Topic.
Back to Bandcamp.
I need to put that on a Post-it note as an example of how to explain a script. The best part? It would fit on a Post-it note. — More shell, less egg
Statistics as algorithmic summarization. Reminds me of Efron’s introductory chapter on statistical machinery in Computer Age Statistical Inference.
Type theory was developed to be an alternative to set theory as the foundation of mathematical proofs in symbolic logic due to its ability to solve some contradictions stemming from naive set theory. — Where do Type Systems Come From?
quickmenu: Quickly create and run optimised Windows, macOS and Linux desktop virtual machines.
Why IRC?
It’s free, in all senses of the word. A lot of others have done a great job of answering this question in further detail, this is by far my favourite:
https://drewdevault.com/2019/07/01/Absence-of-features-in-IRC.html — IRC for DMs
https://www.inspiredpython.com/. #python
https://lisp-lang.org/. #lisp
3500+ posts and counting. And Hugo is still blazing fast…
~/Sites/aliquote master % hugo server
| EN
-------------------+-------
Pages | 3603
Paginator pages | 290
Non-page files | 1
Static files | 1005
Processed images | 0
Aliases | 1
Sitemaps | 1
Cleaned | 0
Built in 7072 ms
That was the week that was. (Actually I cooked the quiche and cake last week.)
For RSS users: Starting now, my RSS entries should include full-length content, and not only the summary of each entry. Enjoy your RSS reader!
We’ve always had to wait for our code to compile. Now we need to wait for the Docker container to be built, pushed to a registry, pulled down by Kubernetes, and everything else too. — Frustrations of Modern Development.
The way of Emancs (via Irreal). #emacs
Modern Statistics with R: From wrangling and exploring data to inference and predictive modelling, by Måns Thulin. #rstats
https://huemint.com/: Color palette generator. (via Brett Terpstra)
I don’t consider myself a beginner to Unix or computers (I even have a PhD in the damn things), but I do consider myself a fairly inept and inexperienced systems administrator, with no great desire to spend the time to become better, and my needs are fairly basic - just the usual web/shell/IRC/mail server stuff, and other random infrastructure needs that come along for my work. Incidentally, this is exactly why I prefer OpenBSD. — Why I run OpenBSD
comp.lang.c Frequently Asked Questions: A collection of hypertext pages by Steve Summit. #clang
Once you choose the technology that runs your blog, use it. Don’t replace it, ever. Never ever rewrite it. — How to blog
There is hardly ever a good reason to invert a matrix. — Don’t invert that matrix
gobang: A cross-platform TUI database management tool written in Rust. #database
Here’s the thing though, you never actually need to really learn your text editor… Unless you use vim. — Vim - I hate to love you
If your choice of operating system depends on any kind of formalities rather than on technical quality, OpenBSD is not the project you are looking for. — OpenBSD: Clean, Correct Code by Default
For the past 30+ years in the industry (and generally in society) I have seen nothing more stupid and absolutely devastating than people following hype, trends and “majority” rule. Not only that, but the worst part is, and that is something that is really difficult to handle, when those very people actually believe that what they are doing is the right thing. They are utterly clueless about their own stupid behavior. — Stop submitting to social conformity and use your brain instead
As a consequence of switching to i3wm, my RAM usage dropped down to 550 Mo (instead of 950 Mo) when idle with only one terminal (Kitty). However, since I’m using i3+tmux+kitty+vim keybindings have become a thing, really: Shift+Ctrl for Kitty, C-b (and alt for navigating windows) for tmux, Win key for i3!
Trying out i3 as a replacement for the default Gnome window manager, which is fine but I was looking for a more handy keyboard-driven app switcher and window management. As far as I can tell, Pop OS! looks really great, but i3 is simpler to install and to configure.
The Descent to C, by Simon Tatham . #clang
Fast Rust Builds. #rust
Scheme books. #scheme
The show must go on.
Common Lisp Friday. #lisp
Lisp from Nothing. #lisp
I stopped using Fish shell in favor of vanilla Zsh again, but this article is probably the best intro I’ve read in a while (except the ones published by Brett Terpstra last year, IIRC).
Chunking it up in pandas. #python
Apple used to spend a lot of time courting developers to their OS some 15 years ago, but now they only seem to care about macOS and iOS devs. They rarely update the Unix tools that ship with macOS, they still haven’t created a package manager (everyone’s basically using homebrew), etc. — Back to Linux
Google Mail was cool. Free mail! Huge storage! Excellent spam filtering! — Gmail slowly disappearing from my life
Same move for me. See also Hasta la Vista Gmail.
Mathematics has no side effects.
Math cannot modify the value of a variable–either global or local. It cannot mutate an element in an array. And, a mathematical function always returns the same value for the same input.
The literal rendering of mathematics into code cannot contain side effects.
Mathematics is a purely functional language. — Translating math into code
The web is a continuum. It’s like my old analog TV. It’s not exactly like DTV. Nor can it match it in some areas of functionality. It does, however, have other strengths. When digital TV fails, it fails completely. Analog TV, to use parlance of the web, degrades gracefully. The web could be similar, if we choose to make it so. It could be “the analog” web in contrast to “the digital” platforms. Perhaps in our hurry to replicate and mirror native platforms, we’re forgetting the killer strength of the web: universal accessibility. — The Analog Web
Ranking is a farce. Apparent performance is actually attributable mostly to the system that the individual works in, not to the individual himself. — Statistical process control after W. Edwards Deming
Why are hyperlinks blue?. TL;DR Mosaic former project use blue in its release notes.
Emacs, for me, is essentially the definition of tooling alcoholism because I can happily spend hours configuring it without actually achieving much at all.
Some of this extends to tools like org-agenda too. There’s a temptation to have Emacs do it all and so I end up breaking my existing systems just to make them fit. — Emacs probably isn’t right for me
BSD is designed. Linux is grown. Perhaps that’s the only succinct way to describe it, and possibly the most correct. — BSD vs Linux
o, why is the continuation monad the mother of all monads? The short answer is that, by enabling transparent inversion of control, it eliminates the need to sprinkle hooks for monad-specific code everywhere; normal (as much as anything involving delimited continuations can be “normal”) evaluation rules will be subverted as needed. — All you need is call/cc
To a language designer, Racket is a programming language laboratory. That is, Racket comes with a unique collection of linguistic mechanisms that enable the quick construction of reliable languages, language fragments, and their composition. These tools are so easy to use that plain programmers can design a language after a little bit of instruction. So when a well-trained programmer decides that none of the available dialects is well-suited for a task, he designs a new dialect and writes his program in it. As Paul Hudak said, “the ultimate abstraction is a domain specific language.” — Racket is…
Using Emacs in an IDE world. IDEs all look too complex to me. I am happy with fine-grained text editors like Emacs or (Neo)vim. Every time I try to use a light (VS Code) or not so light (IntelliJ stuff) IDE, I blow up after 10'.
Euler’s Formula. Looks like a nice Lisp-based website, right?
For making a viable Google competitor, I believe that ranking is a harder problem than indexing, but even if we just look at indexing, there are individual domains that contain on the order of one trillion pages we might want to index (like Twitter) and I’d guess that we can find on the order a trillion domains. If you try to configure any off-the-shelf search index to hold an index of some number of trillions of items to handle a load of, say, 1/100th Google’s load, with a latency budget of, say, 100ms (most of the latency should be for ranking, not indexing), I think you’ll find that this isn’t trivial. — I could do that in a weekend!
However, we shouldn’t forget that we are still living in the stone age of computational science. Fortran was the Paleolithic, Python is the Neolithic, but we have to move on. — Exploring Racket
Benefits of not using an IDE. Main point as far as I’m concerned is that even light IDEs (e.g., VS Code) are too complex for what I really need to do. Git and debugger integration are a plus, though, but I already get that using Emacs or Vim.
The “true” program does nothing; it merely exits with a zero exit status. This can be done with an empty file that’s marked executable, and that’s what it was in the earliest unix system libraries. Such an empty file will be interpreted as a shell script that does nothing, and since it does this successfully, the shell exits with a zero exit status. — The /bin/true Command and Copyright
Here’s an interesting list of resources in addition to StatLib: Statistics, Statistical Computing, and Mathematics.
Computational Statistics in Python. #python
I am one of those people who came to Racket because it is a Lisp. I feel that I should be better at creating/using software and general problem solving than I am, and I guess you could say I am looking for the fabled Lisp enlightenment. Maybe saying Lisp is the language of the gods is overwrought, but nobody ever said that JavaScript made them smarter, or that they learned a lot using anything by Microsoft. — Thoughts On Lisp And Racket
See comments and interesting side discussions on Hacker News.
Fun with regular expressions: part I. Actually, it’s quite an interesting read since this post is just a succession of C code, interesting to read by the way, based on DFA representations of regexes.
Fuschia on the balcony
Programming Idioms. Interesting to quickly compare the syntax of different PLs to perform the same task.
TIL that <C-R>.
(mind the leading dot) allow to paste the last piece of inserted text. #vim
Old times good times: http://tapedeck.org/.
Highlights from Git 2.33. #git
Build your own tools for repeated workflows. There is nothing faster than using a tool you made yourself. — Reflections on 10,000 Hours of Programming
Today’s art discount on the balcony.
After 10+ years of Linux distributions pushing CUPS on me. Over a decade of this complex stack of drivers and daemons that I never quite trusted but “couldn’t live without.” FreeBSD comes along and is like “yeah, just use netcat.” And they’re right. Just use netcat. — Bye CUPS: Printing with netcat
TIL about rusty-man, which is pretty handy to have a look at the Rust doc from a terminal. #rust
Using an Apple Magic Mouse on Ubuntu is kind of magic and ironic, yet it’s still better than PC touchpad. I should note that Bluetooth is working fine on Linux machines compared to 15 years ago…
Checking news once a day is enough. — The Old Computer Challenge: 10 days later, what changed?
Tonight I top at less than 2 Go of RAM. Great, especially since I’m only using Gnome terminal and a bunch of child processes, after 2 days uptime. Never happened when I was on macOS.
What’s the difference? Why do all those formal doo-hickeys matter?
Performance! Compiled languages are fast. Lisp is WAY faster than Ruby, over the long haul. Smokes it. — the-emacs-problem
R Cookbook, 2nd Edition. #rstats
I don’t have to waste time troubleshooting a package that isn’t integrating with the system properly, or looks like it’s straight out of 1995 because no theming is applied for some unknown reason. — A Sombre Goodbye To Linux
I did go pretty much in the reverse direction, from Mac to Linux, last year, but obviously I have much less demanding graphic needs since I spend most of my time in a terminal with command line tools.
TIL about SQL FETCH FIRST
. #database
Growing on the balcony…
No deadlines, no quarterly goals, no milestones. — The unreasonable effectiveness of just showing up everyday
Looking Glass is an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse.
diffsitter: A tree-sitter based AST difftool to get meaningful semantic diffs.
Vim tip of the day: for the visual block currently selected, g C-g
will provide word counts among other things. And there’s more to see. #vim
What’s worse is the hardware and high-level language improvement are only improvements to accidental complexity – these things don’t actually help us with the inherent complexity of our jobs. Meaning we still fail at the hard parts. — Software Engineering: What Has Changed Since 1968?
thunderchez: Libraries for Chez Scheme productivity (via Mark Damon Hughes). #scheme
Comprehensions in Julia. #julia
(…) the biggest stylistic change that’s happened in GHC recently, I think, is the move towards this “trees that grow” idea. Now, trees that grow, you can search for that keyword as a paper on my homepage about it, is a way to make sort of extensible data types using Haskell. This is really useful for Haskell’s abstract syntax tree. Haskell has a very large concrete syntax and so, correspondingly, has a large abstract syntax, that is the internal data type that describes Haskell programs after you’ve passed them has dozens of data types and hundreds of constructors and GHC then, during its renaming and type checking phase, decorates this tree with lots of additional stuff: types and scopes, and all sorts of extra stuff get gets added onto the tree. So, at first, we had a tree that was just GHC specific, but then we realized increasingly that other people would like to parse Haskell themselves for other purposes, so what we really wanted was a sort of base library that contained the core abstract syntax tree with its dozens of data types and hundreds of constructors and then some way for GHC to customize that tree, to add all its decorations and that’s the trees that grow idea and that lives off type families. We use both type families and data families quite extensively to power the trees that grow idea. It’s not what type families and data families were originally intended for, you can use them for all sorts of things, but it’s a major application within GHC, and it’s pushed a sort of stylistic change through the compiler. — Past and Present of Haskell: Interview with Simon Peyton Jones
Dynamic linking best practices. Lot of useful and interesting stuff in this article.
For most of us, it’s not a switch to Apple, but a return. Hard as this was to believe in the mid 90s, the Mac was in its time the canonical hacker’s computer. — Return of the Mac
Things keep changing, right? At least for the last 12 years or so…
Scenes are shot out of temporal order, multiple times, and different bits are picked from this camera and that camera. Without examining the analogy too closely, this is similar to how different git commits might be viewed. Once you have everything in the “can” (repository) you go back and in post-production, you edit and splice everything together to form individual cuts and scenes, sometimes perhaps even doing some digital editing of the resulting product. — Commit Often, Perfect Later, Publish Once: Git Best Practices.
Great mix for your favorite MP3 manager: https://www.musicforprogramming.net/.
check-if-email-exists: Check if an email address exists without sending any email, written in Rust.
It looks like Neovim 0.5 (stable) is finally out. #vim
Risk differences are clinically relevant measures of treatment effect. But because of extreme baseline risk-dependent heterogeneity of risk differences, risk differences should be covariate-specific and not averaged. — Incorrect Covariate Adjustment May Be More Correct than Adjusted Marginal Estimates
TIL that Frank Harrell is now using data.table under the hood. What a great news! #rstats
Lagrange, a Beautiful Gemini Client (via thequietlearner).
Static Integer Types. #clang
True concealing in Vim using multiple characters (thanks to Brian Albert Monroe). Add this in your Vim config (possibly in after/syntax/r.vim
):
call matchadd('Conceal', '|>\&|', 10, -1, {'conceal':'»'})
call matchadd('Conceal', '|\zs>', 10, -1, {'conceal':'='})
syntax match rOperator "%>%" conceal cchar=»
hi! link Conceal Operator
Not sure I will really need the magrittr’s pipe operator, so I didn’t bother using Haskell’s monad sequencing operator with value passing.
Result:
fork-exec for Python programmers. #python
Orgmode clone written in Lua for Neovim 0.5. Looks really interesting compared to existing solutions. #vim
New incubating project in the radar: Apache DataSketchs, for stochastic streaming algorithms.
We don’t remember things because we’ve somehow deemed something worthy of remembering, we simply remember things because they’re remembered, because they happened, because they stuck in our minds. I think a great note-taking system should inherit these properties of memory to properly extend it. — Incremental note-taking
TIL about Beets, which is a media library management system for obsessive music geeks.
Give me a to-do app with tags, color choices, and hierarchies, and I’ll give you an hour of my time to organize something as simple as a grocery shopping list. Give me multiple notebooks for my notes and I’ll give you days of my life building an organization system. — I Still Use Plain Text for Everything, and I Love It
The Old Web isn’t dead. It just got old enough that it constantly seems to leave the spreadsheet with all of its passwords open on the desktop. It is sinking into the sofa while images of a low-bitrate Spaghetti Western dance in its bifocals. — Things We Left in the Old Web
TIL about lieer, which can be used to fetch and two-way tag synchronization between notmuch and GMail. I no longer really use Gmail, and I use mu instead of notmuch to manage my Maildir’s, but this is quite nice. See Setting Up neomutt with notmuch, gmail(lieer) and gpg signing for additional information.
In the software industry, there is a term for intentional designs which coerce the user into doing something, be it consciously or subconsciously - a ‘dark pattern’. These patterns are employed by social media networks, e-commerce, video games, and many more places. — The ‘Fuck You’ Pattern
Text editors inhabit a weird space in computing. What could be simpler than transcribing the ramblings of an operator into characters on a blank screen? And yet there are dozens, possibly hundreds, of different ways to do it, all targeting different use cases, writing styles, feature sets, abilities, and trade-offs. There’s a reason new ones still come out, despite the industry existing for decades. — Thinking out loud about Vim
And then, you learned about it: M-x shell.
It was all just text. Why did you need another application for it? Why should only the shell prompt be editable? Why can’t I move my cursor up a few lines to where the last command spewed out its results? All these problems simply disappear when your shell (or shells) simply becomes another Emacs buffer, upon which all of the text manipulation power of Emacs can be brought to bear. — Blurring the lines between shell and editor
What I’ve learned about data recently. Good points re. Learning 1 and 3.
For simple expressions, parentheses are a form of static typechecking. If you model a Lisp as a stack language that evaluates from right to left, each parenthesized block must push exactly one value onto the stack, and must not consume any values. — Parentheses are Just Typechecking
Wald tests via statsmodels (python). #python
Two things Perl 5 got right was its lexical scoping rules and support for anonymous functions (“lambdas”). Combine those features and you can make closures. And just what are closures good for? Well it turns out they’re pretty damn powerful; powerful enough, in fact to make a better object system than Perl’s built-in offering. — Perl Closures As Objects
Newcomer
“I had an obsessive-compulsive streak that drew me to digital, discrete problems. And I loved poring over large collections of information,” Knuth said. — The Computer Scientist Who Can’t Stop Telling Stories
Bunch of years ago, when social networks did not exist (wow) the web prettended to be pretty simple. As simple that some content management systems were designed to do a kind of hard work: build a static site from the dynamic one. Easier to be served, maintained and much much faster… win-win!. — Stay static
Coreutils gotchas. #unix
The only browser that does not use Google’s web engine (blink) is Firefox. So if you really want some kind of privacy I’d recommend you switching to Firefox or something Firefox based. — Brave, the false sensation of privacy
When you are a kind of old school, modern times means a bit of pain in some way. Your soul is mostly seeking inner peace but on the other hand, as someone that works with technology, you wouldn’t stay freeze.
And sometimes the thing is the other way around, it feels that the old-school-world you’re living with is good but not as great as it should and you need to move a bit forward yourself to - wrongly - have a feeling of progress. — Mattermost and Matterbridge
Lisp is the result of taking syntax away, Perl is the result of taking syntax all the way. — Doug Hoyte
Cited in Lisp’s nested syntax, by Daniel Szmulewicz.
And ensure you added https://stackoverflow.com/feeds/user/69545 to your RSS feeds, if that’s not already the case.
Got my nice playlist on the Ubuntu laptop, added a crappy script, and it’s working fine!
Not only in a professional context, but also for private purposes it does make sense to actively read your books/articles. Try to apply some analytical reading, a concept I’ve read about for the first time in How to read a book (book). The idea is to interact with the content you’re reading about: Ask questions, try to link ideas in your mind, make notes, lookup complex definitions. The worst thing you can do is to just passively read something, finish it and then you move on to your next reading. — Note taking in 2021
The problem with most of these comments is that they convey very little information. Often it is just a repetition of the method name and parameter names in a few more words. These comments may be useful for API:s exposed externally, but in an application where you have access to all the source code, they are mostly useless. If you wonder what the method does, or what the valid input range for a parameter is, you are better off just reading the code to see what it does. These types of comment take up a lot of space without providing much value. — On Comments in Code
Modulinos In Bash. #unix
R tip of the day (thanks to Pr. Brian Ripley): the equivalent of %paste
(or paste
) in IPython appears to be source("clipboard")
(or equivalently, source(pipe("pbpaste"))
for Mac users). #rstats
If we think about privacy and the future, I don’t want to be the next KFC Girl[7], so I clean up my drivel. Many of the posts I create on social media have very little thought go into them, so once they’ve served their purpose, they can be deleted. — Why I Delete Old Content
Email is not a hard problem. This is a more than fifty-year-old tool.
Chat is not hard either. This is a more than forty-year-old tool. — Some random sketchy thoughts on Unix, web-apps and workflow
Trying out mpv as an alterntive to cmus for isolated playlists. Looks really good!
Effective Modern CMake (via Matt Morse).
Some enlightening posts on the Freenode thing, as viewed from my RSS reader: the end of freenode, Goodbye Freenode, Leaving Freenode, Goodbye Freenode, Final Chapter.
I could say that Twitter, Facebook, Youtube, and Google helped ruin the internet, but really it was that everyone started using it. The internet used to be a haven for nerds, geeks, artists, and bohemian misfits until the cool kids crashed it. Now the internet is dull and stale and overly commercialized. — I miss the old internet
So true.
This blog serves as my way to give back to all of the people who taught me something over my career. It all started in 2007 when I needed a way to keep track of all the information I learned during my daily work as a systems administrator. — https://major.io/
So what does it mean to always be quitting? It means “making yourself replaceable”; “deprecating yourself”; “automating yourself out of your job”. — Always be quitting
On IRC, features like embedded images, a nice UX for messages longer than a few lines (e.g. pasted code), threaded messages, etc; are absent. Some sort of “graceful degradation” to support mixed channels with clients which support these features and clients which don’t may be possible, but it still degrades the experience for many people. By instead making everyone work within the limitations of IRC, we establish a shared baseline, and expressing yourself within these limitations is not only possible but makes a better experience for everyone. — Absence of certain features in IRC considered a feature
The new Firefox UI (v89) is quite nice actually. At least on Ubuntu, with a 16:9 13 inch display. I found it less appealing the first time I saw the new tab on the Developer version on my Macbook last week.
Ipomea on the loggia
Turning 47 today. At least a prime number. #self
Unix Shell Programming: The Next 50 Years (PDF, 8 pp.). #unix
Ironic as this may sound, my first suggestion for how to write programs that are supposed to be random is to make them deterministic. — Probabilistic Programming Habits
“Using the REPL” actually means typing your code in your favorite editor. However, one sends the code to evaluate in a REPL, which may not even be visible at all. Once the code is evaluated, the results immediately show up in the editor, so you get the feedback right away. Obviously, this requires some upfront setup, but a proper Clojure REPL setup exists in all major editors. Just google it.
Note that one normally sends the code to evaluate with a single key stroke. Note also, a very important point that people often miss, is that this “sending code to evaluate” is uniquely convenient in Lisp because of the parentheses.
There’s a notion of “form” in Lisp, that is the code enclosed between a pair of parentheses, which can be independently evaluated. So, when next time someone insists that their favorite non-Lisp language also has a REPL, ask them, does it have a notion of “form”?
The benefit of a form, is that one no longer needs to use a mouse or some awkward key combinations to painstakingly select a region of code first, before sending it out for evaluation. Instead, one can use a single key stroke that means “evaluate the form under the cursor”, or “evaluate the form before the cursor”, etc, to precisely define the scope and send the code at the same time. — How much can a Clojure developer do alone?
I mostly don’t care how popular Lisp is. I am not using Lisp in order to score better in a popularity contest. I am using Lisp because it is the best programming language I know for the kind of programs I write. I don’t think there is anything particularly or seriously wrong with Lisp. It might be that at the moment it does not provide what some people have come to expect from a programming language (free cross-platform implementation with all the libraries you could possibly want). Whether this will ever happen, I don’t know, and I don’t care (though I respect that others might). I do think I know that some of the people who want this to happen will have to get their hands dirty and just do it. No amount of lamenting is going to magically create any libraries. — What is wrong with Lisp?
First contrib for a very useful Vim plugin ;-)
As I write this, I realized that this PR has already been merged.
I updated my Zsh config today, just to make terminal tabs (in Kitty) show the current running process, instead of the default $SHELL
. Looks much nicer!
TL;DR Add this to your .zshrc
or wherever you put custom settings:
preexec() {
# See, e.g., https://www.davidpashley.com/articles/xterm-titles-with-bash/
print -Pn "\e]0;$1\a"
# or, equivalently,
# printf "\x1b]0;%s\x07" "$1";
}
precmd() {
# Clean up terminal title (in case Neovim doesn't restore it to its initial state)
# printf "\033]0;\a"
# or print relevant stuff
# (%~ current working directory; %1~ directory name only)
print -Pn "\e]0;%1~\a"
}
I’m delighted to start using Julia again. The 1.6 milestone, which may eventually becomes the next LTS version, looks much more stabilized than the previous versions I quickly tested in the past (1.0, and 0.3 to 0.5 beforehand). And, they got a true graphical engine. #julia
The success of Julia in the scientific-computing sphere is an important development at the intersection of science, engineering, and free software (in the free speech sense). Until the advent of Julia, the only programming language with comparable influence and ubiquity in the science world was Fortran. — Julia 1.6 addresses latency issues
At last, a tool to cleanup the mess in your $HOME/.stack directory
. Just went down to 3.9 Go instead of 9.1 Go.
In the 1980s and 1990s, when the GPL was written, the enemy of the free software movement was Microsoft and other companies that sold closed-source (“proprietary”) software. The GPL intended to disrupt this business model for two main reasons (…) In the 2020s, the enemy of freedom in computing is cloud software (aka software as a service/SaaS, aka web apps) – i.e. software that runs primarily on the vendor’s servers, with all your data also stored on those servers. Examples include Google Docs, Trello, Slack, Figma, Notion, and many others. — It’s time to say goodbye to the GPL
Instead, I believe the widest gap between the two cultures involves sampling variation. It forms the very core of statistics, while ML mostly ignores it. I’ve observed this over the years in writings and statements by ML people, and in conversation with them. — Efron Updates breiman’s “two cultures” essay
Writing Pythonic Rust. #rust
Check out these math problems (with solutions) by the Mathematics Department at Iowa State University.
(…) Infect the host quickly, before anybody notices; all the while telling people how much the company is investing in the community that it cares about (making lots of money from). — Complexity is a source of income in open source ecosystems
Working from a comfy setup.
Thirty years later, when Cervone created MathJax, I was amazed again—though perhaps not for the right reasons. I had supposed that the major programming challenge would be capturing all the finicky rules and heuristics for building up math expressions—placing and sizing superscripts, adjusting the height and width of parentheses or a radical sign to match the dimensions of the expression enclosed, spacing and aligning the elements of a matrix. Those are indeed nontrivial tasks, but they are just the beginning. My recent adventures have helped me see that another major challenge is making TeX work in an alien environment. — MathJax turns 3.0
Welcome to native pipes & Co. I guess. #rstats
yadm: Yet Another Dotfiles Manager.
Nice idea: Video tutorials for modern ideas and open source tools.
More flowers.
I’m done with Season 1 of Homeland. So far this is a pleasant TV show. Back to Black Mirrors for some days, though.
Last posts I was read on Vim and Neovim:
Speedup neovim. #vim
Research is characterized by allowing yourself to make mistakes: performing experiments; drawing conclusions; later, realizing that your experiment was not sufficient and you got it wrong; and trying again. — Verifying vectorized Rust revisited
If you’re reading this and you use Sublime Text or VSCode or anything else, and this gives you the feeling that you should or must switch to vim, or that I consider it a lower class of editor and think that the mere existence of vim makes other tools ‘newbie’ tools and you immediately start installing vim and spending the rest of your day learning the modes: please don’t. If the editor you’ve been using is working for you, it’s working. Somehow text editors became status symbols in technology, the kind of topic that some jerk in the office goes ‘harumph’ when he (it’s a he) discovers that the new hire uses Coda. — How and why I use (neo)vim
5 steps to faster web fonts. See also Tom Macwright’s article, This page weighs 15kb.
Sqliteviz is a single-page offline-first PWA for fully client-side visualisation of SQLite databases or CSV files.
On .plan files. With some nice ideas to manage them with Vim.
TIL about pledge() and unveil(). #unix
VIM Testing and Workflow. #vim
https://vim.help/. #vim
Using Computer Modern on the web. I’m happy with my current setup, but I must admit those fonts look so great.
Data Is Plural. Didn’t know there was such a thing. This would have been very useful when I was teaching R and Stata for data analysis and statistical modeling.
The benefit of a form, is that one no longer needs to use a mouse or some awkward key combinations to painstakingly select a region of code first, before sending it out for evaluation. Instead, one can use a single key stroke that means “evaluate the form under the cursor”, or “evaluate the form before the cursor”, etc, to precisely define the scope and send the code at the same time. — How much can a Clojure developer do alone?
Tectonic is a modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive. #tex
Flowers (again).
Right and left folds, primitive recursion patterns in Python and Haskell. #python
#haskell
Still relevant: Things to Know When Making a Web Application in 2015.
Vim scripting cheatsheet. #vim
To a lot of people, C is a dead language, and
${lang}
is the language of the future, for ever-changing transient values of${lang}
. The reality of the situation is that all other languages today directly or indirectly sit on top of the Posix API and the NUL-terminated string of C. — The Most Expensive One-byte Mistake
Use on-demand loading with vim-plug
and remove vim-airline
: -50% startup time ;-) #vim
It’s amazing how fragile LSP Python (via PiPy) is. This morning I had to fix yet another issue with conflicting version of jedi
and python-language-server
. Or it may just be that Python package management really sucks for some package. #python
This evening I started watching Homeland. I had been hesitating for a long time to start a new series. For the moment it seems to me quite suitable for my evenings in this new apartment.
Almost there: 398 RSS feeds in total in my feed reader (Newsboat).
Computer Science from the Bottom Up.
Not everyone wants to attend shop class. Most people only want to drive the car, not know how to build one from scratch. Obviously any general computing curriculum has to take this into account else it won’t be relevant to its students. So computer science is taught from the “top down”; applications, high level programming, software design and development theory, possibly data structures. Students will probably be exposed to binary, hopefully binary logic, possibly even some low level concepts such as registers, opcodes and the like at a superficial level.
This book aims to move in completely the opposite direction, working from operating systems fundamentals through to how those applications are complied and executed.
Here’s a nice series of tutorials on using Vim effectively, from beginner to more advanced levels: Vim from the ground up. #vim
git-bug: Distributed, offline-first bug tracker embedded in git, with bridges. (via Brett Terpstra)
What’s the diff. Nice tip!
Yesterday I trashed all snap-related stuff on my Ubuntu machine. Why is Ubuntu forcing us to rely on sandboxed apps if we’re only interested in CLI tools and we only use apt
and dpkg
from a terminal? #unix
Knowledge or a means of learning is key to emancipate yourself from your own inadequacies. Never make excuses that hinder your potential to learn something new. Always keep an open mind. — Moral lessons from free software and GNU Emacs
A small collection of useful CSS techniques and a quick reminder that print style sheets are still a thing.
envs.sh | THE NULL POINTER – file hosting and URL shortening service.
Vim tips: nnoremap <silent> <leader>X :<C-U>windo lclose <bar> cclose<CR>
. This allows to automagically close the Quickfix or Loclist window, without worrying about which kind of window we deal with. #vim
What’s even more surprising for Alex is the fact that his peers seem to be different. According to an extensive twitter and blog research he’s done in the past, the majority of developers find eternal happiness immediately after the perfect productivity setup is achieved. — Dev surprised his perfect vim/tmux/bash/xmonad setup doesn’t alleviate existential crisis
Lovely autocorrection by Git, although 0.1s is a bit too quick for me, especially when I don’t look at the screen (I often perform incremental commits using a combination of git add . && git amend
, where amend
is aliased to amend = commit --amend --reuse-message=HEAD
).
Currently reading Common Lisp by Example, and I feel like it is quite a good introduction to LISP in just under 60 pages. #lisp
JavaScript for Data Science. Great work, but still I don’t like the omnibus word “Data Science”.
Rust Language Cheat Sheet. #rust
If you want a single piece of advice to reduce your bug count, it’s this: Re-read your code frequently. After writing a few lines of code (3 to 6 lines, a short block within a function), re-read them. That habit will save you more time than any other simple change you can make. — Don’t write bugs
Elements of C Style. #clang
Go is simple to read, Rust is complicated, C++ is familiar, Zig looks promising but is too young to judge. — A “better C” benchmark
Impact of order of files in tar archive on compressed size. Nice post, which reminds me of an SO post that I referred to a while ago.
Beej’s Guide to C Programming. #clang
Mac OS X is Apple’s effort to create a best-of-both-breeds operating system which directly leverages the advances and experience Apple has in the user experience arena and the well-established power of BSD. Mac OS X begins with a BSD foundation called Darwin. On Darwin we build the programming toolkits from Mac OS which we call Carbon, which in turn enables us to layer on the new user interface known as Aqua. Carbon also provides a straightforward transition strategy for our existing application base. We also provide a toolkit called Cocoa, which is an object-oriented API derived from NeXT’s OpenStep. — The Challenges of Integrating the Unix and Mac OS Environments
Git from the Bottom Up. #git
Today’s lunch
Just found out my way to long-lasting Inbox zero: Using Neomutt, macro index D "<tag-pattern>~d >1m<enter><tag-prefix-cond><delete-message>" "trash old mail"
.
Old times, good times. PostScript® LANGUAGE REFERENCE (3rd ed.) (PDF, 912 pp.).
Google making Recommender Systems at scale? https://github.com/WICG/floc
Currently reading:
The resulting outcome may not be in equilibrium and may display patterns and emergent phenomena not visible to equilibrium analysis. The economy becomes something not given and existing but constantly forming from a developing set of actions, strategies and beliefs — something not mechanistic, static, timeless and perfect but organic, always creating itself, alive and full of messy vitality. — Foundations of complexity economics
cl-data-structures: Data structures (mutable and immutable) + stream algorithms (aggregations, group-by and so one). #lisp
If you are in urgent need of some good music: https://lofi.cafe/. (press h to get some help)
Learn Haskell Now!. #haskell
In the Linux community I often heard the call that surely now is the year of the Linux desktop, where Linux would be ready to be used by ordinary people. The point where finally Linux would be as good as Windows. For me, it is now nearly 20 years of Linux desktop. The call has stopped, mostly because the desktop is not as important anymore. Desktops are mostly used to display a browser and browsers are available everywhere. Also there are smartphones and most of them run Linux. — My Linux History
Why Rust strings seem hard. #rust
Foundations of Databases (PDF, 678 pp.). #database
In The Hitchhiker’s Guide to the Galaxy, Douglas Adams mentions an extremely dull planet, inhabited by a bunch of depressed humans and a certain breed of animals with sharp teeth which communicate with the humans by biting them very hard in the thighs. This is strikingly similar to UNIX, in which the kernel communicates with processes by sending paralyzing or deadly signals to them. Processes may intercept some of the signals, and try to adapt to the situation, but most of them don’t. — The TTY demystified
Learn Vim Progressively: Very nice hand-on material for beginner. I would add that it’s still possible to add ̀C-a
and C-e
keybindings for Insert mode if you are used to using the terminal with default Emacs keybindings a lot. #vim
We are now in the 2020 year, and this is also the year that Lisp would become 62 years old! That is an impressive age for a programming language. With that said that does not mean that the concepts and ideas developed in Lisp are old. — Starting with Common Lisp in 2020
Just found out lovely pictures from this website, especially in the “plants” category.
Great work in Victor’s new post: Python behind the scenes #10: how Python dictionaries work. #python
SQLean: all the missing SQLite functions. #database
Build systems for small programs or libraries will often spend 10+ seconds running configure and complete the actual compilation and linking in a fraction of that time. In other words, the setup to perform the build takes longer than the build itself! — Surprisingly slow
Easy text transmission from computer to smartphone. Lovely use of Un*x pipes and QR code.
I just realized today that the kitty terminal emulator that I installed on Ubuntu 20.04 is kitty v15, which is missing lot of features from most recent releases (at least the one I have on my Macbook).
Typography matters because it helps conserve the most valuable resource you have as a writer—reader attention. — Practical Typography
Causal Inference: The Mixtape: An accessible, contemporary introduction to the methods for determining cause and effect in the social sciences.
I wonder who’s behind this project: Welcome to Lisp-Stat: An environment for Statistical Computing. #lisp
Random links from Tuesday:
SQLite is not a toy database. #database
The havoc wrought by the combination of these two changes is considerable. Those Python virtual environments you created over the last year? All of them are now broken. Why? Just because you ran brew upgrade ponysay? Yup. — Homebrew Python Is Not For You
This is sad, really sad.
The friction of having to write, to structure thoughts in plain text, to remember the name of the person I need to reference on this page: that is the point. Frictionless note-taking produces notes, but it doesn’t - for me - produce memory.
The same goes for a lot of things. I use neovim to edit code like a grandpa, and I don’t use a file tree. There’s no “directory listing” in my editor. I hit ctrl-p and fzf helps me find the file by name. This is obviously not the future of coding: shouldn’t I be navigating the source tree in 3D like in Jurassic Park? Sure, but the names of things, their functionality, and how it all fits together should be things that exist in one’s mind, not just in a computer. — The return of fancy tools
At first I thought Github allowed for personal blog as a derived GH-like UI. Well, no, it’s all CSS (managed with Hugo): https://neapowers.com/.
Foldable Words, (via mostlymaths.net). #python
Clojure from a Schemer’s perspective (via Irreal). ̀#scheme
Software engineers have been led to believe that their time is more valuable than CPU time; therefore, wasting CPU cycles in order to reduce development time is always a win. They’ve forgotten, however, that the application users’ time is more valuable than their time. — The fallacy of premature optimization
Decoded: GNU coreutils. Lot of useful references and very detailed explanations. #unix
My overall feeling is that if I could spend infinite time and effort, my C programs would be as fast or faster than Rust, because theoretically there’s nothing that C can’t do that Rust can. But in practice C has fewer abstractions, primitive standard library, dreadful dependency situation, and I just don’t have the time to reinvent the wheel, optimally, every time. — Speed of Rust vs. C
Meanwhile, I’ve been playing with OpenBSD a bit more, and guess what: Kitty terminal emulator is available there too. I’m impressed by the number of packages that are readily available: Kitty, Neomutt and Neovim work right out of the box. I wish Linux (Ubuntu) was using /usr/local
as the default user directory for local programs, this would simplify config files a lot! #unix
What a week (or two, in fact)! Just starting to feel better right now, after three days at the hospital. I should be ready for the next 8 years, hopefully.
New Post: An Ode to Stable Interfaces, and Praise To Base R and R Core
— Dirk Eddelbuettel (@eddelbuettel) March 20, 2021
In which I run code I posted fourteen years ago: it works unaltered. That should be cherished, celebrated--and encouraged. We need more examples like this.https://t.co/9khR7TwRk0#rstats #reproducibility pic.twitter.com/BKS0GXjRGs
I moved out last week, and moved in right away. I just finished unpacking all the boxes. What a journey! I’m exhausted, and I probably need a few weeks to recover. In the meantime, here is the new home office:
Visualization is a spectrum: from exploratory to explanatory. — 10 Years of Open-Source Visualization
I’ve come to believe that working through something is the only way to explore the idea maze. Everything else is commentary. I’ve mostly stopped sharing unsolicited “helpful” just-a-thoughts and comments at work. — Commenting vs. making
It’s easy to view yourself as “not a real programmer.” There are programs out there that everyone uses, and it’s easy to put their developers on a pedestal. Although developing large software projects isn’t easy, many times the basic idea of that software is quite simple. Implementing it yourself is a fun way to show that you have what it takes to be a real programmer. — Write a Shell in C
I believe I now need to give it a try: sklearn-clj. #python
#clojure
Here’s the newcomer!
sectorlisp is an effort to bootstrap John McCarthy’s meta-circular evaluator on bare metal from a 512-byte boot sector. #lisp
Syncing my website (generated via Hugo): Transmit on macOS takes so much time (up to 5 min) compared to rsync (less than 20 sec). WTF?! Time to switch I guess.
The baseline minimum is that to qualify as free publishing it must be both free to read and free to publish, both for the reader/author and for their institution. So free publishing may be defined to be the same thing as diamond open access. — Free publishing
Once tabs became mainstream, they changed the way people surfed. I still clean my tabs out every day, but some people keep hundreds of the things running, as if this somehow makes them more organized. On average, desktop web browsers have around 10-20 tabs open; mobile browsers, which encourage you to keep them lingering in the background, have more. — The stagnant browser
Knowing I have some time until the computer stops, I know I must keep focused because time is passing. — About the offline laptop project
Modern Data Science with R (2nd edition). #rstats
Interpretable Machine Learning: A Guide for Making Black Box Models Explainable.
Almost two months spent on Ubuntu and a Dell laptop. I’m afraid I’m no longer able to use my Macbook keyboard!
Probably one of the last pie I’ll be cooking in this appartment.
Linux memory management. #unix
Converting UTZOO-Wiseman Usenet Tapes to Website with PostgreSQL backend using Python 3.8. See also Usenet History on Henry Spencer.
My impression now is that they feel like it has too many cool new things; and that a few things didn’t quite make it in even with the extended release cycle. So it’s looking likely to me that 1.7 will actually be the LTS; but that it might also be a feature release – possibly this time a much shorter release period than usual. In practice I think for a lot of package maintainers 1.6 will be a LTS, in that that is the oldest version they will make sure to continue to support. There have been too many cool new things (as this post will detail) to stay back to only 1.0 features. Already a lot of packages have dropped support for Julia versions older than 1.3. — Julia 1.6: what has changed since Julia 1.0?
Racket v8.0 is out. #racket
Neovim and Rust. #vim
#rust
OpenBSD on a Laptop. #unix
You might be tempted to use the correlation to reduce the set of predictors, but as Charles Dickens shows us, this requires domain knowledge
Annual income twenty pounds, annual expenditure nineteen nineteen and six, result happiness. Annual income twenty pounds, annual expenditure twenty pounds ought and six, result misery. – Mr Micawber, in David Copperfield
Even though income and expenditure are highly correlated, neither one separately will do anywhere near as well as the pair in predicting who ends up happy and who ends up in debtor’s prison. — Co-linearity
Python behind the scenes #8: how Python integers work. #python
Given what I just said, we Haskellers have a lot of hubris. Each time you say “if it compiles it works,” a thunk dies and collapses into a blackhole. We’ve got plenty of messes in Haskell that don’t sufficiently protect us from ourselves. The compiler can only do as good a job as our coding standards and our libraries allow. — Haskell: The Bad Parts, part 2
POSIX Threads Programming. #unix
flynt – string formatting converter. #python
Even though Usenet has changed it’s face over the last, say ten years, the simple idea of exchanging ideas and having discussions among a large number of people by posting articles on a global message-board has pertained. — Usenet is still a strange place
Rewritten in Rust: Modern Alternatives of Command-Line Tools. I bookmarked this a while ago. I’ve tried them all, yet I only find added value in exa and ripgrep.
People had created blogs (many with great content), run them for a while, let them lapse, and eventually they were swallowed by time and entropy. — Blog with Markdown + Git, and degrade gracefully through time
What if Github went down? Better to use your own server and backup your plain text files in a secure place.
Note to blog writers: Could you please (1) check your GUIDs and (2) allow RSS readers to download all feeds and not only the last 10 or 20 entries? With many thanks.
There are plenty of books on how to become a better programmer out there. Books like this tend to have checklists and other advice that the author deems important enough for you to do in order to become a better programmer. They tend to focus on specific improvements like choosing a better editor, writing better test cases, or drinking lots of water. Those books have lots of useful advice, but they read like a laundry list of things that you must do all at once in order to succeed. This book will try not to saddle you with more work (you likely have enough as it is). Rather, we’ll discuss what it feels like to be a programmer. — What is The Mediocre Programmer?
Having only the content I want to see only be shown when I want to see it with the freedom to jump between readers as I please, all with no ads? For me, no other service comes close to the flexibility, robustness, and overall ease-of-use that RSS offers. — Why I Still Use RSS
Haskell-like patterns in Lisp. ̀#lisp
Guillotine: beheadings for your next online presentation.
Unix Programmer’s Manual (November 3, 1971). #unix
Nyxt browser: the internet on your terms.
Plotnine: Grammar of Graphics for Python. That’s probably the best implementation of the grammar of graphics for Python right now. ̀#python
Can you make a basic web app without googling?. I still can write a complete website using HTML and basic CSS without looking at Google (or DuckDuckGo for what matters). Likewise, I can use Sed, Awk and shell scripts, or write R and Python code without relying on a search engine. However, I must admit that I became so lazy over the years that I found myself googling for everything nearly available in the help, man or info pages that sit on my computer. That’s a shame, of course. Laziness and muscle memory are the problem. We should probably refrain ourselves from googling again and again. That’s not a way to learn.
WhatsApp rose by trapping previously-free beings in their corral and changing their habits to create dependence on masters. Over time, this made it difficult or impossible to return to their previous lifestyle. That process should sound familiar: it’s eerily similar to the domestication of animals. I call this type of vendor lock-in user domestication: the removal of user autonomy to trap users into serving vendors. — WhatsApp and the domestication of users
An opinionated list of best practices for textual websites. Lot of good advices there.
The Piecewise Geometric Model index (PGM-index) is a data structure that enables fast lookup, predecessor, range searches and updates in arrays of billions of items using orders of magnitude less space than traditional indexes while providing the same worst-case query time guarantees.
ffscreencast is a shell wrapper for ffmpeg that allows fool-proof screen recording via the command line.
Quickly open a terminal in Neovim (much like pop-up term in Doom Emacs):
:5sp +te
The thing that comes through in the interview is that Knuth is dedicated to bringing the same joy he finds in the material to others. He structures his prose to keep the reader turning the page. Then, of course, there’s his fanatical commitment to making his printed works look good. — Knuth on Writing
I already have all my emails on my laptop since several years. I am about to transfer more than1500 MP3 files to my Music library. Next step: Get back all my hi-res photos from the cloud.
Unix as IDE. See also the ebook version.
It’s hard to contest that Neovim’s achievement happened because of its approachable development process focused on maintainability and velocity, while in contrast, it could be argued that current progress in Emacs happens despite its development process. (and a bunch of other very good points in this article) — The values of Emacs, the Neovim revolution, and the VSCode gorilla
What you need on Sunday evening when you’re looking for a specific file in your “Papers” directory:
alias bibfind="bibtex-ls ~/org/references.bib \
| fzf --multi --ansi \
| rg -o --color never '[a-z0-9\-]+$' \
| xargs -I % sh -c 'fdfind % ~/Documents/papers' \
| xargs -I % sh -c 'xdg-open %'"
Note that this requires fzf-bibtex, rg and fd, but the later two can easily be replaced with the standard ̀grep
and find
tools.
A rabbit hole full of Lisp. #emacs
MacOS in Virtualbox. It just works. It would sound weird to install macOS on top of Ubuntu, but I appreciate that the author stays at Mojave, which is probably the latest version of macOS in line with OS X’s original spirit.
I gave up with calcurse to manage my TODOs and agenda. I’m probably not an agenda’s guy. However, I added cmus to my TUI toolbelt and it’s now my default music player. If only the Latitude 7310 had a better built-in sound system.
2.1M of the oldest Usenet posts are now online for anyone to read. Feeling older and older…
Python instead of Lisp. #lisp
Generic interfaces in Racket. #scheme
How to open a file in Emacs. #emacs
Some useful tips on Lisp debugging. #lisp
Colour schemes and templates, by Paul Tol.
Trying out Byobu. Not sure it works best compared to my Kitty + Tmux settings, since it becomes hard to manage a Byobu session on a remote machine from a currently running Byobu terminal. However, when using Kitty as the driving terminal, I get all the Byobu goodies on the remote server.
Static Executables with SBCL. #lisp
In an industry that is notoriously behind the times, a fundamental change is underway. This change is in response to new business demands, including: (1) The desire to price increasingly complex deals with increasingly large datasets; (2) The desire to integrate with 3rd party data to augment pricing models; (3) The desire for faster models and robust codebases that adhere to software development best practices. Excel fails miserably at these tasks. — Ditching Excel for Python – Lessons Learned from a Legacy Industry
Nice series on Python: Python behind the scenes. #python
There are definitely disadvantages to use text streams as the universal interface between programs due to its lack of structure. But the timelessness of many of the programs following this pattern and the prosperity that it brings to the CLI ecosystem proved its effectiveness as a design choice. Text can be read by both human and programs. It can be manipulated, printed, stored, trasferred, version controlled with the tools of your choice. For programs that do not inheritantly require structured data, using text streams as interface provides the most flexibility and composibility. — Emacs is the 2D Command-line Interface
A few days ago I learnt that Stata license are not tied to the original OS you bought your license for. This means that I will be able to run Stata 13 MP on Ubuntu, once I found my license of course. #stata
Apple Music everywhere! I would love streaming my playlists via cmus.
I install very few things on either my personal or work computer. I don’t have terraform, aws, node, or pip installed, but I use them all the time. I have a Docker image for each, and I run them in containers with minimal privileges. I’m definitely not the only one, but it’s not as popular as it should be. None of these tools actually need full access to my computer to do their work, but that is normally how they’re run. — Run More Stuff in Docker
$ git clone https://github.com/jhbadger/xlispstat.git
$ cd xlispstat
$ ./configure --prefix=/home/chl/.local
$ make && make install
Enjoy your 30 years old statistical package!
Trying out calcurse to manage my TODO and appointments.
So, I stopped using the Gmail web client. Google the data kraken, Google the spearhead of surveilance capitalism. I don’t want to live in front of the camera with algorithms watching my every move, using the data they gather about me to manipulate me into voting for this or for that, or to buy this or that. “And lead us not into temptation, but deliver us from evil.” And remember, “Don’t be evil” was a part of Google’s Code of Conduct from 2000 to 2018. They removed it. — Rmail
As I now start Emacs from scratch, with a minimal init.el
file (just to load a monochrome theme, really), I come to appreciate the default settings, although I will need to tweak the base config a bit.
The Macintosh was designed under a number of constraints, including: (1) It needed to sell to “naive users,” that is, users without any previous computer experience. (2) It was targeted at a narrow range of applications (mostly office work, though entertainment and multimedia applications have been added later in ways that sometimes break slightly with the standard interface). (3) It controlled relatively weak computational resources (originally a non-networked computer with 128KB RAM, a 400KB storage device, and a dot-matrix printer). (4) It was supported by highly impoverished communication channels between the user and the computer (initially a small black-and-white screen with poor audio output, no audio input, and no other sensors than the keyboard and a one-button mouse). (5) It was a standalone machine that at most was connected to a printer. — The Anti-Mac Interface
Back to reading some RSS feeds thanks to newsboat. This is the third text-based app I use daily for processing incoming news: For mail, I settled on Neomutt, and for IRC that’s irssi.
I haven’t updated my Emacs config since July. Same for my dot files, which appear to be stabilized after several months of tricking zsh, vim, emacs & Co. Finally, I wrote no blog post the last two months. I must be busy with something else, I yet have to know with what.
EDA (Exploratory Data Analysis): Stata program that automates the generation of exploratory data analysis reports. #stata
Most people today don’t know what the command line is, much less why they would want to bother with it. As computing pioneer Alan Kay said in a 2017 interview, “Because people don’t understand what computing is about, they think they have it in the iPhone, and that illusion is as bad as the illusion that ‘Guitar Hero’ is the same as a real guitar.” — Command Line Interface Guidelines
R now provides a simple native pipe syntax ‘|>’. That was quick! #rstats
The simplest solutions are often those that stand the test of time and a changing environment: How I Manage My Random Daily Notes.
Time to Say Goodbye to Google Fonts. It’s now more than one year since I decided to host my own font. Google is evil, anyway.
Emacs in the terminal (via Irreal). #emacs
Putting all the pieces together. What a wonderful piece of work, by Nicolas Rougier, again. #emacs
Not so long ago, I was using macOS as my daily driver. The main reason why I got a macbook was the underlying BSD Unix and the nice graphics it provides. Also, I have an iPhone. But they were also the same reasons for why I left macOS. — macOS to FreeBSD migration a.k.a why I left macOS
Tidy Modeling with R. #rstats
V7/x86 is a port of the Seventh Edition of the UNIX operating system to the x86 (i386) based PC. #unix
Hands-On Machine Learning with R. #rstats
Yet another online R textbook: One Way ANOVA with R. #rstats
What a beautiful dashboard for mu4e! #emacs
It’s easy to grow disillusioned with tech, even to the point that it appals you. I’ve been using computers since 1988 and the net since 1995 and over time, something’s happened. During the last decade or so, my mind has increasingly been preoccupied with the following thoughts: I’m no longer in control of my computer and my OS. The modern web is a cesspool of tracking scripts, ads, malware and clickbait designed to suck you in and make you stupid. — Subversive Computing
Mixed Models with R. #rstats
For the real amazement, if you wish to be amazed, is this process. You start out as a single cell derived from the coupling of a sperm and an egg; this divides in two, then four, then eight, and so on, and at a certain stage there emerges a single cell which has as all its progeny the human brain. The mere existence of such a cell should be one of the great astonishments of the earth. People ought to be walking around all day, all through their waking hours calling to each other in endless wonderment, talking of nothing except that cell. — I should have loved biology
ANOVA: A Short Intro Using R. #rstats
I’ve been sick for two weeks now: probably a rhinopharyngitis at the beginning, which evolved into sinusitis. It’s getting better now, hopefully I’ll be able to post stuff here and there. Nothing interesting on HN the past few days, I should probably go back to good old RSS feeds which I haven’t check in days.
Another nice textbook on the Design of Experiments and Observational Studies. #rstats
Boot volume layout. #apple
Still a bit sick. That was the week it was.
Nice textbook for SPSS and R users: Applied Missing Data Analysis. #rstats
The XY Problem. Together with three.sentenc.es, I’m ready for most e-mail solicitations.
Genstat is really one of the only statistical package that I never tried. A few days ago, it came to my attention that there’s also the ASReml R package that I never used for mixed-effect models. #rstats
I’m sick since 4 days now. Kinda like a flu, except that it’s not really a flu, but just because I have so many medication alongside, I’m just out of order all day long. So I’m left with music (since I can’t really read any book), and now it’s time for a lovely live.
Lovely digital minimalism, and light TUI themes.
Shrink PDF. Postscript forever.
My preferred color scheme for Stata graphics remains plotplain
, although there are many nice alternatives. TIL about stata-scheme-modern. #stata
My distro-hopping days had come to an end. I just wanted a system that would let me code, write, and browse the Web. I chose the easy way. — Emacs and Emanuele Severino
Nice online textbook on the Design of Experiments.
Multiplicity comes from the chances (over study repetitions and data looks) you give data to be more extreme (if the null hypothesis holds), not from the chances you give an effect to be real. It is only the latter that is of concern to a Bayesian. Bayesians entertain only one dataset at a time, and if one computes posterior probabilities of efficacy multiple times, it is only the last value calculated that matters. — Continuous Learning from Data: No Multiplicities from Computing and Using Bayesian Posterior Probabilities as Often as Desired
Every lisp hacker I ever met, myself included, thought that all those brackets in Lisp were off-putting and weird. At first, of course. Soon after we all came to the same epiphany: lisp’s power lies in those brackets! In this essay, we’ll go on a journey to that epiphany. — An Intuition for Lisp Syntax
FreePN is the first open-source peer-to-peer VPN service.
As a rule, new users, right after introduction to a few basic commands, start indulging in Vim configuration porn. Such porn has various different flavours. There is the “exhibitionist” variety which includes dressing Vim up in status lines, colorschemes, and font decorations in order to impress others. It often leads to Vim being displayed on videos and, nomen omen, “vim-porn” screenshots. There is an “integrated” category where people plug and stretch their Vim until it resembles an IDE. Git integration, autocompletion, language servers, refactoring, and debugging are the tools of trade in this version. And then there are a few more variants, including “fuzzy”, “packaged”, “conveniently re-mapped”, and I am sure anyone could think up some of their own. — Porn, Zen, and .vimrc
Lisp from nothing. #lisp
Visualizing binaries with space-filling curves. I may have posted this on Twitter long ago, but it’s never to late to revisit this post.
The analogy in my mind is that Stata is to the iPhone as R is to Android, as far as social science data analysis goes. I guess SAS would be BlackBerry, insofar as it’s dated and propped up by a strong lock-in among government employees. And SPSS is a Nokia phone that has a slick interface for dialing your friends but requires you to push dozens of extra buttons in a non-intuitive sequence if you want to call anyone new. — stata 12!
Emacs Shells on Irreal. After many attempts at using Eshell, I gave up and I’m a happy user of vterm since last year. #emacs
JuliaMono: a monospaced font for scientific and technical computing.
E-mail takes too long to respond to, resulting in continuous inbox overflow for those who receive a lot of it. — three.sentenc.es
The Software Foundations series is a broad introduction to the mathematical underpinnings of reliable software.
In many ways memory capacity is more important than clock frequency: a program won’t run unless enough memory is available but people can wait for a slow cpu. — Memory capacity growth: a major contributor to the success of computers
Racket Templates: Unofficial collection of racket app templates. #racket
Since I became an Apple user back in 1989, I’ve always felt there was more to it than just being a returning customer of a tech company. There was a sense of belonging to a common set of principles that went against the mainstream. That was extremely appealing for someone like me who always moved countercurrent to everything. There were the Mac user groups, places (whether physical or online) to share a passion with like-minded people. There was the idea of ‘thinking differently’ way before it was formalised in 1997 by Apple itself. Apple products weren’t just computers and peripherals, but specialised tools made for people with a creative, think-out-of-the-box mindset. — This nine-year chasm
Comprehensive guide on handling long lines in Emacs (via Irreal). #emacs
In March I bought a 16" MacBook Pro, reasonably well tricked out: 2.3GHz 8-core Intel i9, 32G RAM, Radeon 5500M with 8G, 4T of disk. I hate it. It is slow and buggy enough that I wonder if maybe it’s a lemon? Herewith the gripes, for no particular reason other than it makes me feel like shouting at the world. — I Hate My MacBook
Before I get into the strategy, I want to congratulate the Notes team for making what may be the only Apple app that has been unambiguously improving over the past few years. While it still shows evidence of the limited and ugly app it started out as, Notes is now one of the best note-taking apps on iOS, with features that nicely balance simplicity and power. — What is Notes good for?
I started updating my stata-sk notes and I’m now using jupyter instead of ESS to process Stata code (because I couldn’t compile the project with my old setup). Looks great so far. I will write a full blog post once I get some time.
Now I get this annoying message regarding battery status on my Macbook (only 331 cycles out of the 1000 expected for this model).
The new platform is a winner. Everything is clean, quick, and configurable. When I ps uaxww, I’m not hogging ‘gigs’ of RAM just to have things up and running. There’s no black magic that derails me at every turn. In short, my sanity has been long restored. — Bye-bye, Apple
The “Widescreen Tall” layout in Amethyst is that it works pretty well for everything related to plotting!
OMG. One of the last goodies of the new version of kitty (0.19).
Fortran has ruled scientific computing, but Julia emerged for large-scale numerical work. — The unreasonable effectiveness of the Julia programming language
What are the Clojure Tools? #clojure
Python LSP under Emacs: up to 700 Mo (three files opened, less than 20 files in the project). WTF? Switching back to Anaconda: 2 process, 20-30 Mo each. #emacs
The Animated Guide to Paredit. #emacs
But if you’re one of those people who loves nothing more than to quote how bad Apple is because of their walled garden, please do some fact checking as, to me at least, it doesn’t exist. — The Apple Walled Garden
So long, Apple.
No worry, I’m still happy with my Macbook, this is just that I don’t need these apps anymore. The online versions on iCloud seem decent, and may come out for rescue in case I need to edit old stuff.
Another great post by Peter Ellis, with outstanding data viz: Free text in surveys. #rstats
Your grep one-liner du jour. Count how many words of each length appear in the /usr/share/dict/words dictionary.
— Steve Hayman 💉💉💉💉💉 (@shayman) September 29, 2020
for n in `jot 25`; do printf "%2d letter words: " $n; grep -E "^.{$n}\$" /usr/share/dict/words | wc -l; done
These are what engineers of my generation call “eyewash:” Something of no utility meant to impress the outsiders. — Red Meat Friday: Modernizing Emacs
Video: C Programming on System 6 - Intro. Nice setup, and I learned a lot of interesting stuff about Apple System 6.
Future Alterations. #lisp
At least 24 annoyances per day I have to live with. That’s the world WE ALL are living in now. Welcome. — People expect technology to suck because it actually sucks
It’s been more than a month now than the interactions I have with my Macbook can be summarized to using Emacs (or Neovim) and Zsh in a Terminal (with 24 bit color enabled) and, optionally (more often than I would like), Firefox or Skim to read PDFs. It’s been relaxing, at least. Digital minimalism, plain text mode; I like it.
Unzip and run it in-place anywhere. It’s also entirely offline. It will never automatically update, or even touch the network. In mere seconds any Windows system can become a reliable development machine. — w64devkit: (Almost) Everything You Need
When dreams come true. Replace Windows by anything like macOS, Linux, *BSD, of course.
There we go. Apple requiring macOS 10.15 to upgrade some apps. #apple
Okay, so I uninstalled Textual app. Circe (Emacs) and irssi should be enough to chat on Freenode in the future. #apple
Panopticon is a debugger-powered tracer for Python code to quickly visualize and explore code execution. #python
I’m halfway thru Season 2 of Fargo. Like True Detective, each season is independent from the preceding one. I didn’t like True Detective S2 (probably because I very much liked S1) so I quit after the first episode. Likewise, I find Fargo S2 far less intriguing than S1. I will probably stop after that one.
I swear by vsearch since a week. It’s so fast and handy for all sort of things involving Fast[aq] files.
CleanMyMac is really a great tool when it comes to manage your Macbook!
What Every Programmer Should Know About Floating-Point Arithmetic.
~ ❯ node
Welcome to Node.js v14.11.0.
Type ".help" for more information.
> 0.1 + 0.2
0.30000000000000004
A minigolf game written without a game engine in C.
Back to basics: org-mode agenda. #emacs
MOAR survey regression models. #rstats
Introducing Bean Machine. #python
Fafi is a Gemini browser written in Racket. #racket
Why is it that we live in a world riddled with bugs? I think there are a few reasons for this. No doubt, part of the issue is that our competitive capitalist economy makes major software and hardware vendors want to move at breakneck speeds. Technological progress doesn’t nearly justify a new generation of smartphones being released each year, but, fuck the environment, a new product needs to be released in order to maintain interest and keep sales numbers high. We move fast, and in the process, we break things. — The Need for Stable Foundations in Software Development
Using Emacs and Org Mode. I still happen to find some interesting stuff in there. #emacs
Panic’s Nova text editor (a review) (via Irreal). #apple
Debugging R in VSCode. #rstats
Nice review of old and new text editors: The Era of Visual Studio Code.
BBEdit, Emacs, and Vim are all great text editors in their own right, but they all have idiosyncrasies that (while beloved by people like me) prevent them from ever being the most popular text editor.
Elfeed Rules!. #emacs
TIL about aoristic analysis (via Andrew P. Wheeler).
The underlying issue is the non-collapsibility of ORs and HRs. Non-collapsibility means that the conditional ratio is different from the marginal (unadjusted) ratio even in the complete absence of confounding (as in our example dataset below). By the way, don’t make the mistake of concluding that non-collapsibility is undesirable. Any measure that has the potential for summarizing a treatment effect with one constant for all types of patients will be non-collapsible when the outcome is categorical or represents time to event1. Collapsible measures such as absolute risk reduction and relative risk reduction must vary over risk factors (creating mathematical but not subject-matter-relevant interactions), otherwise probabilities will arise that are outside the allowable range of [0,1]. Log odds and log hazard ratios have an unlimited ranges and can possibly apply to everyone. This makes them good bases for studying heterogeneity of treatment effect. — Unadjusted Odds Ratios are Conditional.
Evening: PJ Harvey.
Invent with Python. #python
Contravariant functors are Weird. #haskell
We all know that a languages like Ruby or Python are designed explicitly to hide this sort of complexity from us and let us get on with the dirty business of munging data blobs or serving web requests or solving sudokus or whatever, and thank goodness for that, but wow that is quite a lot, isn’t it? — Hello “Hello world!”
First, new features just keep being added, because how else would you justify releases? VS Code releases every month with new stuff! They are well past the point of shipping the essentials (and have been for a couple of years now), but releases are still been shipped. Because they have a team, that team has a huge budget to spare, and there’s no power stopping them from shipping anything, no matter important or not. There’s no filter. — The most important feature of Sublime Text
Not sure what data-oriented programming is but I bookmarked two posts the other day and I thought I could share them:
The many Flavours of Missing Values. The eternal problem with NA values… #rstats
Introspective Emacs. #emacs
Most of the time, when you hear that a free software project is struggling, it is too late. E.g. both pdf-tools and helm don’t have a maintainer since a few days: did you see this coming?
Org is doing quite well, but I feel we are at a turning point: either we attract more contributors and we can afford to fix more bugs and deliver new releases, or we might get overwhelmed by user requests and lose both our energy and our motivation to continue. — Org 9.4 is out. Can you help?
Yesterday I watched Alabama Monroe (The Broken Circle Breakdown). What an emotional bombshell!
I already said in one of my recent posts on the main blog that I rarely use Stata these days. Yet I continue reading the Stata blog, and I was happy to see Chuck Huber taking the lead on the most recent posts. At the time of this writing, this is all about Python integration, which I find nice after all. I have a somewhat outdated version of Stata since I’m no longer a Stata trainer for public and private companies, but I remain interested in how Stata is evolving. #stata
slimhtml is an Emacs org-mode export backend. It is a set of transcoders for common org elements which outputs minimal HTML. #emacs
#org
One of the delightful and surprising things about Emacs, as you get to know it better, is the depth of customisation which is available. Emacs can be a completely different editor for different people and for different purposes. — Advising Emacs
Helping people online is difficult. We expect technical questions and discussions, but everyone involved are just people, so it doesn’t always go smoothly. There’s no way to guarantee a good outcome, but there are things we as helpers can do to improve the interactions. — How to be helpful online
Comby is a tool for searching and changing code structure.
Learning about Haskell typing mechanism, talking about Lisp interface to Python. But this is just an excuse to post a screenshot of this lovely Amethyst window manager.
Going back to Stack Overflow after several years off. I only edited/fixed a dozen posts or so and I’m already exhausted.
As I was looking for an old blog post by Vincent Zoonekynd, I noticed he’s back to blogging after a 7 year hiatus.
There exists however one common trait for virtually all of text editors: they are written by and for developers. Consequently, design is generally not the primary concern and the final product does not usually enforce best recommendations in terms of appearance, interface design or even user interaction. The most striking example is certainly the syntax colorization that seems to go against every good de- sign principles in a majority of text editors and the motto guiding design could be summarized by “Let’s add more colors” (using regex). — On the design of text editors
M-x doom tip of the day: gs/
(avy-goto-char-timer
) as a quick Vim easy-motion
replacement. See also gs<space>
. #emacs
Git Magic is really great, especially chapters 7 and 8. #git
Get Things Done with Emacs. #emacs
Hlint is such a killer feature for writing Haskell in Vim or Emacs!
Haskell Fan Site. #haskell
Longer functions contain more code, and the more code developers write the more mistakes they are likely to make.
But wait, the evidence shows that most reported faults occur in short functions.
This is true, at least in Java. It is also true that most of a Java program’s code appears in short methods (in C 50% of the code is contained in functions containing 114 or fewer lines, while in Java 50% of code is contained in methods containing 4 or fewer lines). It is to be expected that most reported faults appear in short functions. — Impact of function size on number of reported faults
TIL that Helm development is now stalled (via Bastien Guerry). I’m using Ivy from a while ago now, but my heart goes out to helm’s advanced users, like Manuel Uberti. #emacs
From Rust to TypeScript. #rust
fastmac: Get a MacOS or Linux shell, for free, in around 2 minutes.
Asynchronously Opening and Closing Files in Asyncio. #clang
#python
Only write necessary tests — specifically, tests whose estimated value is greater than their estimated cost. This is a hard judgement call, of course, but it does mean that at least some of the time you should be saying “it’s not worth it”. — Test smarter, not harder
We all know it’s tricky to have a rational discussion about a religion. Non-Lispers will be able to read this without getting their feathers ruffled. Some Lispers aren’t too far gone, so let’s assume we’re talking to them, and take a look at some of Lisp’s problems that make it flat-out unacceptable. At least for LISP, you know, the idealized one. — Lisp is Not an Acceptable Lisp
OMG! My Doom startup time just has just been reduced from 4s to less than 1.5s after I removed the only require
instruction I add in my various Elisp files. #emacs
Doom loaded 298 packages across 55 modules in 1.492s.
(…) what I am trying to recover most is differentiated time. Some days should be different than others. I’ll replace Twitter with something else for a little while, and hopefully that’ll seem different. — Recently
Nextflow, for Data-driven computational pipelines, looks great. Apparently it also works with OpenJDK 14 on macOS.
Take defensive measures. To future-proof your content, rather than reference the general web, its far more reliable to link to an archive. — Why I Link to WayBackMachine Instead of Original Site
My thoughts about editors in 2020. That’s an interesting take on text editors in the 21st century. I remain a strong Emacs believer, although I tried and loved (Evil) modal editing. Work in progress.
However, the Vi philosophy is probably too obscure for me at the moment. It has been going on for at least 10 years so I have little hope that it will ever change. While I like some ideas we found in modal editing, I cannot embrace them all. Emacs, 15 years later
I’ve been using Element on Firefox for two or three weeks now. No need to launch textual or Circe in Emacs: I get the best of both worlds (Matrix and IRC), with Desktop notifications and the history!
Two new TV series started this month: The Leftovers (with my son), and Fargo (when I’m alone). Still on Apple TV.
trivial-gamekit: This framework is intended for users who wish to start with game development in Common Lisp as soon as possible without much configuration hassle. #lisp
How funny that Apple’s (now hidden for such a long time) ~/Library
folder keep archiving old attachments from the Messages app. It’s actually 2.5 Go large while I systematically delete most of the attached media once they’re saved on my HD! I know it’s good practice to keep a shallow copy of everything for the casual user — in case things get deleted by mistake, you know, but while isn’t there an option to delete old stuff like this in macOS preferences? #apple
Mood of the day.
On the various C standard drafts: https://news.ycombinator.com/item?id=24361469. #clang
What’s the emacs.d?. #emacs
In reply to this criticism one is normally reminded that Unix was invented for a PDP7, which had about as much memory as an earthworm and CPU power to match. That is, the user interface was designed to minimize the time required to decode a command. That meant short, fixed-case, commands, and no minimum matching. But 1969 is a long time ago, and both memory and speed have improved a thousandfold since then. — A Requiem for a Dying Operating System
Still, I like short command names like rm
or ls
.
Massacring C Pointers. You may also like Geoff Wozniak’s Gopher-like blog. #clang
Render is a unified platform to build and run all your apps and websites with free SSL, a global CDN, private networks and auto deploys from Git. Get started. It looks like a nice and free alternative to Webfaction.
Having so much fun with Kitty and Amethyst! (But see my recent post.)
cmus is a small, fast and powerful console music player for Unix-like operating systems.
An increasing number of command-line software programs output text with ANSI color escape codes by default. While some developers and users obviously prefer seeing these colors, many users don’t. Unfortunately, every new piece of software seems to have a different way of disabling colored text output and some software has no way at all. — NO_COLOR
I intended to write a brief post some years ago after he retired. I didn’t, but there’s this Festschrift for Jan de Leeuw on the JSS. It was great to meet him at Rennes, even if I was too shy (which I believe is just my latent Asperger’s syndrome) to engage in a conversation with him. I remember the time where I subscribed to his mailing list on statistical computing (“StatCompute Digest”), and the .mac
shared point he used for his /usr/local
resources. That was a great time. I learned a lot from the man. He’s definitively not retired. Thank youi, Jan.
A nice duotone minimal blog template for Hugo.
Risp (in (Rust) (Lisp)). #rust
#lisp
The lounge: The self-hosted web IRC client.
I like printing the time elapsed for the last command in my Zsh console whenever it exceeds, say 5s. TIL that there’s a nice builtin option: REPORTTIME
.
Announcing Rust 1.46.0. #rust
I have been a happy man ever since January 1, 1990, when I no longer had an email address. I’d used email since about 1975, and it seems to me that 15 years of email is plenty for one lifetime. — Email (let’s drop the hyphen)
A freak historical accident. AT&T Labs, where it was developed, was forbidden under its anti-trust settlement from commercializing products unrelated to its core telecom business. Hence, Unix was licensed very cheaply to universities, including UC Berkeley, which subsequently built one of the more influential branches of the Unix family tree—BSD. Apparently, AT&T classified Unix as industrial waste for tax purposes when licensing it! — How Unix Won
A Simple Scheme Compiler. #scheme
Emacs xwidget-webkit enhancement suite. This is a great alternative to EWW, IMO, and xwidget
was my default setting for the past few months. #emacs
So far, it’s been 3 weeks that I ran Emacs in terminal only. No worry, I’m fine: I just started diving into plain TeX again!
Typesetting a Textbook. Nice Latex class for Tufte-like textbook! #tex
Functional programming is a radical and elegant attack on the whole enterprise of writing programs. It’s very different from the “do this and then do that” programming mentality. You have to rewire your brain in quite a different way. For a long time it was well understood theoretically—there was lots of stuff about semantics and it had these very deep foundations in logic. But in terms of a practical programming medium it seemed like a completely virgin field. — Interview with Simon Peyton-Jones
TIL that we can use references and labels in Org babel!
You can also add a ‘-r’ switch which removes the labels from the source code. With the ‘-n’ switch, links to these references are labeled by the line numbers from the code listing. Otherwise links use the labels with no parentheses. Here is an example:
#+BEGIN_SRC emacs-lisp -n -r
(save-excursion (ref:sc)
(goto-char (point-min)) (ref:jump)
#+END_SRC
In line [[(sc)]] we remember the current position. [[(jump)][Line (jump)]]
jumps to point-min.
Mac OS Big Sur logbook (intro). #apple
I don’t believe in upgrading your devices for the sake of upgrading, but I believe that in this day and age one has to be technologically flexible.
At this point in time, I don’t think I will buy a new Macbook or even upgrade to Big Sur (I skipped Catalina too), even if I like the revived design of most of Apple apps. I work with a terminal emulator and Safari most of the time, I use Preview for reading PDF files, and Marked to render Markdown files; I barely have any use of the Finder these days. Sort of I could live in another BSD machine without noticing it, except for the browser.
I think we are in the middle of a pendulum swing where some creators are moving away from proprietary platforms and taking more control of their relationship with their audiences. And I think a lot of audience is trying to remove themselves from engagement-driven timesink platforms that don’t respect their users. The majority will still be on YouTube and all the socials. But the movement seems significant. And I’m all about it. — The Strong Technologies
Understanding Memory Fragmentation. #haskell
macOS-Security-and-Privacy-Guide: This guide is a collection of techniques for improving the security and privacy of a modern Apple Macintosh computer (“MacBook”) running a recent version of macOS (formerly known as “OS X”). #apple
vaex: Out-of-Core DataFrames for Python. #python
Practical Data Ethics is such an amazing online course.
Analyzing Python Code with Python. #python
And we are now done with the goal of writing 500 posts!
Haskell mini-patterns handbook. #haskell
Trying out Borg as a quick backup solution for my dot files and maildir. It turns out that compression mode can be optimized a bit by playing with the settings (for my maildir, --compression auto,lzma,6
increased compression rate by about 30%). I’m looking forward to see how it goes with incremental updates.
I feel just so sad reading this kind of news: Dear Apple: Your Services Are No Longer Required. #apple
Essential Coding Theory (PDF, 391 pp.).
Going back reading some Twitter threads after 2 weeks…
Ricing up Org Mode. #emacs
Fundamentally, a REPL merges usage and extension of a system in a single interface. This merger has been important in providing easy extensibility to the end programmers in many programming languages. — A REPL for Conversations
Oh Shit, Git!?!. #git
Another macOS setup. #apple
For unknown reasons — but maybe I have noticed it earlier, iTerm seems to be draining my battery a lot. Switching again to kitty for some days, to see how it goes. My past impressions were quite good, so hopefully I will have a pretty terminal emulator. Looks very fast so far. #apple
The number of people who have told me that MDN is a wiki, therefore the community will keep it up to date tells me two things. People do not get the value of professional tech writers. Folk are incredibly optimistic about what “the community” will do for free. — I Love MDN, or the cult of the free in action
Bouquet de fleurs du jour.
We are done with Black List (Season 7). This really is a great series, even if the rhythm is rather irregular and the tension and suspense is running out of steam in the last few seasons.
Reference management with Org mode.
My workflow is apparently simpler, thanks to ivy-bibtex
, but overall I agree that Org is well suited for such kind of tasks. I only use Markdown for light stuff (e.g., Github READMEs) and blogging, but I guess I will switch to using Org mode exclusively soon or later. #emacs
Random Permutations. #maths
Gix is a command-line interface (CLI) to access git repositories. Still wip apparently, but it looks like a great initiative.
Differential Privacy algorithms by Google.
Look, I’m back to Elfeed (Feedly only allows 100 feeds for a free account). #emacs
Bevy is a refreshingly simple data-driven game engine and app framework built in Rust. #rust
clj is a collection of functions to work with lazy iterators in Python. #python
Commas in big numbers everywhere: An OpenType adventure. See also Numderline:
Unfortunately some apps that support basic ligatures don’t support the fancy shaping features I use, including Sublime Text 3 and iTerm2. Other apps like Emacs and most terminals don’t support shaping at all.
The missing slice of pizza.
Using Mathematica with Orgmode: It works like a charm! There’s more to see, e.g., Replacing Jupyter with Orgmode (because who likes Jupyter notebook?). #emacs
First Impressions of Rust. #rust
If I think for 10 minutes and then start typing, I want the typing to take the shortest time possible so I can get back to thinking. Any time I spend typing is an interruption that I want to minimize so I can keep my train of thought. — Coming Home to Vim
Ask HN: What feature did you find after years of using macOS?.
That I can rely on a terminal with Apple BSD variant and do most of my work. #apple
38°C today. Same temperature for tomorrow. These are hot days. Hopefully I’m finally done revising all my cli-specific settings: iTerm and zsh, Git, Emacs, Vim. Once the heat wave passes it will be time to do more interesting stuff.
I’m slowly removing all unnecessary apps on my Macbook. Just so in the end I’ll be living in the dark age of terminal mode. Last removal: Reeder. Since I needed Feedly to sync my feeds between my Macbook and my iPhone, I just find it easier to read blog posts on Feedly directly.
Just started using gist from the command-line. This includes almost everything I ever wanted.
Emacs: No modeline. #emacs
git ready: learn git one commit at a time. #git
Using fullscreen or maximied apps with this new “enlarged” font (JetBrain Mono Regular 13) is much welcome for my poor eyes — not that I have any visual deficiency, but with age I came to appreciate a larger font size on retina displays. Despite loving Iosevka so much, especially for writing prose, I think JetBrain Mono is quite a good font actually. Victor Mono is also nice, IMO. Here’s the current top five on my apps:
I deleted a bunch of dead stuff on my OS (again): clang8
and gfortran
, probably installed for R, but I don’t care since I already have the latest LLVM (10.0) and GCC (10.2) from Homebrew; GPGTools, since I already have gnupg
installed by Homebrew for Emacs among other things — it took me some time to reconfigure everything the way it used to work beforehand, well, that’s until I realized that there was a separate pinentry-mac
package to store passphrase in OS Keychain. Meanwhile, I installed a FreeBSD image for VirtualBox, just to make sure I’ll be ready the day I will have to leave the Mac world unless Big Sur doesn’t turn out to be the same kind of catastrophic update Catalina did. #apple
I’ve been very surprised and delighted over a number of years now by Microsoft’s strong efforts in open source. I understand the skeptics, I was on Slashdot when they tried to sue Linux out of existence and I think only time will tell. I figure MS contributing is better than them hunting Linux distributions for sport. So I was mostly onboard for Microsofts efforts and I’ve especially found Visual Studio Code useful. (…) The entire marketplace is proprietary. — The best parts of Visual Studio Code are proprietary
In the other news, I adopted JetBrains Mono as my default font for both iTerm and Emacs, and I replaced my default shell prompt with Powerlevel10k.
I recently switch to streamlink and VLC to watch Twitch streams. Much better than the Electron app on Mac (since the web UI is quite bad actually). VLC further has a “stay on top” option for the current window which is quite handy.
In case you’re interested in learning Common Lisp on Youtube, I can highly recommend the Little Bits of Lisp channel by Baggers. #lisp
Lovely sister.
I really wish we had a front-end to software even half as useful as this in the 21st C, but technology has regressed massively since the ’80s and ’90s. Some of the old IDEs, before they became bloated “enterprise” software (because giant mega-corporations paid for them, not individual programmers, so the IDE makers serve their paymasters), started to slouch towards this kind of usefulness but fast and small. — LISP Machines
I got a revived interest for the BSD world this day. Here’s an interesting thread about NetBSD versus others: NetBSD users, why do you use it over FreeBSD and OpenBSD?
Streamlink: Command-line utility that extracts streams from various services and pipes them into a video player of choice.
TIL about FiraGO. Fira is certainly my second preferred Sans (and Code) font after Iosevka.
R packages can be just a way to organise code, nothing more. By following a certain structure and a few rules we get to benefit from a whole bunch of tools designed just for packages. — Data Science Workflows.
Draw Lindenmayer Systems with Common LISP. #lisp
Slowly going back to my unread feeds in Reeder.app. Today is After WWDC 2020: bittersweet Mac. #apple
Logistic regression is not fundamentally a classification algorithm.
The problem arises from logistic regression often being taught as a “classification” algorithm in the machine learning world. I was personally not taught this way– I learned from econometricians that you can use either probit or “logit” as general linear models in the event you want to estimate on a binary target variable, and that these models calculate probabilities. Thinking about logistic regression as a probability model easily translates to the classification case, but the reverse simply does not seem to be true. — Why Do So Many Practicing Data Scientists Not Understand Logistic Regression?
C Needs Better Syntax and Macros. #clang
Rash: The Reckless Racket Shell. #racket
These days I mostly use Emacs on my laptop. Sure, there’s all that stuff in the background. But in terms of applications I actually launch, I’d say I mostly use just Emacs. — Emacs everything
Same here.
There is commonality shared among all, or at least most, of these programming languages, and the Lisp hackers recognize and appreciate that commonality – the characteristics that make a programming language a Lisp. Homoiconic syntax, powerful metaprogramming facilities, and editor support that, in my opinion, is unparalleled. — The Many Faces of an Undying Programming Language
A visual comparison of macOS Catalina and Big Sur. Despite some criticisms I read here and there, I must admit that the look’n feel of the latest release of macOS is quite pleasant. But why did Apple designers decided to update the core UI elements (like window layout for the Finder, Notes or Preview, etc.) leaving the left “gray” navigation panel untouched on most apps (iTunes and the like)? #apple
Answering the age-old debate: HTML or plaintext emails? Both! — Markdown to multipart MIME
In this essay, I explore the virtues of graphs, algebra, types, and show how these concepts can help us reason about programs. I propose a computational primitive based on graph signal processing, linking software engineering, graphs, and linear algebra. — Computation graphs and graph computation
My first foray into Rust. #rust
The Math of Social Distancing Is a Lesson in Geometry. A nice discussion with several illustrations of circular and hexagonal packing.
Private networks made easy using Tailscale (see how it works). I already subscribed to NordVPN, which does the job well when it comes to broadcast anonymous connections. Unfortuantely, it looks like the only way to get it is through Google or M$.
Webmentiond. An interesting series of links regarding webmentions and the indie web.
Webmentions allow blogs to send message to each other when there is a link in the pinging one pointing to the linked one, the linked one may display that mention at the end of the page, thus creating some form of conversation.
Mighty: Is this the future of Chrome?
Apparently, anonymity is a thing.
Nyxt browser: Be productive on the Internet.
Magit lets you reword a previous commit message so easily (compared to interactive rebasing solutions that are suggested all over StackOverflow). In a magit status buffer, just r w
, select the commit, fix it, then C-c C-c
. This is even better than the earlier solution offered by the author. Interactive rebasing is also a joy. #emacs
RethinkDB: The open-source database for the realtime web.
Notebooks shine when performing quick, interactive, ex- ploratory analysis, but these features also encourage sloppy coding practices that make it difficult to transition notebooks to production. — What’s Wrong with Computational Notebooks? (PDF)
DBeaver: Free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases.
In 1994, there were 3,000 websites. In 2019, there were estimated to be 1.7 billion, almost one website for every three people on the planet. Not only has the number of websites exploded, the weight of each page has also skyrocketed. Between 2003 and 2019, the average webpage weight grew from about 100 KB to about 4 MB. — Webwaste
Hosting your own email server is not easy and requires your full dedication. And with many upcoming trusted and privacy friendly email services, it may not always be the right tool for the job. — Selfhost email… But should you?
I believe in the privacy and control of data that comes from community supported services, self-hosting, and a less corporate internet. — dctrud @ sdf.org
TIL about the Universal Numerical Fingerprint. R package on CRAN.
lsp-mode 7.0 released. #emacs
But there is one language that seems to inspire a peculiar universal reverence: Lisp. Keyboard crusaders that would otherwise pounce on anyone daring to suggest that some language is better than any other will concede that Lisp is on another level. Lisp transcends the utilitarian criteria used to judge other languages, because the median programmer has never used Lisp to build anything practical and probably never will, yet the reverence for Lisp runs so deep that Lisp is often ascribed mystical properties. — How Lisp Became God’s Own Programming Language
Hack: Trial and error is the only way we learn anything. — Unix rules for life. (via Irreal)
It looks like new fonts released by Apple are mostly reserved for 10.14+ users; sadly, the SF Symbols 2 are Catalina only.
Here’s a common piece of advice from people who create things: to make better things, make more things. Not only does it give you constant practice at making things, but it gives you more chances at lucking into making a good thing. — 2500
Now we have established what I believe email is, let’s look at some of the problems with email. To me, the main problems are threefold: (1) Spam, (2) Privacy, (3) Workflow management. — Email Is Not Broken
entr: Run arbitrary commands when files change.
It’s kind of a people mapping/profiling system that attempts to connect the dots. Not all the data in the database is accurate, but it’s efficient. — How to Defend Yourself Against Scammers, Corporations, and Government: Hacker’s Perspective
Tails is a portable operating system that protects your privacy and helps you avoid censorship. (via Irreal)
Ok, so I just tried out yabai. While this looks like a great WM, unfortunately it does not really support i3 stacking and tabbing features — at least for the moment (see also this more recent update), which (I believe) would be the most interesting options for small Retina displays. Update: I reinstalled the HEAD version and tried the “stack” layout, which looks like a simple fullscreen display, not really stacking à la i3wm.
I’m trying coc with Neovim. So far it looks great. Now, I learned that there’s a “native” plugin for LSP in neovim. #vim
This is so f$*ing crazy that I would just love testing it for 5’ on my Macbook: yabai macOS Tiling Window Manager Demonstration (Youtube). Still, I strongly believe that tiling WM are great for larger displays than a 12" one. Well, it’s still tempting, if only to solve the problems inherent in Spaces and floating windows.
More than just words. #lisp
Additional resistance towards plugins seems to be some kind of purist animosity against straying away from some core set of Vim functionality. But if you’re using Vim, you’re already in a subset of people who demand that editing text be fast and efficient, so it’s like a group of savants arguing about which is the most eccentric. The set of people that use a movement plugin like EasyMotion or vim-sneak will argue that they’re more efficient than vanilla Vim users, and vanilla Vim users will argue that they’re more efficient than non-Vim users, and so on. The argument will be moot when we can control computers with our brains anyway. — Vim after 15 years
I just realized today that VS Code was using Jedi as the default backend for its LSP server. It’s still possible to use the MS Python server: same as under Emacs, once you select that option, all MS stuff get downloaded and VS Code gets pretty unusable for quite a few moments when you open a Python project. That was not Emacs fault, right? So I’m now back to Emacs full day. What a life! #emacs
restic: Backups done right! Now I guess I just have to figure out how it compares to Borg.
The UNIX toolset, like the one you’ll find in Linux and OSX, is the work environment of choice of a very large number of programmers and research scientists. If you are interested in a career as a programmer, data analyst, or researcher, you’ll need to master it. — The Hacker Ways
So many new textbooks by Gaston Sanchez! #rstats
Borg: Deduplicating archiver with compression and encryption. Since I’m done with Dropbox and rely on Syncthing now, this looks like a great replacement for Arq eventually.
Data Structure Design in CSV.jl. #julia
A Pamphlet against R. #scheme
Maintaining servers falls into two phases: (1) Bang head until server works; (2) Capture effort into some automation tool like Puppet or Chef. — Literate DevOps
Didn’t know we could organize Org journal (file+datetree
) using weekly subtrees.
I prefer a weekly format in my journal over a monthly format. In fact, the week is a “productivity unit” which always made sense to me, and this mindset integrates beautifully into Org-mode. — My Org Capture Templates
Dexplot is a Python library for delivering beautiful data visualizations with a simple and intuitive user experience. #python
I try to make sure I largely spend the time on things I enjoy, but it gets more complicated once you start selling work. Processing and shipping orders takes quite a bit of time. And it isn’t exactly my favorite activity. Obviously I enjoy the fact that people are willing to buy my work. But I can’t say I enjoy handling the paperwork, and dealing with packaging and shipping. — Making money
A new Org mode? Foam is a personal knowledge management and sharing system inspired by Roam Research, built on Visual Studio Code and GitHub.
Geocomputation with R. #rstats
TIL about keyfreq. This reminded me of the wonderful artwork done by Seth Brown (“Vim Croquet”, see here), back in the days where https://www.drbunsen.org was still alive. #emacs
Tail-call Optimization, using Python. #python
Asynchronous written communication is the tool best suited for remote work. We are so used to talking to each other in the office, expecting immediate responses in work chat, and having meetings all day, that we tried to replicate that at home with zoom and slack. — Written communication is remote work super power
Duh, Github is down, how funny if we were to completely loose access to it….
Compiler and Runtime Support for Continuation Marks (PDF). #racket
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. — A tutorial on the universality and expressiveness of fold
I estimated that I had used my mac for approximately 10 hours a day, 5 days a week, 48 weeks a year, for 7 years straight, for a total for whopping 16800 hours. I have written the first versions of most of the software components of my startup using this computer. And all this time, this machine worked without a hiccup. It was never repaired, and I never opened the back cover. — Cleaning My MacBook After 16800 Hours of Use!
This is a motherfucking website. And it’s fucking perfect.
I also reinstall VS Code, with VIM keybindings. This is only for Python because Emacs Python LSP sucks, but that’s okay! Anaconda sucks too, and that’s not okay. Are there any convenient way to install a Python package or environment outside macOS?!
Recent headlines: My son and I are done with Battlestar Galactica, and back to Black List S5. I’m also done with the Handmaid’s Tale.
Light is right, alright?. I switched back to a light theme too, since my eyes now seem okay with that. There’s no alabaster theme for Emacs, so I made my own. Lovely.
Deno is quite interesting. I ran some of the suggested examples and I just realized that the run/install
stuff makes distributing packages very smooth, as noted by Will Schenk.
TIL about flycheck-grammalecte. #emacs
Conversational software development is a term I’m half heartedly trying to coin to describe a way to develop your program with an incredibly short feedback loop. It aligns closely with hot module reloading for React based frontend applications but with a much tighter focus and an extra dimension that you may not have seen before. — Conversational software development
It’s amazing how great computer products can be when they don’t need to deal with corporate bullshit, don’t have to promote a brand or to sell its users. Frankly, I almost ceased to believe it’s still possible. But it is. — Computers as I used to love them
The new design for Github is quite good actually.
How to log your activities on Emacs. #emacs
electricShine to boost your Shiny app. #rstats
HOPL 4 is out. Lot of interesting articles on the hsitory of (many) programming languages, including an article by John Chambers on S, R, and data science.
Everyone is constantly online, and the need for statuses has seemingly disappeared. But has it really? Toggling between online and offline may not be all that useful anymore, but along with that we lost a way to specify whether we want to talk or not. At best you’ll get a green dot meaning only “they’re looking at the screen right now”, or a note saying “last seen 10 minutes ago” – which could just mean that they woke up, checked the screen and went back to sleep. Combine that with the absurd amount of competing platforms, and your best bet at “hey everyone, I need to talk” is messaging every single person on every single platform and hoping that they respond. — I miss being online
Worse, it turns out that nobody else found all this stuff to be fascinating. Even though GPG has been around for almost 20 years, there are only ~50,000 keys in the “strong set,” and less than 4 million keys have ever been published to the SKS keyserver pool ever. By today’s standards, that’s a shockingly small user base for a month of activity, much less 20 years. — GPG And Me
Signal is pushing the envelope when it comes to forgetting information about its users. And as far as my technical knowledge goes I choose to trust Signal that they are doing whatever they can to stay the most private and secure messenger out there. — Signal - the secure messenger
Teddy: A data framework for Common Lisp, wanna be like Pandas for Python. #lisp
DBCore: Generate applications powered by your database.
I’ve spent one hour this morning to build this little snippet in R. I’m so used to base R that using dplyr/tidyr stuff is painful at time, although chaining operations like this makes the workflow of data management so much more readable for other people. #rstats
Emacs as Email Client - Part I. Note taking as plain text attachments and reduced distraction mode are two of the most valuable features of mu4e, IMHO. #emacs
Demystifying text editor keystrokes. (via Irreal)
A List of Hacker News’s Undocumented Features and Behaviors.
Most developers are primarily engaged in making systems that acquire, extract, transform, maintain, analyze, transmit and render information—facts about the world. Most often, this information documents some human activity, be that of customers, suppliers, advertisers, travelers, voters, members, students, patients etc and must deal with all the irregularity thereof. This is in stark contrast to artificial systems, e.g., programming language compilers, which make up their own rules, in fully enumerated spaces, can eliminate irregularity and can reject anything which does not conform. — A history of Clojure
Two quick links for Shiny users: Outstanding User Interfaces with Shiny, Effectively Deploying and Scaling Shiny Apps with ShinyProxy, Traefik and Docker Swarm. #rstats
Battlestar Galactica S4 finished. We just started watching Westworld 3.
ggnuplot is a ggplot2 theme that makes your ggplots look like gnuplots. #rstats
TIL that you can customize your R prompt much like you do with your preferred shell. See also Customising your Rprofile. #rstats
I saved a personal, private backup of everything I’ve posted – 3,794 posts, not including this one – and then deleted it all except the first post.
First, the why: the internet never forgets, but that’s not how people work. “I like to remember things my own way. How I remembered them, not necessarily the way they happened.” The person who posted entries here ten years ago is a different person than me, and I see no reason for that older person to stay around*. — the end of livejournal, by Evan Martin
We’re the Electronic Frontier Foundation, an independent non-profit working to protect online privacy for nearly thirty years. This is Surveillance Self-Defense : our expert guide to protecting you and your friends from online spying. — https://ssd.eff.org/en
Lovely: Calendar busy colors according to agenda. Check out other experiments at tweaking Emacs UI by Nicolas Rougier, e.g. this large fringe or this basic config for an “Elegant Emacs”. #emacs
I’m all for Iosevka these days (I do not want to buy Pragmata), but Victor Mono is such amazing piece of artwork.
If you want to build truly performant software, you need to at least keep performance in mind as you make early design and architectural decisions, lest you paint yourself into awkward corners later on. — Reflections on software performance
How to Live Well on the Linux Console. Or start Emacs with an Eshell buffer and you’re (almost) done.
3mux: Terminal multiplexer inspired by i3 (via Brett Terpstra). The ability to switch between different layouts for current panes (e.g., tall or wide, in i3 parlance) is the only thing that I really miss in iTerm2.
At the end of the day, a text editor is just a preference, just like mechanical keyboards, vim bindings, window managers and what have you. — On Emacs
M-x doom tip of the day: %
(evil-jump-item
) is a nice replacement for forward-sexp
or backward-sexp
. #emacs
Inter is a typeface carefully crafted & designed for computer screens.
Unlike Windows and MacOS, Linux gives you options.
TIL about uuidgen
(on Mac):
NAME
uuidgen -- generates new UUID strings
SYNOPSIS
uuidgen [-hdr]
DESCRIPTION
The uuidgen command generates a Universally Unique IDentifier (UUID), a 128-bit value guaranteed to be unique over both space
and time.
I personally use “principled” to refer to choices informed by sincere and careful deliberation, in contrast to choices informed by unquestioned defaults that have ossified into convention. A principled workflow considers whether or not modeling assumptions are appropriate and sufficient for answering relevant questions in your particular applied context. Because everyone asks different questions in different contexts, such a workflow cannot be reduced to a deterministic algorithm. All we can do is assemble a coherent set of techniques to help us evaluate our own assumptions and guide our unique path through model space. — Towards A Principled Bayesian Workflow
I’ve taken various detours along the way into learning and using various other languages. I like several of them quite a bit. I just don’t like them as much as Common Lisp. The pleasure I take in my work is a significant factor in my productivity. Choosing tools that offer me less joy is a cost I prefer not to bear without good reason. That cost often exceeds the advantage I might realize from using some other language. Not always; but often. — Production Lisp in 2020?
John McWade, founder and creative director of Before & After magazine, mentioned that the ideal line length is 45–55 characters without spaces and punctuations. For small mobile devices, the acceptable line length is 25 characters without spaces and punctuations. (If spaces and punctuations are included, the ideal line length will be around 66 characters according to The Elements of Typographic Style by Robert Bringhurst.) — How to Set Perfect Line Lengths for Your Webpages
Batch operation in magit-list-repositories, with interesting Elisp code to fetch several Git repos at once. #emacs
Great software is defined by more than its objective code quality; I would even go so far as to say that code quality is one of the least important characteristics of software. Especially in open source, the greatness of software lies in its ability to meet the needs of its users, and in its leadership and community to adapt to the changing landscape around it. — What Is Good Software
Emacs Tramp tricks. #emacs
rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
I use emacs, which might be thought of as a thermonuclear word processor. It was created by Richard Stallman; enough said. It is written in Lisp, which is the only computer language that is beautiful. It is colossal, and yet it only edits straight ASCII text files, which is to say, no fonts, no boldface, no underlining. In other words, the engineer-hours that, in the case of Microsoft Word, were devoted to features like mail merge, and the ability to embed feature-length motion pictures in corporate memoranda, were, in the case of emacs, focused with maniacal intensity on the deceptively simple-seeming problem of editing text. If you are a professional writer–i.e., if someone else is getting paid to worry about how your words are formatted and printed–emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish. — In the beginning was the command line
I’ve got it all terribly automated so I can start a new entry, proof an entry, and publish it to the website with single keystrokes in Emacs; I recognize lots of people wouldn’t be OK with that. — ongoing’s colophon
My commitment to accessibility of the WCAG AAA sort comes from the realisation that legibility is the single most important characteristic of any text-heavy interface. Emacs is all about text; and text should not pose a barrier to entry. — On the design of the Modus themes
LSP reduces an m×n complexity problem to m+n the latter refers to only needing a language server for each language and a client for each IDE, whereas the former means that for every language each IDE would require, in most cases, standalone support. — Emacs and the Language Server Protocol.
Checking email in a browser is a huge distraction. I spend most of my day staring at emacs, and when email notifications ding, I feel compelled to check; switching to the completely browser pulls me out of my flow. Once you’re in the browser, you realize that you are on a slippery slope… It starts tempting you to check hacker news or reddit (at least for me), and often times it’s impossible to not succumb to it; we all know how easily time goes missing “just checking if anything new popped up on the front-page”. — Better Email with mu4e
I upgraded to Emacs 27 recently, and I found two little annoying things: there’s now a warning about the cl
package that has been deprecrated for a long time now (everything is okay in Doom core modules, this is just the packages flyspell-lazy
and persp-mode
which happen to trigger the warning with their (require 'cl)
), and Ivy posframe gets sometimes stuck. I encountered some freezing issues as well, but this may well be due to the with-no-titlebar
option in the HEAD version of emacs-plus. #emacs
A Free, Interactive Course Using Tidy Tools, by Julia Silge. #rstats
How Does A Computer Calculate Eigenvalues?. It’s always a pleasure to read one of Matt Drury’s blog posts.
Much better base colors in R 4.0 ;-)
d <- transform(as.data.frame(replicate(2, rnorm(30))), g = gl(3, 10))
plot(V1 ~ V2, data = d, col = g, pch = 19)
Another interesting answer assumed that “the test of time” is somehow a cosmic optimization. But as every biologist knows, Darwinian processes “find fits” to an environment, and if the environment is lacking, then the fits will be lacking. Similarly, if most computer people lack understanding and knowledge, then what they will select will also be lacking. There is abundant evidence today that this is just what has happened. — Alan Kay himself, in response to the Quora thread What did Alan Kay mean by, “Lisp is the greatest single programming language ever designed”?
Now it is 25 years later and the bootstrap baby is old enough to be in grad school. I have had some second thoughts about the bootstrap—its strengths and weaknesses, its foundations, what it can and cannot do, what it might do in the future—and these second thoughts are what I will talk about, briefly, here. — Second Thoughts on the Bootstrap, by Bradley Efron
Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust. It looks like a solid successor to Node.
How did I miss the website for Emacs Racket mode? #racket
I took some days off lately. Meanwhile, cooking and gardening went all fine!
Bringing React Native to Windows & Mac devices. Is this an laternative to the good old Electron way of delivering so-called native apps on your preferred OS?
Janet. #lisp
The entire language (core library, interpreter, compiler, assembler, PEG) is less than 1Mb.
The rise of interest in VSC is pretty interesting, compared to that of Atom few years ago, although I’m a bit surprised that Emacs remains such a niche for programmers (and probably writers as well).
Oh boy, this is hot! Really hot! I mean why fan in my laptop spins like I’m playing a video game? Oh, it’s because I’ve opened these two editors side by side.
Just kidding. It’s fine, but this performance-related pun is still a thing, unfortunately, because each of those editors eats more memory and CPU cycles than Sublime Text, and overall performance is not that good. Why? Because these editors are not exactly editors. These two are web browsers that were turned into text editors. — Andrey Orst on Text Editors
Just checking some old emails; the latest version of mu is (still) blazing fast! Already 7 years and counting.
Trust me, I’m pretty happy with that old good Mojave and the full iTunes!
Evolution of Emacs Lisp (PDF, 55 pp.). #emacs
Yes, make Emacs appealing and user friendly. But don’t forget that a masterful tool in the end requires mastery, which can’t come for free. I certainly draw the line at saying Emacs is for everyone. I’m not saying it’s only for some sort of snooty “elite” but I am saying that it’s for those who are willing to learn, seeing some extra work as the aforementioned long-term investment, and who have the patience reach a worthy goal a little later rather than right this very minute. — Making Emacs popular again
Always demand a deadline. A deadline weeds out the extraneous and the ordinary. It prevents you from trying to make it perfect, so you have to make it different. Different is better. — 68 Bits of Unsolicited Advice
What scientists must know about hardware to write fast code. #julia
Programming is used in many fields of science today, where individual scientists often have to write custom code for their own projects. For most scientists, however, computer science is not their field of expertise; They have learned programming by necessity.
Emacs as a Shell. #emacs
Iterated random functions are used to draw pictures or simulate large Ising models, among other applications. They offer a method for studying the steady state distribution of a Markov chain, and give useful bounds on rates of convergence in a variety of examples. The present paper surveys the field and presents some new examples. There is a simple unifying idea: the iterates of random Lipschitz functions converge if the functions are contracting on the average. — Iterated Random Functions, by Diaconis and Freedman
Sounds already good to me.
Zawinski’s Law “Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.” Law of Software Envelopment, Jamie Zawinski.
SICP in Python. #python
If you’re missing some good books while retired at home, don’t forget Springer offers free PDF + EPUB version of many textbooks in computer science and statistics.
I didn’t upgrade my R stuff yet. I should note that beside reference counting, the new color palette looks really great! #rstats
Create interactive D3 JavaScript graphics from standard Stata commands. #stata
Welcome to the Kattis Problem Archive. Yes, I need more ways to waste time these days.
TIL about Generalized Random Forests, which currently provides non-parametric methods for least-squares regression, quantile regression, and treatment effect estimation (optionally using instrumental variables). #rstats
There are an untold number of analyses of panel data affected by an issue that is almost impossible to identify because R and Stata obscure the problem. Thanks to multi-collinearity checks that automatically drop predictors in regression models, a two-way fixed effects model can produce sensible-looking results that are not just irrelevant to the question at hand, but practically nonsense. — What Panel Data Is Really All About
So many changes to expect in existing code base! R 4.0.0 is released. #rstats
Obuscated C Christmas programs, with some tricks. #clang
Computational Category Theory (PDF, 263 pp.).
I have nothing to delete (I already did this a lot ), and I missed the deadline. See you next year for the deletion day!
Refinement types give us the ability to define validation rules, or more commonly called predicates, at the type level. This means we get compile-time validation whenever the values are known at compile-time. — Parallel typeclass for Haskell
Aside from the compilation aspect, I think that assert
like statements (in Stata or Python) are very close to the above statement in statistical programming.
Whenever I hear someone emphasize the speed of their just-released scientific software, my strong Bayesian prior is that they are really telling me their code is not only full of bugs (all software is!) but that it’ll be really hard to find and fix them… — Software and workflow development practices
Jupyter Notebooks as PDF. Surely an interesting option for those using Jupyter notebooks extensively. Of note, it will install Chromium since the NB -> HTML conversion is performed without Latex.
After a few days of use, I found that emacs-jupyter really is an amazing package. #emacs
Switching to Doom Emacs. Nothing really fancy about Doom capabilities and philosophy, but in case you’re interested in switching too, here are the instructions to install it! #emacs
Ricing up Org Mode. #emacs
I’ve been lately retrying Atom: Atom IDE and the rest of Facebook’s stuff is really in a sad mood apparently (Rust is ok but Haskell is a 2nd class citizen all along; Nuclide terminal’s not working), Hydrogen still works great but you need to update kernel specs for Python 3. I guess I will just return to my usual stuff in Emacs. BTW, this is a great read if you’re looking for an alternative to Hydrogen and/or Nteract: Cheap polyglot notebooks. #emacs
Ranking is a farce. Apparent performance is actually attributable mostly to the system that the individual works in, not to the individual himself. — Statistical process control after W. Edwards Deming
TIL: A collection of concise write-ups on small things.
909 TILs and counting…
Here it is.
(ground beef, eggplant, peppers, tomatoes, moussaka style)
The book Programming Algorithms (A comprehensive guide to writing efficient programs with examples in Lisp) is now completed, and it is available (eventually for free) on Leanpub. #lisp
Given that many of Common Lisp’s defining features and advantages are also available in other languages, who would choose Lisp over any of the more mainstream options? Someone who needs to write code that is portable across operating systems and competing implementations in a high-level, compiled language that generates standalone executable binaries with execution speed comparable to C. — Pragmatic reasons for choosing Common Lisp
Web development starter pack. #lisp
Motzkin paths and source code silhouettes. See also Motzkin numbers on the main blog.
People who have never really lived in a world without mobile phones […] might think that daily life at that time was unnecessarily complicated and ‘harder’. Organising meetings, finding people, finding places around you, having to use paper maps instead of having a portable device with GPS functionalities built in, not being able to look things up in Google or Wikipedia at any time. The truth is, people knew how to organise themselves with the tools they had available. Daily life had a completely different pace and style, built around the tools available at that time. It really isn’t a matter of ‘worse’ or ‘better’ — life was just different. — How I’d live this quarantine if it was 1990
org-noter: Emacs document annotator, using Org-mode, with some differences from Interleave. #emacs
Harp: The static web server with built-in preprocessing.
Emacs (like Smalltalk) has no barriers except at its low-level foundations. Emacs users can change, and break, anything they like. Emacs packages made available for download can potentially contain very malicious code. The Emacs philosophy, going back to the 1970s when there were neither cybercriminals nor completely tech-naive users, is that Emacs users are fully responsible for managing their Emacs environment. This actually works very well in practice, even today, because Emacs is neither attractive for completely tech-naive users, nor sufficiently popular to be an interesting target for cybercriminals. — The most successful malleable system in history
This was also the day it was.
(roast chicken, fried potatoes and carrots, and celery root.)
Interesting discussion regarding Markdown for serious typesetting (using shell scripting).
We’re happy to announce we’re making private repositories with unlimited collaborators available to all GitHub accounts. All of the core GitHub features are now free for everyone. — GitHub is now free for teams
A nice discussion about UTF-8 encoding.
We see no particular reason to favor Unicode code points over Unicode grapheme clusters, code units or perhaps even words in a language for that. On the other hand, seeing UTF-8 code units (bytes) as a basic unit of text seems particularly useful for many tasks, such as parsing commonly used textual data formats. This is due to a particular feature of this encoding. Graphemes, code units, code points and other relevant Unicode terms.
Lovely: The Webpage, an online RSS reader and news aggregator, styled like a newspaper. (via HN)
Some handy shortcuts to rename files on Un*x systems.
Let’s be happy, and here’s what you probably need for tonight:
It’s always interesting, if not enlightening, to re-read Terence Tao’s review on probability theory ten years later.
This was the day it was.
(puff pastry with spinach, feta, prunes, onions and spices)
It looks like Rogue Amoeba is the definitive way to go for controlling audio IO on a Mac these days. See also Podcasting Microphones Mega-Review. #apple
Paul Graham describes LISP as the convergence point for all programming languages. His observation is that as languages mature, the average language continues to slide towards LISP. Therefore understanding LISP is to understand the fundamental model of modern programming. — Understanding the Power of LISP
Interesting study: Looking back at findings from a series of eyetracking studies over 13 years, we see that fundamental scanning behaviors remain constant, even as designs change.
The more things change, the more they stay the same.
Pointless: a scripting language for learning and fun.
Expressions in Pointless are normally evaluated eagerly. There are exceptions to this rule, like the branches of conditional statements, as described previously. There are two other important instances where the language introduces laziness: lists and definitions.
September 1993. Before then, the internet was primarily a university thing, and in university settings, fall semester starts in September, so you had a whole freshman class getting their first networked computer access and often doing rude things with it, especially in the eyes of the Sys Admins who had to deal with it. The problem was, in 1993, you started having the WorldWideWeb, and thus there would always be an influx of new users who continue to behave in ways Sys Admins consider rude. And that influx never stopped. — TheSeptemberThatNeverEnded
Break on NaN in gdb, or how to detect “not a number” edge cases in C. #clang
Lot of interesting Stata programs for epidemiology and econometrics. #stata
I happened to finish to transfer 200 Go of data over home wifi to an 8 year old Time Machine. It tooks a night, and part of a day, btw.
Happy to take another fresh look at Kristoffer Magnusson’s nice visualization projects. #rstats
#dataviz
The two libraries [Scalaz and Cats] have different styles, and both remain heavily used by portions of the community today. The evangelism has died down, to some extent, but usage remains strong and everyone recognizes functional programming as one possible style in which to write your Scala applications. — The Death of Hype: What’s Next for Scala
For Example, by Mike Bostock. #dataviz
But Emacs and Vim have been shaped, balanced, sharpened and smoothed over by decades of usage by hundreds of thousands of programmers, each trying to get through their day as efficiently and fuss-free as possible. In the right hands, they move lines, shift paragraphs and fling code better and faster than anything out there. — A well-honed tool (via Irreal)
Google, the world’s largest ad-tech company, has direct access to user data and browsing information from a large part of the web traffic. Their data collection can track an individual from multiple angles to create the best possible behavioral profile. Google has nine different products with more than one billion users each. — Why you should stop using Google Analytics on your website
This also is ten years old!
I was cleaning an old 500 Go HD that I used to use for backup some years ago. That feeling when you finf some good old R code…
Printing from the command line. Because why not?
We are done with season 10 of The Walking Dead. Something’s obviously missing, and it was way too short.
Nice post on Backtracking, by Martin Thoma.
cljfx: Declarative, functional and extensible wrapper of JavaFX inspired by better parts of react and re-frame.
Functions Explained Through Patterns. #clojure
emacs-vega-view: a small library meant to facilitate exploratory data visualization using Vega. #emacs
Yet another nice post by Travis Hinkelman on statistical data structures in Scheme: Split, bind, and append dataframes in Chez Scheme. #scheme
Brian D. Ripley, Spatial Statistics. On the one hand, this is from 1981, so all the detailed computational advice is laughably obsolete. (At one point, Ripley discusses strategies for not having to keep all of a 128 kb image in main memory at once.) There has also been a lot of advances in some aspects of the theory, notably point processes. On the other hand, Ripley’s basic advice — visualize; do less testing for “randomness” and more model-building; simulate your models, visualize the simulations, and test modeling assumptions with simulations and visualizations; smooth, and remember that “kriging” is just the Wiener filter — remains eminently sound. — I have been reading bits and pieces of this book, off and on, since around 2000, but I have a rule about not recommending something until I’ve finished it completely. Having finally now read it all, including the chapter on tomography (!), I can safely say: anyone seriously interested in spatial statistics probably ought to read this, but you can skip the tomography chapter as obsolete. — Books to Read While the Algae Grow in Your Fur, March 2020
Using JavaPlex with Clojure. #clojure
One of my produtivity challenges is starting projects. When writing, I struggle with the blank page. When faced with a big project, I struggle to decide where to start. My suspicion is that REPL-driven development facilitates tinkering that gets me over that initial hump. — Programming horizons revisited
I would add that the REPL-driven approach to data analysis (R or Stata compared to, say, SAS or SPSS) let you ‘feel’ the data in a particular way. Think of exploratory data analysis, for instance.
Considering everything we know about China — human rights violations, untrustworthy track record, unaccountable totalitarian leadership, vast resources, and their technical expertise to act, at scale, on access to potentially sensitive poorly-encrypted video calls — China is quite literally and obviously the last country on the face of the earth where you’d want video calls routed. — TechCrunch: ‘Zoom admits some calls were routed through China by mistake’
No good news for data workers, right?
So Numbers took 9.4 times as long as Excel, which isn’t great. But it’s an improvement over my test of Numbers ’13 and Excel 2011, where Numbers took 102 times as long as Excel. — Opening Large CSV Files in Numbers 10.0
Amazing. (via jlelse’s blog)
Using JavaPlex with Clojure. #clojure
Linear Algebra Done Right, by Sheldon Axler, is available for free as well. Idem for Bayesian Data Analysis (PDF, 3rd ed.), but see the GH repo. Happy readings and stay safe!
When Gmail users send mail from mechanisms other than Google’s web interface (i.e.: their phone or laptop’s email program), Gmail includes the user’s IP address in message headers. — Client IP Address Disclosure in smtp.gmail.com
For those interested in Lisp and related family of FP languages, the ACM is actually open access to proceedings from several conferences from the 90s. #lisp
And so we are done with Black List, Season 4, as of yesterday evening. We need to take a break, my son and I, and we decided to watch Season 10 of The Walking Dead. It’s a perfect fit, isn’t it?
Introduction to Low Level Bit Hacks. (via John D Cook, but this was an old tweet!)
I fucked up.
Short version: If you’re reading mailing lists with an NNTP news reader via news.gmane.org, you should update your news reader to point to news.gmane.io instead. — Whatever Happened To news.gmane.org?
shepherding An invisible property of a progamming language and its ecosystem that drives people into solving problems in ways that are natural for the programming language itself rather than ways that are considered “better” in some sense. These may include things like long term maintainability, readability and performance. — It’s not what programming languages do, it’s what they shepherd you to
A Game of Tetris (user interface). #racket
More data cleansing and feature engineering from the Stata blog. #stata
The combination of simple Org files (+ a Bash script) with Org agenda is really nice! Using Emacs’s org-mode As Your Zettelkästen. (via Irreal) #emacs
Interesting links and ideas on exact real arithmetic.
The problem is made rather difficult by the fact that you can’t compute real numbers strictly, you have to in some sense compute better and better finite approximations. One way of doing this is to compute a stream of arbitrarily good approximations. If someone needs a better approximation than you’ve already given, they pop the next one off. — Uniform Continuity is Kind of Like a Lens
The “advantage” of confinment is that I now have a decupled time for reading from the comfort of my own home, listening to music I like and enjoying the nice wether (from behind the windows most of the time, but I have a small balcony that allows me to get some fresh air and possibly have lunch outside whenever I want). Social distancing isn’t a big deal, since I haven’t seen much of the world for a long time now. #self
Travis Hinkelman is again hacking with Chez, this time on “data frame” objects. #scheme
Writing an OS in Rust, by Philipp Oppermann. #rust
Writing a Ph.D. thesis with Org Mode (via Irreal). Screenshots look like some king of magic!
For 35 years, Apple’s been telling me this thing should called a pointer, and I’ve been following along, mainly because I thought the distinction between a pointer and a cursor was useful. Are there no standards anymore? Is nothing sacred? — Foiled again?
Grab your crayons, it’s coloring time!. When I saw this on HN, I immediately thought of one of Bill Huber’s wonderful answer on Cross Validated. Hope you’re doing fine, btw!
Sometimes we can “augment knowledge” with an unusual or different approach. I would like this reply to be accessible to kindergartners and also have some fun, so everybody get out your crayons! — whuber on Cross Validated
Nice weather today (cold, though), day #14 in the middle of nowhere.
Since many people have discovered a passion for epidemiology these days, and are in the process of becoming apprentice statisticians, this should keep them busy for the weekend: Epidemiology for the uninitiated..
I now have plenty of time, why not reading GAM in R, which I bookmarked so long ago? #rstats
Log only impure actions. (…) You may still have some code that occasionally executes impure actions, but largely, most of the code is pure. If you know the inputs to all the pure code, you can reproduce that part of the code. This means that you only need to log the non-deterministic parts: the impure actions. Particularly, you need to log the outputs from the impure actions, because these impure output values become the inputs to the next pure block of code. — Repeatable execution
Emacs manuals with versions. #emacs
A Catalogue of Software for Matrix Functions, updated for Julia, Rust and many other third-party libraries. (via Nick Higham)
The Books That Every Programmer Should Read.
I have to admit there are some (many) books on the list that I didn’t finish myself. If I had to narrow down the list to the 3 most important (impactful) books there those would be: Structure and Interpretation of Computer Programs, The Elements of Style, Code Complete, Thinking, Fast and Slow.
Seems, I’ve made an off-by-one error, but you’ll forgive me.
Recursive SQL Queries with PostgreSQL. #database
In general recursive queries come in handy when working with self-referential data or graph/tree-like data structures.
Every Default macOS Wallpaper – in Glorious 5K Resolution, via Daring Fireball. This reminds me of the combined wallpaper I referred to early this year. #apple
A beautiful piano cover.
Nice overview of GTD using Org-mode: A guide to my organizational workflow. #emacs
Git from the bottom up, by John Wiegley.
If dollar signs are good enough for Don Knuth, they are good enough for me! — Nick Higham
I too mostly uses $$
for display style, instead of the recommend \[
opening brackets. This may well be because I used to write plain $\TeX$ at some point, or Context for what matters, but it is also mostly a personal taste. #tex
Overload Functions in Python. #python
A task manager for the command line. #racket
Programming is essentially about certain ‘data structures’ and functions between them. Algebra is essentially about certain ‘algebraic structures’ and functions between them. Starting with such familiar algebraic structures as groups and rings algebraists have developed a wider notion of algebraic structure (or ‘algebra’) which includes these as examples and also includes many of the entities which in the computer context are thought of as data structures. — The Structures of Computation and the Mathematical Structure of Nature
People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying ‘no’ to 1,000 things. — Steve Jobs
De même, j’entends des histoires interminables pour la visioconférence surchargée, alors qu’en gros en général on a juste besoin d’une audioconférence (c’est sympa de voir les binettes des collègues, mais non nécessaire), plus des envois de documents. — Du mauvais usage des outils numériques et des fonctionnalités inutiles
Another big benefit of RSS is that you curate your own feeds. You get to choose what you subscribe to in your feed reader, and the order in which the posts show up. You might prefer to read the oldest posts first, or the newest. You might group your feeds by topic or another priority. You are not subjected to the “algorithmic feed” of Facebook, Twitter, Instagram, YouTube, where they choose the order for you. You won’t miss your friends’ posts because the algorithm decided to suppress them, and you are not forced to endure ads disguised as content (unless a feed you subscribe to includes ads inside their posts). — How to read RSS in 2020
The GNU Emacs Lisp Reference Manual in ePub format. #emacs
Slideas is the easiest way to create a beautiful Markdown Presentation, with all the features you need. (via Brett Terpstra)
Modern Statistics for Modern Biology, by Susan Holmes & Wolfgang Huber. #rstats
The thing about blogging is, you can just write about the things you love. A “professional” “critic” (scare quotes because who even knows what words mean anymore) has to do something else, something more difficult: manage a kind of unfolding… aesthetic… worldview? Balance one thing against the other? A blogger suffers no such burden. — The thing about blogging is
About to finish the 6th of The 100… Given the obvious lack of motivation for routine work, I think the best option for the next few days is to write some Stata and Lisp code.
Rust has also mostly replaced Go as my go-to language for writing small performance-sensitive programs, like the numerical simulators I use a lot. Go replaced C in that role for me, and joined R and Python as my day-to-day go-to tools. I’ve found that I still spend more time writing a Rust program than I do Go, and more than C (except where C is held back by a lack of sane data structures and string handling). I’ve also found that programs seem more likely to work on their first run, but haven’t made any effort to quantify that. — Two Years With Rust
Nice specs for System76 laptops.
Algebraic and geometric methods in enumerative combinatorics (PDF, 144 pp.), by Federico Ardila.
Three typefaces for mathematics (PDF, 78 pp.). #tex
Why Discord? Because Slack sucks at some point, you know, and there we go:
Github, you’re safe with that number of snapshots!
Fitting simple models to the available [COVID-19] data is pointless, misleading and dangerous.
Extended floating point precision in R and C. #rstats
#clang
By combining a couple of Unix command line into a pipeline you can quickly obtain answers to questions that crop up in software development, production engineering (or site reliability engineering or IT operations depending on where you work), and business analytics. In most cases such answers aren’t directly available from existing applications and other methods for obtaining them would require you to write a dedicated program or script. — Seven reasons to add Unix command line expertise to your tool chest
Exponential growth and log scales, or why it sometimes makes more sense to use a log(2) scale instead of log(10). See also Kieran Healy recent post.
An interesting series of new blog posts by Arthur Charpentier on modeling pandemics.
A Human Programming Interface, in Python, to help track your data.
And now we are halfway thru The 100, Season 6. Mostly delayed because, you know, Apple TV, but it’s right on the point and far less depressing than the news we are served every day after all. Next in the radar: The rest of Black List (starting from Season 5), and The Expanse, Season 3 probably.
Secure Rust guidelines. #rust
Flattening vs shrinking: the math of #FlattenTheCurve, by Ben Bolker and Jonathan Dushoff.
Nice read: Product Placement, by Michael Betancourt.
I use fancy tools, and I certainly do use tools that are called debuggers (like gdb), but I almost never step through my programs line-by-line watching variable values. I almost never set breakpoints. — I do not use a debugger
This makes it clear that plague was progressively replaced with HIV/AIDS and flu-like syndromes.
TIL about simul, for those of you who need to collaborate using Word.
I’ve tried LaTex, because that’s what all the cool science kids are doing, but I don’t think the hassle is worth it. Show me a LaTex evangelist and I’ll show you someone who doesn’t collaborate with Word users. There’s too much software hipster-ism out there. I think you should use the software that best gets the job done for you. — Daniel Quintena on Uses This
Cory Doctorow has an interesting article that argues that far from being the new oil, data is actually the new toxic waste. He begins by noting that any data you collect will, sooner or later, leak and that when it does criminals will combine it with other leaked data to undo any anonymization that you’ve applied. That data is, he says, “pluripotent, immortal – and impossible to contain.” — Data is toxic waste
With social distanciation and confinment, getting in touch on social networks is likely to increase, despite all the useless comments one can found on, e.g., Twitter these days. Likewise, everybody is looking for remote meeting apps, and they probably found out that remote OSS workers or gamers have been doing this for a while.
From HN:
Netflix will reduce the video quality on its service in Europe for the next 30 days, to reduce the strain on internet service providers.
I have a hard time believing this could happen — I’m no Netflix consumer, btw, since all other French provider are actually offering their channel package for free. But I can understand the consequences of everyone connecting to internet all day along.
Hardly working @home, for the moment. Just reading and checking emails, occasionally. I have lot of ideas for the blog, I know I need to do some biostats again – it looks to me like it’s just a matter of time until I launch a Twitch channel about applied biostats from the command-line if confinment persists. Yet, I could also keep reading litterature artwork as usual.
#rstats users, remember this? What’s in your .Rprofile?
Didn’t know that WolframScript could be run with a remote Math kernel. Nice!
A set of over 300 free MIT-licensed high-quality SVG icons for you to use in your web projects.
So, first day of confinment here in France. Listening to Satie while reading from time to time, otherwise just working on a Django web project. Let’s hope the internet connection will stay up and working for the next few weeks.
Announcing rackcheck. #racket
Cyberpunk is both a genre and a culture. As a genre, cyberpunk was born out of early 20th century noir and fuelled through the drugs, sex and tech of 60s and 70s counterculture movements. As a culture, Cyberpunk represents a tech-savvy identity associated with anti-authoritarianism and anti-consumerism. — Tales From The Dork Web #4
Zettelkasten is German for “slip box” and is a method to manage knowledge. Basically, you take ideas from books, articles or conversations and write those ideas on note cards, collect them in a central database, and link them together so that you can start to find larger relationships between concepts you’re learning. — How to Make Yourself Into a Learning Machine, via Irreal
His (Vim-based) system for taking notes remind me of Roam, which I haven’t tested yet.
Stata Visual Library. #stata
So that brings us to three potential criteria for choosing inputs and pursuits in life. (1) High in quality. (2) Takes time to create and/or consume. (3) The benefits are spread over time rather than all at once. — The Problem With Extracted Versions of Things
The answer is to not even try: instead of trying to put everything inside of a castle, put everything in the castle outside the moat, and assume that everyone is a threat. Thus the name: zero-trust networking. — Zero Trust Information
Awesome macOS Command Line, via Michael Tsai. #apple
Storage has changed a lot over time, from paper tape, to metal tape, magnetic tape, rope memory, spinning disks, optical disks, flash, and others. Progress has led to faster, smaller, and more performant devices for storing data. — The life of a data byte
In case you wonder, COVID-19 data are already available in Mathematica (so no need to rush to Github).
Happy to see there’s still some nice Stata use cases: World Bank Stata GitHub. #stata
Why You Cannot (Yet) Write an “Interval Arithmetic” Library in Common Lisp, on arXiv. #lisp
Self-hosted, super simple photo stream.
Fear of Macros, by Greg Hendershott. #racket
xkcd 936, with Python implementation (by Tim Bradshaw).
Through 20 years of effort, we’ve successfully trained everyone to use passwords that are hard for humans to remember, but easy for computers to guess.
I have two high-quality CL implementations on my machine and one Scheme-derived system, also of very high quality, which created this blog: I have long ago stopped counting the number of good-quality free implementations. (…) Performance is a solved problem: yes, highly-optimised code is, perhaps, slower than optimised C or Fortran but since almost all performance problems are design problems no-one older than about 19 cares any more. (…) The library problem has been solved by Quicklisp and a large number of good-quality standard libraries. I am still using code I wrote over twenty-five years ago with essentially no modification: meanwhile the Python code I wrote ten years ago is long rendered obsolete by gratuitous changes in the language (the Perl code I wrote at the same time is doing fine, however). — Rumours of my death
The heart and soul of mathematics consists of the fact that the “same” objects can be presented to us in different ways. — Equality Is Hard
Never heard of the U combinator, which “allows you to define recursive functions and I think it is simpler to understand than the Y combinator.” #racket
L1 Penalty in Cox Regression. #python
How to speed up lsp-mode. #emacs
A Game of Tetris. #racket
Snakemake’s explicit intention is to automate command line data processing tasks, such as those common in bioinformatics.
isEven without modulo. #rstats
Emacs is amazing. It’s a very different sort of thing than a code text editor like Vim or an IDE like VSCode. It’s a different way of thinking of how to interact with a computer, where you build up techniques on top of simple tricks that let you get amazing things done. — Emacs Tramp tricks
Everything I’ve done with computers in my life has been along pretty much a single vector. And NeXT is just one more point on that same vector. In this case what we observed was that the computing power we could give to an individual was an order of magnitude more than the PCs were giving. In the sense that people want to do many things at once and you really need true multitasking. — The Machine That Changed The World, transcription by Riccardo Mori
Advanced Data Analysis from an Elementary Point of View, by Cosma Rohilla Shalizi.
Recursion Explained Using Sandwiches. #python
Fraidycat: Follow from afar. (via Robin’s blog)
Nice series of posts by geekAbyte on learning Rust. #rust
So get yourself some Ethernet cable (and adapter, if needed) and connect your computer directly to your home or office router. This is the single most effective thing you can do to improve your remote experience, especially if you’re in an apartment complex or office. — Remote 101: Cables
And if you’re a Mac user with a post 2012 Macbook (any model), go buy yet another dongle to plug your ethernet cable!
Randomized clinical trials do not require representative patients; they require representative treatment effects. Generalizability of randomized trial findings for relative efficacy comes from one of three things: (1) true absence of interactions, (2) interacting factors have a similar distribution in the RCT as in the target population, or (3) the RCT sample has enough representation of the distribution of interacting factors to allow them to be modeled and used to estimate treatment effects in target patients, and the researcher knows to include these interactions in her model. — Implications of Interactions in Treatment Comparisons
Conjugate models have the structure of a fold in functional programming, also known as a reduce or accumulate operation. We’ll show below how to compute the posterior distribution in a beta-binomial and normal-normal model using folds in Haskell. — Functional folds and conjugate models
Nice post and beautiful interactive design at Stitch Fix!
The growth of command line options. Well, that’s just 139 options for tar
!
The upgrade process for Doom Emacs got improved recently and boosted performance are much appreciated. #emacs
What beautiful pictures! (via kottke.org)
Effective visual systems can help eliminate that guesswork and uncertainty by creating layered sets of cues in the design and interface. — Cross-Cultural Design
The best time to make a breaking change that involves updating existing code is now, because the bad designs that result from maintaining backwards compat unnecessarily can have repercussions for decades, and the amount of code to update is only going to get larger. — Hundred year mistakes
Recon Learn: Free and open training resources to respond to outbreaks, health emergencies and humanitarian crises. #rstats
Best Paper Awards in Computer Science (since 1996).
Nice post on Asemic Writing, by Anders Hoff.
Automating Every Aspect of Your Python Project, using Docker. #python
The fastai book. Free on-line edition of the upcoming book by Jeremy Howard and Sylvain Gugger.
A recent study suggest that “today’s CNN-generated images retain detectable fingerprints that distinguish them from real photos.” This is good news if you are concerned with deep fakes, but how will it last?
Log transform or log link?, or how to move from modeling $\mathbb{E}(\log(y)) = \boldsymbol{X}b$ in favor of $\log(\mathbb{E}(y)) = \boldsymbol{X}b$ using a GLM. A refreshing take on a topic that often gets the non-statistician reader confused.
Still useful to check whether your email credentials have been compromised: ’;–have i been pwned?.
Complexity often does introduce qualitative differences. Although it sounds implausible, it might turn out that above a certain level of complexity, a machine ceased to be predictable, even in principle, and started doing things on its own account, or, to use a very revealing phrase, it might begin to have a mind of its own. — Minds, Machines and Gödel
Clojure is (slowly) eating the world. Honestly, we should be thankful that the language continues to grow despite being fairly unorthodox, compared with the current norm of typed functional languages and the massive sea of object-oriented code that’s out there. It’s also the odd child in the Lisp family with its functional, data-driven, and interop-heavy approach to programming. — Clojure: the Lisp that wants to spread
Was Knuth Really Framed by Jon Bentley? Here is the full ACM article (PDF) for reference.
Spreadsheet-like app are everywhere.
The first job when making any map is to determine what projection you’re going to use. The region is China, and the data is thematic. For ANY map of population data to work the map has to use an equal-area projection. — Mapping coronavirus, responsibly
One of my favorite hobby horses is the need to keep control of your data. Broadly that means keeping it in open formats and on computers that you manage. If you’re committing your only copy of valuable data to some cloud service, you’re acting recklessly and are likely to suffer the consequences. — Even Google Employees Are Trying to Escape
Nice artwork using ggplot by Kieran Healy. #rstats
Apprently, Textmate has finally been updated to v2 (without RC suffix)!
Emacs being a Lisp interpreter, however, ensures that you have access to everything. In a way, it’s the realization of the promise of Unix itself: it endows normal users with ultimate control over their environment. — Who cares about Emacs?
shox: A customisable, universally compatible terminal status bar. Looks nice although I’m quite happy with iTerm2 own status bar at the moment.
Some psql tips. See also Thorsten Ball’s own config.
In its almost 22 years of existence, kottke.org has never gotten big, but it’s also never gone away, predating & outlasting many excellent and dearly missed sites like Grantland, Rookie, The Toast, The Awl, Gawker, and hundreds of others. — The 15th Anniversary of Doing Kottke.org as a Full-Time Job
This is terribly wrong. Everything the Finder displays should be correct all the time. If, for some technical reason, it doesn’t know the size of something and needs to wait, it should show a spinner or some other indicator that you, the user, need to wait to get the information. The actual file size of a folder is what you want to see, and ideally you should see it as soon as you ask for it. — What You See in the Finder Should Always Be Correct
One related tip for #Emacs folks: Tons of refcards are already on your machine. Locate them with:
— Vedang (fosstodon.org/@vedang) (@vedang) February 21, 2020
M-x locate <RET> refcard <RET>
I use the Dired refcard very often. https://t.co/9q8LVAN1cu pic.twitter.com/0YX1oXw74h
Restoring the Mac Startup Chime. #apple
A visual overview of typography (via HN).
Dynamic Kernel Matching is analogous to a convolutional network, but for sequences.
DKM is analogous to a convolutional network, but for sequences. Consider the problem of classifying a sequence. Because some sequences are longer than others, the number of features is irregular. Given a specific sequence, the challenge is to determine the appropriate permutation of features with weights, allowing us to run the features through the statistical classifier to generate a prediction.
Legible Mathematics: Sketches of an interactive arithmetic for programming.
A Minimalistic blog engine. Associated blog post by Nikita Tonsky.
Honestly, I only today learned that library has arguments (exclude and include.only) for managing the objects that are attached. — Avoiding namespace pollution in R and Chez Scheme
So do I apparently.
That may sound insane, but one of the things that made the Mac initially puzzling to people who were heavy users of PCs and mainframes back in the mid-80s was that it flipped verb/object around. I remember having to explain to several people that the main thing to remember on a Mac was that you never go to the menu bar for a command until you’ve selected the thing that the command would act on. — Larry Tesler
pup: Parsing HTML at the command line.
State of Clojure 2020. Emacs, Leiningen and MacOS are first class citizens there. #clojure
The Racket engine has finally been ported to Chez Scheme. Note that bytecode vs. machine code may impact memory use. #scheme
BlurHash is a compact representation of a placeholder for an image.
Must read: Tour of Python Itertools. #python
Recursion is a win. This fundamental programming technique almost always leads to smaller, cleaner and more elegant code than the equivalent written with explicit loops, and that is the case here. The idea of peeling off one matching character from the front of the regular expression and from the text, then recursing for the rest, echoes the recursive structure of the traditional factorial or string length examples, but in a much more interesting and useful setting.
Fish-like autosuggestions for zsh.
I happily and enthusiastically paid for all that music. But now? Every time I see the $14.99 charge for our Apple Music family plan hit my checking account, I wince. I pay it begrudgingly because I feel like I have no other choice. — Begrudgingly
Same for me. I prefer to use native app (Safari, Apple Mail, etc.) FWIW. However, I should note that the revamped iTunes app looks just weird.
What’s under the hood is rarely what you expect. Our current tech stack is heavily optimized and a lot of optimizations are really just dirty tricks. — Math keeps changing
I’ve been perusing Kristoffer Magnusson artwork when I was teaching inferential statistics, and here is a nice post on understanding Maximum Likelihood.
Reliable computer systems must handle malfunctioningcomponents that give conflicting information to different parts of the system. This situation can be expressed abstractly in terms of a group of generals of the Byzantine army camped with their troops around an enemy city. Communicatingonly by messenger, the generals must agree upon a common battle plan. However, one or more of them may be traitors who will try to confuse the others. The problem is to find an algorithm to ensure that the loyal generals will reach agreement. It is shown that, using only oral messages, this problem is solvable if and only if more than two-thirds of the generals are loyal; so a single traitor can confound two loyal generals. With unforgeable written messages, the problem is solvable for any number of generals and possible traitors. Applications of the solutions to reliable computer systems are then discussed. — The Byzantine Generals Problem (PDF)
Emacs doom-themes with updated screenshots. Also: Emacs org-mode for Developers
Feb. 8, 2020 (via Sacha Chua) #emacs
Literate programming is all well and good for code written to appear in a book that the author hopes will be read for many years, but this is a tiny sliver of the source code ecosystem. The majority of code is never modified, once written, and does not hang around for very long; an investment is source code futures will make a loss unless the returns are spectacular. — Source code has a brief and lonely existence
Growing Neural Cellular Automata: Differentiable Model of Morphogenesis.
If you are doing some financial math that does not need to be accurate to the penny, just use floating point numbers. If it is good enough for Excel, it will be good enough for most applications. — You can use floating-point numbers for money
sys.getsizeof is not what you want. #python
Four basic ways to use macros in Common Lisp: to circumvent the regular call-by-value semantics, to introduce new syntax to the language, to implement tiny languages within CL, and to run code in a special context. #lisp
Trackers are everywhere! Watching you watch: the tracking ecosystem of over-the-top TV streaming devices.
A three-part series on A/B testing starting here: Optimizing sample sizes in A/B testing.
TIL about duti
to manage default application for opening specific files.
A library of Python Algorithms. #python
SlowerLogLog: It’s been a long time since I’ve read a new post from Evan Miller. Always a pleasure!
The name is intended to deter implementers from using SlowerLogLog in production, but ease of implementation (less than 100 lines of code in most languages) may make it a compelling time sink for bored programmers.
Understanding more about the structure of connections between biological neurons and regions of the brain is key for future understanding about ourselves, and consequently language and more intelligent artificial systems. — On Mind, Language and Machines
Interesting papers in this thread:
Unfortunately, the tweet with ID 1224373704487915520 is no longer available.
Cardiogram: A framework for impromptu testing in Common Lisp. #lisp
Just started watching The Handmaid’s Tale yesterday evening. Looks good so far.
What are transducers? The basic idea is to extract the essence of map, filter and other functions that transform sequences and collections, and reuse this essence so that it can be applied elsewhere; to recast them as process transformations.
I don’t believe that any technology company in the music industry will survive in the long term. That means Spotify, but even more it means Spotify competitors. Streaming services like Apple’s, Google’s, and Amazon’s are enormous corporate experiments, intended to succeed or fail within a decade. When they fail, the folks paying for them will get an email and lose access to their music in some specified ‘sunset’ timeline. — Prepper-style music hoarding
Ligatures in programming fonts are a terrible idea.
And not because I’m a purist or a grump. (Some days, but not today.) Programming code has special semantic considerations. Ligatures in programming fonts are likely to either misrepresent the meaning of the code, or cause miscues among readers. So in the end, even if they’re cute, the risk of error isn’t worth it. — Ligatures in programming fonts: Hell no
Most regular and frequent commits remain the smaller ones; most of the work happens in the background and resumes to sporadic but consistent local (and often unpushed) commits.
Accelerating Analytics with Apache Arrow.
See also: Apache Arrow and the “10 Things I Hate About pandas”.
Pandas rule of thumb: have 5 to 10 times as much RAM as the size of your dataset.
To learn a new language or system you must choose a suitable problem and use the environment to implement, test, and debug the problem. — The Joy of Coding: Observable
On average, with a standard deck of cards, how many cards do we have to draw to get four of a kind? I believe this is basically the pigeonhole principle, right?
Org-mode features you may not know, by Bastien himself. #emacs
A great (re)read: A CEO’s Guide to Emacs.
For those who haven’t used Emacs, it’s something you’ll likely hate, but may love. It’s sort of a Rube Goldberg machine the size of a house that, at first glance, performs all the functions of a toaster. That hardly sounds like an endorsement, but the key phrase is “at first glance.” Once you grok Emacs, you realize that it’s a thermonuclear toaster that can also serve as the engine for… well, just about anything you want to do with text. When you think about how much your computing life revolves around text, this is a rather bold statement. Bold, but true.
When you think power-law, think skew: the vast majority of customers contribute negligible revenue, a small proportion of customers contribute almost all the revenue. — Beware the mean
If you are in a nostalgic mood, go read Installing NextStep OS (OpenStep) in VirtualBox, at least to enjoy the screenshots.
Although I’m quite happy with Biopython for processing (D|R)NA files, I’m interested to see if there’s something really interesting in the Julia ecosystem, e.g. BioSequences.jl.
TIL there’s something like a plain text database called GNU Recutils.
I've learned that Apple engineers have internal tools which allow them to delete macl xattr as well as to bypass other Catalina privacy and sandbox protections without rebooting and disabling SIP.
— Jeff Johnson (@lapcatsoftware) January 20, 2020
Inside Apple they don't suffer the same problems as external users and developers. https://t.co/UGcwVZ9XF4
JetBrains Mono looks like a nice new monospace font, with support for ligature (like Fira Code). Yet, it is far less condensed than Inziu Iosevka, and after more than one year of using Iosevka in Emacs and iTerm I became quite used to it. Here it is, from left to right: Menlo, Iosevka, and JB Mono. (Click to enlarge)
By 2030 we can hope that about half of the top 100 packages will have some measure of documentation. — Haskell Problems For a New Decade
I love that the whitespace reveals more of a city than just roads. — Maps of Every Single Street in Any City
As I’m no longer good for anything at night, all I have to do is go see the latest episode of American gods. Let’s make it so.
On my way to reduce my Bibtex file a bit. Around 300 entries removed so far — WIP.
Reeder 3 is no longer upgrade on iOS, sadly. It looks like it is now v.4 or nothing. Time to switch back to Elfeed I guess.
I would love more concrete Git tips when using tldr.
This is it. #emacs
Your souvenirs are the return value. (…) Tail recursion aficionados realize that the journey itself is the important part of the function call, and that a vacation includes two journeys. — Afraid of tail recursion
Some obfusctaed Vim code.
Every macOS wallpaper from Mac OS X 10.0 Cheetah to macOS 10.15 Catalina combined.
Another reason for the bias toward over-engineering is asymmetric risk. If an over-engineered approach fails, you’ll face less criticism than if a simpler approach fails. As the old saying goes, nobody got fired for choosing IBM. — Scaling up and down
High level C, by the author of Build your own Lisp.
Yet another enlightening post by Alexis King, that I will have a hard time to digest.
The flaw is in the premise: static types are not about “classifying the world” or pinning down the structure of every value in a system. The reality is that static type systems allow specifying exactly how much a component needs to know about the structure of its inputs, and conversely, how much it doesn’t.
Interesting use of recursion to split a time-series dataset for immediate consumption, which could certainly be applied when dealing with genetic data.
Emotions cut both ways. For anyone who has released and maintained some moderately popular piece of software, you will have invariably made contact with other humans. The impact that another person can have on your emotional state can be staggering. A positive gesture or comment can really brighten your day. It’s that feeling: yes, sharing my code was so worth it just to help that one person. But as anyone who has been a FOSS maintainer can attest, positive comments are almost always dwarfed by negative comments. — My FOSS Story
pdoc is a library and a command line program to discover the public interface of a Python module or package. #python
xsv is a command line program for indexing, slicing, analyzing, splitting and joining CSV files. #rust
On lui donne 8000 euros en tout, et avec interdiction de l’utiliser pour payer des salaires, et obligation d’utiliser la totalité avant la fin de l’année fiscale, parce que sinon les gestionnaires du ministère n’arriveront pas à reporter les sommes sur l’année suivante… (…) D’ailleurs il paraît que les lauréats américain et japonais n’ont pas encore compris que les 8 000 € qu’on leur avait envoyés constituaient la totalité de leur financement, et ils les ont utilisés pour acheter leurs billets d’avion et réserver leur hôtel à Paris. — Make our galaxy great again, Les dessous de paillasse.
Build your productivity tools with org-mode. (via Irreal) #emacs
I will give mathematician’s credit for thinking about edge cases perhaps more than a computer scientist would. It can be easy to be a bit complacent with edge cases because the computer will likely do something even if you don’t think too hard about what it ought to do. But a good computer scientist tries to reduce the number of edge cases or at least make them coherent with the non-edge cases. — Math is hard, let’s go shopping
A guide to Minimalist Web Design: I really like the vertical progress bar. Also,
you don’t need more space. you need less stuff.
In the LATEX world, we must acknowledge the fact that endosymbiosis is not as widespread as it should be. What we usually observe is the opposite phenomenon: the proliferation of a multitude of dif- ferent packages that are meant to work together, or do more or less the same thing, instead of becoming one single and bigger animal. — Classes, styles, conflicts: The biological realm of LATEX (PDF)
If Lisp’s great insight was that code is data that programmers can take advantage of that with metaprogramming, then git’s great insight is that code changes are data and programmers can take advantage of that with metachanges. — The Communicative Value of Using Git Well
OMG, 2,3,4 movies in a day… I remember the time when I was able to read 2 to 3 books a day, but I never watched 3 or 4 movies a day. Our best strike with my son was 4-5 episodes of GoT or Walking Dead last Summer.
I haven’t personally found any use for Dark Mode on my Mac. — The Dark Side of Dark Mode and Night Shift
Nor did I, which is why I long deactivated it on my Macbook. Yet I like dark themes for Emacs and iTerm, despite all they say about dark theme mode for text editing.
Mercurial’s Journey to and Reflections on Python 3. String literals are so fucking awesome in Python.
In Python 2, a ’’ string literal is a sequence of bytes. In Python 3, a ’’ string literal is a sequence of Unicode code points. These are fundamentally different types. And in Mercurial’s code base, most of our string types are binary by design: use of a Unicode based str for representing data is flat out wrong for our use case.
CleverCSV is a Python package for handling messy CSV files. #python
scalene: a high-performance CPU and memory profiler for Python. #python
A few days ago, I watched Anna (in two stages since I’m so exhausted these days because of the strike!). I found it so bad that I thought I would be better watching Nikita again. Much better indeed, and this confirmed my original idea that Anna is just a pale copy. Until I realized they were produced by the same guy…
If you remember good old days, it was a pretty easy thing to make a website. You edit an index.html page till it looks fine, then you copy it to a cheap hosting with any tool you like and you’re done. — Complexity tower and a holy grail of web development
I clearly remember those days where I was maintaining my website using handmade templates and single HTML pages edited under Emacs. How come I became so lazy over years?
Using Emacs 63 ClojureScript. #emacs
All the cool kids are doing micro-services these days. (…) It is a time-honored tradition in computer programming to take any idea that offers some advantage, give it a name, elevate it to a “principle” and use it to the exclusion of any prior good idea. — Micro-services
Dive into Deep Learning (numpy edition). #python
A modern day pull request is so much more than a version control tool operation or even a simple request to pull or merge a branch: it is a nexus to track the integration of a proposed change before during and after that change is integrated. — Problems with Pull Requests and How to Fix Them
Opioid Atlas: Explore country-level consumption trends by hovering over different geographic location in the Opioid Map. #dataviz
https://flowmap.blue: Lovely.
handbook on statistical distribution for experimentalists (PDF, 202 pp.).
Learn Haskell Now!. And for French readers, Introduction à la Programmation Fonctionnelle avec Haskell. #haskell
Most languages do a whole lot of other crap other than printing out “hello world”, even if that’s all you asked for. — Hello world
A nice discussion of colour schemes and templates by Paul Tol.
Parallel computing with R: A brief review, by Dirk Eddelbuettel. #rstats
Yet another intro to the tidyverse, FWIW: Statistical Inference via Data Science: A ModernDive into R and the tidyverse. I don’t really understand why there need to be a rep_sample_n()
function in chapter 7 (which is just imported from the infer
package by moderndive
, see the signature of the function) which does nothing more than what could possibly be done easily with base::sample
. This drives me crazy sometimes. #rstats
A well-written story, be it fiction or non-fiction can have a long lastig impact and even an emotional connection that I have personally never experienced with anything ‘online’.
Many related threads, e.g., Is RSS still worth the time?.
The Lisp curse. #lisp
Deadlines are bad and if you have those in your company you should probably go ahead and remove the “customer obsession” bullet from your leadership principles. Because believe it or not, your users don’t care about a missed sprint. — who are you trying to impress with your deadlines?
Happy new year 111 11100100
!
Can someone explain to me why on earth macOS devs thought it would be good to fetch again and again software updates instead of storing them in a hash list? I start to be really annoyed by those perpetual reminders to update my Mac, notwithstanding the fact that I need to wait for the pref pane to be up and ready. Each time. #apple
Apple Platform Security (via Daring Fireball) (PDF). #apple
Homoiconicity isn’t the point (but read
is).
This Page is Designed to Last, with seven unconventional guidelines in how we handle websites designed to be informative, to make them easy to maintain and preserve.
Humans seem to be wired to believe that we can and should try to improve ourselves and our surroundings, but in a mechanistic world (random or otherwise), it doesn’t actually matter what you do. This question is Absurd because of the conflict between self-improvement—and a desire to do good in the world—being some of the most important reasons that humans have to exist, and the issue that if free will is an illusion then we’re all just taking credit for the universe unfolding as it was going to anyway. — How Absurdism Applies in Everyday Life
Every minute of every day, everywhere on the planet, dozens of companies — largely unregulated, little scrutinized — are logging the movements of tens of millions of people with mobile phones and storing the information in gigantic data files. — Twelve Million Phones, One Dataset, Zero Privacy
GGplot available for Perl users.
Math.js is an extensive math library for JavaScript and Node.js. #javascript
Real World Haskell book. #haskell
Soon to be on holiday for the rest of the decade! With 160 posts and 1569 micro-posts written since I rebooted this site from scratch.
Color scheme for UI design. (via @phnk)
Two interesting posts on the generation of random mazes: Maze Generation: Eller’s Algorithm, Eller’s Algorithm.
In short, R is a functional programming language masquerading as an imperative language. (…) Nonstandard evaluation is the Wild Wild West of metaprogramming. — The R programming language: The good, the bad, and the ugly
If you want to tell something, just do it. Even if that’s just one thing. Another thing may come to your mind, but it’s no problem when that’s years later. Just start a blog. — A blog is not a commitment
A fair look back at Tim Cook’s first decade in charge of Apple. The biggest knock? Taking their eyes off the Mac ball in the middle of the decade — with a Mac Pro that wound up not being very pro and a MacBook Air that stagnated with a non-retina display. — Walt Mossberg on Apple’s Decade
TIL DuckDuckGo has as HTML Beautifier builtin (via Jamie Tanna).
Visualize bike rental data in Clojure, using Quil. #dataviz
Macros by Example. #lisp
Macros let you change your language to suit your problem. This is extremely powerful: You can build up your language so you can express your problem as clearly as possible. This makes your code more concise and simple, which in turn makes your system more malleable.
Why Lisp macros are cool, a Perl perspective.
But a bigger advantage is that it makes it possible to write Lisp programs that reliably generate and transform Lisp source code. If you’re not used to Lisp, it’s hard to imagine how tremendously useful this is. People who come from the Perl and C world have a deep suspicion of source code transformation, because it’s invariably unreliable.
Hidden Bar lets you hide menu bar items to give your Mac a cleaner look. #apple
There has been a increasing trend in healthcare and criminal justice to leverage machine learning (ML) for high-stakes prediction applications that deeply impact human lives… The lack of transparency and accountability of predictive models can have (and has already had) severe consequences… — Stop explaining black box machine learning models for high stakes decisions and use interpretable models instead
MacOS Filename Homoglyphs Revisited: Didn’t know there was such a thing in Mojave.
Before getting an iPhone 3, I was a happy owner of a Blackberry. This little review brought back a lot of memories from that time.
Best Practices for ML Engineering (PDF, 24 pp.).
I know a lot of people dislike semantic versioning. They hate how requires incrementing the major version number every time a breaking change is made.
I consider it to be a good thing.
You should pause and carefully consider making a change that will break people’s current code.
You should be ashamed if your project is at version 43.0.0 because you’ve made 42 breaking changes. That’s 43 times you’ve disregarded your users’ time! That’s a bad thing! — Volatile Software
Python VS Common Lisp, workflow and ecosystem. Really nice review, and I was happy to find a reference to one of Steve Losh’s very nice post: A Road to Common Lisp. #lisp
As you learn Common Lisp and look for libraries, try to suppress the voice in the back of your head that says “This project was last updated six years ago? That’s probably abandoned and broken.” The stability of Common Lisp means that sometimes libraries can just be done, not abandoned, so don’t dismiss them out of hand.
Writing Isn’t Magic; It’s Hard Work
I used to struggle to get my thoughts onto the page because the first time I put them down, they were complete crap. The second time I put them down, they were also crap. And the third time. And the fourth time. And the fifth time. But each time, what I was writing got a little bit better, and eventually I realized that by approximately the fiftieth time I revised something, I’d have something really good; therefore, if I wanted to write something worth reading, all I had to do was put in the time and effort to revise it enough times. — My Year In Review: 2019
So nothing unusual about what I write sometimes looks like shit: I never reread more than one and a half times.
Racket and Geiser — still working after all those years! This is mostly like R REPL, but with inline graphics like in iPython using Qt console. #emacs
TIL there’s something like a new TeX compiler available on the market of typesetting: The Tectonic Typesetting System.
The terms “blockchain” and “distributed ledger technology (DLT)” are very often used as synonyms. Guess what: they are not! — Blockchain vs. DLT: What’s The Difference?
It’s not about hoarding the riches for Twitter: it’s about baking an ever-increasing pie that everyone can have a slice of. — Twitter’s Project Bluesky
On a related note (re. Twitter, not decentralized social networks), I recently reduced the number of people I was tracking (1200+) to less than 390 and my timeline has become much more readable. I believe the noise was mostly coming from too much RTs from folks I followed once for some interesting threads but whose own tweets flow did not last over time. My own centers interest have surely evolved as well. Apologies for those I’ve unfollowed and still follow me on Twitter. I can’t promise I’ll come back someday, but you have this micro-blog in the meantime.
I just plugged this good old fci-mode
into my Emacs config. Indent guides were already a really nice add-on, but the 80-char ruler is really useful if you’re versed into PEP8 and the like. #emacs
Having a website and/or blog is not about being a web developer, nor about being a celebrity of sorts, but is about being a citizen of the Web. — Why I Have a Website and You Should Too
Intro to web dev (v2).
DockerSlim: Minify and Secure Your Docker Containers.
A cons is really just a 2-tuple, and the halves don’t have any particular meaning on their own, even as “head” and “tail.” However, maybe this is really important to you so you want to do it anyway. What’s the best way to go about it? — Efficient Alias of a Built-In Emacs Lisp Function
Most weblogs are unfunded, spare-time ventures, yet most webloggers update their sites five days a week, and some even work on weekends! — Rebecca Blood, The Weblog Handbook
shrynk - Using Machine Learning to learn how to Compress. Interesting discussion on how to combine flat structured files (e.g. data frames) using fastparquet, pyarrow or CSV + compression (TL;DR csv+bz2
is the definitive winner). #python
Recording screencasts with Emacs. #emacs
(a) More mnemonic names tend to be over-specific (not all cdrs are tails), and (b) after a week of using Lisp, car and cdr mean the two halves of a cons cell, and languages should be designed for people who've used them for more than a week.
— Paul Graham (@paulg) October 15, 2019
Suppressing the macOS Software Update Alert Icon: In case you want to stay on Mojave a bit more but are tired of daily notifications.
TIL about a very nice archive of posts on Racket, by Jay McCarthy. #racket
The TL;DR is that experience, domain knowledge, and discipline are actually the best predictors of startup success and that most successful startup founders are middle aged (mean of 45 years old for the 1 in 1,000 highest growth new ventures) rather than the 20 year old who drops out of school to follow his dreams. — The Myth of the Young Entrepreneur
What Medium isn’t is a generic blogging or publishing platform. It’s narrowed its focus into being more like a magazine that everyone can contribute to (and I’m told that more changes are coming in the New Year). In doing so, it inevitably loses some of its early users - and it adds features like a paywall that may drive some casual readers away. — A Medium dilemna
Sure, but can they just stop the noise with their banner that popup from nowhere?
Almost done with the first 50 Rosalind problems on the Bioinformatics Stronghold. #python
#bioinformatics
Alexa, Say No to Chrome.
Nulls are the most talked about example when it comes to the benefits of strongly-typed functional programming, and indeed being able to use your function parameters immediately without having to do any null checking at all is very nice. — How does Haskell make your life easier
Depth of Field with Colour Shift. Lovely.
Here’s the thing that’s always rubbed me the wrong way about Google. They’re insulting. Steve Jobs, Jeff Bezos, Bill Gates — I completely believe they’re all geniuses. But they never seem(ed) condescending. — A letter from Larry and Sergey
Really nice work, by Anamaria Crisan: Adjutant: an R-based tool to support topic discovery for systematic and literature reviews. #rstats
While I’m tinkering to understand the internals of Django, I stumbled across this nice gem on HN: (via @thorstenball)
Hopefully, the next guy to join the company will clean up your shit. The other guys code may not look like shit, but it doesn’t solve any useful problems… so they never got the chance to hire that next guy.
Working from home today (because the strike). It’s been a while…
The choice of a first language is what sociologists call a wicked problem. The notion appeared in the context of social policy and identifies problems that cannot be definitely described. Solutions to wicked problems “cannot be meaningfully correct or false; and it makes no sense to talk about ‘optimal solutions’ to [wicked] problems unless severe qualifications are imposed first”. — What to teach as the first programming language and why
Interestingly, rio relies on the data.table
package to read/write plain text files, and always return a simple data frame (even when using Haven to import Stata files). #rstats
racket-review, a surface level linter for Racket modules. #racket
Racket solutions & explanations for the Advent of Code puzzles, by Matthew Butterick. #racket
We’re in danger, I think, of treating everything as if it’s some measure of our productivity. Number of steps taken, emails replied-to, articles read, podcasts listened-to. — Why I Listen to Podcasts at 1x Speed
TIL about https://rentry.co, a simple Markdown pastebin that allows you to post some words on the internet.
The generation of random numbers is too important to be left to chance. — Robert Coveyou
Fourth website on the go… Now playing with Django, and it’s just whaou! #python
How to RiiR. #rust
mdBook is a utility to create modern online books from Markdown files. #rust
TIL about pipupgrade. So much more convenient than manually checking the results of pip3 freeze | cut -d = -f 1 | xargs -n 1 pip3 search | grep -B2 'LATEST:'
, or blindly apply pip3 freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip3 install -U
. #python
Just found a nice recap’ of Apple successes and failures on Scripting OS X today. #apple
Unless you happen to have an installation of the native applications for macOS or Windows (say, because corporate policy prohibits and prevents it, and you no longer run either of those OS’s at home…), there’s no way to export your data. At all. — The Unnoticed Silo
Assembly: A Pythonic Object-Oriented Web Framework built on Flask. #python
How funny! Of course, this broke part of my settings again.
When using hugo 0.60.0, raw HTML are now replaced with .
The first puzzles will unlock on December 1st at midnight Eastern Time. See you then! — https://adventofcode.com
Coding vs. Programming vs. Software Engineering.
Oh my. I thought I was just coding to solve problems in a minimum amount of time.
Anyway, our point is if you’re going to read a Haskell manual for 10 minutes a day, you aren’t going to become a programmer even in a hundred years. But if you combine reading a manual with watching at least 10 minutes of video courses daily and doing 10 minutes of real coding each day for a couple of months, at the end you will be able to program something valuable in Haskell. — [How to Learn Haskell in 10 Minutes a Day](How to Learn Haskell in 10 Minutes a Day)
Sure. Hopefully, I could benefit from the rest of my working days to learn ReasonML, Purescript & Co.
Rebuilding my lightweight inbox… Always a joy nowadays!
I’ve built 3 dynamic websites in 6 months, using 3 different technologies (Flask/Heroku, Jekyll/Github & Shiny). You know what? It’s always harder when a database is involved in the process.
Your Life in Weeks. (via defmacro)
Il est du devoir et de la responsabilité de chacun de prendre en charge sa destinée numérique. En acceptant, sans ne jamais les lire, les conditions d’utilisation des plateformes connectées, les individus donnent volontairement et intentionnellement leur accord pour le traitement et l’analyse de leurs données personnelles par des tiers. Ils devraient, à mon sens, se questionner sur le caractère gratuit des services offerts, sur l’essence de la rentabilité financière des GAFAM et être plus vigilants dans l’espace virtuel au lieu de se laisser distraire et se complaire dans un système qui viole leur vie privée. — Place aux jeunes dans la lutte contre la surveillance
Darwin itself was originally released by Apple in November 2000. It is a fork of Rhapsody, which was the codename used for Apple’s next-generation operating system after the purchase of NeXT in 1998. Darwin utilises the XNU kernel, and currently runs on modern x86-64 processors, as well as 32-bit ARM processors in the case of older iOS devices (e.g. the iPhone 5C).
Many well-known elements of macOS such as the Cocoa framework and the famous Aqua graphical user interface are not included in Darwin, and unfortunately remain closed source. — A Look at PureDarwin
Started watching Killing Eve recently.
Kulfon: Generate Websites from Data, Instantly. #org
TIL you can export your Org slides to FoilTeX instead of Beamer. #emacs
It is ridiculously hard to go from models to applications. — Better computational complexity does not imply better speed
If you’re interested in switching to or are already using the Fish shell, Brett Terpstra has made all his scripts available for free.
Emacs: The Editor for the Next Forty Years. #emacs
I learned Emacs in September, 1983
It is now November, 2019
…that’s over thirty six years!
An amazingly long time.
— Perry E. Metzger
TIL that you can #include "/dev/stdin"
— Peter Alexander (@Poita_) November 24, 2019
$ cat in
"Hello, world!"
$ cat a.cpp#include <stdio.h>
int main() {
printf("%s\n",
#include "/dev/stdin"
);
return 0;
}
$ g++ a.cpp < in && ./a.out
Hello, world!
It seems that by default formal technical documentation is targeted towards someone who’s deeply immersed in the ecosystem. But many developers have to juggle a lot of “worlds” in their heads daily. — Examples are the best documentation
Interactive Linear Algebra. (via HN)
Pretty old school R plots and HTML pages: https://aliquote.org/pub/DAAG/, https://aliquote.org/pub/MABMUSPlus/gallery/.
Just found out the morning paper:
The Morning Paper: a short summary every weekday of an important, influential, topical or otherwise interesting paper in the field of computer science.
Privacy is a group inoculation. Even if you self-host, there’s nothing to prevent your information from being inadvertently gathered by your friend who hasn’t taken the same steps. Not to mention that self-hosting is really hard! At its simplest, you need to know how to use command line tools (or, if you’re using shared hosting, be comfortable with FTP). At its hardest, you need to have some server administration skills. For those reasons, I don’t think self-hosting is a real solution to the problem in itself. There are lots of other great reasons to self-host: having full control of your web presence and data, if you have the means and the skills, allows you to better represent yourself online. — Escape from Google
I had felt since the 2016 US election that Twitter had spiraled into a worse and worse condition; the site felt engineered to drive more and more “engagement” at the expense of human misery. So making a clean break dramatically improved my mental well-being. — in which we get socially rendered
Guess who forgot to bring that dish (butternut squash with spices) to the table last Saturday?
Fundamentals of Data Visualization. #dataviz
Designing ggplots: making clear figures that communicate. #dataviz
#rstats
hugo-easy-gallery: Interesting template to display a directory full of images.
Rational approximations. #lisp
TIL about texme, a self-rendering Markdown + LaTeX documents written in JS.
Nice trick by Brett Terpstra: iTerm and the Find pasteboard. #apple
How lovely… The Art of the Travelling Salesman Problem. See also TSP Art.
Last episode of The Rook tonight. Interesting, although TBH the scenario could have been a little more developed.
Recipes for using R’s data.table package, via @eddelbuettel. #rstats
Diving again into Shiny today. Happy to see nothing has changed (so much), so that I can reuse my boilerplate template from 4 years. #rstats
I had to cheat a bit for a few dozens of math-heavy problems, but overall I am quite happy with how much has been done in the past few months.
The LSP rename
things is so useful (no more query-replace
in single file)! #emacs
Here we go finally. Another LSP server running fine with Doom Emacs!
TIL about Witch, by the designers of Moom:
Switch Everything
The built-in macOS app switcher is great if all you use are one-window applications. But you probably have many windows open in many apps, possibly with many tabs, and navigating them all is a pain. Enter Witch, with which you can switch everything.
It doesn’t matter who is guarding the walled garden’s gate if increasingly no one wants to go inside. So there’s a better word than “gatekeeper” to describe what we’re really after in building a great community-focused platform. It’s “curator”. Someone who is responsible for maintaining the best experience for users. — Open gardens
I spent a couple of hours building the full Haskell stack (aka haskell-ide-engine), with stack
. (This was possible after I realized an old cctools
from Homebrew was causing trouble all along.) I ended up with a 8+ Gb .stack
directory, for a few command-line executables that now sit in my .local
directory. Now, how do I clean up things? Enjoy! #haskell
#emacs
Pretty, minimal and fast ZSH prompt. I still use zsh in Emacs, so let’s give it a go. And there’s a port for Fish, btw.
Lovely pictures: Dreamy Cave-Like Photos Taken Inside Musical Instruments.
Don’t use Windows 10 - It’s a privacy nightmare. — https://www.privacytools.io
What Would the Father of Cybernetics Think About A.I. Today?
Wiener’s central insight was that the world should be understood in terms of information. Complex systems, such as organisms, brains, and human societies, consist of interlocking feedback loops in which signals exchanged between subsystems result in complex but stable behavior. When feedback loops break down, the system goes unstable. He constructed a compelling picture of how complex biological systems function, a picture that is by and large universally accepted today.
(…)
A major fear of the singulariteers is that as computers become more involved in designing their own software, they’ll rapidly bootstrap themselves into achieving superhuman computational ability. But the evidence of machine learning points in the opposite direction. As machines become more powerful and capable of learning, they learn more and more as human beings do—from multiple examples, often under the supervision of human and machine teachers. Education is as hard and slow for computers as it is for teenagers.
So the main selling point of this new, $2,399 computer is that it fixes some of the unforced errors that Apple made in 2016. You’re paying to get the same sort of keyboard, the same escape key, the same arrow keys that you could buy in 2015. Apple fans would pay even more to get the MagSafe charger they had back then, too, or to not have the TouchBar at all. — Something is wrong with computers
TIL about Known, a collaborative social publishing engine, by reading Ben Werdmüller’s great advice of how to blog in 2020. So, what’s blogging?
Here’s what it’s not: professional article writing. If you want to go through multiple rounds of editing, please do. If you want to write two thousand word epics about your topic of choice, please do. But it’s also okay to write up a hundred quick words and post them without thinking twice about it.
When you blog, you’re building up a body of work that represents you online. It’s a gateway into your thought process more than anything else. So do what moves you - whether that’s short thoughts, bookmarks you like, essays, fiction, poetry, photo albums, and so on. You do you. The only thing that’s really important is that you keep doing it.
Thanks to Jan-Lukas Else for the pointer!
TIL about chemacs, an Emacs profile switcher. #emacs
The 80/24 rule, by Mark Seemann.
Development of nvim
is amazing. Now it features LSP integration. #vim
The 16-inch MacBook Pro. #apple
Emacs resources for writers. (via Irreal) #emacs
TIL about Sketchviz, which allows to pimp your Graphviz diagram a bit. (h/t John D. Cook)
ICANN made this deal much more valuable by removing all price controls on .org. — Breaking: Private Equity company acquires .Org registry
If you have a .org
domain, like me, it’s probably time to renew it for 10 or 15 years as Manton Reece suggests.
It turns out the new Apple Macbook Pro will be just under $4500 when maxed out (except for the HD which I choose to stay at 2TB SSD). You can save $800 by giving up the 64 GB of RAM. #apple
Fish: Further exploration, by Brett Terpstra.
usql: A universal command-line interface for PostgreSQL, MySQL, Oracle Database, SQLite3, Microsoft SQL Server, and many other databases including NoSQL and non-relational databases! #database
Sketch: A Common Lisp framework for the creation of electronic art, visual design, game prototyping, game making, computer graphics, exploration of human-computer interaction, and more. #lisp
Just started watching The Rook. Looks good so far.
TIL there’s a very interesting series of posts on Compiling a Functional Language Using C++ on Daniel’s Blog.
Doing Bayesian Data Analysis in brms and the tidyverse. Just in case you’re interested in performing Bayesian analysis the tidyverse way. #rstats
Little memory from the family weekend.
Interesting idea: Literate Git.
To riff on an idea from Alan Jacobs, a blog can be a kind of garden—perhaps one that is well-tended, or perhaps one that is gone a bit wild and overgrown, but either way a place where the structure is organic and emergent as much as it is planned. Even the most carefully-kept gardens have surprises in them, courtesy of the infinite variety that is life. — Tending My Word-Garden
It also fails to mention that the Safe Browsing feature sends, from your IP address, information about the sites you visit to Google or Tencent. — Apple’s New Privacy Page
I just updated my Doom Emacs, which was 10 weeks old. Of course, I had to start from scratch since the upgrade process failed miserably. Great news: they switched to MS Python LSP, which is supposed to be better than the default LSP. BTW, the material icon fonts may fail to install properly, so be sure to check it is right into ~/Library/Fonts
in case you see strange icons in your modeline. #emacs
The option to “Download Originals to this Mac” doesn’t apply to shared photos. So you can’t back them up youself, and there’s no backup in the cloud. Not only does it no longer download the photos, but it also deleted the ones that had been downloaded by macOS 10.14. — Catalina No Longer Caches Shared Photos Locally
See also Gone, by Tyler Hall. #apple
Hilarious, really. (via Irreal)
Programming for Lovers. #bioinformatics
Piano Chill (since yesterday).
TIL about a new X11/tmux compliant text editor: kakoune.
Over decades I’ve written a lot of personal code. I made a bar chart race showing how many lines I’ve written in different languages over time.
Dive into Deep Learning, by Alex Smola and coll. Blog post here.
How to submit an Electron App to App Store using Electron-Packager, or How to Submit an Electron 7 App to the Apple App Store, and finally You Cannot Submit an Electron 6 (or 7) App to the Apple Store. BTW, Photon looks great for Electron app on macOS. #apple
A deeper dive into UMAP theory.
In its simplest sense, the UMAP algorithm consists of two steps: construction of a graph in high dimensions followed by an optimization step to find the most similar graph in lower dimensions. In order to achieve this goal, the algorithm relies on a number of insights from algebraic topology and Riemannian geometry. Despite the intimidating mathematics, the intuitions behind the core principles are actually quite simple: UMAP essentially constructs a weighted graph from the high dimensional data, with edge strength representing how “close” a given point is to another, then projects this graph down to a lower dimensionality. The advanced mathematics gives UMAP a solid footing with which to handle the challenges of doing this in high dimensions with real data.
Caret looks great but is definitely broken, IMO (how come the welcome screen is saved as a screenshot and we can’t close any folder currently opened?). Typora appears like a great alternative to existing apps for Markdown editing.
Every once in a while, try installing your software from scratch, along with all the dependencies. Ideally, you want your installation process to be as simple and frictionless as possible. — They Might Never Tell You It’s Broken
Herbie: Find and fix floating-point problems.
Gyroscope is probably yet another app to lose anonymity without gaining much, but it definitely looks like a gorgeous app.
Yesterday evening was the second to last episode of Below the surface. It can be watched but it’s certainly not worth Westworld, IMO.
Bio[logy] today is where information technology was 50 years ago: on the precipice of touching all of our lives. — Biology is Eating the World: A Manifesto
It’s quite unfortunate that my recent attempts at trying to compile the Haskell IDE engine, to use Fork or Caret have all ended in failure. At least, I may be working on what I’m supposed to be paid for.
Sunsetting intero. It looks like Emacs folks may have to switch to Dante or Haskell IDE soon or later.
I don’t know coding at all anymore. Most of the code I write is in my e-mails. So somebody sends me a patch … I [reply with] pseudo code. I’m so used to editing patches now I sometimes edit patches and send out the patch without having ever tested it. I literally wrote it in the mail and say, ‘I think this is how it should be done,’ but this is what I do, I am not a programmer. — Linus Torvalds, on Slashdot
The TV app is not an app. It’s a store. And Apple knows a thing or two about running stores. They know the more you walk in and hang out, the more likely you will spend some money while you are in there. — Joe Cieplinski (via Michael Tsai)
See also: Apple TV, Apple TV, Apple TV, and Apple TV+. #apple
indiekit: An IndieWeb publishing toolkit. (via Jan-Lukas Else)
Twitter for Mac Returns (more on Michael Tsai’s blog). I can’t help but think it was worthwhile to delete an application and services that worked perfectly and reintegrate them two versions later. #apple
TIL about the hippocratic license (via Greg Wilson).
Fork, a fast and friendly git client for Mac and Windows. GH notifications right on your desktop, interactive rebase and the merge-conflict helper/resolver looks really great.
Caret is a Markdown editor for Mac, Windows and Linux.
Retroactive is an app that lets you run Aperture, iPhoto, and iTunes on macOS Catalina. #apple
neovim-remote. #vim
How fast do I talk: I really like those tiny experiments and self analytics, and it always reminds of one of the first I encoutered on Dr Bunsen website, Vim croquet.
We’re easier to please. Good is good enough. So only those who are the most upset, and know how to improve things, do the hard work necessary to make things great. The dissatisfied ones go make things better for all of us. — Why experts are annoying
Myers Diff Algorithm - Code & Interactive Visualization. See also An Introduction To Data Science On The Linux Command Line by the same author.
Nice utility to inspect a Git repo: onefetch. This is built with Rust, but the building stage didn’t work for me, and there’s currently no binary release for Mac.
The most compelling reason for most people to buy a computer for the home will be to link it into a nationwide communications network. Steve Jobs
Or what we call now social networks.
Mac OS Catalina: more trouble than it’s worth. #apple
What I want from a new version of an operating system, especially one as mature as Mac OS, is that it fixes or improves what was not working well in previous versions, and that it leaves tried-and-true features and functionalities as untouched as technically possible. I don’t need and I don’t want disruption for disruption’s sake on a yearly basis. While I understand that today’s tech motto is The show must go on, that also doesn’t have to mean that the show should get painful to watch.
I’m not a big fan of serif everywhere on a webpage, but there are definitely interesting other features in this org-specific CSS design. #org
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
— https://10print.org (via HN)
Now Google wants to back out of its end of the deal. Since they are by far the dominant email provider, they apparently started thinking that they could squeeze a few more dollars out of those poor souls still using it. Of course, they’ll still be scanning your emails and collecting your data but now you’ll have to pay them to do it. — When Gmail Isn’t Free
Is Python really faster than C++? #python
#bioinformatics
There is a secret that needs to be understood in order to write good software documentation: there isn’t one thing called documentation, there are four. — What nobody tells you about documentation
That’s how it looks after you trashed thousand of professional emails that are no longer relevant in your mailbox:
I don’t remember the last time I used fold
in a Terminal — this is not the fold
you may find in various functional PL, but one that can be very useful for counting characters in a file.
So it appears that ZghOT0eRm4U9s:p/q2-q4! is a chess move (and also the password of Ken Thompson from the good old Unix days). I’d be foolish to remember that kind of thing, but it’s definitely a strong password!
Plain text can certainly have a reputation for looking lazy or cheap, but I feel this is mostly perpetuated in the design and marketing communities. I can assure you that your average day-to-day users are much less opinionated about your email campaign design than you are. Look to satisfy your customers’ needs before your own. — Plain Text Emails, Please
Nicely done: Visualize the execution of different algorithms for solving the traveling salesman problem.
One-to-one Tmux session reinvented: please assist.
What a beautiful Emacs for writers! #emacs
A functional language is a programming language made up of functions. — Doug Hoyte, Let Over Lambda
Beautiful Quicksort in Common Lisp. #lisp
#haskell
Browsing Apple source code reminds me so much of plain old iWeb design. (I came revisiting this site after reading Beating Decades Of Optimized C With 80 Lines Of Haskell.) #apple
From Job Losses from Automation Are Being Actively Engineered and Funded, by Daniel Miessler:
Because humans are so static, and the types of things we need on a customer service call are so similar, the AI Customer Service Agent problem is similar to attacks against cryptography. Once you get a foothold, the attacks predictably get better, and they never get worse.
Moving to zsh. I’ve been diving with Zsh long before it became the de facto shell on macOS, and I just moved again, this time for Fish. However, there’s always something nice to learn from Scripting OS X, so I’ll keep this in my bookmarks, especially since I still use zsh occasionally (because of Emacs multi-term which doesn’t seem to like Fish very much). Thorsten Ball has a nice init file, btw.
From Programming Praxis: There are many algorithms for recognizing anagrams. Here is an unusual one:
Assign each character to a prime number, then map a string to the corresponding primes, and compute their product. Two strings are anagrams only if they share a product.
Today on HN: What’s New In Python 3.8 and The Unix game.
After upgrading Ubuntu and R on the server at work, I’m now looking for an optimal Mac->Linux iTerm+Tmux+ssh thing. I’m close. In the meantime, I found this: My remote shell session setup, but I believe mosh
is not the recommended way anymore. And I know I definitely need to re-read this again.
I finally got my Bitbucket account back. Just so I could delete the dozens of repositories I maintained over the years there. This is a very bad user experience since I cannot delete my account and don’t have any clue, even after reading the docs and the commnunity wiki. I guess I now have to contact the support center.
Starting early so I’ll be sure I can listen to all of this while learning about computational biology.
![](/img/2019-10-08-10-50-01.png)TIL about RacketScript, an experimental lightweight Racket to JavaScript compiler. #racket
Another great app by Jens Axel Søgaard: Racket Stories. #racket
Well, I find it weird that Apple products are more expensive in France. Conversely, I experienced a lot of trouble with taxes when buying Stata books from the US. Anyway, I no longer can afford any Apple product by myself, so I guess I’ll have to keep my finger crossed in hoping that my current Macbook will last a few more years. #apple
The reality is half of data science is just cleaning data, and the other half is complaining about how much of data science is just cleaning data. You can add another half’s worth of time for debugging your neural net, if you were coaxed into using one that isn’t off-the-shelf. — R is a joy if you treat it like awk
MacOS Catalina is out, apparently. What’s up now? Should I stay or should I come and see what they made to iTunes? And wasn’t Twitter removed together with all other social media stuff, or?
The Twitter for Mac app takes full advantage of the native Mac features like multiple windows, drag and drop, keyboard shortcuts, and more.
TIL there’s something like the X, Y and Z generations.
I started watching Euphoria yesterday evening. It’s been a long since I haven’t watched a TV show alone. And the pilot was quite good actually.
If you like reading about others’ setup, Uses This has a nice interview with Chris Wellons. Apparently, there’s also a quick review on Irreal. And so I learned that he now mostly uses Vim and he also has a live CD in case he find himself away from his home computer.
Kind of magic.
I believe this is what happened when you forget to add Matomo tracking code in your new partial templates.
I can’t believe I have that many Homebrew packages on my HD. It’s probably time to do some cleanup in my /usr/local
.
Ouch, it hurts! Dear Stack Exchange, Inc.
We’d like to make sure it’s clear that none of us support interacting with people with anything short of complete respect. As moderators, we are responsible for upholding, promoting, and respecting the high standards that Stack Exchange has set over the years, and we stand behind Stack Exchange in its move to ensure everyone feels welcome and safe.
I love when brilliant persons can also ask thoughful question on Stack Exchange.
Introduction to Theoretical Computer Science, by Boaz Barak.
A bit of Clojure in Python thanks to the itertools (islice
) module:
def take(n, iterable):
"Return first n items of the iterable as a list"
return list(islice(iterable, n))
def nth(iterable, n, default=None):
"Returns the nth item or a default value"
return next(islice(iterable, n, None), default)
Your subconscious holds onto things it thinks you might be forgetting, and regularly interrupts you about them. (…) Never let tasks or ideas sit in your mind without being captured. — Daniel Miessler, The Most Important Productivity Lesson I Ever Learned
Coding Matrices, Contrast Matrices and Linear Models (PDF). #rstats
TIL (or better, releearned) about mpv, a free, open source, and cross-platform media player.