Expertus metuit
Sergey Stolyarov | 2023-10-16 в 22:14

Эта статья является уже третьей в серии об использовании смарт-карт. Первая — Смарт-карты и программирование — была написана в 2017 году и все примеры в ней были на языках C и C++. Вторая — Смарт-карты и программирование (java) — в 2019 и в качестве базового использовался язык Java. И вот пришло время для очередной переработки, на этот раз всё на примере python3, код на котором получается компактным, выразительным и понятным. Кроме нового языка за эти годы накопились отзывы, замечания и предложения, появился опыт использования других устройств (криптографических USB-токенов, других типов бесконтактных карт), всё это отражено в тексте, который значительно отличается от предыдущих статей в структуре и формулировках.

Если вы только знакомитесь с этими технологиями, рекомендую читать именно эту статью, я постарался в ней учесть все недостатки прошлых, уточнить и прояснить терминологию, а также более детально раскрыть некоторые моменты. Ещё я добавил несколько новых разделов, которых не было в прошлых статьях: чипы Mifare Ultralight, NFC-метки и NDEF, прямое обращение к радиомодулю считывателя для выполнения произвольных команд NFC, банковские карты МИР, SIM-карты.

Мы все активно пользуемся смарт-картами, даже не зная этого, чиповые банковские карты, NFC-метки, бесконтактные пропуски-ключи, USB-ключ для электронной подписи, сим-карты в телефонах — это всё смарт-карты. В этом очень большом тексте я детально расскажу об использовании смарт-карт на уровне прикладного ПО. Здесь будет много теории, много ссылок на стандарты и спецификации, много кода. Я не ставил цель написать энциклопедию, для этого формата статьи не хватит, но дать обзорное представление о предметной области вполне можно. В конце есть список книг, в которых тема смарт-карт раскрыта детально и системно.

Я выбрал Python за его простоту, доступность, удобство использования и богатую библиотеку модулей. От вас не требуется никаких дополнительных знаний, кроме Python и операционной системы, на которой вы будете запускать код. Изначально всё программное окружение ориентировано на Unix-подобные системы — разнообразные варианты Linux и macOS, однако всё должно работать и в Windows (однако я не проверял). Все демонстрационные программы используют консоль (терминал), поэтому должны работать примерно одинаково везде, я не использую никаких GUI-библиотек, только командную строку.

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

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

Если у вас есть предложения по содержимому, можете писать прямо в комментариях или напрямую на мой email: [email protected]

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 тоже сойдёт.

Sergey Stolyarov | 2014-07-16 в 10:28

В питоне есть модуль logging, через который приложение может выводить логи, например, в терминал при отладке программы. По умолчанию вывод выглядит просто как сплошной поток текста, однако его можно раскрасить, чтобы разные типы сообщений (DEBUG, INFO и т.п.) печатались разными цветами. Для этого нужно сконфигурировать форматер логов и протащить его в программу, сделать это можно разными способами в ini-файле проекта или внутри самой программы.

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

Sergey Stolyarov | 2011-08-03 в 15:50

Задача: есть PDF, в котором очень широкие поля, плюс куча мусора на них типа «Украдено в Хилтоне», поэтому нужно поля по максимум отрезать. Можно, конечно, рыть интернеты в поисках подходящей программы, но за короткий срок этого сделать не удалось.

Всё решилось совершенно неожиданным путём: ставим пакет python-pypdf, пишем простейший питоновский скрипт и получаем ровно что нужно.

Sergey Stolyarov | 2009-10-23 в 22:26

Печатаем, что играет амарок. Скрипт очень простой (считаем, что локаль процесса, откуда вызывается скрипт, юникодная):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-

import dbus
bus = dbus.SessionBus()

proxy = bus.get_object('org.kde.amarok', '/Player')
player = dbus.Interface(proxy, "org.freedesktop.MediaPlayer")
metadata = player.GetMetadata()

# access metadata using operator []:

np = u"/me now listening to %(artist)s — %(t)s (album: %(album)s)" % {
    't': metadata['title'],
    'artist': metadata['artist'],
    'album': metadata['album']
    }

print np.encode("utf-8")
Sergey Stolyarov | 2009-05-06 в 02:05

Решил написать какую-нибудь простую систему для генерации FictionBook2-файлов, разметка — нечто wiki/markdown/reStructuredText/Sphinx-подобное, плюс файл с метаданными в виде простого .ini-подобного файла.

За несколько часов настрогал, потом пару дней отлаживал. Оказалось вполне пригодно для использования. Создание/обновление книг значительно ускорилось. Уже несколько книг обработал, в частности, вот этот сборник сказок братьев Гримм.

Никакой документации, кроме демонстрационного проекта, пока нет.

Сайт проекта: metafb2.googlecode.com

←новые старые→
© 2006—2024 Sergey Stolyarov | Работает на pyrengine