macos
«Тайм-капсула»: что получилось
После вчерашних манипуляций
Меня это не особо устроило, я подумал, что наверняка есть способ ускориться — например, серверную часть для поддержки протокола SMB мы собирали довольно древним компилятором — gcc седьмой версии, если мне не изменяет память. Я подумал, что более свежий компилятор может помочь — в них всё время добавляют
Поскольку платформа уже довольно старая, самый свежий компилятор мы брать не стали, взяли двенадцатую версию. По уверению нейросети
В итоге довольно много времени было потрачено на то, чтобы подобрать подходящие ключи компиляции — процессор
По итогу наибольшее ускорение дал не компилятор, а настройка сети, но кроме мы этого сделал ещё несколько вещей.
В итоге скорость выросла с 7—8 мегабит до 12—14.
Для ноутбука жены резервная копия уже создалась, сейчас создаётся для моего ноутбука. Сколько это займёт, сказать трудно — на скриншоте расчёт скорости только завершился, обычно в самом начале он очень сильно врёт.
«Тайм-капсула» и современные «Маки»
В комментариях в телеграмном канале к заметке о проблемах создания резервной копии на сетевом хранилище один из читателей рассказал, что это известный баг взаимодействия моего сетевого накопителя и «Мака» — резервные копии пишутся, пока не забьют всё место.
Там же посоветовали способ оживить
Хорошо, что у нас есть нейросети — я рассказал, что хочу, дал ссылку на репозиторий и только попросил проанализировать выложенный там запускаемый файл. И не зря! Внутри оказался код, отсутствующий в исходниках, который скачивает
Выяснять, что там такое и какие ещё закладки есть в этом файле, я не стал, а решил поручить нейросети поискать закладки в исходном коде и, если их там нет, собрать запускаемый файл самостоятельно.
Нейросетка довольно долго мне всё настраивала и компилировала, но в итоге собрала требуемую версию, активировала внутри
К сожалению, скорость оказалась отвратительной — четыре дня на бакап моего ноутбука. Я попросил нейросетку
Она посмотрела загрузку процессора (там внутри одноядерный Cortex‑A9) и предположила, что он не справляется с шифрованием канала. После того как мы отключили шифрование —
Завтра посмотрю всё ли успешно и посмотрим нельзя ли ещё ускорить,
Ошмётки в консоли
Как известно, много лет назад «Эпл» перешла с процессоров «Интел» на собственные, основанные на архитектуре «АРМ». Процессоры несовместимы, однако бинарные программы, скомпилированные под «Интел», продолжают работать — в «МакОС» встроен специальный транслятор, который обеспечивает такую возможность.
Много лет я таскаю с собой различные утилиты, которые при переходе с одного «Макбука» на другой автоматически копируются при помощи встроенной в ОС процедуры миграции. Однако некоторое время назад я занялся тем, что с помощью brew перевёл всё это бинарное хозяйство на «АРМ».
По пути у меня
Я всю голову сломал, пытаясь понять что же произошло, даже переставил себе iTerm2, думал дело в нём, но не помогло. Подумал, что может у меня
Тут я
Оказывается библиотека readline, отвечающая за редактирование текста в командной строке, неправильно считает длину строки, если в ней есть управляющие символы, — например, задающие цвет. Чтобы всё работало как надо, их надо обрамлять специальными последовательностями \[ и \]. Если я
В общем, я заменил приглашение с
PS1='\e[33;1m\u: \e[31m\W$(__git_ps1)\e[0m \$ 'на
PS1='\[\e[33;1m\]\u:\[\e[0m\] \[\e[31m\]\W$(__git_ps1)\[\e[0m\] \$ 'и всё заработало как надо.
«Телеграм Макс»
Хотите поменять иконку стремительно становящегося нам чужим «Телеграма» на иконку доморощенного «Макса»? Под «МакОСью» это сделать проще простого.
Всего несколько шагов:
- если у вас в настройках «Телеграма» выбрана нестандартная иконка, идём в настройки («⌘+,»), меняем на стандартную;
- заходим в папку, где у нас лежит «Телеграм» («⌘+клик» на иконке приложения);
- открываем «Свойства» («⌘+I») этого приложения;
- скачиваем мессенджер «Макс», запускаем инсталлятор;
- прямо из инсталлятора иконку «Макса» тянем в левый верхний угол свойств приложения «Телеграм», туда, где иконка;
- в программе Finder нажимаем кнопку «извлечь» («⏏») около надписи «MAX» в левом меню, сам файл удаляем, он нам больше не понадобится.
Всё, у «Телеграма» теперь максовская иконка.
Brew: x86 → ARM
На «Маке» есть такая штука как «брю» (brew), позволяющая без усилий ставить различные утилиты командной строки. Я ей давно и часто пользуюсь, потому что командная строка меня не пугает, а в некоторых сценариях это самый простой и быстрый способ
Несколько лет назад «Эпл» сменила процессоры Интела в своих устройствах на чипы собственной разработки, основанные на архитектуре ARM. Эта архитектура бинарна не совместима с процессами Интела и, чтобы все программы программы остались работоспособными, в состав операционной системы включили специальный транслятор. Он на лету преобразовывает машинный код. О чего, конечно, страдает производительность.
Мой набор утилит, поставленный через «брю», несмотря на то, что у меня новый процессор, остался ещё с интелловских времён. Некоторым утилитам там, думаю, больше десятка лет. Я
А тут краем глаза
Начал с очень известной утилиты ffmpeg, которую я использую, чтобы конвертировать видео. В последнее время чаще всего — чтобы сконвертировать скаченное с «Ютуба» для дочки. Стараюсь ей подкидывать
Разница между утилитой, выполняющейся через транслятор, и нативным вариантом на скриншоте. Сконвертировал одно и то же видео два раза. Скорость конвертации — 23 кадра в секунду против 48. Очень серьёзная разница, как мне кажется.
«Пасхальное яйцо» в Power Mac G3
Мне очень нравится, что раньше во многих серьёзных программных продуктах были так называемые «пасхальные яйца» или «пасхалки» — скрытые разработчиками функции,
Сейчас они редко попадаются,
В ранних компьютерах «Эпл» их было навалом, пока Стив Джобс не запретил их, вернувшись в компанию в 1997 году.
Наткнулся на свежую статью по этому поводу — две недели назад стало понятно как вызвать одно из «пасхальных яиц». Было известно, что оно присутствует в компьютерах Power Mac G3, но не было понятно как заставить его появиться на экране.
Там человек прям глубоко копнул, даже код, который отвечает за вызов «пасхалки», нашёл и изучил.
Увидеть «пасхальное яйцо» можно в эмуляторе. Для этого надо проделать следующее:
- Разрешить использование «RAM Disk» в разделе «Memory» контрольной панели;
- Выбрать «Restart» в «Special menu»;
- После перезагрузки кликнуть на иконку «RAM Disk»;
- Выбрать «Erase Disk» в «Special menu»
- Напечатать «secret ROM image» в текстовом поле «Name»;
- Кликнуть на кнопку «Erase»;
- Кликнуть на иконку «secret ROM image».
Откроется папка с иконкой «The Team». При клике разворачивается фотография членов команды, которая работала над всеми продуктами линейки G3.
В центре второго ряда — их руководитель, Билл Саперштейн. В комментариях к статье он написал, что члены его команды, конечно, знали про «пасхалку», но держали её в секрете.
Принтер, MacOS и IPv6 часть вторая
К сожалению, ни отключение IPv6, ни фиксирование адреса IPv4 (ещё одна мера, которую я попробовал) не излечили полностью проблемы с принтером. Но в процессе копания в настройках, я обратил внимание, что у него очень старая прошивка — 2012 года. Подумал, может обновление решит проблему?
На сайте последняя прошивка датируется началом
Вообще это очень странно — выпускать для принтера каждой линейки свою программу для обновления прошивки, да ещё и для каждой операционной системы отдельно. Загадка для меня, почему нельзя писать более универсально — программу, которая обнаруживает подключенную модель принтера, проверяет устарела ли прошивка, качает её (или указывает где её взять), после чего обновляет.
В общем, поскольку под «МакОС» программа не работает, пришлось обновлять прошивку через «Виндоуз», благо у меня уже развёрнута виртуалка с Windows XP, которую я использую, чтобы переписывать фотографии, сделанные винтажными часами «Касио».
Поставил туда драйвер от принтера и программу для обновления прошивки.
Теперь остаётся наблюдать — решилась ли проблема.
Принтер, MacOS и IPv6
Я выключил IPv6 на принтере, но позже оказалось, что полностью проблема не решилась
Я вообще привык, что в МакОСи постоянно
Вчера решил зайти в его
Похоже в ней и было дело. После этого, как я выключил этот протокол, принтер стал работать без нареканий.
Cначала запустил из командной строки сканирование сети:
$ dns-sd -B _printer._tcp
Browsing for _printer._tcp
DATE: ---Mon 28 Apr 2025---
21:09:21.373 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
21:09:21.374 Add 2 14 local. _printer._tcp. HP LaserJet Professional P1102wПотом запросил информацию о найденном принтере:
$ dns-sd -L "HP LaserJet Professional P1102w" _printer._tcp local.
Lookup HP LaserJet Professional P1102w._printer._tcp.local.
DATE: ---Mon 28 Apr 2025---
21:09:59.306 ...STARTING...
21:09:59.306 HP\032LaserJet\032Professional\032P1102w._printer._tcp.local. can be reached at NPI78BD4A.local.:515 (interface 14)
txtvers=1 qtotal=1 rp=auto pdl=application/vnd.zeno-zjs,application/vnd.cups-raster ty=HP\ LaserJet\ Professional\ P1102w product=\(Hewlett-Packard\ HP\ LaserJet\ Professional\ P1102w\) priority=50 adminurl=http://192.168.0.127 usb_MFG=Hewlett-Packard usb_MDL=HP\ LaserJet\ Professional\ P1102w Transparent=T Binary=TАдрес, на который надо зайти браузером, находится после подстроки adminurl=.
«Офис» под «Мак»
Ну почему микрософтский «Офис» на «Маке» всегда ведёт себя, как слон в посудной лавке? Ситуация с годами, конечно, меняется к лучшему,
Жирный минус в том, что она всё время запускает
Медиатека Фото.photoslibrary
Файл, имя которого я вывел в заголовок, выводил меня из себя несколько месяцев. Не помню точно как и почему он появился у меня в корзине моего Макбука, но удалить его окончательно было невозможно. Стоило очистить корзину, как он появлялся сам собой через некоторое время.
Возможно это странно, но я терпеть не могу, когда в корзине у меня
В общем, я никак не мог избавиться от этого файла, а интернет молчал. Мне удалось найти пару сообщений о том, что проблема проявляется не только у меня, но лекарства нигде не было.
В итоге, вчера я решил проблему. Догадался совершенно случайно — я возился с настройками «АйКлауда» (это эпловское облачное хранилище), случайно перешёл оттуда во встроенное приложение «Фото», которым я не пользуюсь, и увидел, что оно не может найти свою базу изображений.
Тут картинка сложилась.«Медиатека Фото.photoslibrary», видимо, и есть эта искомая база. Похоже я
Решил проблему просто — перетащил файл из корзины в папку «Фотографии» и проблема ушла.
Замена цифр
Придумал тут штуку интересную. Как у я уже писал ранее, полюбилось мне
Сначала я сделал достаточно просто, — отредактировал раскладку, которой я пользуюсь. Мне не нравилось это решение, так как пришлось выкинуть из неё
А сегодня мне пришло в голову решение лучше — попробовать обойтись функцией «Замены текста», которая встроена в «МакОСь». Мысль простая — заменять двоеточие и две цифры на то же самое, но без двоеточия и в верхнем индексе. Сначала я пытался набрать всё нужное руками, а потом случайно нашёл функцию импорта.
Формат для импорта оказался довольно простым. После того как я в нём разобрался, накидал небольшую программу на «Пайтоне», которая мне за мгновение сформировала нужный файл.
print("""
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>""")
trans = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹")
for i in range(0, 60):
print(f"""
<dict>
<key>phrase</key>
<string>{f"{i:02d}".translate(trans)}</string>
<key>shortcut</key>
<string>:{i:02d}</string>
</dict>""")
print("</array></plist>")Чтобы его импортировать, нужно перейти в «Системные настройки…», оттуда в «Клавитуру», там нажать на кнопку «Замены текста…» и перетащить на открывшийся список получившийся файл.
После этого можно проверить что получилось, — если написать в любом месте «13:00», оно должно само преобразоваться в «13⁰⁰».
Слеш в имени файлов «МакОСи»
Принято считать, что в мире «Эпла» легко избавляются от наследия, невзирая на несовместимость программ или оборудования. В большой степени так оно и есть, но иногда можно наткнуться на очень странные штуки, которые до сих пор используются:
Another obvious problem is the different path separators between HFS+ (colon, ’:’) and UFS (slash, ’/’). This also means that HFS+ file names may contain the slash character and not colons, while the opposite is true for UFS file names. This was easy to address, though it involves transforming strings back and forth.
The HFS+ implementation in the kernel’s VFS layer converts colon to slash and vice versa when reading from and writing
to the on-disk format. So on disk the separator is a colon, but at the VFS layer (and therefore anything above it and the kernel, such as libc) it’s a slash. However, the traditional Mac OS toolkits expect colons, so above the BSD layer, the core Carbon toolkit does yet another translation. The result is that Carbon applications see colons, and everyone else sees slashes. This can createa user-visible schizophrenia in the rare cases of file names containing colon characters, which appear to Carbon applications as slash characters, but to BSD programs and Cocoa applications as colons.
На скриншоте видно как это выглядит в жизни: в командной строке создаём папку с двоеточием в имени, в Файндере в этом месте — слеш. В цитате такое поведение метко названо «шизофренией».
RAM-диск под macOS
Век живи, век учись, дураком помрёшь.
Понадобилось срочно посмотреть как создать зашифрованный раздел на внешнем диске в «МакОСи» — нужно было помочь другу разобраться. У меня нашёлся и внешний диск, и несколько флешек, но, как назло, не оказалось переходника, чтобы подключить их к разъёму моего ноутбука.
Подумал — нельзя создать диск в памяти (RAM-диск), чтобы попробовать шифрование на нём? Оказалось, можно, делается из командной строки:
diskutil erasevolume APFS 'RAM Disk' `hdiutil attach -nobrowse -nomount ram://XXXXX`XXXXX тут — размер будущего диска
Бик Зур
Поставил на ноутбук себе неделю назад «Биг Сур», свежайшую версию «МакОСи». В Татарстане её тут же окрестили «Бикзуром» («бик зур» с татарского — «очень большой», «огромный»). В целом, я очень доволен, люблю обновления, даже не очень стабильные, редкий раз могу обновиться даже и на «бету», так как пользоваться
Собственно, чувство у меня такое, что именно на «бету» я и обновился — ошибки видны невооружённым взглядом.
Первый баг нашёлся уже на экране логина. Разблокировка отпечатком пальца работает всего несколько секунд после открытия крышки, дальше только паролем. Может это
Что точно не фича — проблемы с отрисовкой приложений. В браузере (я пользуюсь «Оперой») иногда при переключении на неактивную вкладку видно лишь пустое окно или вот в программе для видеоконференций «Зум» из интерфейса пропали некоторые кнопки.
Вообще «МакОСь» славится своей нестабильностью первых мажорных версий, большинство моих знакомых предпочитает дождать
WiFi и Macbook
Ещё перед «самоизоляцией» я подготовился — купил новый роутер, чтобы улучшить дома ситуацию с вайфайными сетями. До этого была эпловская «Тайм Капсула» и она уже не справлялась — с трудом пробивалась через зашумлённый соседями эфир и толстые стены, да и количество подключенных устройств уже превысило её возможности — одних только гаджетов «умного дома» у нас больше 30.
Первое время сеть работала действительно получше или я себя в этом убедил —
У МакОСи есть неприятный недостаток — при подключении к вайфаю, она смотрит текущую страну через устаревший протокол 802.11d и, в зависимости от того какую страну она увидит на первом попавшемся роутере (возможно соседском), принимается решение какие каналы вайфая должны ловится, а какие нет.
Мои соседи светят в эфир кодами России, Великобритании, Китая и Германии. В этой «русской рулетке» то везло, то нет, и видимо чаще попадались «неудачные» коды, потому что ноутбуки цеплялись к перегруженной сети 2,4, вместо почти пустой пятигигагерцовой, которую они временами вообще не видели.
На эту тему много и подробно написано в интернете, поэтому я рисую проблему лишь общими мазками.
Чаще всего предлагаются три решения разной степени выполнимости — либо выставить на своём роутере нужный код страны, повесить его на канал №1 и молиться, чтобы он находился первым, либо договориться с соседями и дружно установить всем один и тот же требуемый код, либо пропатчить операционную систему (последнее надо делать регулярно при каждом обновлении).
Это решение чудесным образом лечит все проблемы, нужно только установить в «системных настройках», в списке предпочтительных сетей пятигигагерцовую сетку первой или вообще не подключаться к сети 2,4 ГГц.
Картинка в терминале
Несколько лет назад программа «айТерм2» (iTerm2, терминал для «Мака») обзавелась поддержкой графики в командной строке. Сильной необходимости в ней нет, но иногда это удобно — можно посмотреть картинку на удалённом сервере, не выкачивая её себе.
Вообще уже очень давно существует формат «Сиксел», рождённый в незапамятные времена компанией «ДЭК» (DEC), его даже поддерживают некоторые терминалы, но он значительно сложнее придуманного авторами «айТерма2».
Я это знаю, так как
В общем виде тот и другой форматы представляют собой управляющие последовательности, после которых передаётся закодированная картинка.
Мне тут подумалось, что было бы интересно попробовать вставить внутрь настоящей картинки её закодированную копию, чтобы при попытке вывода её в консоль в виде текста, в терминал попадали управляющие коды и на экран выводился не бинарный мусор, а картинка.
Для этого я нарисовал небольшой ГИФ и вставил закодированную картинку после изображения следующей командой:
cat test.gif \
<(echo -ne "\033[3F\033[J\033]1337;File=inline=1:") \
<(base64 test.gif) \
<(printf "\a")\
> test2.gifЕстественно, так как бинарный код изображения идёт первым, при выводе на экран его так же будет видно, поэтому я добавил другие управляющие конструкции (большинство терминалов их поддерживают), возвращающие курсор на место и вычищающие бинарщину.
В данном случае я сначала двигаю курсор на три строки вверх (столько занимает бинарный мусор на экране), потом произвожу очистку от курсора до конца экрана.
Теперь буду пугать наших системных администраторов картинкой, которую видно сразу и в терминале, при выводе командой cat, и в графическом интерфейсе.
Общение через AirDrop
Прочитал за завтраком
Причины популярности «ЭйрДропа» в этом качестве — отсутствие цензуры, быстрое общение с теми, кто рядом, способ безнаказанно вторгнуться в личное пространство незнакомого человека и прочие бесценные для многих подростков возможности.
Это всё здорово напоминает «Блючалкинг», я о нём писал 15 лет назад. Тогда «ЭйрДропа» не было, но блютуз уже существовал. Правда телефоны тех времён
Со временем появились специальные программы, эксплуатировавшие этот способ, причём лучшие из них умели даже создавать меши (ячеистые сети). Всё это было довольно остроумно, но конечно весь этот эрзац довольно быстро загнулся.
sudo по отпечатку пальца ★
На «Маке» я нередко использую командную строку — некоторые мои задачи через неё выполнять проще, чем через графический интерфейс. Как правило для этого используется непривилегированный пользователь, но иногда приходится
Обычно она запрашивает специальный пароль, чтобы убедиться, что тот, кто её запускает, действительно имеет право повысить полномочия.
И вот сегодня один из сотрудников спросил — работает ли у меня на «Маке» sudo по отпечатку пальца.
/etc/pam.d/sudo
первой строкой добавить
auth sufficient pam_tid.so
И всё, при следующем запуске sudo можно просто приложить палец к сканеру. Экономит уйму времени, спасает от опечаток, никто не сможет подсмотреть пароль.
Проблема с обновлением «МакОСи»
Переезжал вчера на новый ноутбук — моей «прошке» уже более четырёх лет, протёрлись две клавиши,
Выбрал «прошку» этого года, привёз домой и приступил к переносу данных со старого ноута на новый. На «Маках» это просто — есть ассистент миграции. Одна подробность — версии операционной системы должны совпадать, а у меня различаются — на прежнем «маке» новее.
Попробовал обновить как обычно — через «магазин», не получается, останавливается на трёх сотнях мегабайтах и дальше никак. Потом попробовал скачать с сайта программу для обновления — не качается, скорость очень низкая, потом вообще обрывается. Единственное, что получилось — выкачать необходимое на забугорный сервер и уже с него перекачать домой. Думаю «Роскомнадзор» опять
Но на этом приключения не закончились. Оказалось трёхгиговая программа для обновления хочет
Хорошо приятель (спасибо, Рим!) выручил, дал пароль от своего безлимитного «випиэна», после этого меня ждал успех. До часу ночи суммарно провозился.
Скриптование меню в статус-баре
В «Маке» очень нехватает одной вещи — лёгкого создания собственных меню
Если кому интересно, то последовательность его прикручивания к системе примерно такова (bolk — моё имя пользователя и требуется установленный brew):
mkdir -p /usr/local/Cellar/ScriptableStatusBar/0.1/bin/
mv ~/Downloads/ScriptableStatusBar-release/usr/local/bin/sbar !:2
mv ~/Downloads/ScriptableStatusBar-release/Applications/
/usr/local/Cellar/ScriptableStatusBar/0.1
brew link ScriptableStatusBar
open /usr/local/Cellar/ScriptableStatusBar/0.1/Applications/
# Тут надо утянуть открывшееся приложение в «Объекты входа»
# и ещё запустить его в открывшемся окне, разрешив ему в принципе запускатьсяОчень неудобно и несколько недоделано. Хотелось бы, чтобы из шелла можно было добавить/удалить пункт меню и сменить иконку. Сейчас это тоже можно, но полной переинициализацией и, кроме того, убъёшься всё экранировать.
Вооружившись несложной инструкцией, делаем несколько магических пассов:
cat>~/lockkeyboard.sh<<LOCK
#!/bin/ksh
kext=/System/Library/Extensions/AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext/
case "$1" in
unlock )
/sbin/kextload "$kext"
;;
lock )
/sbin/kextunload "$kext"
;;
esac
LOCK
sudo chown root:staff ~/lockkeyboard.sh
sudo chmod 750 ~/lockkeyboard.sh
sudo cp /dev/stdin /private/etc/sudoers.d/lockkeyboard<<SUDO
bolk ALL= NOPASSWD: /Users/bolk/lockkeyboard.sh
SUDO
sbar set locker ?\
'Lock:/usr/bin/sudo /Users/bolk/lockkeyboard.sh lock'\
'Unlock:/usr/bin/sudo /Users/bolk/lockkeyboard.sh unlock'\
'Quit:/usr/local/bin/sbar remove locker'И получаем малофункциональную такую менюшечку для блокировки клавиатуры (кстати и увы, если компьютер с заблокированной клавиатурой, у вас уйдёт в блокировку
В принципе можно даже сэмулировать защёлкивание замка и смену пунктов меню «Lock» на «Unlock» и обратно (для этого нужно просто пересоздавать меню после каждой из этих команд с другими пунктами и другим замочком), но это ещё полэкрана костылей, которые мне совсем не хочется на вас вываливать.
Кстати, пункты в меню добавляются в произвольном порядке — программе совершенно плевать в каком порядке вы их задали в параметрах.