_____ _ / ____| | Sebastien LOVERGNE | (___ | | /blog.txt \___ \| | /projects.txt ____) | |____ /awesome.txt |_____/|______| /blogroll.txt =========================================================================== My list of ๐—”๐˜„๐—ฒ๐˜€๐—ผ๐—บ๐—ฒ things =========================================================================== This is a curated list of things I have discovered on the web and found useful or thought-provoking, there is also some fun stuff. Potential subjects include, but are not limited to, programming, engineering, technology, and woodworking. The list is sorted by date of addition (latest first), expect for my favorites wich are pinned. โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค โ™ฅ Putting the โ€œYouโ€ in CPU โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ A deep dive into how exactly your program can "run"on a machine. It's โ”‚ โ”‚ simple question but it will lead you to explore a lot of interesting โ”‚ โ”‚ things: what's is an instruction? How can we multitask on a CPU if โ”‚ โ”‚ its execution is sequential? How do memory isolation between kernal โ”‚ โ”‚ and different process work? What is a dawn syscall actually? And how โ”‚ โ”‚ to become an Elf-lord? โ”‚ โ”‚ โ”‚ โ”‚ It's well written and beautifully presented which make it โ”‚ โ”‚ approachable despite being very detailed ( if you wonder how โ”‚ โ”‚ detailed, there is a function by function analysis of how linux โ”‚ โ”‚ implement system call in chapter 3). If you're anything like me and โ”‚ โ”‚ want to understand how your programs run all the ways down from your โ”‚ โ”‚ code to the hardware level then, this is for you. This has actually โ”‚ โ”‚ improved my understanding of how computers work and what the role of โ”‚ โ”‚ an kernel is. I cannot recommend reading it enough! โ”‚ โ”‚ โ”‚ โ”‚ PS: I realised after reading the entire thing the the research and โ”‚ โ”‚ the writing was done by a 17 year old with the help of hackclub. This โ”‚ โ”‚ person probably has a bright future ahead of her, I wish I could have โ”‚ โ”‚ been so dedicated when i was 16 year old! โ”‚ โ”‚ โ”‚ โ”‚ PPS : there is another one by same person about networking called how โ”‚ โ”‚ did I get here?[1]. ~~It's on my reading list!~~. It's also very โ”‚ โ”‚ cool. โ”‚ โ”‚ โ”‚ โ”‚ [1] https://how-did-i-get-here.net/ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค โ™ฅ Schemathesis โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Schemathesis is an incredible fuzzer for REST and GraphQL API. It can โ”‚ โ”‚ be used through CLI or integrate directly with your unit test in โ”‚ โ”‚ python. Thanks to it's property-based testing, I have found numerous โ”‚ โ”‚ bug, including inside my dependencies, . It also help me catch bad โ”‚ โ”‚ documentation with it's response schema validation. I definitly โ”‚ โ”‚ integrate it inside my CI/CD pipeline whenever I can. โ”‚ โ”‚ โ”‚ โ”‚ If you have been impressed by schemathesis capability like me and you โ”‚ โ”‚ want to know more about it's conception I would recommend reading the โ”‚ โ”‚ paper published by its creators "Deriving Semantics-Aware Fuzzers โ”‚ โ”‚ from Web API Schemas" by Zac Hatfield-Dodds and Dmitry Dygalo. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค VSCode workspace shortcuts with .desktop files on Linux โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ One big frustration I have with my workflow currently is that I open โ”‚ โ”‚ all my apps with the app launcher (the menu that appears when you โ”‚ โ”‚ press the command key `โŒ˜`) except one: VSCode[^clarification]. And โ”‚ โ”‚ that's a big "but" because this is probably the app I use the most โ”‚ โ”‚ after my browser. Instead, I open a terminal and type `code-oss โ”‚ โ”‚ repos/name-of-my-repo`; if I donโ€™t, it just opens VSCode with the โ”‚ โ”‚ last workspace instead of the one I specifically want. But today, no โ”‚ โ”‚ more! Today I fixed my workflow with a simple hack: generating โ”‚ โ”‚ `.desktop` files. โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ But what is a `.desktop` file? โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”‚ โ”‚ A `.desktop` file, or rather a desktop entry file, is a very simple โ”‚ โ”‚ config that applications can use to register themselves with GNOME or โ”‚ โ”‚ KDE's application system. For example, the reason you can find VSCode โ”‚ โ”‚ in the app launcher is because when you installed it, it created a โ”‚ โ”‚ file called `code.desktop` in one of the following locations: โ”‚ โ”‚ โ”‚ โ”‚ โ€ข System package: `/usr/share/applications/code-oss.desktop` โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Manual install: `~/.local/share/applications/code-oss.desktop` โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Snap: โ”‚ โ”‚ `/var/lib/snapd/desktop/applications/code-oss_code-oss.desktop` โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Flatpak: โ”‚ โ”‚ `~/.local/share/flatpak/exports/share/applications/com.visualstudio.code_oss.desktop` โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ The content of `/usr/share/applications/code-oss.desktop` on Alpine โ”‚ โ”‚ Linux is: โ”‚ โ”‚ โ”‚ โ”‚ ```null โ”‚ โ”‚ [Desktop Entry] โ”‚ โ”‚ Name=Code - OSS โ”‚ โ”‚ Comment=Code Editing. Redefined. โ”‚ โ”‚ GenericName=Text Editor โ”‚ โ”‚ Exec=/usr/bin/code-oss %F โ”‚ โ”‚ Icon=com.visualstudio.code.oss โ”‚ โ”‚ Type=Application โ”‚ โ”‚ StartupNotify=false โ”‚ โ”‚ StartupWMClass=Code - OSS โ”‚ โ”‚ Categories=TextEditor;Development;IDE; โ”‚ โ”‚ MimeType=application/x-code-oss-workspace; โ”‚ โ”‚ Actions=new-empty-window; โ”‚ โ”‚ Keywords=vscode; โ”‚ โ”‚ โ”‚ โ”‚ [Desktop Action new-empty-window] โ”‚ โ”‚ Name=New Empty Window โ”‚ โ”‚ Name[de]=Neues leeres Fenster โ”‚ โ”‚ Name[es]=Nueva ventana vacรญa โ”‚ โ”‚ Name[fr]=Nouvelle fenรชtre vide โ”‚ โ”‚ Name[it]=Nuova finestra vuota โ”‚ โ”‚ Name[ja]=ๆ–ฐใ—ใ„็ฉบใฎใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆ โ”‚ โ”‚ Name[ko]=์ƒˆ ๋นˆ ์ฐฝ โ”‚ โ”‚ Name[ru]=ะะพะฒะพะต ะฟัƒัั‚ะพะต ะพะบะฝะพ โ”‚ โ”‚ Name[zh_CN]=ๆ–ฐๅปบ็ฉบ็ช—ๅฃ โ”‚ โ”‚ Name[zh_TW]=้–‹ๆ–ฐ็ฉบ่ฆ–็ช— โ”‚ โ”‚ Exec=/usr/bin/code-oss --new-window %F โ”‚ โ”‚ Icon=com.visualstudio.code.oss โ”‚ โ”‚ ``` โ”‚ โ”‚ โ”‚ โ”‚ As you can see, it contains a lot of metadata to help your desktop โ”‚ โ”‚ environment present and launch the app correctly. Here is a quick โ”‚ โ”‚ presentation of each field: โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Name: the label of the application โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Comment: a short description for tooltips โ”‚ โ”‚ โ”‚ โ”‚ โ€ข GenericName: what category of application it belongs to โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Exec: how the application is launched. Note here that `%F` tells โ”‚ โ”‚ the system that VSCode can open one or multiple files at once. โ”‚ โ”‚ This is why when you select some files, right-click, and then โ”‚ โ”‚ click on "Open With," VSCode appears as an option โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Icon: the icon of the app; can be an absolute path or, as in this โ”‚ โ”‚ case, a URI compatible with the icon-themes specification[1] โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Type: whether it's an application, a directory, or a link โ”‚ โ”‚ โ”‚ โ”‚ โ€ข StartupNotify: this one is a little bit complicated and is linked โ”‚ โ”‚ to the startup-specification standard[2]. What you need to know โ”‚ โ”‚ is that `false` only means that it is up to the application to โ”‚ โ”‚ manage its own startup notification, not that it wonโ€™t notify you โ”‚ โ”‚ on start. I really wish it would just stop startup notifications โ”‚ โ”‚ โ”‚ โ”‚ โ€ข StartupWMClass: an ID used to know which windows belong to the โ”‚ โ”‚ same application โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Categories: like GenericName, it's a categorization, but it โ”‚ โ”‚ follows the desktop-menu specification[3] instead of being free โ”‚ โ”‚ text โ”‚ โ”‚ โ”‚ โ”‚ โ€ข MimeType: a list of MIME types that the application can open. In โ”‚ โ”‚ this case, VSCode registers its own custom MIME type for โ”‚ โ”‚ workspaces, because listing everything VSCode can open would be โ”‚ โ”‚ too longโ€”as it can basically open anything โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Actions: a list of custom actions the application can perform. โ”‚ โ”‚ You can see the `new-empty-window` in your app launcher by โ”‚ โ”‚ right-clicking on the VSCode icon โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Keywords: a list of strings that can be used to match the โ”‚ โ”‚ application when searching. In this case, while the app is named โ”‚ โ”‚ "Code," I can still type "VSCode" and find it in the app launcher โ”‚ โ”‚ โ”‚ โ”‚ โ€ข [Desktop Action new-empty-window]: this section describes the โ”‚ โ”‚ custom action with internationalization details โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ If you are interested, there are other options for more advanced โ”‚ โ”‚ functionality described in the desktop-entry specification[4]. Most โ”‚ โ”‚ of those options won't be very useful to us, but it's always good to โ”‚ โ”‚ know what we are working with. โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ How does that help me open a workspace quickly? โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”‚ โ”‚ We could add a custom action to VSCode to open a specific folder, but โ”‚ โ”‚ the downside of that is that the action is hidden behind a โ”‚ โ”‚ right-click and is not directly searchable. โ”‚ โ”‚ โ”‚ โ”‚ Instead, whatwe're going to do is create a `.desktop` file for our โ”‚ โ”‚ workspace with a custom `Exec` to open this specific folder. Here is โ”‚ โ”‚ an example: โ”‚ โ”‚ โ”‚ โ”‚ ```txt โ”‚ โ”‚ # ~/.local/share/applications/code-tinyfeed.desktop โ”‚ โ”‚ [Desktop Entry] โ”‚ โ”‚ Name=tinyfeed workspace โ”‚ โ”‚ Comment=Open the repository directly with code โ”‚ โ”‚ GenericName=Text Editor โ”‚ โ”‚ Exec=code-oss "/home/sebastien/repos/tinyfeed" โ”‚ โ”‚ Icon=com.visualstudio.code.oss โ”‚ โ”‚ Type=Application โ”‚ โ”‚ StartupNotify=false โ”‚ โ”‚ StartupWMClass=Code - OSS โ”‚ โ”‚ Categories=TextEditor;Development;IDE; โ”‚ โ”‚ Keywords=vscode; โ”‚ โ”‚ ``` โ”‚ โ”‚ โ”‚ โ”‚ Let's analyze it step by step: โ”‚ โ”‚ โ”‚ โ”‚ โ€ข The file is located in `~/.local/share/applications/`. Most โ”‚ โ”‚ `.desktop` files are located in `/usr/share/applications/`, but โ”‚ โ”‚ using `~/.local` allows us to scope the application to only the โ”‚ โ”‚ current user, which I think is preferable for workspace โ”‚ โ”‚ shortcuts. Also, it does not require root access. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข The icon is simply the VSCode icon reused. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข The label is the name of the workspace, making it easy to โ”‚ โ”‚ distinguish from the actual VSCode app as they have the same โ”‚ โ”‚ icon. "workspace" is at the end because the name is often โ”‚ โ”‚ truncated. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข An absolute path to our workspace replaces the `%F` argument. โ”‚ โ”‚ It's important that the path is absolute, as `~` would not be โ”‚ โ”‚ expanded. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข The rest of the metadata is kept from the base file. โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ This gives us the following search result in the app launcher when I โ”‚ โ”‚ search for "tinyfeed[^self-promotion]": โ”‚ โ”‚ โ”‚ โ”‚ illustration: /workspace-shortcut-1.avif โ”‚ โ”‚ โ”‚ โ”‚ And when we press `Enter โŽ` it will open the tinyfeed workspace โ”‚ โ”‚ successfully โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ Okay but now I need to manually maintain a file for each repos? โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”‚ โ”‚ Indeed, maintaining that by hand would be annoying but you can โ”‚ โ”‚ trivially write a bash script to automate the generation of โ”‚ โ”‚ `.desktop` files: โ”‚ โ”‚ โ”‚ โ”‚ ```bash โ”‚ โ”‚ #!/bin/sh โ”‚ โ”‚ โ”‚ โ”‚ # Ensure the script exit on error or unbound variables โ”‚ โ”‚ set -eu โ”‚ โ”‚ โ”‚ โ”‚ # Configuration โ”‚ โ”‚ REPOSITORIES_DIRECTORY="$HOME/repos" โ”‚ โ”‚ APPLICATIONS_DIR="$HOME/.local/share/applications" โ”‚ โ”‚ โ”‚ โ”‚ # Ensure the applications directory exists โ”‚ โ”‚ mkdir -p "$APPLICATIONS_DIR" โ”‚ โ”‚ โ”‚ โ”‚ for repo_path in "$REPOSITORIES_DIRECTORY"/*/; do โ”‚ โ”‚ REPOSITORY=$(basename "$repo_path") โ”‚ โ”‚ DESKTOP_FILE="$APPLICATIONS_DIR/code-$REPOSITORY.desktop" โ”‚ โ”‚ โ”‚ โ”‚ cat > "$DESKTOP_FILE" < for progressive enhancement[2]. โ”‚ โ”‚ โ”‚ โ”‚ The site has two main section: โ”‚ โ”‚ โ”‚ โ”‚ 1. Hell: where you find bad, but not obviously bad, examples of HTML โ”‚ โ”‚ code โ”‚ โ”‚ โ”‚ โ”‚ 2. Heaven: where you discover little-known but very useful features โ”‚ โ”‚ of HTML โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ There is also an advent calendar with tips and tricks in December. I โ”‚ โ”‚ highly recommend exploring this site if you want to deepen your โ”‚ โ”‚ understanding of what HTML has to offer. โ”‚ โ”‚ โ”‚ โ”‚ [1] https://www.htmhell.dev/tips/download-links/ โ”‚ โ”‚ [2] https://www.htmhell.dev/tips/the-avif-image-format/ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Tinystatus: a lovingly simple monitoring tool. โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Sometimes, you have a basic website or a small application, and all โ”‚ โ”‚ you need is a way to receive alerts if it goes down. In such cases, โ”‚ โ”‚ you probably don't want to deploy the entire OpenTelemetry stack with โ”‚ โ”‚ all the required infrastructure and integration. Sometimes, all you โ”‚ โ”‚ want is something simple. This is where "tinystatus" comes into play; โ”‚ โ”‚ it couldn't be simpler. โ”‚ โ”‚ โ”‚ โ”‚ Tinystatus is a compact 130-line Bash script that queries a list of โ”‚ โ”‚ URLs and generates an HTML report. You can effortlessly set it up in โ”‚ โ”‚ cron or systemd and direct your HTTP server to the generated โ”‚ โ”‚ `index.html`. Voilร , you've got yourself a status service. Moreover, โ”‚ โ”‚ by redirecting its `stderr` output to a mail service, you can receive โ”‚ โ”‚ real-time alerts if your website or app experiences any downtime. โ”‚ โ”‚ โ”‚ โ”‚ Because it's so concise, you can easily customize it to your โ”‚ โ”‚ preferences by adding extra checks or tweaking the styling. And if โ”‚ โ”‚ you don't want to deal with setting up cron, systemd or the web โ”‚ โ”‚ server, it's also available as a Docker container or as a Go โ”‚ โ”‚ implementation, aptly named "go-tinystatus", which embeds the HTTP โ”‚ โ”‚ server for your convenience. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ FoundationDB: Distributed Unbundled Transactional Key Value Store โ”‚ โ”Œโ”€โ”ค (2021) โ”œโ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ FoundationDB is a distributed transactional key value store created โ”‚ โ”‚ in 2009 wich guarantee ACID transactions at scale. โ”‚ โ”‚ โ”‚ โ”‚ This is paper published by the FoundationDB team summarising there โ”‚ โ”‚ approach to building a distributed database 10 years after building โ”‚ โ”‚ it. There is a lot of interesting things inside it but here are my โ”‚ โ”‚ main takeaway: โ”‚ โ”‚ โ”‚ โ”‚ โ€ข They built the simulation and testing framework before starting โ”‚ โ”‚ to build the actual database. This really highlights the โ”‚ โ”‚ importance of extensive testing capabilities if you want to โ”‚ โ”‚ achieve consistency and robustness in complex systems. I find the โ”‚ โ”‚ idea of a simulation to continuously test and find bug in a โ”‚ โ”‚ system trully amazing and I hope I will have the chance to do โ”‚ โ”‚ something similar one day. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข FoundationDB offers a minimal and carefully chosen feature set โ”‚ โ”‚ and instead realy on a layered architecture to enable other โ”‚ โ”‚ developer to implement there own feature and data-model. This โ”‚ โ”‚ approch has seen a lot of success as FoundationDB has been used โ”‚ โ”‚ as a literal foundation for other paradigm of distributed โ”‚ โ”‚ databases: semi-relational databases, document and object stores, โ”‚ โ”‚ graph databases and more. โ”‚ โ”‚ โ”‚ โ”‚ โ€ข I am way over my head with the internals of the transaction โ”‚ โ”‚ system. โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Why is CSS so Weird? โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Because the web has been build with a set of value at it's core : the โ”‚ โ”‚ web is open, it's for everyone and everything. By accepting those โ”‚ โ”‚ value we must, at the same time, accept that we loose some degree of โ”‚ โ”‚ control, we don't choose who will look at our website and on what โ”‚ โ”‚ devices. That lake of control means we must build websites for an โ”‚ โ”‚ infinite canvas with unknown constraints and capabilities. But โ”‚ โ”‚ designing for the unknown is hard, for that, we need flexibility, and โ”‚ โ”‚ this is where CSS come in. โ”‚ โ”‚ โ”‚ โ”‚ The Cascade in Cascading Style Sheets is the process of assembling โ”‚ โ”‚ styles from different inputs. You gain from that process the โ”‚ โ”‚ capability to merge intent from different sources: the Author, the โ”‚ โ”‚ Browser and remarkably, the User. โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ AUTHOR BROWSER USER โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ–บ CASCADE โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ STYLE โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ "Author, browser, and user styles consolidate into one style throught โ”‚ โ”‚ cascade" โ”‚ โ”‚ โ”‚ โ”‚ It also allows us to fail gracefully by cascading upward wich is good โ”‚ โ”‚ for resilence and backward compatibility. But the tradeoff is that โ”‚ โ”‚ your instructions can be overridden, they became suggestions. This is โ”‚ โ”‚ one of the pitfalls of CCS and why we sometime have to use the โ”‚ โ”‚ infamous `!important`. The other consequence is that everything is โ”‚ โ”‚ hierarchically linked. This is great, as one style can be reused in โ”‚ โ”‚ many similar places to achieve consistency, but this is also another โ”‚ โ”‚ big pitfall of CSS as a style might impact elements it was never โ”‚ โ”‚ meant to. โ”‚ โ”‚ โ”‚ โ”‚ Overall some might think that we made a bad tradeoff with CSS by โ”‚ โ”‚ loosing too much control, but I don't think so. As John Allsopp said, โ”‚ โ”‚ "Control[...] is a limitation of the printed page", when a book is โ”‚ โ”‚ produce and sold only the editor can make it accessible, and he fails โ”‚ โ”‚ to do it most of the time whether it's diagrams with bad contrast or โ”‚ โ”‚ the absence of braille editions or other things. But with the browser โ”‚ โ”‚ and CSS the user has the last word, he can make it feet it's need, โ”‚ โ”‚ whatever it is.' โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Every Layout: relearn CSS โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ One of the best resource I could find on modern CSS practice. It goes โ”‚ โ”‚ deep on how css properties function and interact, provide some โ”‚ โ”‚ general design rules and propose solution to a lot of common layout โ”‚ โ”‚ problem in a flexible and reusable way. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค WAVE: Web Accessibility Evaluation Tools โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ A collection of tools to test website accessibility. There browser โ”‚ โ”‚ extension is great and give an instanious and detailed feeback on โ”‚ โ”‚ accessibity isssues on a web page. (Try it here and you wont find any โ”‚ โ”‚ error!) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค The Grug Brained Developer โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ A fun guide on managing complexity in software for all of us small โ”‚ โ”‚ brained developers. Remember: complexity is the enemy; complexity is โ”‚ โ”‚ very, very bad. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค RFC9457: problem details for HTTP APIs โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ There are currently no standard ways for API to communicate there โ”‚ โ”‚ domain specific error where HTTP status is not enough. This RFC hopes โ”‚ โ”‚ to remedy that with a proposed schema for error response. I think โ”‚ โ”‚ it's a good proposal, it give enough feedback and it's flexibility โ”‚ โ”‚ enough to work in most API. The one thing I really like is that it โ”‚ โ”‚ forces you to document your API's specific errors because a link to โ”‚ โ”‚ documentation about the error is included in the schema. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Adminer โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Minimalist, fast, single-file, UI for RDBMS. phpmyadmin but way โ”‚ โ”‚ better. I love there interface, it's very clear and readable. Adminer โ”‚ โ”‚ is simple but also fully featured. It is customizable and extendable โ”‚ โ”‚ throught themes and plugins. It also integrate very well with docker โ”‚ โ”‚ and help access the database for debugging. Overall a very practical โ”‚ โ”‚ tool to have in the toolbox. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Alpines.js โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Make the web simple again! Alpine.js provide DOM reactivity and โ”‚ โ”‚ two-way data binding thought a lightweight framework. It's build on โ”‚ โ”‚ top of the `@vue/reactivity` package, which is it's only dependency, โ”‚ โ”‚ and the whole framework is ~16kb minified and compressed. Alpine.js โ”‚ โ”‚ work very well on it's owm but I think it would be very interesting โ”‚ โ”‚ to see if it synergize well with HTMX for the place where client site โ”‚ โ”‚ reactivity is absolutly needed. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค CSS Bed โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ CSS Bed is a collection of classless CSS theme, it let you test each โ”‚ โ”‚ of them by effortlessly changing the stylesheet of the site. I am a โ”‚ โ”‚ big fan of classless CSS for small and static website (like this โ”‚ โ”‚ one), it reduce unnecessary complexity by not having to think about โ”‚ โ”‚ class at all and only concentrate on semantic HTML. Also modern โ”‚ โ”‚ framework provide CSS isolation wich mean class are not as much of a โ”‚ โ”‚ necessity to avoid colision between components. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค The Moral Character of Cryptographic Work (2015) โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ In reaction to the Snowden's revelation in 2013, Phillip Rogaway โ”‚ โ”‚ started to reconsider his role and social responsibility as a โ”‚ โ”‚ cryptographer. This paper focus on the discipline of cryptography but โ”‚ โ”‚ the first part does an excellent job at explaining why any technician โ”‚ โ”‚ has a social impact, whether that's on purpose or not, and therefore โ”‚ โ”‚ should be conscious of his political responsibility. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Shields.io: concise, consistent, and legible badges โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Most practical badge generator I have used yet. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Voronoi generator โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ This is an online and open-source tool for parametric voronoi โ”‚ โ”‚ generation. Voronoi is a diagram derived from a mathematical equasion โ”‚ โ”‚ that look like cells, there is a lot of applications for it, but I โ”‚ โ”‚ mostly use it for visual design. With the real time editing and SVG โ”‚ โ”‚ export it's really handy for that use case. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค The Rise of Worse is Better by R. P. Gabriel (1991) โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ This article discusses the trade-off between implementation โ”‚ โ”‚ simplicity and interface simplicity and argues in favor of โ”‚ โ”‚ implementation simplicity. Despite being published more than 30 years โ”‚ โ”‚ ago it is still interesting and relevant. If you find it interesting โ”‚ โ”‚ you can also read the counter argument "Worse is Better is Worse" by โ”‚ โ”‚ Nickieben Bourbaki (it's the same author under a pseudonym). โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค HTMX โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ Make the web simple again! HTMX is a framework for building frontend โ”‚ โ”‚ with the hypermedia design philosophy. It's dependency free and โ”‚ โ”‚ weight only ~14k minified and compressed wich is really nice. It's โ”‚ โ”‚ not for every project, for example if you want offline support it's โ”‚ โ”‚ not what you should use, but it can be used in way more applications โ”‚ โ”‚ than people realize, especially CRUDish apps or data exploration โ”‚ โ”‚ apps. โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”ค Dreamberd: the perfect programing language โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ It's perfect, what else is there to say? โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ The bottom of every page is padded so readers can maintain a consistent eyeline You can navigate to /awesome.txt, /blogroll.txt and /rss.xml