неділя, 13 серпня 2017 р.

ooofbtools - створюємо fb2 книгу


У попередньому дописі я описав, як використовувати автоматичне розпізнавання djvu файлів за допомогою tesseract.

Після кропіткої роботи по вичитуванню розпізнаного тексту і виправлення помилок настав час створити з нього електронну книгу.
Для цього існує непоганий і доволі легкий у використанні додаток до LibreOffice. Називається він fbtools або по-старому OOoFBTools. Його встановлення просте, як двері - за допомогою Extension Manager. Навіть не описуватиму.

Використання ще простіше. Адже всі функції зібрані в меню OOoFBTools:
  • Є стандартні секції. Треба лише позначити назви розділів як заголовки, а також правильно розділити абзаци.
  • Можна вставляти картинки.  Правда варто слідкувати за їхнім розміром, щоб кінцевий fb2 не вийшов занадто великим.
  • Є можливість редагувати мета-параметри (автор, редактор, жанр тощо)
  • Також є можливість створення зносок. Та я цієї функції не перевіряв.
  • І, зрештою, найголовніша опція - експорт у файл fb2.
В результаті отримуємо цілком придатну для читання електронну книжку формату fb2:

пʼятниця, 28 липня 2017 р.

tesseract - читаємо друковані тексти (OCR)

Розпізнавання текстів та автоматизація цього процесу цілком легко вирішується в Linux. Існує дві поширені програми розпізнавання: cuneiform та tesseract. Вони призначені для роботи в терміналі, але них для використання в графічному середовищі існує агрегатор yagf, який вміє працювати з обидвома двигунами.

А все почалося з того, що я знайшов книжку у форматі djvu, яку хотів дати дітям почитати на електронній книжці. Нажаль пошуки електронного варіанту в fb2, txt або інших форматах електронних книг були неуспішні.

Я вирішив виправити цей недолік, адже книжка цікава. І у мене був сканований  україномовний її варіант.

Відразу зауважу, що з cuneiform у мене не склалося через помилки при запуску, хоча я точно пам'ятаю, що колись давно користувався саме нею і при тому дуже успішно. Yagf теж не вдалося запустити. Та я й не розбирався чому саме. Адже в консолі все вирішується за лічені хвилини.

Що ж. Почнемо. Для початку слід встановити необхідне ПЗ. Це - система управління файлами djvu (упаковка-розпаковка), а також система tesseract-ocr та український мовний пакет:

$ sudo apt-get install djvulibre-bin tesseract-ocr tesseract-ocr-ukr

Наступним кроком  потрібно поділити djvu файл на окремі графічні файли сторінок:

$ ddjvu -format=tiff -eachpage filename.djvu page%d.tiff

Тепер ми матимемо 260 (у моєму випадку) окремих файлів - по одному на кожну сторінку. Залишилося натравити на них розпізнавач і об'єднати результати у текстовому файлі. Для цього я написав мікроскрипт (кількість сторінок слід поправити в тілі скрипта):

#!/bin/bash
        for i in `seq 1 260`;
        do
  tesseract ./page$i.tiff stdout -psm 6 -l ukr >> book.txt
        done

Запустивши його, йдемо пити чай-каву. Після coffe-break отримуємо txt файл. Залишилося дрібничка - прочитати і скоригувати помилки розпізнавання. А далі скрутити все це в гарну електронну книжку формату fb2. Але це вже інша історія, якою, сподіваюся, незабаром поділитися.

Джерела:

пʼятниця, 21 липня 2017 р.

debootstrap - розгортаємо ARM середовище Debian Jessie


Нещодавно я писав про NanoPI - малюсінькій комп'ютер за порівняно смішну ціну. І ось настав момент написання програми для нього. Звичайно, найпростіше - перекинути код на нього і прямо на ньому зібрати. Та для великих проектів компіляторові треба доволі багато пам'яті. А вона є на більших x86 комп'ютерах. Та й вони більш поширені, ніж ARM-базовані. Тож частіше можуть трапитися під рукою.

Дистрибутив Debian чудово порається з розгортанням різних його версій на одній машині, а за допомогою QEMU можна навіть працювати з дистрибутивами різних архітектур. Саме це нам і потрібно. Процес розгортання, як виявилося, доволі простий.

Встановлюємо утиліту debootstrap
sudo apt-get install debootstrap

Встановлюємо пакети архітектури armhf з дистрибутиву jessie у каталог jessie-armhf без виконання другої фази (second-stage) розгортання системи
sudo debootstrap --foreign --arch=armhf jessie jessie-armhf

Встановлюємо QEMU
sudo apt-get install qemu-user-static

Копіюємо qemu для імітації arm процесора в каталог встановлення дистрибутиву
sudo cp /usr/bin/qemu-arm-static jessie-armhf/usr/bin/

Для доступу до інтернету
sudo cp /etc/resolv.conf jessie-armhf/etc/

Переходимо в каталог дистрибутиву в режимі chroot
sudo chroot jessie-armhf/

Запускаємо другу фазу розгортання системи. Тут пакети довстановлюються в режимі arm
debootstrap/debootstrap --second-stage

Оновлюємо джерела для apt
cat > /etc/apt/sources.list << EOF
deb http://ftp.de.debian.org/debian jessie main contrib non-free
deb http://ftp.de.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org/debian-security jessie/updates main contrib non-free
EOF

Оновлюємо щойно розгорнуту систему
apt-get update  && apt-get dist-upgrade

Якщо побачили таке при переході в chroot
I have no name!@host$
то є два варіанти
chmod 0644 /etc/passwd
а якщо не допомогло, то
rm /etc/passwd-

Ну далі налаштовуємо компілятори, бібліотеки і решту непотребу, щоб забезпечити роботу gcc.
apt-get install build-essential

Джерела:

неділя, 2 липня 2017 р.

Palemoon - браузер для non SSE2 процесорів


У попередньому дописі я описав один з дистрибутивів, які підходять для використання на застарілому залізі. Та якщо у вас процесор, що не підтримує інструкції SSE2, то з веб серфінгом періодично матимете негаразди. Адже всі сучасні браузери розробляються з розрахунку лише на процесори з підтримкою команд SSE2. Чи не всі? Виявляється є ентузіасти, які все ж думають про старе залізяччя. Браузер palemoon - одне з їхніх творінь.
Але спершу визначимо, чи варто нам взагалі шукати SSE only браузер. В консолі введемо

$ lscpu

Побачимо купу інформації про наш процесор. Але нас цікавить лише поле Flags. У ньому вказано перелік типів інструкції, які підтримує процесор. Якщо в переліку є sse2, то цей допис вам не потрібен. Ось, що я побачив у себе:

Architecture:          i686
CPU op-mode(s):        32-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             AuthenticAMD
CPU family:            6
Model:                 8
Model name:            AMD Sempron(tm)
Stepping:              1
CPU MHz:               1197.000
CPU max MHz:           1197,0000
CPU min MHz:           747,0000
BogoMIPS:              2405.37
Hypervisor vendor:     (null)
Virtualization type:   full
L1d cache:             64K
L1i cache:             64K
L2 cache:              256K
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow vmmcall



Як бачимо з SSE2 мені не повезло (у переліку є лише sse, але немає sse2). Оце і є причина "бочки меду в ложці дьогтю". І онаками її при роботі є не так повільна робота браузера, як періодичні безпричинні аварійні завершення програми. Це так дратує! Різні браузери збоять на різних сайтах. І якщо глянути в логи, то часом можна помітити повідомлення "Illegal instruction". Пошукавши в інтернеті, чи є браузери для старих CPU натрапив на palemoon SSE версію. Його немає в офіційних репозитаріях дистрибутивів. Але на офіційному сайті програми є готова збірка під 32 бітну ОС Linux. Це просто архів, розміром майже 40 Мб. Розпаковуємо його, де зручно, і користуємося. Можна встановлювати для всіх користувачів системи. Дії після скачування приблизно такі:

$ sudo tar -C /opt -xvf palemoon-27.3.0SSE.linux-i686.tar.bz2
$ sudo ln -s /opt/palemoon/palemoon /usr/bin/palemoon

PS. Поки готував цей допис мій palemoon жодного разу не гепнувся.

Джерела:
https://forum.palemoon.org/viewtopic.php?f=40&t=13530
ftp://ftp.palemoon.org/SSE-Linux/
http://palemoon.org

четвер, 29 червня 2017 р.

Бодін лінукс - краса і мінімалізм

Однією з проблем масового переходу на лінукс є те, що користувачі старих ПК лякаються погіршення швидкодії своїх систем через перехід на нове ПЗ.

Ось і я давно шукав лінукс для своїх старих ПК. Перепробував декілька варіантів (Xubuntu, Lubuntu, Debian з різними середовищами, Puppy тощо). Всі вони мають добрі й погані риси. З кожним оновленням старому комп'ютерові стає все тяжче і тяжче. Втім, тяжчими стають програми для доступу в інтернет (firefox, chromium). 

І от нещодавно примітив щось нове - Бодін Лінукс (Bodhi Linux). Дистрибутив - заснований на тому ж Ubuntu LTE. Але як виявилося доволі гарний і зручний. А найголовніше - мінімалістичний. В ньому не знайдеш купу сервісів, які невідомо чим займаються. Він не завантажує море бібліотек про всяк випадок. Він використовує кеш в ОЗП для пришвидшення роботи. І, найголовніше, він використовує стандартні репозитарії Ubuntu. А це означає, що всі існуючі в ньому програми доступні для встановлення через apt-get.

Відразу зауважу, що цей текст я пишу з Bohdi Linux + Firefox.

Вводимо uname -a і бачимо:
Linux username 3.16.0-4-586 #1 Ubuntu 3.16.7-ckt25-2 (2016-04-08) i686 athlon i686 GNU/Linux

Подивимося cat /etc/lsb-release:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Bodhi Linux"


Я свідомо взяв Legacy варіант, щоб він краще працював на старенькому Atlon з 512Мб ОЗП. І працює від доволі непогано.

Центр керування пакетами теж специфічний - це просто веб-сайт, на якому є ссилки на рекомендовані пакети з кожної категорії. А, оскільки в центрі керування використовується браузер Midori, то клацнувши на ссилку можна відразу встановити пакет. На сайті почитати опис пакету, побачити знімки з екрану, а також відразу можна проголосувати за улюблений пакет, таким чином піднявши рейтинг більш корисних пакетів. І працює цей механізм на кілька порядків краще, ніж центр управління пакетами Ubuntu. Нічого зайвого, а найкорисніше зверху.

Після встановлення ви не матимете більшості програм. Всі їх треба доставляти. Але собі ви поставите лише те, що треба саме вам. Плюс є можливість створити свій дистрибутив відразу зі свого робочого ПК як зріз встановлених програм. Щоправда я ще не випробував цей механізм. Як робочий стіл використовується середовище Moksha - дуже легеньке, доволі приємне і з можливістю одним кліком змінювати оформлення. Це вражає. Єдине, чого не підтримує Moksha - це іконки на робочому столі, але трішки призвичаївшись помічаєш, що вони не такі вже й потрібні, бо є QuickLauncher, клавіатурні скорочення, Автозапуск і пошук серед усіх програм.

Програми, яких немає в центрі керування пакетами можна спокійно встановити через термінал за допомогою apt-get чи dpkg.

Де ложка дьогтю? Періодичні збої браузерів через невідповідність процесора. Тут допоможе лише Gentoo, коли все скомпільовано під потрібний процесор. Але в цілому Бодін Лінукс, схоже, вдихнув нове життя в старе залізо.

Джерела:

субота, 17 червня 2017 р.

wxHexEditor та доктор Уотсон

Розробникам часто потрібен нормальний редактор шістнадцядкового коду. Чи є такий інструмент в Лінуксі? Відповідь на це питання дасть команда:

sudo apt-get install wxhexeditor

Та оскільки він написаний на WxWidgets, то, я певен, він є і для Windows, й для MacOS.
Серед особливостей:
  • підтримка величезних файлів (2 ексабайт)
  • зручні пошук та заміна
  • декодування в різних системах числення
  • дизасемлювання
  • історія з можливістю відкату.

Але до чого тут доктор Уотсон?

Історія така: була в мене старенька програма (не буду рекламувати), написана під DOS, яка працювала з LPT портами. Але лише стандартними на адресах 0x0378 (LPT1), 0x0278 (LPT2), 0x03B8 (LPT3). Та ноутбуків з LPT портом вже не зустрінеш. Замість них використовуються різні перехідники USB-LPT, PCMCIA-LPT. А у них адреси портів вже зовсім не стандартні (В моєму випадку 0xFFD8).

Як же заставити працювати цю стару програму з нестандартними портами? Елементарно, Уотсоне, - за допомогою wxHexEditor.

1. Знаючи, що для керування LPT викристовуються адреси 0x0278-0x027F, 0x0378-0x037F було вирішено відшукати в коді всі звернення до цих адрес. Я обмежився лише основними регістрами. Вийшла табличка типу:

2. Методом дедукції визначаємо ймовірні місця  звернення до портів. Адже є висока ймовірність, що інші місця програми мають коди, подібні до номерів портів. Втім у нормально складеної програми адреси портів мають зберігатися в масивах (припущення). Тож відшукавши їх, можна змінити адреси портів на потрібні. Підкреслені в табличці адреси, скоріш за все і є тими елементами масивів.

3. Робимо заміну для прикладу всі послідовності 78 03 на D8 FF (у нашого пристрою діапазон адрес 0xFFD8-0xFFDF), а також 79 03 на D9 FF і 7A 03 на DA FF.

4. Зберігаємо результат, пробуємо запускати і... вуаля! Воно працює. Сподіваюся, що не зачепив нічого зайвого.

PS. Звичайно справжні експерименти починалися з безумовних замін по всьому тілові програми, але вони призвели до відсутності деяких меню на екрані, а в певних випадках навіть аварійному завершенні. Після цього було застосовано аналіз, приведений вище. Зрештою цікавий вийшов challenge.

Джерела:

вівторок, 30 травня 2017 р.

NanoPI первинний запуск

Послав мені Бог до рук МініПК за 10$ (в Україні, нажаль, трохи дорожче) NanoPi Neo 512M. Це повноцінний ПК з RAM=512M, що працює під керуванням ОС Linux і має розміри плати лише якихось 40х40 мм. Але він без відеовиходу і Flash-пам'яті. Тож до нього довелося докупити microSD (16Gb). Для роботи необхідно записати зображення ОС на microSD. Для цього в Linux виконуємо такі нехитрі команди:
$ unzip nanopi-neo_debian-nas-jessie_4.11.2_20170525.img.zip | dd bs=1M of=/dev/mmcblk0 status=progress
$ sync

Вставляємо отриману microSD у відповідний слот NanoPI, подаємо живлення і насолоджуємося блиманням світлодіода, що відповідає за індикацію роботи. Підключивши прилад до мережі я виявив, що він не прописаний на DHCP сервері (а прив'язка у ньому зроблена до MAC-адрес), тому постала задача визначити, яка ж ця MAC-адреса в цього екземпляра NanoPI. З боку DHCP сервера я вирішив переглянути, кому в мережі не вдалося отримати IP-адресу. Команда перегляду логів:
$ cat /var/log/syslog | grep DHCPDISCOVER
Видала вона щось схоже на:
May 30 08:57:08 nvcamc dhcpd: DHCPDISCOVER from 00:11:2f:82:e2:a2 via eth0 May 30 10:06:03 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:13:58 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:02 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:12 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:21 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases

Тепер зрозуміло, хто "незаконно" підключився до мережі і хоче мати IP. Після внесення необхідних зміна на DHCP сервері мініПК успішно отримав IP-адресу і став доступний для роботи по мережі. Перевіряємо, його роботу через веб-інтерфейс за адресою http://xxx.xxx.xxx.xxx:8888:
Так! Воно працює. Доступ до мальоти є також по ssh, та через openmediavault (який працює на 80-му порті веб-сервера NanoPI).