7 Aug 2026, 13:20 UTC233 views2 reactionsread 9 August 2026 Копаюсь дальше в профиле Safari 🔬
В процессе написал программку, которая дампает plist в JSON, потому что кое-что у Safari в plists хранится — у Apple ещё со времён Next любовь к property lists. Благо, для Rust есть готовая либа, которая умеет читать и XML-вариант и бинарный. Так что я просто сделал plist->raw_dict->JSON, а дальше с jq развлекался. Ну да это всё цветочки.
Теперь по ягодкам. У Safari в History.db ес…
🤔2
7 Aug 2026, 08:25 UTC801 views5 reactionsread 9 August 2026 Снова порадовался тому, что Safari хранит историю в SQLite, хоть и добраться до файла не так уж и просто из-за огораживания macOS.
У меня отключена очистка истории в настройках браузера, уж и не помню с каких пор. И когда я перключаю настройку в "забывать всё, спустя год", Safari говорит, мол, ты точно хочешь удалить 100000 записей? При этом сам Safari колдобится от такого объёма истории, но продолжает терпеть, раз …
🔥4👍1
31 Jul 2026, 11:03 UTC146 views3 reactionsread 9 August 2026 Вообще всё это мне вернуло слегка те ощущения из времени, когда я писал для себя всякие GUI-надстройки для Windows на Delphi.
Правда, такого уровня удобства "от мысли, до первого запуска" так никто и не достиг с тех пор, только усложнили всё. Я уж молчу про возможность в оффлайне всё делать, имея и всю документацию на руках с ворохом примеров на все случаи жизни.
Нейросетки позволяют превозмочь ступор чистого листа…
❤3
31 Jul 2026, 10:57 UTC126 views1 reactionsread 9 August 2026 И, да, чтобы получиться список окон на текущем мониторе на активном Space, надо потыкать постоянной отгнивающий приватный API, а публичного и стабильного просто нет. При этом Acessibility API простойные, но им тоже как-то наплевать на "текущий десктоп того монитора, на котором сейчас фокус", официально есть только способ перечислить окна, видимые и не только, но ника не поэкраново. В итоге все открытые и не очень реш…
👍1
31 Jul 2026, 10:50 UTC119 views4 reactionsread 9 August 2026 Вчера не смог удержаться, решил написать свою переключалку окон для macOS. Потому что иcкоробочный вариант переключает окошки, лежащие на всех десктопах, мне это неудобно. Да, есть какие-то аналоги, которые в той или иной степени платные или навязчиво просят денег даже в бесплатном режиме. И все какие-то толстые.
А мне не хватает dmenu/rofi. Решил в итоге свою версию сделать. Конечно же решил вайбкодить, поэтому ско…
🔥4
29 Jul 2026, 12:50 UTC109 views7 reactionsread 9 August 2026 Photo
Жёлтые тюльпа-аны
Это не для зву-ука!
Красные тюльпа-аны
Вам не композит!
🔥4🤯2😱1
21 Jul 2026, 08:29 UTC165 views2 reactionsread 9 August 2026 Активно начал умирать второй динамик в макбуке. Прожил на полгода дольше собрата. Точнее, не динамик, а усилитель. Скоро мой ноут будет немым, разве что порт наушниковый звучать продолжит и BT ещё
😱2
1 Jul 2026, 11:52 UTC249 views4 reactionsread 9 August 2026 А ещё можно через TRAMP запускать фрагменты кода из вашего локального Org файла на удалённых машинах и спутывать (tangle) ваши конфиги тоже в удалённые файлы. При этом можно на одной машине выполнить скрипт, результат которого подставить в конфиг, заливаемый на другую машину — простор для вариаций широчайший! Собственно, Literate Ops вокруг этого всего и построен 😎
🔥4
1 Jul 2026, 10:32 UTC229 views11 reactionsread 9 August 2026 Вчера собрал в докере python, uv, LSP сервер (pyrefly, через uv tool install). Запустил контейнер. В Emacs зашёл по пути
/docker:urly-swan/app/foo.py
и открылся файл в контейнере, как будто локальный.
Вызвал eglot— тот запустил и подконнектился к LSP-серверу в контейнере. Сервер увидел сорцы, зависимости и остальное.
Потом я вызвал eshell при активном буфере с файлом в контейнере — и shell открылся тоже внутри ко…
🔥6❤5
13 Jun 2026, 05:40 UTC238 viewsread 9 August 2026 https://unix.foo/posts/it-will-never-be-the-year-of-the-linux-desktop/
The problem is that Linux can make almost anything exist, but it cannot make almost everyone agree to care about it at the same time.
Увы и ах, всё так и есть...
4 Jun 2026, 08:38 UTC282 views2 reactionsread 9 August 2026 >>> from pydantic import BaseModel, BeforeValidator
>>> from typing import Annotated
>>> type CommaSeparated[T] = Annotated[list[T], BeforeValidator(lambda v: v.split(","))]
>>> class Buckets(BaseModel):
... REQUEST_DURATION_BUCKETS: CommaSeparated[float] | None = None
...
>>> import os
>>> Buckets.model_validate(os.environ)
Buckets(REQUEST_DURATION_BUCKETS=None)
>>>
>>> os.environ["REQUEST_DURATION_BUCKETS"] = "…
❤1🔥1
14 May 2026, 09:06 UTC367 views0 reactionsread 9 August 2026 Первый раз наткнулся на то, что объявление в классе метода def list(self, ..) ломает тайпчекинг и код просто падает на вычислении аннотаций. Потому что в области видимости класса теперь list — это дескриптор метода экземпляра. То есть произошло затенение (shadowing), которое почти никак не видно в самом коде, потому что вызывается-то метод через точку! А вот аннотации ломаются, потому что они-то в пространстве имён …
Showing the 12 most recent of 17 posts we hold for @brain_leakage_etc. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.