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

Позднее Ctrl + ↑

Dynamic DNS у Hurricane Electric

Небольшая заметка на тему того, как настраивать Dynamic DNS у Hurrican Electric. Постоянно забываю, а у них на сайте это посмотреть неочевидно (надо разлогиниться, чтобы увидеть инструкцию). Прелесть HE заключается в том, что они предоставляют сервис динамического DNS бесплатно — я им пользуюсь вот уже 4 года для различных целей, и он меня не подводил.

Для начала, конечно, нужно делегировать домен или поддомен на NS-сервера HE — ns1.he.net, ns2.he.net (есть ещё ns3, ns4 и ns5). Делегация занимает плюс-минус 72 часа, и после неё можно приступать к настройке.

Последовательность действий такая:

  1. Входим в панель редактирования домена (карандашик у свежедобавленного домена в списке)
Список доменов
  1. Добавляем новую A-запись, которую хотим сделать динамической, нажатием кнопки «New A». Нас встретит диалоговое окно, в котором нужно ввести имя поддомена и нажать галочку «Enable entry for dynamic dns». По нажатию этой галочки подставляется автоматически текущий IP адрес, с которого производится работа с веб-интерфейсом. После этого нажимаем «Submit»
IP-адрес тут указан неправильный (ага, стану я вам палить свой домашний айпишник…)
  1. В списке DNS-записей теперь существует наша новая запись с динамическим IP. Строка с ней окрашена в бирюзовый цвет. У неё есть кнопка обновления — она нам понадобится для генерации ключа, с помощью которого мы будем автоматически обновлять запись.
Возможно, это не бирюзовый цвет, но мне он кажется таковым
  1. В появившемся окне нужно нажать на кнопку «Generate a key». Ключ можно ввести самостоятельно, или сгенерировать внешними приложениями — я рекомендую или пользоваться встроенным генератором HE, или сгенерировать ключ в 1Password. Ключ следует воспринимать, как пароль, причём очень важный — знающий его человек может перенаправить ваш поддомен на любой IP-адрес!
Окно создания ключа для DDNS-записи
  1. Ключ записан (и спрятан), теперь можно настраивать «клиент» динамического обновления. «Клиент» в кавычках — потому что никакого специального ПО устанавливать не нужно, данный DDNS обновляется с помощью curl. Кроме того, HE говорит, что их система совместима с ddclient или другим ПО, совместимым с DynDns, но я это не проверял.
  2. Схема URL для обновления IP такая:
http://[доменное имя]:[сгенерированный ключ]@dyn.dns.he.net/nic/update?hostname=[доменное имя]
  1. Запрос curl на сформированный таким образом адрес даст один из ответов
    • badauth — ошибка авторизации (неправильное имя или пароль)
    • nochg  — для данной записи IP-адрес не изменился
    • good <новый IP-адрес> — IP-адрес обновлён
  2. Запросы к HE разрешены не чаще, чем раз в час. Это не техническое, а правовое ограничение: за спам их системы раз в 5-10 минут аккаунт могут заблокировать.

После получения и проверки возможности обновления IP-адреса можно настроить ddclient, в кронтаб положить обновление раз в час или каким-либо образом триггерить обновление при начале соединения с интернетом (во многих роутерах поддержка динамического DNS есть). Я обновление настроил на роутере, вы же в данном вопросе вольны решать сами, каким образом и как часто обновляться.

Thinkpad X220 — макбук для бедных

UPD 11.08.2018: данный ноутбук, проработав у меня полгода, погиб смертью храбрых от перегрева. Рекомендую чистить его и менять термопасту до того, как у вас сгорит видеочип.

Макоёбство неистребимо. Серьёзно, я пытался перейти на Linux (а конкретно — на сетап Arch + ZFS), но в конечном итоге я плюнул на весь этот глючный, стрёмный и морально устаревший софт с родовыми болячками 2000-х (а то и 90-х) годов. В итоге я вернулся на macOS.

Проблема в том, что мой макбук пал в неравном бою с моей жизнедеятельностью, и я его продал в состоянии «ну, на запчасти наверн» (в итоге новый владелец его зачинил за 32 килорубля). В качестве новой железки я себе сознательно взял macOS-совместимый Thinkpad X220 (он обошёлся мне на десятку дешевле того ремонта). Я не предполагал ставить на нём macOS, но — поставил. И он работает идеально.

Существует очень подробный гайд на английском языке, который описывает пошаговую установку macOS 10.11.x на этот ноутбук. Гайд практически идеален, и его может пройти любой человек — установка не сильно сложнее таковой у Windows 10. А ещё автор того гайда охотно общается с пользователями по электронной почте и даёт советы, если что-то пошло не так. Самым сложным этапом, пожалуй, является создание загрузочной флешки с macOS, ибо в этом этапе нужно обладать сноровкой барона Мюнхгаузена, тащившего себя из болота за шнурки (то есть — нужна macOS где-то ещё). После создания таковой флешки проблем не остаётся: хочешь — устанавливай с нуля, хочешь — раскатывайся из бекапа тайммашины и докидывай в него драйвера после установки.

Хакинтош на этом ноутбуке у меня уже почти два месяца. Для системы он представляется MacBook-ом Pro 2011-го года, и в общем ему соответствует. Есть, конечно, нюансы: картридер, встроенный в ноутбук, не работает, а для Wi-Fi нужно с алиэкспресса заказывать сетевую карточку за тысячу рублей. Однако, в целом, своих денег эта «замена Макбука» стоит, и вполне подходит в качестве рабочей машины _за недорого_. При этом в некоторых вопросах этот ноутбук уделывает стоящие в 4-5 раз дороже него свежие макбуки 2017-го года: к примеру, в него можно установить два накопителя (mSATA и 2.5» SSD). Нет, я не призываю всё бросить и ломиться за Thinkpad x220, но если нет возможности купить актуальный макбук, а macOS хочется — это вполне годный вариант.

«О системе»

TFTP в macOS

В macOS встроен сервер TFTP — протокола, по которому получают по сети файлы перепрошивки многие устройства (например, мой Keenetic Giga III). Данный сервер почти не требует настройки, но есть некоторые тонкости, о которых следует знать.

Начиная с macOS Sierra, TFTP-сервер не запускается с plist-файлом сервиса по умолчанию. На форуме поддержки Apple я нашёл такое решение: в файл /System/Library/LaunchDaemon/tftpd.plist необходимо в секцию Listeners добавить пару ключей, дабы TFTP-сервер не пытался подняться на IPv6-интерфейсе. Итоговый файл выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.apple.tftpd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/tftpd</string>
        <string>-i</string>
        <string>/private/tftpboot</string>
    </array>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <true/>
    </dict>
    <key>InitGroups</key>
    <true/>
    <key>Sockets</key>
    <dict>
        <key>Listeners</key>
        <dict>
            <key>SockFamily</key> # <-- добавить это -->
            <string>IPv4</string> # <-- и вот это -->
            <key>SockServiceName</key>
            <string>tftp</string>
            <key>SockType</key>
            <string>dgram</string>
        </dict>
    </dict>
</dict>
</plist>

Дальше можно запустить TFTP-сервер командами

$ sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist
$ sudo launchctl start com.apple.tftpd

Кроме того, есть GUI-утилита для запуска и отслеживания TFTP-сервера — TftpServer. Она позволяет перезапускать TFTP-сервер, видеть, что у него в корне за файлы расположены, и смотреть журнал сервера.

Про софт по подписке

Намедни в Slack-чате #apple-russian завязалась дискуссия на тему того, что лучше — софт по подписке или же софт, покупаемый один раз. Некоторые мысли по этому поводу я решил озвучить здесь.

SaaS (софт как сервис) — явление, на самом деле, не новое. Red Hat продаёт свой Enterprise Linux по этой модели второй десяток лет и горя не знает. У этой модели есть как преимущества, так и недостатки. Преимущества, с моей точки зрения, таковы:

  • Софт обновляется постоянно, не требуя отдельную плату за новую версию.
  • Каждый месяц ты платишь некоторую фиксированную сумму за программы, которые тебе действительно нужны в данный момент времени. Нет такого «купил софтину за сто баксов, попользовался две недели, теперь она пылится в углу неиспользуемая». Перестал юзать программу — отменил подписку.
  • Есть некоторая бОльшая доля уверенности в том, что поддержку программы не забросят. Программист, как известно, сволочь прожорливая, и жрать хочет всегда, а не только в тот день, когда ты купил его приложение. С подпиской программист будет жрать понемногу, но каждый месяц :D

Недостатки у подписочной модели тоже есть:

  • Меньший контроль над расходами. «А, сделаю подписку там, она всего два бакса» — а потом за месяц таких подписок набегает на пару сотен баксов. Всегда стоит проверять, на что ты подписан сейчас из программ и сервисов, и если ты не пользуешься чем-то из списка — отменять подписку.
  • Купив приложение один раз, ты его можешь впоследствии использовать даже в случае, если разработчик приложения обанкротился/закрылся/продался кому-то.

Существует на macOS/iOS такая специфическая модель продажи софта, как «каждая новая мажорная версия платная» (привет, Tweetbot!). Ты вроде бы купил программу один раз, но через год-два выходит обновление с новыми функциями/редизайном, а старую версию программы перестают поддерживать. Пользоваться можно, но с течением времени программа неизбежно «ломается» (привет, Parallels Desktop 10, купленный «один раз», и не умевший в Yosemite после её релиза). Для такого софта было бы гораздо честнее, если бы он начал продаваться по подписке (Parallels так и сделали в итоге, ждём Твитбот за $1 в месяц).

Отдельно надо упомянуть сервис под названием SetApp. Киевляне из MacPaw дошли до идеи, что можно сделать App Store с подпиской — аналог Music, только для софта. Честно говоря, когда я первый раз запустил этот сервис, в его каталоге мне почти ничего не приглянулось. Прошло пару месяцев — и оттуда у меня теперь восемь приложений, которые я бы не стал покупать — но которые я могу использовать благодаря подписке на SetApp. Понадобился мне FTP-клиент — опа, а оттуда можно установить ForkLift, понадобился конвертер видео — и такое там есть. В целом, за 11$ (десять баксов плюс налоги) — отличный сервис. Я не думаю, что конкретно этот сервис проживёт долго — если эта модель действительно прибыльна, рано или поздно Apple сделает у себя так же в App Store, и тогда надобность в стороннем сервисе отпадёт.

Кроме SetApp, я подписан на Office 365, 1Password, Дзен-мани (правда, там у меня пожизненый премиум, что скорее похоже на one-time purchase), EA Origin Access. Я не упоминаю всякие Evernote и Todoist (говнище лютое), в которых подписка идёт больше на их сервис, чем на софт. В целом, если бы на большую часть платного софта можно было бы подписаться, я бы пользовался платными программами с большей охотой.

А что предпочитаете вы: софт по подписке, платить за программу один раз, или же ебсовокупляться с опенсорсными аналогами?

2017   macOS   Оффтоп

Не закрывайте приложения в iOS

Концепт многозадачности в iOS несколько отличается от Android, и это периодически весьма сложно осознать. В блоге Daring Fireball была опубликована заметка о том, почему не стоит закрывать приложения в iOS. Мне самому до недавнего времени казалось нормальным закрыть приложение на iPhone, когда я закончил с ним работу, однако — это неправильно с точки зрения энергосбережения. Под чертой — мой перевод той заметки.


Самое большое заблуждение относительно iOS: «закрывать приложения, которые ты не используешь — хорошо». Считается, что приложения, оставленные в фоне, продолжают занимать место в оперативной памяти, отъедают циклы работы процессора, что выливается в ухудшение производительности и времени автономной работы устройства.

iOS работает не так. Многозадачность в iOS реализована так, что ни одно из вышеуказанных утверждений, «оправдывающих» закрытие приложений, ен является правдивым. Приложения в фоне эффективно «замораживаются», будучи сильно ограничены в том, что они могут делать в фоне, кроме того, они высвобождают оперативную память, которую использовали до этого. В этом плане iOS действительно весьма хороша. Она настолько хороша, что «разморозка» приложения из фона занимает гораздо меньше процессорного времени (и энергии), чем запуск приложения, которые вы закрыли, «с нуля». Закрытие приложений не помогает сохранить ресурсы, а действует с точностью до наоборот. Срок работы от батареи становится меньше, и требуется гораздо больше времени на переключение приложений, если вы их закрываете.

Крейг Фредериги ответил на e-mail одного из пользователей, интересующегося тем, закрывает ли он приложения, и даёт ли закрытие приложений прирост к автономности, кратким и простым ответом: «Нет, и нет».

В официальной документации Apple, посвящённой закрытию приложений, есть совет о том, когда стоит закрывать приложение, который даёт производитель:

Когда вы дважды нажимаете кнопку «Домой», вам показываются запущенные недавно приложения. Эти приложения не открыты, но они находятся в режиме ожидания, помогая вам перемещаться по ним и выполнять несколько действий одновременно. Вы должны закрыть приложение только в том случае, если оно не отвечает (зависло).

MacDailyNews цитировал письмо Стива Джобса, отправленное им в 2010-м году:

Просто используйте [мультизадачность iOS] так, как она была задумана, и вы будете довольны. Здесь нет никакой необходимости в закрытии приложений.

На случай, если вы не верите старшему вице-президенту Apple, отвечающему за софт, официальной документации Apple, или Стиву Джобсу, держите ещё различных статей на эту тему, доказывающих, как эта привычка на самом деле вредна для времени автономной работы iPhone.

Миф о закрытии приложений столь пагубен, что я (автор Daring Fireball — прим.) слышал множество историй от своих читателей о сотрудниках Apple Store, которые рекомендовали закрывать приложения пользователям. Эти «гении» — кто угодно, но не гении.

Мне кажется, что одним из лучших доказательств вредности закрытия приложений (в плане производительности) являются замеры производительности устройств на YouTube. Существует целый жанр видео на YouTube, посвящённый замеру производительности новых телефонов, заключающемуся в запуске на них серии приложений и «тяжёлых» для процессора задач циклически, с двойным проходом по кругу. В первом круге приложения запускаются из незапущенного положения, а во втором — вызываются из многозадачности. Заметьте — на обоих устройствах приложения не закрывают. iPhone легко выигрывает первый круг, но вот уж где действительно айфон «тащит», так это на втором круге. S8 приходится перезапускать многие (если не все) приложения, потому что Android закрыл их принудительно, дабы высвободить память, которую они использовали. На iPhone все (ну, или почти все) приложения «ожили» практически моментально.

Пример такого видео, в котором сравнивают Samsung Galaxy S8 и iPhone 7 Plus

На самом деле, «замороженные» в фоне приложения в iOS восстанавливают работу так быстро, что я думаю, это помогает выжить мифу о закрытии приложений. Если вы беспокоитесь, что приложения в фоне «сжирают» вашу батарейку, и вы видите, как быстро они «размораживаются» из фона, вполне логично предположить, что они и не прекращали работу в фоне. Но они прекращали. Они действительно были «заморожены», они действительно освободили память, и они действительно вернулись к работе моментально.

Другой фактор, который подталкивает к решению «закрывать приложения это хорошо» — это некоторые приложения, которые нарушают концепт многозадачности iOS, находя возможности избежать «заморозки», и действительно продолжают работать в фоне. Самое позорное, что за таким поведением было замечено приложение Facebook, игравшее музыкальные треки, состоящие из тишины, в фоне, чтобы использовать API для аудиоплееров, позволяющее им играть музыку в фоне. Они сказали, что это «баг», и в данном случае закрытие приложения действительно поможет увеличить время автономной работы устройства (а ещё больше поможет удаление Facebook в принципе — прим.), и я не вижу причин доверять Facebook. Так что, если вы хотите закрыть приложение Facebook — пожалуйста. Но не позволяйте одному приложению испортить всю концепцию. В «Настройках» iOS в разделе «Аккумулятор» можно просмотреть, какие приложения продолжают работать в фоновом режиме — нажмите иконку часов под надписью «Использование аккумулятора», и не закрывайте приложения, которые не мошенничают с фоновым режимом.

Этот пагубный миф появился весьма давно, и вряд ли исчезнет. Я писал об этом в 2012-м:

Как и с любым вуду, здесь есть истово верующие. Я абсолютно уверен, что получу тонну писем от людей, искренне считающих, что если очищать список приложений на своём iPhone каждый час, или около того, телефон будет работать лучше. Ерунда.
Как упоминал Фрейзер, действительно существуют ситуации, когда приложение в фоне зависло, и его следует закрыть. Позиция здесь не в том, что вы не должны никогда закрывать приложения, а в том, что вы не должны делать это регулярно, и вы не сделаете ничего хорошего, очистив список приложений. Позор тем «гениям», что предлагают такое решение.

И это я ещё не говорю о людях, которые выключают свои iPhone, когда кладут их обратно в кошелёк или карман!

2017   iOS   Переводы

Как добавлять ESX-инструменты в Лоджик

Периодически мне приходится добавлять разные скачанные из интернета сэмплы в свою установку Logic Pro X. Поэтому я пишу вот эту шпаргалку, чтобы каждый раз не искать, как это делать. Возможно, кому-то ещё эта шпаргалка понадобится.

Из чего состоит ESX-инструмент:

  1. Сам .esx-файл, который содержит инструкцию для Logic Pro, как использовать этот инструмент;
  2. Файлы сэмплов. Обычно кучка wav-файлов или что-то в этом духе.

Итак, установка:

  • Идём в /Library/Application Support/Logic — проще всего это сделать из терминала командой
open /Library/Application\ Support/Logic
  • Копируем файл с расширением .esx в подпапку Sampler Instruments
  • Копируем папку со звуками в подпапку ESX Factory Samples
  • Запускаем Logic Pro X.
  • Создаём новый проект, в нём выбираем какой-нибудь ESX24-инструмент (например, Boesendorfer Grand Piano)
  • Заходим в настройки ESX24, и там выбираем наш свежезагруженный инструмент.
  • Играем звуками нового инструмента. Всё!

Netatalk 3 для Ubuntu 16.04 LTS

TL;DR: Для тех, кто создаёт свой домашний сервер на Ubuntu 16.04, и хочет на нём держать тайм-машину, я собрал пакет Netatalk третьей версии, которого для этой версии бубунты ещё просто никто до меня не собирал. Если желаете использовать — вот ссылка на PPA.

Установка:

# add-apt-repository ppa:causelove/crappysoftware
# apt-get update
# apt-get install netatalk

Почему бы просто не использовать версию из реп Ubuntu?— Потому что там версия 2.х, которая устарела и вообще говно мамонта пятилетней давности. Почему убунтоидыдебианщики не соберут уже третью версию, наконец — тайна сия великая есть.

Как собрать netatalk самому, если вы параноик, читаем вот здесь.

Как собрать Netatalk 3 для Ubuntu

Если вы вдруг не доверяете моему PPA для Netatalk, этот гайд для вас, мои дорогие параноики ;-)

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

На момент написания этого поста актуальный список зависимостей сборки устанавливался таким образом:

# apt-get install build-essential libevent-dev libssl-dev libgcrypt-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmysqlclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev tracker libtracker-sparql-1.0-dev libtracker-miner-1.0-dev

За описанием, что зачем надо — ссылка на вики выше. Она на английском, но там всё предельно просто.

Дальше устанавливаем devscripts — коллекцию утилит для правильной сборки пакета Debian, а так же некоторые служебные пакеты для сборки:

# apt-get install devscripts
# apt-get install cdbs debhelper dh-buildinfo d-shlibs

Создаём у себя где-нибудь директорию для всего этого хлама, который нам предстоит собрать. В эту директорию кладём тарболл с исходниками Netatalk (брать на официальном ресурсе проекта), и debian sources для пакета (брать, например у меня в PPA). Распаковываем архив исходников:

$ tar jxfv netatalk-3.1.8.tar.bz2

Переходим в распакованную директорию, и копируем туда исходник дебиановского пакета. Пишем что-нибудь осмысленное в чейнджлог:

$ dch -v 3.1.10 -D xenial

Проверяем необходимость накладывания патчей (актуален на данный момент лишь патч 114_fix_macusers_ps_parsing.patch):

$ vim debian/patches/series

Правим зависимости — они должны совпадать с теми, что есть в вики Netatalk:

$ vim debian/control

Правим сборочный скрипт для пакета — нам нужны опции configure, как в вики!

$ vim debian/rules

Теперь можно собирать сам пакет. Команда debuild — один из вариантов запуска сборки пакета. Другие варианты можно посмотреть, например, здесь.

$ debuild

Если сборка прошла нормально, то вы должны получить кучу файлов, среди которых будет собранный пакет для вашей системы. Если вы хотите поделиться пакетом со всеми, используйте debuild -S для сборки файла исходников, и dput для загрузки файла на сервера Launchpad-а.

Здесь возможен небольшой подводный камень. Так как, вероятно, пакет собирается впервые, то у вас нету OpenGPG-ключа. Он нужен для правильной сборки пакета, например, если вы хотите поделиться им с другими пользователями посредством собственного PPA. Можно использовать мануал типа этого. Подписывание пакета необязательно, если вы его собираетесь использовать исключительно для себя.

Данный мануал и собранный пакет основаны на работе Jay R. Wen, за что ему большое спасибо.

Firefox для настоящего параноика

Сегодня вышел в свет Firefox 29, чему посвящён топик на ЛОРе. В этом топике один анонимус выложил список опций в about:config, влияющих на приватность. Весьма интересный и полезный, как мне кажется (особенно в нынешних российских условиях), список размещён под чертой.


media.peerconnection.enabled = false

— запрещает поддержку протокола WebRTC, текущая реализация которого позволяет незаметно для пользователя получить список IP-адресов в его локальной сети (с помощью JavaScript), что повышает уникальность пользователя. Пруф.

browser.safebrowsing.enabled = false
browser.safebrowsing.malware.enabled = false

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

browser.search.suggest.enabled = false

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

dom.enable_performance = false

— отключает передачу браузером информации о времени начала и окончания загрузки страницы. Анализ этих данных позволяет определить факт использования прокси-сервера.

network.dns.disablePrefetch = true

— запрещает предварительное разрешение имён DNS для всех ссылок на веб-странице (пока пользователь сам не нажмёт на ссылку). Это может привести к утечке DNS-трафика при работе через анонимизирующий прокси-сервер.

network.proxy.socks_remote_dns = true

— отправлять DNS-запросы через прокси при использовании прокси. Иначе они пойдут напрямую и могут привести к раскрытию реального IP-адреса.

network.seer.enabled = false

— отключить Seer. Seer — механизм, включенный в Firefox 29, который отслеживает сайты, посещаемые пользователем. Например, при заходе на http://example.com/index.html браузер запоминает, что веб-страница запросила загрузку http://images.example.com/image.jpg, http://styles.example.com/style.css и http://scripts.example.com/jquery.js. При следующем посещении этого сайта браузер сразу откроет соединение с images.example.com, styles.example.com, и scripts.example.com, что позволит сократить время загрузки страницы. Важно заметить, что Seer не занимается предзагрузкой контента (предварительная загрузка управляется другой настройкой — network.prefetch-next, которую можно отключить с целью повышения уровня приватности), а лишь устанавливает соединение (включая предварительно разрешение имён через DNS и SSL-handshake). Кроме того, отслеживание не производится для https-соединений и в режиме приватности. Активность Seer и размер списка посещённых страниц можно регулировать с помощью настроек network.seer.enabled и network.seer.max-db-size (по умолчанию, размер файла seer.sqlite может достигать 150 мегабайт). Теоретически, владелец сайта может отслеживать время загрузки страниц браузером пользователя и использовать эту информацию, как дополнительный источник данных для составления более четкого «отпечатка браузера».

network.security.ports.banned = 4444,9050,9051

— запрещает сайтам установку соединений на критически важные порты, занятые I2P и Tor. Людям, которые данными сетями не пользуются, ставить данную опцию необязательно.

dom.battery.enabled = false

— запрещает отслеживать состояние батареи (уровень паранойи: расширенный).

dom.network.enabled = false

— запрещает определять параметры соединения с сетью (при этом передаётся тип соединения: LAN, Wifi, 3G и так далее).

network.proxy.no_proxies_on = (пустое значение)

— запрещает сайтам обращение к локальной машине, что позволило бы им анализировать список открытых портов. Подсмотрено у разработчиков Tor. Возможны проблемы при обращении на адреса типа ​http://127.0.0.1:631, используемые для конфигурации принтеров через CUPS и прочих устройств.

webgl.disable-extensions = true webgl.min_capability_mode = true

— тоже подсмотрено у Tor. Запрещает передачу сайтам подробной информации о графических возможностях системы.

browser.cache.disk.capacity = 0
browser.cache.disk.enable = false
browser.cache.disk.smart_size.enabled = false
browser.cache.disk_cache_ssl = false
browser.cache.memory.enable = false
browser.cache.offline.capacity = 0
browser.cache.offline.enable = false
dom.indexedDB.enabled = false
media.cache_size = 0
network.http.use-cache = false

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

dom.storage.enabled = false

— отключает возможность сайтов хранить некоторые настройки (нечто похожее на куки). Однако, после отключения, пропадает возможность пользоваться кэшем Гугла (в поисковике исчезают соответствующие выпадающие меню).

general.appname.override = Netscape
general.appversion.override = 5.0 (Windows)
general.oscpu.override = Windows NT 6.1
general.platform.override = Win32
general.useragent.override = Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0
general.productSub.override = 20100101
general.buildID.override = 20100101
browser.startup.homepage_override.buildID = 20100101
```

— маскировка браузера под версию 24 LTS и самую распространённую платформу. Не забываем обновлять по мере выхода очередных LTS (и очередных виндов) (уровень параноий: расширенный).

app.update.auto = false
app.update.enabled = false
app.update.mode = 0
app.update.service.enabled = false

— отключает автообновление браузера (по большей части актуально для Windows и OS X).

browser.search.update = false

— отключает автообновление поисковых плагинов.

datareporting.healthreport.service.enabled = false
datareporting.healthreport.uploadEnabled = false
datareporting.policy.dataSubmissionEnabled = false

— не отправлять данные о производительности в Mozilla.

Дополнительные рекомендации анонимуса:

Для борьбы со скриптами и куками рекламных сетей рекомендуются подписки адблока (Enhanced Trackers List), Social List), расширение NoScript (режет все скрипты, пользователь может разрешать скрипты доверенным сайтам, например, разрешить скрипты, лежащие лишь на linux.org.ru, а гуглоаналитику на том же лоре — нет), расширение Cookie Monster (точно также режет все куки, кроме явно одобренных пользователем). К использованию рекомендуется и HTTPS Everywhere от Фонда электронных рубежей, форсирующее использование HTTPS на большом количестве сайтов (только придется рукаи отключить правило для Google services, поскольку оно ломает ютуб после того, как ютуб поменял дизайн).

Возможно, для кого-то эта информация будет полезной. Если у вас есть какие-то свои размышления на тему параноидального использования современной техники в эпоху АНБ — милости прошу в комментарии.

Asus EeePC 1011cx и костыли с подсветкой

В моём хозяйстве появилась маленькая железка для ведения логов лекций и прочего рукописного стаффа: я из того поколения людей, которым проще печатать, чем писать. Собственно, железко на Яндекс.Маркете — характеристики и прочую отзывоту можете прочитать там. Я же вам расскажу о костылях с Linux-ом.

UPD: описанные далее костыли актуальны для версии ядра Linux 3.8. В ядре 3.9 сделали что-то, и теперь изменение яркости работает “искаропки” на данном девайсе (то есть адекватно воспринимается, например, xfce4-power-manager-ом). Необходимость нижеописанного костыля ставится под сомнение (если у вас не Debian ;))

Начнём с того, что железка 32-хбитная: в 2013-м году это выглядит ужасающе, но пока что Arch не выкинул поддержку i686 из своих реп (да и Xilitra свою бету таки выкатит летом), так что это не столь печально. А вот четырёхядерный (привет гипертредингу!) тридцатидвухбитный проц — это заставляет шаблоны трещать аки жёсткие диски 90-х годов под Windows XP без сервиспаков ;) Что интересно — про гипертрединг в рекламных материалах к данному ноутбуку не говорится ни слова, не удивлюсь, если под виндой его выключают.

Wi-Fi модуль и прочие стандартные вещи любой современный Linux на этом нетбуке подхватит “искаропки”. Тачпад мимикрирует под PS/2 мышь, и его функционал напрямую зависит от настроек вашего дистрибутива, DE, машины времени и фазы луны (и установленности пакета xf86-input-mouse). Батарейки даже без особой настройки в режиме “юзаем как печатный станок и тестируем всё, что тестируется” хватает на 6 с половиной часов — как раз на учебный день или около того. Всё бы ничего, но есть у этого нетбука беда — и это его серьёзная и главная беда.

Главная беда в этой железке — видео. Обычно Intel славится своими открытыми дровами ко всему своему железу, но это — печальное исключение: чип Cedar Trail разработан не ими, так что об официальных открытых дровах под этот наш пингвин можно забыть. Об официальных закрытых драйверах тоже можно забыть — они рассчитаны на древние ядро, Xorg и Mesa. Но у сообщества таки хватило сил накатать нечто вроде драйвера, о чём мы сейчас и поговорим.

Под Arch пакет с данным драйвером называется xf86-video-modesetting и не требует дополнительной настройки (в арче: ваш дистрибутив может обладать иными представлениями о действительности). Судя по названию, я могу предположить, что это generic-драйвер, юзающий KMS в качестве опоры для работы — но я могу ошибаться. Учтите, что если у вас стоит драйвер vesa — без дополнительной настройки грузиться будет он, а не modesetting, из-за чего производительность упадёт ниже плинтуса (именно этим объясняются тормоза Ubuntu 13.04 LiveCD). Про этот драйвер следует знать следующее:

  1. Аппаратное ускорение видео не будет работать (пока кто-то не сподобится написать нормальный драйвер или открыть и пофиксить проприетарный), так что этот ваш mplayer будет декодить видео на процессоре, и о FullHD можно забыть (хотя кто будет смотреть FullHD-видео на десятидюймовом экранчике с разрешением 1024х600?)
  2. Все аппаратные клавиши, связанные с экраном (яркость, переключение на VGA/HDMI) не работают из коробки изменение яркости не работает штатными средствами.
    Подчёркиваю, штатными средствами. Ибо есть костыль, который я честно стырил из арчевики (правда, там говорилось про ноутбук Samsung с похожей проблемой), и применил под свои нужды.

Код костыля:

#!/bin/bash
var1=`setpci -s 00:02.0 F4.B`
var1d=$((0x$var1))
case "$1" in
       up)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d+16);if (a < 255) print a else print 255" | bc`
               echo "$0: increasing brightness from 0x$var1 to 0x$var2"
               setpci -s 00:02.0 F4.B=$var2
               ;;
       down)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d-16);if (a > 15) print a else print 15" | bc`
               echo "$0: decreasing brightness from 0x$var1 to 0x$var2"
               setpci -s 00:02.0 F4.B=$var2
               ;;
       set)
               #n.b. this does allow "set 0" i.e. backlight off
               echo "$0: setting brightness to 0x$2"
               setpci -s 00:02.0 F4.B=$2
               ;;
       get)
               echo "$0: current brightness is 0x$var1"
               ;;
       toggle)
               if [ $var1d -eq 0 ] ; then
                       echo "toggling up"
                       setpci -s 00:02.0 F4.B=FF
               else
                       echo "toggling down"
                       setpci -s 00:02.0 F4.B=0
               fi
               ;;
       *)
               echo "usage: $0 {up|down|set |get|toggle}"
               ;;
esac
exit 0

Данный скрипт использует очень ценную и полезную для нас утилиту setpci для нужной нам цели — регулировки яркости. Яркость регулируется на самом “нижнем” уровне: эксперименты с этой утилитой могут привести к беде, так что не советую особо баловаться с этой тулзой. В нашем же случае эта тулза шлёт в соответствующий регистр видюхи сигнал об установлении яркости ниже/выше/на определённый уровень, например (допустим, что наш скрипт назван backlight.sh; все действия идут от суперпользователя):

  • backlight.sh up — поднимает яркость экрана
  • backlight.sh down — опускает яркость экрана
  • backlight.sh toggle — включает экран (яркость 100%) или выключает экран (яркость 0%, аналогично команде vbetool dpms off)
  • backlight.sh set [шестнадцатеричная цифра, например 0f] — задаёт яркость, 00 — минимум (выключенный экран), ff — максимум
  • backlight.sh get — выплёвывает текущую яркость.

Теперь на кнопки Fn+F4 и Fn+F5 можно повесить команды backlight.sh down и backlight.sh up соответственно (озаботьтесь тем, чтобы они запускались от суперюзера правильно!) средствами вашего DE. Да, пока что это не решение по автоматической регулировке яркости, но уже что-то: /me в поисках чего-нибудь типа power manager-а, к которому можно будет прикрутить данный скрипт :) Надеюсь, данный скрипт сэкономит вам немного нервов.

Данный пост написан на Asus EeePC 1011cx, на котором установлен Archlinux и Xfce вместо DE.