Expertus metuit
Написано Sergey Stolyarov 2017-04-13 в 19:14

Индекс (оглавление) очень помогает в навигации по PDF-документу. Однако в некоторых PDF-файлах его нет. Добавить его можно через командлайновую программу pdftk (она есть для всех операционных систем).

Схема простая:

  1. экспорт метаданных в файл;
  2. добавление в файл метаданных оглавления;
  3. обновление метаданных в исходном документе.
Теги: linux
Написано Sergey Stolyarov 2017-03-10 в 11:54

Это статья о смарт-картах и о том, как писать софт для работы с ними. Никакого опыта в предметной области от вас не требуется, только знание C и C++ для понимания примеров кода, а также базовых структур данных, битов, байтов, указателей, malloc/new/free/delete и так далее. Все примеры ориентированы на unix-окружение, в первую очередь это linux и mac os x. Windows и мобильные операционные системы не рассматриваются.

Для всех примеров кода вам нужен десктопный терминал-ридер для смарт-карт. Для некоторых примеров подойдёт USB-крипто-токен — они работают через тот же интерфейс, что и смарт-карты.

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

Очень желательно знать английский язык, так как все оригинальные стандарты и спецификации написаны на нём.

Первые примеры будут на С — это язык библиотеки pcsc, а затем переключусь на C++11 и собственную библиотеку-обёртку над pcsc.

Примерный план статьи:

  • как подключиться к библиотеке;
  • как подключиться к терминалу;
  • базовые сведения об архитектуре PC/SC, терминология;
  • базовые сведения о коммуникации с картой;
  • несколько простейших примеров с картами;
  • работа с «тупыми» бесконтактными картами памяти Mifare;
  • более подробно о работе с микропроцессорными картами;
  • пример работы с банковской картой.
Написано Sergey Stolyarov 2016-12-12 в 12:38

Ранее я уже писал несколько раз об организации ssh-туннелей: SOCKS-прокси через SSH, Туннель через SSH-сервер. В этой статье я расскажу, как максимально безопасно организовать SOCKS-прокси через ssh-туннель.

Обычно, когда делают SOCKS-прокси-туннель, просто добавляют к команде соединения через ssh аргумент типа -D localhost:8008. Потенциально это не очень безопасно по нескольким причинам:

  • вместо авторизации по ключу используется интерактивная авторизация по паролю;
  • на сервере может быть включен X-Forwarding, дыра;
  • авторизация происходит под обычным пользователем в интерактивной сессии.

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

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

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

Теги: linux, kb
Написано Sergey Stolyarov 2016-10-26 в 14:32

За несколько месяцев активного внедрения git в компании я понял, что практически все обучающие статьи по этой теме бесполезны. Главная их проблема — они написаны для одиночек и почти полностью игнорируют аспекты командной работы именно технических специалистов. Технарям не нужно детально объяснять, как инициализировать новый репозиторий или как коммитить изменения, это всё ненужная механическая информация, которую легко найти, но вот даже базового понимания, как работает git, оно не даёт. К сожалению, в git очень много команд и очень много «непонятных» и «тупиковых» ситуаций, возникающих на ровном месте. Я специально пишу «непонятных», так как бо́льшая часть из них разруливается очень просто, нужно только понимать, что именно произошло.

Если вы хотите с разбега погрузиться во внутренности git, очень рекомендую статью Git from the inside out, в ней детально расписываются низкоуровневые механизмы работы репозитория.

А в моей статье я подробно расскажу о нюансах работы с git, на которые вы практически гарантированно наткнётесь в реальной работе, однако в обычных туториалах о них не прочитаете. Также я расскажу о типичных ошибках, заблуждения и вредных привычках. Некоторые вещи могут показаться банальными и очевидными, но поверьте, для кого-то они оказались неожиданными.

Также я старался все разделы статьи упорядочить по мере усложнения и расширения концепции. Все примеры кода должны воспроизводиться у каждого. Крайне желательно иметь linux/macos с терминалом под рукой. О совсем примитивных вещах типа установки git я тут писать не буду.

Весь текст полностью оригинален, не является переводом и базируется исключительно на официальной документации.

Теги: git
Написано Sergey Stolyarov 2016-07-16 в 09:20

В unix-системе питоновские пакеты совсем не обязательно нужно ставить в системные каталоги (в /usr/, например). Благодаря virtualenv, пакеты можно установить в любой каталог, инициализировать локально окружение в терминале через специальный скрипт и дальше пользоваться всеми установленными в том каталоге библиотеками и программами. Локальный набор пакетов очень удобен для разработчика, так как позволяет на одной системе переключаться между разными их версиями.

В статье я описываю не только концепт, но и всю процедуру подготовки локального окружения. Сразу же уточнение: всё работает только в терминале, то есть вы запускаете терминал, «активируете» в нём нужный каталог с пакетами и дальше в этом терминале работаете. Базовая операционная система — linux, *bsd или mac os x. Windows я не рассматриваю.

Итак, нам понадобится установленный системно python3. Для линукса он ставится из пакетов вашего репозитория, для макоси — скачивается с офсайта https://www.python.org/downloads/mac-osx/. На данный момент последняя версия — 3.5.2, её и ставим. В принципе, версия из brew тоже сойдёт.

Теги: linux, python, macosx
Написано Sergey Stolyarov 2016-01-13 в 10:52

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

Цифровые (электронные) сертификаты используются повсеместно, самая известная область их применения — это шифрование HTTPS-трафика в браузере. В таком виде с сертификатами знакомы все, однако более-менее адекватного понимающих гораздо меньше. Многие статьи на эту тему с самого начала топят читателя в абстрактных и несущественных деталях (например, раз, два, три). Между тем, базовые концепции системы сертификатов очень простые и я о них расскажу в этой статье. Эти концепции в моём изложении не являются абсолютно точными, но зато они помогут «въехать» в тему.

Традиционный дисклеймер: все примеры ориентированы на линуксовую, юниксовую или макосную консоль. Если хотите самостоятельно повторить куски консольного кода, поставьте openssl, например, через sudo apt-get install openssl

Теги: openssl, crypto
Написано Sergey Stolyarov 2015-08-29 в 19:41

По умолчанию GIMP подхватывает все системные шрифты макоси, а их очень много, причём бо́льшая часть совершенно бесполезна. Из настроек программы это никак не регулируется.

GIMP использует fontconfig для поиска доступных шрифтов, а конфигурационный файл для fontconfig хранится в /Applications/GIMP.app/Contents/Resources/etc/fonts/fonts.conf, поэтому просто открываем его любым редактором и комментируем строчки, содержащие пути к системным каталогам со шрифтами. Можно также добавить свои каталоги, чтобы искать шрифты для редактора специально в них.

Вот пример уже отредактированной секции:

    <dir>/usr/share/fonts</dir>
    <dir>~/Library/Fonts</dir>
    <dir>~/Library/GIMPFonts</dir>
    <!--<dir>/Library/Fonts</dir>-->
    <!--<dir>/System/Library/Fonts</dir>-->
    <dir prefix="xdg">fonts</dir>
    <!-- the following element will be removed in the future -->
    <dir>~/.fonts</dir>

Здесь закомментированы каталоги /Library/Fonts и /System/Library/Fonts, а также добавлен каталог ~/Library/GIMPFonts (в него я добавил симлинки на действительно нужные системные шрифты из /Library/Fonts).

Дальше перезапускаем программу и всё.

P.S.

Я предполагаю, что вы используете официальную сборку GIMP с официального сайта.

Теги: macosx
Написано Sergey Stolyarov 2015-07-30 в 14:43

В современном андроиде версии 4 или выше через кабель невозможно нормально добраться до главного раздела, так как доступ к нему открыт только через глючный и тормозной MTP, а с линуксом ещё хуже — там вообще нет нормальной поддержки MTP.

Многие выкручиваются так: поднимают на девайсе какой-нибудь сервер (обычно FTP), а дальше к нему подключаются через Wi-Fi; затем можно через любой FTP-клиент копировать файлы с девайса и назад. Есть и недостатки: не очень безопасно и часто очень медленно.

Но выход есть и называется он USB-tethering.

Теги: android, linux
Написано Sergey Stolyarov 2015-02-07 в 21:57

По умолчанию в Time Machine бэкапится практически всё, включая совершенно ненужные файлы и каталоги — кеши, временный файлы и т.п.

В исключения надо добавить вот такие каталоги (для добавления произвольного каталога в селекторе файлов нужно нажать Shift+Cmd+g):

/var/vm
Это каталог с образами памяти, используется для суспенда, они довольно большие и точно не нужны в итоговом образе
/Library/Caches
~/Library/Caches
Разнообразные бесполезные для бэкапа кеши
~/Downloads
Скачанные файлы тоже в бэкапе не нужны

Также дополнительно нужно исключить:

~/Library/Application Support/Google/Chrome/Default/Application Cache
~/Library/Application Support/Google/Chrome/Profile 1/Application Cache
~/Library/Application Support/Yandex/YandexBrowser/Default/File System
Браузерные кеши, если вы пользуетесь профилями в браузере, то придётся ещё и кеши для них исключать (Profile 1 и т.д.).

Образы ненужных виртуальных машин.

Примонтированные защищённые разделы, например, через encfs.

Разнообразные медиа-каталоги, например, ~/Movies.

Каталоги с временными файлами, например, /tmp и ~/tmp (если вы такой локально используете).

Возможно, имеет смысл исключить из бэкапа сетевые хранилища типа Dropbox или YandexDisk.

Исключать из бэкапа каталог с homebrew не стоит, так как файлы из него расползаются по другим системным каталогам.

Есть ещё один подозрительный каталог — /private/var/folder, в него складывает скачиваемые файлы app store, например. И если установка какого-нибудь пакета сорвалась, этот файл будет там валяться. Система иногда при перезагрузке этот каталог чистит, поэтому я рекомендую перед бэкапом перезагружать машину, на всякий случай.

См. также http://essentialmac.co.uk/apple-mac-iphone-how-to/what-folders-to-exclude-from-time-machine-backups/

Теги: macosx, kb
Написано Sergey Stolyarov 2015-01-05 в 11:57

Если запускать Chrome в KDE с выключённым режимом Use system title bar and borders, то кнопки в заголовке окна всегда будут выравнены по правому краю:

Chrome in KDE

Никакими штатными настройками такое поведение изменить невозможно — Chrome при запуске определяет, в каком Desktop Environment он запускается, и если это Metacity/Compiz/Unity, то берёт часть настроек из gconf, в частности — расположение кнопок в заголовке.

Традиционный дисклеймер — все советы ниже годятся для Debian/Ubuntu.

Заставить Chrome «увидеть» себя в другом DE просто, достаточно выставить в переменной окружения XDG_CURRENT_DESKTOP значение Unity. Глобально это не надо делать, лучше всего сделать отдельный sh-скрипт для запуска такого «модифицированного» браузера. Также необходимо установить пакет gconf2, а затем выставить нужный порядок кнопок, например, выполнив такую команду в терминале (это нужно сделать всего один раз):

gconftool-2 --set /apps/metacity/general/button_layout --type string "minimize,maximize,close:"

Получится примерно так:

Chrome in KDE

Естественно, после таких изменений Chrome будет использовать тулкит Gtk для всяких действий типа диалога открывания файла и т.п.

Естественно, есть и проблемы — настройки прокси теперь будут искаться в настройках gnome/unity, поэтому если хотите их конфигурить, ставьте соответствующие пакеты (например, gnome-control-center) или указывайте прокси в аргументах запуска браузера, а также можно пользоваться стандартными переменными окружения типа (http_proxy, auto_proxy, auto_proxy и т.п.)

А вот готовый скрипт:

1
2
3
4
#!/bin/sh

export XDG_CURRENT_DESKTOP=Unity
google-chrome
Теги: linux, howto, ubuntu, debian
←новые старые→
© 2006—2016 Sergey Stolyarov | Работает на Pyrone