Блог Ходакова

Мнение автора может не совпадать с мнением его кошки.

Apple Watch Series 4

Внимание: в этой заметке есть мат. Я предупредил. Если вы не хотите читать матерный текст, вот вам нарисованный тигр на одной из улиц Самары — полюбуйтесь и идите дальше :)

На прошедшей в сентябре презентации айфоны со второго, третьего и четвёртого взгляда кажутся необязательными апгрейдами, если у тебя уже есть хоть какой-то плюс-минус современный айфон. А вот вышедшие Apple Watch Series 4 — совершенно другая история. Это был первый раз в моей жизни, когда я делал предзаказ какой-то техники (причём у официалов — у условной «Горбушки» часы даже спустя месяц стоят столько же, если не дороже, да и Горбушка находится немного далековато от моего месторасположения, а официалы привезли коробку домой).

Устройство, конечно, нарасхват: к 15-й минуте предзаказов, на которую успел я, дату доставки уже сместили с пятницы 28 сентября на понедельник 1 октября. Принимал устройство я с температурой 39 (мне так «повезло» из-за удалённого накануне зуба), и поэтому 1-е октября — единственный день, в который я не закрыл кружочки. Обидно -_-

Это не первые в моей жизни умные часы — до этого у меня в течение года были Moto 360 второго поколения, которые я перед отъездом из Смоленска подарил другу, так как параллельно с отъездом я окончательно свалил на iPhone, а у него был Android, к которому эти часы отлично подходили. После этого я почти два года считал часы приблудой полезной, но необязательной, думал о покупке Apple Watch, но каждый раз останавливался на мысли «а вдруг я ещё вернусь на Android» или «блин, не сейчас, может, следующая версия будет лучше?». К моменту начала продаж Apple Watch Series 4 я твёрдо осознал, что слезть с «иглы Apple» у меня уже не получится (по крайней мере, пока недовольство от экосистемы не перевесит тяжесть «побега» из неё), и новые «умные» часы будут отличным дополнением к моему текущему парку яблочных устройств.

Короче: они охуенны. И вот почему:

  • Они действительно красивые. Меня подбивали брать розовую версию (я люблю розовый цвет), но я таки взял более приличные для современного мужика в России чёрные часы с чёрным ремешком — и это цветовое решение отлично сочетается с любой одеждой.
  • Они быстрые. Говорят, предыдущие версии Apple Watch любят подтормаживать, например, при открытии приложений. Я с лагами не сталкивался вообще ни разу. По сравнению с Moto 360, которые были у меня, они летают (ещё бы — там система на чипе по мощности равна iPhone 6!).
  • Они незаметные. Когда я носил Moto 360, периодически я снимал их и перекидывал на другую руку — они мешались, кожа под ними начинала краснеть; неприятные, в общем, ощущения. Apple Watch незаметны — а для такого гаджета, который ты носишь на себе постоянно (включая время сна — да, я из тех странненьких людей, что трекают сон) это, пожалуй, самое важное свойство.
  • Они заставляют двигаться! Ёбаные блядь кружочки! Периодически часы ещё и подсказывают «пришла пора размяться» — причём, в отличие от самсунгов, они ни разу не сделали такую подсказку во время сна. Ачивки в «Активности» — очень мотивируют. Правда, что я буду делать, когда набью 1000 дней активности, мне непонятно. Видимо, буду набивать бесконечную ачивку до конца дней своих.
  • Apple Pay. Теперь я расплачиваюсь в киоске с печеньем с помощью часов. Это, кстати, ни у кого уже не вызывает удивления — долгие годы привыкания к бесконтактной оплате не прошли даром.
  • Циферблааааааааат!

Сейчас меня отпинают и назовут карго-культистом («нафига стрелки в электронных часах?»), но на самом деле это очень красивое, и очень понятное мне расположение элементов интерфейса. Да, часы дублируются цифровым повтором — мне показалось это лучшим вариантом, чем оставлять верхний «компликейшен» пустым (а другие варианты заполнения информацией мне не понравились).

Есть у Apple Watch и минусы, конечно:

  • Мне их хватает на два дня ровно. Это с тренировками, постоянным трекингом пульса, трекингом сна, уведомлениями и периодическим подсматриванием на время. Хотелось бы побольше, конечно.
  • Они действительно привлекают внимание: мой стоматолог два визита подряд интересуется, где бы такие часы взять б/у проверенные (ответ — «пока нигде, лол»). Для него отдавать 33 тысячи за часы, видимо, дорого.
  • Они дорогие, да. Средняя зарплата в моём городе чуть больше их стоимости.
  • Приложения — баловство. У меня установлено всего два: AutoSleep (трекер сна) и HeartWatch (статистика о пульсе, более подробная, чем у встроенного приложения). Большая часть задач, которые могут быть возложены на умные часы, решаются встроенной функциональностью.
  • Siri — тупая шмара. Что-то большее, чем «поставь таймер на Х минут» ей доверять бессмысленно: не поймёт.

Доволен ли я? Как слон. Это, пока что, вторая позиция в рейтинге «самые лучшие покупки 2018 года» у меня. Про первую строчку этого рейтинга я расскажу в отдельной заметке — там тоже интересно :) Я теперь прекрасно понимаю, почему рынок умных часов ушёл в то же состояние, что и рынок планшетов — есть вариант от Apple, а другие варианты никому не нужны. И да, эти часы — это железная цепь, которой я накрепко привязан к экосистеме: пока я хочу ими пользоваться, мне всегда будет нужен iPhone. Но я мазохист. Я доволен этой цепью. Я приковал себя к экосистеме сам — и пока не вижу на горизонте ничего, что могло бы сдвинуть меня с этой точки.

30 октября   Apple

Айфон за сотку

Боооольно.

На самом деле, вполне себе ожидаемая херня. Но психологически выкладывать 130 тысяч рублей за айфон до сих пор тяжело. Рынок потребительского кредитования после 28 сентября вырастет вдвое.

Самое для меня непонятное — а в чём, собственно, разница между iPhone XR и iPhone XS? Если вся разница — AMOLED/IPS и одна камера вместо двух, я очень сильно подумаю, стоит ли мне целиться в топовый XS, или вместо него купить два топовых XR.

(В XR ещё нет 3D Touch, но его нет и на iPad, например — так ли он нужен?)

Новые Apple Watch — бомба, маст хэв и вообще. Даже ярого яблоненавистника Стаса фича с автовызовом скорой при падении и ЭКГ покорила до стадии «куплю маме». Ну а мне понравился обновлённый дизайн и то, что теперь digital crown будет с таптик-откликом.

Вот тут можно почитать разные параметры, и выяснить, стоит ли XS своих денег. Для меня это открытый вопрос. Одно я знаю точно — семёрке моей пора на покой, и один из новых айфонов у меня будет. А вот какой — чёрт его знает…

А ещё двухсимочных айфонов не будет в России. Печаль.

12 сентября   Apple   Оффтоп

HTML-подпись в Mail.app

Для некоторых целей ;-) мне понадобилось настроить в стандартном почтовике macOS подпись в формате HTML для сообщений. Как оказалось, вставка такой подписи для работы в Mail.app является нетривиальной задачей.

Для начала, следует понимать, что все подписи в Mail.app находятся в HTML-формате, но по каким-то причинам Apple не даёт возможность через интерфейс почтовика скопипастить внутрь WYSIWYG или HTML-код подписи. Для того, чтобы получить нужную подпись, необходимо сделать следующее:

  1. Создать в Mail.app подпись, привязанную к нужному адресу электропочты, в теле которой ввести любой рандомный текст. Закрыть Mail.app
  2. Открыть терминал и ввести команду:
open ~/Library/Mail/V5/MailData/Signatures/

, где V5 — версия данных Mail.app, для High Sierra — V5, для Sierra — V4, для Mojave, скорее всего, будет V6.

  1. В открывшемся окне Finder нужно отсортировать файлы по дате создания. Наша свежесозданная подпись — самая свежая.
  1. С помощью TextEdit нужно открыть вашу новую подпись. Верхняя часть с метаинформацией должна остаться нетронутой, в нижней же части вместо того кода, что там уже есть, нужно вставить HTML-код необходимой подписи
  1. Закрывайте и сохраняйте готовый файл. Открывайте Mail.app

После данных манипуляций HTML-подпись будет адекватно работать в почтовике, и даже можно будет через встроенный диалог редактирования подписи изменять её текст (например, вместо плейсхолдера можно будет вписать своё имя).

5 сентября   macOS   Инструкции

Дуалбут хакинтоша и Windows 10

Для запуска Frostpunk (да и в принципе для игр — я не хочу ставить игровые клиенты на macOS, которая почти всегда используется для работы) я установил себе в дуалбут Windows. Здесь должна быть шутка, что все бздуны — виндузятники. Далее — некоторые замечания по этому вопросу.

Легальный ключик почти за халяву

На eBay продаются ключи для Windows 10 Pro за 385 рублей. В чём прикол? Это OEM-ключи, принадлежавшие компьютерам, которые во время изготовления оказались бракованными настолько, что их проще выкинуть, чем починить (к примеру, со сгоревшей материнской платой). Ребятки продают ключи для Windows 10 за 3-4 фунта стерлингов, которые вполне можно использовать для установки. Но есть нюансы:

  • С точки зрения Microsoft такой ключ может использоваться только на 1 компьютере, причём на том, которому назначен (на сломанном). В случае. если хочется заморочиться, ребята, продающие ключи, могут прислать сгоревшую материнку вам, без дополнительной платы. С её наличием переиспользование ключа на другом ПК становится возможным, так как вы можете переносить свою версию Windows на другой компьютер, удалив её с изначального, всегда.
  • Исходя из первого нюанса — ключ одноразовый. Как только вы его активировали, Microsoft привязывает его к вашей учётной записи и конфигурации компьютера. Хотите ещё ключей — платите ещё 385 рублей за каждый компьютер.
  • После выдачи ключа его стоит активировать в течение недели — иначе его могут успеть отозвать за неактивность.

Если вышеприведённые нюансы вам не страшны и вы не собираетесь использовать данную установку Windows в коммерческих целях (ака «на офисных компах») — пробуйте смело. Это, конечно, не бесплатная Windows, как пару лет назад, но это даже дешевле, чем Windows 8.1 для студента, которую я купил по бешеной скидке для студентов за 1800 рублей (при долларе в 30).

Установка параллельно с хакинтошем

Во первых: Boot Camp нам не бро. Он предназначен для железа от Apple, и к нашим условиям не применим. Создавайте флешку для Windows так, как обычно её создаёте для нормального ПК.

Во вторых: отключите нафиг все жёсткие диски, кроме того, на который будете ставить Windows, перед установкой. И крайне желательно ставить Windows на отдельный жесткий диск или SSD, не логический — а физический. В противном случае проблем с загрузчиком не оберётесь. После нормальной установки Windows можно вернуть все диски на место, и Clover увидит свежеустановленную ОСь автоматически.

Ну и в третьих: после установки обязательно отключите Fast Boot в винде! Для этого в поиске меню «Пуск» пишем «cmd», открываем «Командную строку» с правами администратора и вводим команду:

powermgr -h off

После выполнения этой команды перезагружаемся.

Если у вас внешняя видеокарта, при повторной загрузке в macOS на этапе загрузки графического интерфейса сигнал по HDMI может пропасть. Если такое случилось — просто вытащите HDMI-кабель из видеокарты и вставьте его обратно.

27 августа   macOS   Windows   Инструкции   Хакинтош

FreeBSD Jails 101: краткое руководство по поднятию первой клетки

Дисклеймер: если у вас машина с FreeBSD стоит за отдельным роутером, который раздаёт IP-адреса, является маршрутизатором и всё такое — вам сюда. Я же описываю случай, когда сама машина с FreeBSD является роутером для клеток.


Собственно, условия разворачивания такие:

  • Хост является маршрутизатором и провайдером NAT-а для клеток. Внешний роутер отсутствует.
  • Клетки являются автономными и не имеют общих файловых систем. Это спорное решение для некоторых, и каждая клетка-сервис будет занимать 500 мегабайт на жёстком диске минимум, но при этом каждая клетка обновляется автономно. В данной установке принцип «понимать, что обновляешь» важнее автоматизации обновлений.
  • Хост установлен на root с ZFS. Староверы с U-word FS идут в хэндбук.
  • Всё происходит на FreeBSD 11.2-RELEASE.

Для начала добавляем в /etc/rc.conf следующие данные:

gateway_enable="YES"
cloned_interfaces="tap0"
ifconfig_tap0="inet 192.168.99.1 netmask 255.255.255.0"
jail_enable="YES"

Первая строка включает маршрутизацию на хосте, вторая добавляет колонизуемый интерфейс tap0, третья задаёт этому интерфейсу IP-адрес и маску подсети, ну а последняя включает сервис клеток.

Теперь создаём ZFS-датасет, в котором будут лежать все клетки (допустим, /usr/jails/):

zfs create -o compression=lz4 -o mountpoint=/usr/jails zroot/jails

Далее — создаём ZFS-датасет, в котором будет храниться наша шаблонная клетка. Таких шаблонных клеток можно создать несколько, в зависимости от необходимых задач. Внимание, если вы ещё не в курсе — клетки работают исключительно с FreeBSD!

zfs create -o compression=lz4 -o mountpoint=/usr/jails/11-2-amd64 zroot/jails/11-2-amd64

Здесь 11-2-amd64 — имя клетки. Оно может быть любым, в зависимости от ваших предпочтений. Здесь — имя по версии и архитектуре FreeBSD внутри шаблонной клетки.

Теперь можно скачать базовую установку для FreeBSD и распаковать её (поддержку lib32 и сборки из портов мы оставим за пределами данного руководства):

cd /usr/jails
fetch https://mirror.yandex.ru/freebsd/releases/amd64/11.2-RELEASE/base.txz
tar -xf base.txz -C /usr/jails/11-2-amd64

Следующий шаг — создание конфигурационного файла клеток /etc/jail.conf. Он достаточно стандартен:

exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/usr/jails/$name";
interface = "tap0";
allow.raw_sockets = 1;

# Шаблонная клетка. После настройки этот блок можно закомментировать.
11-2-amd64 {
    host.hostname = "template";
    ip4.addr = "tap0|192.168.99.250/24";
    allow.chflags = 1;
    allow.socket_af = 1;
}

Вверху — общие параметры для всех клеток. Они достаточно стандартны. Стоит обратить внимание на allow.raw_sockets = 1 — без этой опции ping, traceroute и половина прочих сетевых утилит работать не будет.

Далее идёт секция с индивидуальной настройкой нашей шаблонной клетки:

  • в первой строке задаётся хостнейм
  • во второй — адрес на интерфейсе tap0
  • в третьей — разрешается suid-бит для файлов внутри клетки (по умолчанию это запрещено, разрешать после настройки шаблона для других клеток необязательно)
  • в четвёртой — разрешаются любые сокеты для любых протоков (тоже запрещено по умолчанию, тоже после настройки скорее всего нафиг не будет нужно)

Если хочется изучить побольше опций, man jail.conf поможет (на английском языке).

Создаём клетку:

jail -c 11-2-amd64

Клетка запущена и готова к настройке. В процессе выполнения этой команды возможна ругань на «missing hostname»: игнорируем смело, в клетке всё будет нормально. Теперь мы можем войти в клетку:

jexec 11-2-amd64 sh

Единственное, что надо сделать на этом этапе — поднять ssh внутри клетки, что делается командой:

sshd_enable="YES"

По умолчанию рут-логин по ssh выключен. Или включите его, или создайте пользователя для входа.

Следующим шагом будет включение NAT для клеток. Воспользуемся PF для этого. Включаем его в rc.conf:

pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"

Перед запуском напишем правила маршрутизации. Для простой конфигурации достаточно этого варианта:

ext_if="re0"
jails_if="tap0"
jails_nr="{192.168.99.0/24}"

nat on $ext_if from $jails_nr to any -> ($ext_if)

О том, как более-менее безопасно настроить PF, я расскажу в другой заметке. Перед включением файрвола обязательно выполните команду pfctl -vnf /etc/pf.conf и посмотрите её результат! После удовлетворения результатом выполняйте service pf start: в этот момент вас может выкинуть из SSH-сессии, это нормально.

После запуска файрвола можно или перезагрузиться, или сделать service jail restart 11-2-amd64, и после этого зайти на свою шаблонную клетку по SSH. Для того, чтобы увидеть, какой IP-адрес и хостнейм у каждой из запущенных в системе клеток сейчас есть, существует команда jls.

После настройки шаблонной клетки выключите (закомментируйте) её, перезагрузитесь, а затем выполните следующие магические пассажи:

# О ZFS, ты так хорош…
# создаём датасет для новой клетки, допустим, это будет storage
zfs create -o compression=lz4 -o mountpoint=/usr/jails/storage zroot/jails/storage
# Копируем шаблонную клетку в новую клетку.
zfs send zroot/jails/11-2-amd64 | zfs recv -F zroot/jails/storage

После копирования ФС создаём в файле конфигурации /etc/jail.conf секцию для новой клетки:

storage {
    host.hostname = "storage";
    ip4.addr = "tap0|192.168.99.25/24";
}

Командой service jail start storage теперь можно поднять новую клетку для настройки и установки своих сервисов.

По умолчанию при перезагрузке все клетки запускаются последовательно согласно порядку в /etc/jail.conf. Для того, чтобы это изменить, можно добавить в /etc/rc.conf следующую запись:

jail_list="mysql storage"

После чего все клетки, которые не указаны в этом списке, запускаться не будут, а все клетки в списке будут запускаться согласно порядку в нём: в данном случае первым запустится MySQL, а потом — storage.

24 августа   FreeBSD   Инструкции

FreeBSD

Меня немного (чуть-чуть дофига) раздражает зоопарк линуксов. Раньше я его избегал с помощью Debian Stable, теперь пробую новый путь — ПравославнуюЪ ФряхуЪ.

Собственно, вот тут Станислав Никитин отлично описал, почему хороша или плоха FreeBSD. Я же прокомментирую и дополню его аргументацию:

Нормальный ZFS. Реально, работает лучше и быстрее, чем ZoL. А без ZFS я свою серверную жизнь уже не смыслю, потому что ZFS позволяет офигенно удобно делать датасеты под приложения со своими настройками, выбирать сжатие (например, для бинарных данных офигенно подходит gzip, а не lz4), и тому подобное.

Да. Ради ZFS вообще можно простить очень многое, уж больно хороша эта ФС. Apple пытается сделать что-то подобное с APFS, но пока что за пределами macOS на компьютерах данная ФС недоступна, и о её применимости на серверах говорить нечего.

Вменяемая и хорошая документация по всем базовым сервисам. При первой настройке фряхи мне не нужно было гуглить, потому что установщик простой и понятный, все маны есть в системе. Я просто сделал man ifconfig и понял, как настроить виртуальную сетку руками. Я просто сделал man rc.conf и понял, как это автоматизировать.

С документацией есть ещё один приятный момент: срок её устаревания гораздо больше. Я смог настроить pf по мануалу на русском языке 2010 года выпуска, к примеру. Документация к линукса устаревает ежедневно с новым пердежём Леннарта нашего Поцтеринга (при всём уважении к systemd).

Клетки (jails). Чуть сложнее в настройке, чем LXC, но заметно легче по ресурсам.

Я вот вообще не осилил LXC. А клетки вполне себе осилябельны, что по мне — весьма неплохо.

Отсутствие systemd. Да, в каких-то случаях он удобен, но вот когда тебе просто надо развернуть один маленький сервис, systemd может как облегчить жизнь, так и усложнить (например, чтение логов).

Я бы сказал не так. Проблема линуксов не в systemd. Проблема в том, что в каждом дистрибутиве он, сцуко, разный, с разным набором костылей от дистропроизводителя, и непонятно, что с этим делать. По сути и по факту systemd провалил задачу стандартизации управления Linux-машинами на разных дистрибутивах.

Обычные текстовые логи. Серьезно, грепать куда удобнее и быстрее, чем читать выхлоп journalctl :).

Вкусовщина, но допустим, что так.

Станислав выделяет несколько минусов, которые я считаю плюсами:

BSDшные версии утилит, которые зачастую несовместимы с GNUтыми ни синтаксисом, ни форматом входных данных.

ЭТО ЖЕ ОФИГЕННО! Во всяком случае, когда твоя основная машина работает на macOS, где все консольные утилиты по умолчанию BSD-шные, а шелл у меня и так испокон веков zsh, так что я вижу только преимущества в том, что на сервере подобный десктопному сет консольных утилит.

Непривычная настройка сети, маршрутизации. Я привык использовать ip route, а тут все через route с виндоподобным синтаксисом.

Смотрим предыдущий пункт. В macOS route работает точно так же.

Клетки довольно сильно отличаются по схеме работы от привычных LXC контейнеров.

…или «LXC-контейнеры сложнее, чем клетки». Нет, серьёзно, LXC я не осилил ни в каком виде.

Зубо- и мозгодробительные фаерволы, которых аж несколько штук.

Just use PF! Я вот iptables не осилил толком, каюсь, а с PF за два дня неспешного тыканья мы со Стасом разобрались. Возможно, если основная цель конкретной машины — роутинг, ей стоит ставить OpenBSD, ибо там PF свежее, но для простой (псевдо)домашней тачки это не принципиально.

В моих дальнейших планах — постройка Linux-free окружения как минимум дома (включая пресловутый «роутер на фряхе»). Насколько это получится и с чем я столкнусь в будущем — покажет время.

23 августа   FreeBSD   Оффтоп

Hello again

Короче, с Hugo есть одна проблема: мне лень в него писать — уж больно сложный процесс между «придумать заметку» и «опубликовать заметку» происходит, проще в Твиттер пыщь-пыщать (кстати, подписывайтесь-хуисывайтесь). Поэтому — https://blog.hodakov.me снова на Эгее.

Пока не все заметки перенесены, Эгея висит на тестовом домене. После переноса она будет открываться по привычному адресу.

Кстати, если кто-то хочет в две команды поднять себе Эгею — теперь это можно сделать с помощью моего сета конфигов для Докера — aegea_in_docker. Этот сет был форкнут из другого сета конфигов, автором которого является Павел Павленко (спасибо ему). Я заменил MySQL на MariaDB, PHPMyAdmin — на Adminer и упростил процесс установки (теперь это можно сделать с редактированием 0 (нуля) файлов из этого git-репо, что теоретически позволяет подписаться на обновления Docker-конфигов напрямую из источника, если вы доверяете мне). Обратите внимание, что ветка с моими изменениями — develop, потому что в мастер-ветке я выложил только актуализацию версий для Caddy и отправил PR в апстрим.

2018   Оффтоп

Как сделать американский Apple ID бесплатно за 5 минут

Да, я в курсе, что руководств по настройке американского Apple ID вагон и маленькая тележка в интернете. Но не все из них правильные, не все из них пошаговые, и так далее. Поэтому — краткая инструкция «для хомячков», как получить себе американский Apple ID.

Для нижеследующих манипуляций нам потребуется iPhone или iPad. Порядок манипуляций и скриншоты относятся к iOS 11, в других версиях операционки выглядеть интерфейс может по-другому. Вот — скриншоты всех шагов, последовательно; описание шагов — ниже.

Шаг 1: App Store в iOS 11 Шаг 1: Настройки учётной записи App Store в iOS 11 Шаг 2: Окно входа в учётную запись App Store Шаг 3-4: Смена магазина в App Store Шаг 4: Американский App Store Шаг 5: Spotify в App Store Шаг 6: App Store, выбор действия Шаг 7: Первый шаг создания учётной записи App Store Шаг 8: Второй шаг создания учётной записи App Store Шаг 9: Третий шаг создания учётной записи App Store Шаг 10: Четвертый шаг создания учётной записи App Store Шаг 11: Пятый шаг создания учётной записи App Store Шаг 12: Завершение создания учётной записи App Store

Шаг 1: Открываем App Store. В правом верхнем углу нажимаем на свою аватарку (или инициалы в кружочке, если аватарку вы не ставили). Откроется панель управления учётной записью App Store, в которой нам нужно «Выйти» из своей текущей учётной записи.

Nota bene: у автора не получилось после этого открыть регистрацию в App Store, и пришлось через Настройки разлогиниваться целиком с iPhone. Возможно, вам будет достаточно разлогиниться в App Store.

Шаг 2: Откроется окно входа в учётную запись Apple ID. Закрываем его.

Шаг 3: В Google вводим поисковый запрос «Spotify iOS». Он предлагает нам скачать приложение из App Store. Переходим по ссылке — и App Store предлагает сменить магазин:

Шаг 4: Нажимаем «Сменить магазин». После успешной смены магазина снова откроется главная страница App Store, где все карточки будут уже на английском языке.

Шаг 5: Идём на вкладку Search, и вводим туда Spotify. В открывшихся результатах поиска напротив Spotify Music нажимаем кнопку Get.

Почему Spotify? Потому что на момент написания этой статьи это приложение гарантированно отсутствует в российском App Store.

Шаг 6: В появившемся меню выбираем «Создать новую учётную запись».

Шаг 7: Откроется меню создания учётной записи. Вводим туда E-mail и пароль два раза. Тапаем по надписи «Agree to Terms and Conditions», чтобы принять лицензионное соглашение Apple. Нажимаем Next

Шаг 8: На этом шаге надо ввести своё имя и дату рождения. Небольшой подвох — даты в Америке пишут в порядке «месяц/день/год», а не «день.месяц.год», как у нас. Нажимаем Next.

Шаг 9: Самый важный шаг — ввод платёжной информации. Так как мы — васьки без американских банковских карточек, то здесь в самом верхнем меню надо выбрать None — нечем нам платить, мы бесплатное приложение качаем. Ниже нам нужно заполнить адрес: чтобы получить валидный адрес, можно воспользоваться вот этим сервисом или ввести любой адрес отеля во Флориде. Почему во Флориде? Потому что там налоги 0%, и если нам вдруг приспичит что-то покупать за деньги в американском App Store, нам не придётся платить налог. После ввода всех данных нажимаем Next. Возможно, выпадет сообщение с ошибкой типа «Something went wrong, please try again later», но после нажатия OK нас перенесёт к следующему этапу.

Шаг 10: Для Apple ID нужно привязать свой номер телефона. Слава богу, на этом этапе региональных ограничений нет, и можно просто свой обычный текущий номер оставить. После нажатия Verify на телефон придёт SMS, которую диалог настройки прочитает автоматически.

Шаг 11: После успешной проверки номера телефона потребуется подтвердить электропочту. Идём с другого устройства (вы же не в чистом поле сейчас?) в свою почтовую программу или сервис, получаем новое письмо с заголовком «Verify your Apple ID что-то там», вводим оттуда шестизначный код на устройстве.

Шаг 12: Готово! После закрытия окна загрузка приложения, которое вы хотели установить, начнётся автоматически. Если не началась — нажимаем Get ещё раз, вводим пароль от свежесозданного Apple ID и скачиваем нужное нам приложение.

После установки всех нужных приложений из американского магазина, можно выйти из учётной записи и войти заново в свою обычную российскую учётку. При обновлении приложений, которые были установлены из другого App Store придётся каждый раз вводить пароль от новой учётной записи — но это совсем не трудно.

Надеюсь, данная инструкция была полезной для вас. Если что-то не понятно, не работает так, как задумано, или я где-то ошибся — велкам в комментарии.

Как обмануть Apple (и MacPaw до кучи) и стать «нормальным Маком»

Данный гайд основан на работе P1LGRIM с форума tonymacx86 — An iDiot’s Guide To iMessage. После проделывания описанных ниже процедур Apple будет считать, что ваш Хакинтош — не какая-то наколеночная поделка, а настоящий, свежекупленный Apple-branded device.

Подготовительные работы

Подготовительные работы не требуются, если вы не добавляли в macOS свою учётную запись iCloud. Если добавляли, то надо:

  1. Удалить учётную запись из настроек
  2. На сайте iCloud удалить в «Найти iPhone» ваше устройство (которое уже распознано Apple неправильно)
  3. Отключиться от интернета (сохраните копию этого руководства на флешке или в текстовом файле: подключиться к интернету обратно можно только после завершения всех настроек.
  4. Перезагрузиться.
  5. Удалить кучу малу служебных файлов и кэша. Открываем Terminal и последовательно туда копипастим следующие команды:
rm -r $HOME/Library/Caches/com.apple.iCloudHelper*
rm -r $HOME/Library/Caches/com.apple.imfoundation.IMRemoteURLConnectionAgent*
rm -r $HOME/Library/Caches/com.apple.Message*
rm -r $HOME/Library/Preferences/com.apple.iChat.*
rm -r $HOME/Library/Preferences/com.apple.icloud.*
rm -r $HOME/Library/Preferences/com.apple.ids.service*
rm -r $HOME/Library/Preferences/com.apple.imagent.*
rm -r $HOME/Library/Preferences/com.apple.imessage.*
rm -r $HOME/Library/Preferences/com.apple.imservice.*

Определение параметров сетевой карты

Для того, чтобы Apple распознавала в системе правильный Macintosh, компьютер должен соответствовать следующему условию:

  1. У нас есть сетевой интерфейс en0
  2. Он должен быть встроенным (built-in)
    Для определения параметров сетевой карты нужно скачать и открыть утилиту DPCIManager. SourceForge говорит, что утилита — вирус, но это не так: просто она использует «грязные» методы определения PCI-устройств в системе (в том числе — тех, про которые macOS знать не знает и не слышала никогда).

В главном окне программы на первой же вкладке видны сетевые интерфейсы и их свойства:

Окно DPCIManager

Если единственное ваше устройство, которое обладает сетевыми возможностями — PCIe Wi-Fi-карточка, то тут надо просто скрестить пальцы, чтобы macOS посчитала это устройство встроенным. Вот такая конфигурация:

<key>IOBuiltin</key>
<true/>

в /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist, к сожалению, не помогает. Если есть возможность заставить работать встроенный в материнскую плату Ethernet-адаптер — пользуйтесь ей. Абсолютно необязательно пользоваться этим же сетевым интерфейсом для подключения: главное — чтобы он в системе присутствовал.

Если на данном этапе вы устанавливали какие-то кексты для Ethernet-сетевухи, и она появилась в системе, но как en1, en2 или что-то в этом духе — волшебная команда в Terminal поможет:

sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

(Нет, ну конечно можно BSD-имя интерфейса в plist-файле и ручками поправить, но если вы это умеете — зачем вам этот гайд?)

После удаления файла настроек сетевых интерфейсов перезагружаемся. При загрузке macOS прочитает сетевые интерфейсы, начиная с встроенного, и присвоит им имена.

Конфигурация SMBIOS

Для следующего шага можно воспользоваться Clover Configurator (наверняка он у вас уже как-то установлен). Это не единственный способ добиться нужного результата — но достаточно простой и понятный. Clover Configurator позволит спокойно отредактировать config.plist, отвечающий за загрузку системы. Не стоит пытаться редактировать этот файл в текстовом редакторе: он, сука, XML, и его очень, очень легко отредактировать с нарушением синтаксиса. А config.plist, в котором нарушен синтаксис, не работает вовсе.

Внимание: то, что на скриншотах ниже какие-то поля не заполнены, не означает, что вы должны удалить из этих полей информацию.

  1. Открываем Clover Configurator. Монтируем раздел EFI на вашем диске с установленной системой с помощью раздела Mount EFI.
  2. Через File — Open открываем config.plist, который лежит в папке EFI/CLOVER вашего раздела с EFI.
  3. На левой панели выбираем пункт Rt Variables. Из списка ROM выбираем ’UseMacAddr0’. Убеждаемся, что поле MLB пустое. Устанавливаем BooterConfig в значение 0x28, а CsrActiveConfig — в 0x67.
Clover Configurator: Rt Variables
  1. На левой панели выбираем SMBIOS. Щёлкаем по неприметному списку, который расположен правее и чуть ниже изображения нашей «системы» (так как системное определение на скриншоте не выбрано, там знак вопроса). То, какое определение системы вы выбираете, зависит от вашего железа.
Clover Configurator: SMBIOS
  1. После выбора определения системы рядом с полем Serial Number нажимаем кнопку Generate New. Полученный серийный номер копируем в буфер обмена для проверки.
  2. Проверяем серийный номер на правильность здесь. Вставляем номер, решаем капчу, нажимаем Lookup. Ответом должна быть информация о системе, такой, как в определении системы, что мы выбрали на шаге 4. Если результат не такой, повторяем шаг 5.
  3. На сайте проверки гарантии Apple снова вводим полученный серийный номер. А теперь внимание: сайт Apple должен сказать, что такого серийного номера не существует. Если же по серийному номеру показывается информация о каком-то компьютере — возвращаемся к шагу 5 и повторяем всё ещё раз.
  4. Открываем Terminal и вводим туда команду uuidgen. Результат команды копируем и вставляем в Clover Configurator в поле SmUUID.
  5. В Clover Configurator выбираем File — Save.
  6. Перезагружаемся.
  7. Готово, вы восхитительны.
  8. Дополнительный шаг: проверка работоспособности NVRAM. В Terminal вводим следующие команды:
sudo nvram TestVar=HelloWorld
nvram -p | grep TestVar

Если вторая команда не вернула вам TestVar HelloWorld — нужно устанавливать эмуляцию NVRAM. EmuVariableUefi-64 и RC Scripts в установщике Clover помогут вам.

После перезагрузки

После того, как система перезагружена, можно настраивать все сервисы Apple так, как будто бы это обычный Mac-компьютер. Поздравляю, вы обманули систему!

Нужно ли совершать все эти телодвижения, если не собираетесь пользоваться iMessage/Facetime? Все равно нужно. Без правильно настроенного SMBIOS хакинтош будет вести себя странно/будут проблемы с Bluetooth (если таковое оборудование есть в системе) и так далее. Лучше один раз заморочиться, чем не делать этого и ловить рандомные глюки.

А при чём тут MacPaw?

А вот при чём:

Если не настроить правильный SMBIOS, то ни SetApp, ни приложениями из него, пользоваться нельзя. Мгновенный разлогин и привет. После настройки выше — всё работает, и «It looks like your Mac’s identity was changed» больше не появляется.

Впрочем, можно воспользоваться альтернативой SetApp, и альтернатива даже дешевле на $11.90 в месяц… Но это уже совсем другая история.

RCode — редактирование файлов на удалённом SSH-сервере в Visual Studio Code

Иногда очень не хочется редактировать файлы в vim или, прости господи, nano на удалённом сервере, а хочется нормального размера окна, подсветки синтаксиса и прочих удобств графического редактора текста с претензией на IDE, коим является Visual Studio Code. Далее — инструкция, как с помощью нехитрой магии сделать себе удобное редактирование конфигов, кода и всего такого. Disclaimer: я не приветствую редактирование кода на продакшене мимо VCS.

Данная последовательность действий предполагает, что на сервере вы можете получить права суперпользователя, вы знаете, что такое SSH, и вы уже можете подключиться к своему серверу без проблем с той машины, на которой установлен Visual Studio Code.

Шаг 1: устанавливаем в Visual Studio Code расширение Remote VSCode. Нажимаем Ctrl+P и вводим:

ext install remote-vscode

Шаг 2: открываем параметры редактора сочетанием клавиш Ctrl+,, и добавляем в настройки пользователя следующие параметры:

// Порт, по которому rcode будет "дозваниваться" до нашего сервера
"remote.port": 52698,

// Запускать ли сервер удаленного редактирования при запуске редактора?
"remote.onstartup": true

// На каком сетевом адресе слушать команды. 127.0.0.1 здесь менять не стоит.
"remote.host": "127.0.0.1"

// Если вы не хотите видеть ошибки "Remote port already in use", включите эту опцию
"remote.dontShowPortAlreadyInUseError": false

Шаг 3: устанавливаем rcode на нужный сервер. Реализаций rcode великое множество на различных языках программирования, и если вы хотите какую-то специфическую — на странице расширения Remote VSCode перечислены они все. Я же использую самую универсальную реализацию — на чистом Bash (который есть на серверах почти всегда). Для её установки на сервере выполняем следующую последовательность команд:

sudo wget -O /usr/local/bin/rcode \
https://raw.github.com/aurora/rmate/master/rmate
chmod a+x /usr/local/bin/rcode

Настоятельно рекомендую проверить содержимое файла /usr/local/bin/rcode, прежде чем запускать его.

Шаг 4: На локальной машине редактируем настройки соединения по SSH с нужным сервером, чтобы Port Forwarding, через который и будет работать rcode, запускался автоматически. В файл ~/.ssh/config/ добавляем следующие строки:

Host хостнейм.удаленного.сервера
Port 22
User ваш_пользователь
ForwardAgent yes
RemoteForward 52698 127.0.0.1:52698

Две последних строки включают Port Forwarding для выбранного сервера.

Перезапускаем Visual Studio Code, перезапускаем SSH-соединение, и с помощью команды rcode пробуем открыть файл в локальном редакторе. Скорее всего, файл откроется, и вы сможете его нормально редактировать. Помните — если соединение с сервером потеряно, файл не сохранится даже после переподключения, его придётся сохранять вручную.

Если при попытке запуска rcode возникает ошибка «команда не найдена», добавьте в .bashrc своего пользователя следующую строку:

export PATH="$PATH:/usr/local/bin"

Если у вас не Bash, то вы а) наверняка знаете об этом и б) сами можете добавить в свои настройки шелла эквивалент команды выше

Ранее Ctrl + ↓