@lyse@lyse.isobeef.org Oh, huh, maybe it was just my GNOME 2 themes back then that didn’t show the icon. 🤔
I like the looks of your window manager. That’s using Wayland, right?
Oh, no. It’s still X11. All my recent Wayland comments resulted from me trying to switch, but I think it’s still too early. Being unable to use QEMU (because it can’t capture the mouse pointer) is a pretty big blocker for me. This is completely broken, it just happens to be unnoticeable with modern guest OSes, so it’s probably not a priority for devs.
(Not to mention that I would have to fork and substantially extend dwl in order to “replicate” my X11 WM. And then, after having done that, I’d have to follow upstream Wayland development, for which I don’t have the resources. Things would need to slow down before I can do that.)
all that wasted space of the windows not making use of the full screen!!!1
Heh. I’ve been using tiling WMs for ~15 years now, so it’s actually kind of refreshing to see something different for a change. 😅
Probably close to the older Windowses.
That particular theme is a ripoff of OS/2 Warp 3:
😅
We ran some similar brownish color scheme (don’t recall its name) on Win95 or Win98
Oh god. Yeah, I wasn’t a fan of those, either. 🥴
🧮 USERS:1 FEEDS:2 TWTS:1412 ARCHIVED:88575 CACHE:2569 FOLLOWERS:22 FOLLOWING:14
@movq@www.uninformativ.de According to this screenshot, KDE still shows good old application icons:
And GNOME used to have them, too:
I like the looks of your window manager. That’s using Wayland, right? The only thing on this screenshot to critique is all that wasted space of the windows not making use of the full screen!!!1 At least the file browser. 8-)
This drives me nuts when my workmates share their screens. I really don’t get it how people can work like that. You can’t even read the whole line in the IDE or log viewer with all the expanded side bars. And then there’s 200 pixels on the left and another 300 pixels on the right where the desktop wallpaper shows. Gnaa! There’s the other extreme end when somebody shares their ultra wide screen and I just have a “regularish” 16:10 monitor and don’t see shit, because it’s resized way too tiny to fit my width. Good times. :-D
Sorry for going off on a tangent here. :-) Back to your WM: It has the right mix of being subtle and still similar to motif. Probably close to the older Windowses. My memory doesn’t serve me well, but I think they actually got it fairly good in my opinion. Your purple active window title looks killer. It just fits so well. This brown one (
) gives me also classic vibes. Awww. We ran some similar brownish color scheme (don’t recall its name) on Win95 or Win98 for some time on the family computer. I remember other people visting us not liking these colors. :-DHere’s an example of X11/Xlib being old and archaic.
X11 knows the data type “cardinal”. For example, the window property _NET_WM_ICON (which holds image data for icons) is an array of “cardinal”. I am already not really familiar with that word and I’m assuming that it comes from mathematics:
https://en.wikipedia.org/wiki/Cardinal_number
(It could also be a bird, but probably not: https://en.wikipedia.org/wiki/Cardinalidae)
We would probably call this an “integer” today.
EWMH says that icons are arrays of cardinals and that they’re 32-bit numbers:
https://specifications.freedesktop.org/wm-spec/latest-single/#id-1.6.13
So it’s something like 0x11223344 with 0x11 being the alpha channel, 0x22 is red, and so on.
You would assume that, when you retrieve such an array from the X11 server, you’d get an array of uint32_t, right?
Nope.
Xlib is so old, they use char for 8-bit stuff, short int for 16-bit, and long int for 32-bit:
That is congruent with the general C data types, so it does make sense:
https://en.wikipedia.org/wiki/C_data_types
Now the funny thing is, on modern x86_64, the type long int is actually 64 bits wide.
The result is that every pixel in a Pixmap, for example, is twice as large in memory as it would need to be. Just because Xlib uses long int, because uint32_t didn’t exist, yet.
And this is something that I wouldn’t know how to fix without breaking clients.
🧮 USERS:1 FEEDS:2 TWTS:1411 ARCHIVED:88563 CACHE:2558 FOLLOWERS:22 FOLLOWING:14
@lyse@lyse.isobeef.org They are optional dependencies and listed as such:
$ pacman -Qi pinentry
Name : pinentry
Version : 1.3.1-5
Description : Collection of simple PIN or passphrase entry dialogs which
utilize the Assuan protocol
Optional Deps : gcr: GNOME backend [installed]
gtk3: GTK backend [installed]
qt5-x11extras: Qt5 backend [installed]
kwayland5: Qt5 backend
kguiaddons: Qt6 backend
kwindowsystem: Qt6 backend
And it’s probably a good thing that they’re optional. I wouldn’t want to have all that installed all the time.
@lyse@lyse.isobeef.org @kat@yarn.girlonthemoon.xyz I spent so much time in the past figuring out if something is a dict or a list in YAML, for example.
What are the types in this example?
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1
items is a dict containing … a list of two other dicts? Right?
It is quite hard for me to grasp the structure of YAML docs. 😢
The big advantage of YAML (and JSON and TOML) is that it’s much easier to write code for those formats, than it is with XML. json.loads() and you’re done.
Only figured this out yesterday:
pinentry, which is used to safely enter a password on Linux, has several frontends. There’s a GTK one, a Qt one, even an ncurses one, and so on.
GnuPG also uses pinentry. And you can configure your frontend of choice here in gpg-agent.conf.
But what happens when you don’t configure it? What’s the default?
Turns out, pinentry is a shellscript wrapper and it’s not even that long. Here it is in full:
#!/bin/bash
# Run user-defined and site-defined pre-exec hooks.
[[ -r "${XDG_CONFIG_HOME:-$HOME/.config}"/pinentry/preexec ]] && \
. "${XDG_CONFIG_HOME:-$HOME/.config}"/pinentry/preexec
[[ -r /etc/pinentry/preexec ]] && . /etc/pinentry/preexec
# Guess preferred backend based on environment.
backends=(curses tty)
if [[ -n "$DISPLAY" || -n "$WAYLAND_DISPLAY" ]]; then
case "$XDG_CURRENT_DESKTOP" in
KDE|LXQT|LXQt)
backends=(qt qt5 gnome3 gtk curses tty)
;;
*)
backends=(gnome3 gtk qt qt5 curses tty)
;;
esac
fi
for backend in "${backends[@]}"
do
lddout=$(ldd "/usr/bin/pinentry-$backend" 2>/dev/null) || continue
[[ "$lddout" == *'not found'* ]] && continue
exec "/usr/bin/pinentry-$backend" "$@"
done
exit 1
Preexec, okay, then some auto-detection to use a toolkit matching your desktop environment …
… and then it invokes ldd? To find out if all the required libraries are installed for the auto-detected frontend?
Oof. I was sitting here wondering why it would use pinentry-gtk on one machine and pinentry-gnome3 on another, when both machines had the exact same configs. Yeah, but different libraries were installed. One machine was missing gcr, which is needed for pinentry-gnome3, so that machine (and that one alone) spawned pinentry-gtk …
Email Forwarding Broken on iCloud
I have been getting occasional bounces from an iCloud+ Custom Domain email filter I have, which forwards certain emails I receive to wife. The first one I got looked like this:
<wife.email@mydomain.com>: host mx01.mail.icloud.com[17.57.156.30] said: 554 5.7.1
[HM07] Message rejected due to local policy. Please visit
https://support.apple.com/en-us/HT204137 (in reply to end of DATA command)
I sent an email to t … ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1410 ARCHIVED:88550 CACHE:2546 FOLLOWERS:22 FOLLOWING:14
@movq@www.uninformativ.de I fully agree with you on https://www.uninformativ.de/blog/postings/2025-07-22/0/POSTING-en.html!
Although, in the first screenshot, the window title background is much darker in the new version than the old one!1!1 :-P Kidding aside, the contrast in the old one is still better.
Also, note the missing underlines for the Alt hotkeys now. I just think that the underline in the old one is too thick.
🧮 USERS:1 FEEDS:2 TWTS:1409 ARCHIVED:88527 CACHE:2536 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1408 ARCHIVED:88520 CACHE:2530 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1407 ARCHIVED:88509 CACHE:2521 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1406 ARCHIVED:88503 CACHE:2547 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1405 ARCHIVED:88497 CACHE:2550 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1404 ARCHIVED:88485 CACHE:2544 FOLLOWERS:22 FOLLOWING:14
Go at american express today
1 points posted by madflojo ⌘ Read more
MCP 規範完整中譯稿:2025-3-26 版
【引】儘管 AI 可以幫助我們順利地理解 MCP 規範,但一份完整的 MCP 規範中譯稿還是有意義的,可以進一步幫助我們理解 MCP 規範的來龍去脈,以及協議中細節的方方面面。如果希望希望極簡入門的話, 可以閱讀老碼農的新作——1. 規範模型上下文協議 (Model Context Protocol,MCP) 是一個開放的協議,支持 LLM 應用程序與外部數據源和工具之間的無縫集成。無論是構建基於 ⌘ Read more
如何優雅的使用 GORM 進行分頁?
GORM[1] 是 Go 中使用最廣泛的 ORM 包,但儘管如此,它缺少一些 “基本” 功能。其中一個缺失的功能就是分頁(Pagination)。分頁是管理應用程序中大型數據集的一個重要功能。它是一種限制和顯示數據庫中部分總數據的方法,這樣就不需要一次性檢索整個表,這樣可以極大的提高接口性能,降低超時失敗的概率。雖然 GORM 提供了關於如何使用 scopes[2] 進行分頁的文檔,但在靈活性和可 ⌘ Read more
如何優雅的使用 GORM 進行分頁?
GORM[1] 是 Go 中使用最廣泛的 ORM 包,但儘管如此,它缺少一些 “基本” 功能。其中一個缺失的功能就是分頁(Pagination)。分頁是管理應用程序中大型數據集的一個重要功能。它是一種限制和顯示數據庫中部分總數據的方法,這樣就不需要一次性檢索整個表,這樣可以極大的提高接口性能,降低超時失敗的概率。雖然 GORM 提供了關於如何使用 scopes[2] 進行分頁的文檔,但在靈活性和可 ⌘ Read more
多模態 RAG 的關鍵技術
構建一個成熟的多模態 RAG 系統,需要了解一些無縫處理圖像、文本和結構化數據的關鍵技術,包含 CLIP(對比語言 - 圖像預訓練)、多模態提示和工具調用等。1.CLIP 嵌入CLIP 的全稱是 Contrastive Language–Image Pretraining,是 OpenAI 開發的一種模型,爲文本和圖像創建了一個共享的表示空間。核心方法是通過對比學習(Contrastive Lea ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1403 ARCHIVED:88482 CACHE:2542 FOLLOWERS:22 FOLLOWING:14
Langchain 構建一個智能體程序的六步曲
摘要:學習如何構建一個智能體程序 - 從選擇真實的任務示例,到構建 MVP,再到測試質量和安全性,最終部署到生產環境中。Langchain 2025 年 7 月 9 日。1 前言儘管似乎每家公司都在談論今年要構建智能體,但實際上這樣做的公司卻很少。讓想象力奔放地展開,想象智能體如何可以改變你的業務是很容易的,但許多團隊不確定從哪裏開始、如何取得進展以及如何設定期望。在這個指南中,我們將介紹一個從想 ⌘ Read more
Go 無侵入實現讀寫分離
在高併發的現代應用中,數據庫往往成爲系統的瓶頸。讀寫分離作爲一種有效的數據庫優化策略,能夠顯著提升系統的性能和可用性。本文將深入講解讀寫分離的核心概念、實現原理,並通過 go-zero 框架提供詳細的實戰示例。讀寫分離的使用場景和必要性—————-1.1 什麼是讀寫分離讀寫分離是一種數據庫架構模式,它將數據庫操作分爲兩類:• 寫操作:INSERT、UPDATE、DELETE 等 ⌘ Read more
Go 無侵入實現讀寫分離
在高併發的現代應用中,數據庫往往成爲系統的瓶頸。讀寫分離作爲一種有效的數據庫優化策略,能夠顯著提升系統的性能和可用性。本文將深入講解讀寫分離的核心概念、實現原理,並通過 go-zero 框架提供詳細的實戰示例。讀寫分離的使用場景和必要性—————-1.1 什麼是讀寫分離讀寫分離是一種數據庫架構模式,它將數據庫操作分爲兩類:• 寫操作:INSERT、UPDATE、DELETE 等 ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1402 ARCHIVED:88477 CACHE:2562 FOLLOWERS:22 FOLLOWING:14
基於 Dify 的 RAG 知識庫搭建
Dify 是一款開源的大模型應用開發平臺,旨在幫助開發者快速構建生產級生成式 AI 應用。在 Dify 本地化部署中,知識庫功能是實現企業級 AI 應用的核心能力。本文介紹基於版本 1.5.1 搭建知識庫全流程解析,包括以下內容:Dify 基本概念Dify 本地部署基於 Dify 的知識庫搭建一、Dify 基本概念Dify 是一款開源的大模型應用開發平臺,旨在幫助開發者快速構建生產級生成式 AI ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1401 ARCHIVED:88472 CACHE:2558 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1400 ARCHIVED:88470 CACHE:2557 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1399 ARCHIVED:88461 CACHE:2553 FOLLOWERS:22 FOLLOWING:14
The WM_CLASS Property is used on X11 to assign rules to certain windows, e.g. “this is a GIMP window, it should appear on workspace number 16.” It consists of two fields, name and class.
Wayland (or rather, the XDG shell protocol – core Wayland knows nothing about this) only has a single field called app_id.
When you run X11 programs under Wayland, you use XWayland, which is baked into most compositors. Then you have to deal with all three fields.
Some compositors map name to app_id, others map class to app_id, and even others directly expose the original name and class.
Apparently, there is no consensus.
Spare a thought for this gopher gopher://sdf.org/1/users/xiled/phlog/2025/20250710_occupied
一文帶你讀懂 Google LangGraph 項目,快速入門 AI Agent 全棧開發
一、項目背景與目標———最近在帶着同事一起做智能 Agent 相關的內部項目,發現很多人對 LangGraph 非常感興趣,但又不太清楚如何從零開始搭建一個完整的 AI Agent,我於是在 github 上找,看看有沒有好的開源項目給他們學習,偶然間發現了 google-gemini 開源的這個項目 [1],正好拿來給他們講講,學習學習。發現整理的材料又正好可以出一期公衆號文章,就作 ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1398 ARCHIVED:88454 CACHE:2548 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1397 ARCHIVED:88446 CACHE:2562 FOLLOWERS:22 FOLLOWING:14
從被噴 “假開源” 到登頂 GitHub 熱榜,RustFS 開源項目上演王者歸來!
故事的序幕,在 2024 年 1 月的 GitHub 上悄然拉開。當時,一個名爲 RustFS 的開源項目橫空出世,號稱要做一個基於 Rust 的企業級分佈式存儲系統,旨在成爲 MinIO 的一個開源替代品。這個口號直接把大家吊成了 “翹嘴”,但左等右等,結果一年了還只有一份 README 文件,就是不見源碼。一時間,開源社區質疑聲四起:“假開源”、“PPT 開源”、“光說不練”。面對壓力,Rus ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1396 ARCHIVED:88443 CACHE:2565 FOLLOWERS:22 FOLLOWING:14
@movq@www.uninformativ.de Yeah, it’s a shitshow. MS overconfirms all my prejudices constantly.
Ignoring e-mail after lunch works great, though. :-)
Our timetracking is offline for over a week because of reasons. The responsible bunglers are falling by the skin of their teeth: ![]()
- The error message neither includes the timeframe nor a link to an announcement article.
- The HTML page needs to download JS in order to display the fucking error message.
- Proper HTTP status codes are clearly only for big losers.
- Despite being down, heaps of resources are still fetched.
I find it really fascinating how one can screw up on so many levels. This is developed inhouse, I’m just so glad that we’re not a software engineering company. Oh wait. How embarrassing.
🧮 USERS:1 FEEDS:2 TWTS:1395 ARCHIVED:88418 CACHE:2541 FOLLOWERS:22 FOLLOWING:14
The Linux installation on my main PC turned 14 today:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Hiring: Senior Backend Engineer | Remote | A new challenge awaits!
Supported Countries:
- India
- Philippines
- Singapore
- Argentina
- Brazil
- UK
- Ireland
- USA
- Canada
1 points posted by Fabio Chapola ⌘ Read more
golang 反射 new?
今天來聊一個在 Golang 裏新手容易踩坑但高級用法又很關鍵的點:反射 + reflect.New。看上去很底層,實際在做框架開發、泛型模擬、動態構造對象的時候,全靠它撐場子!我前段時間折騰一個插件系統(Go 寫的),要從字符串配置動態構造 struct 對象實例,就必須用 reflect.New。這塊調試了好一陣,今天把經驗和注意事項總結一下,走一波實戰向的乾貨分享。1)reflect.New ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1394 ARCHIVED:88409 CACHE:2543 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1393 ARCHIVED:88408 CACHE:2543 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1392 ARCHIVED:88401 CACHE:2539 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1391 ARCHIVED:88396 CACHE:2535 FOLLOWERS:22 FOLLOWING:14
🧮 USERS:1 FEEDS:2 TWTS:1390 ARCHIVED:87839 CACHE:2584 FOLLOWERS:22 FOLLOWING:14
Fsets a useful pattern for testing
1 points posted by John Doak ⌘ Read more
🧮 USERS:1 FEEDS:2 TWTS:1389 ARCHIVED:87827 CACHE:2584 FOLLOWERS:22 FOLLOWING:14