вторник, 6 сентября 2016 г.

Раскладывание книжек по полкам в Kobo



Version 0.9 build 2016-09-06

Наверное самая глупая фишка в ридерах от Kobo - это так называемые книжные полки. Единственное преимущество перед хранением книг в директориях - возможность поместить книгу сразу в две и более полок. Довольно сомнительная возможность.

Я не использую Caliber и просто закидываю книги в ридер. Иногда раскладывал по полкам. Но после того, как полки несколько раз слетели, перестал это делать. Как то мне ночью не спалось и я написал скрип на python, который раскладывает книги по полкам.


Как это работает.

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


Потом запускаю скрипт.
Скрипт сначала очищает две таблицы: Shelf и ShelfContent. Потом сканирует папку Books и записывает названия вложенных папок в Shelf и собственно книги в ShelfContent.

Внутренние алгоритмы ридера работают по другому.
Они ничего из базы не удаляют, а ставят пометку, что книга удалена. Вероятно это делается для сбора статистики и передается на сайт производителя, чтоб лучше нам впаривать книжки.
Но это мои догадки.
Мне это было делать лениво и я по простому очищаю указанные таблицы. Извините, если что не так.
Вложенные директории не проверял. К тому же, считаю смысла в них нет. Название полки не поместится на экран ридера. Собственно и все.


Установка Python

Для работы скрипта необходимо, что бы на вашем компьютере был установлен Pyton 3.

Если у Вас Ubuntu, nо Python 3.5 уже скорее всего установлен. В противном случае выполните команду:

sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python3.5

Если у Вас Windows, то установите Python 3.5.2 - 2016-06-27 отсюда:
https://www.python.org/downloads/windows/


Как использовать.
  1. Сохраните скрипт в файл KoboShelf.py и дайте ему права на исполнение:
    chmod +x KoboShelf.py
    
  2. В каталоге .kobo в разделе KOBOeReader сделайте резервную копию базы данных.
    cp KoboReader.sqlite KoboReader.sqlite.origin
    
  3. Создайте папку /Books на карточке, в ней папки с сериями, в них скопируйте ваши книги.
  4. Запустите из терминала вышеуказанный скрипт. В терминале будут показаны найденные полки и книги, которые в них добавлены.
    Скрипт отрабатывает очень быстро, около секунды.
  5. Безопасно извлеките ридер.

Командная Строка

В Linux и в Windows скрипт автоматически определяет точки монтирования Kobo и SD карты. Поэтому для создания полок никакие аргументы в команде запуска не нужны.

./KoboShelf.py -h
usage: KoboShelf.py [-h] [--onboard ONBOARD] [--sd SD] [--onboard_sw {on,off}]
                    [--sd_sw {on,off}] [-s] [-v]

optional arguments:
  -h, --help            show this help message and exit
  --onboard ONBOARD     eReaders mount point
  --sd SD               SD cards mount point
  --onboard_sw {on,off}
                        Enabling/disabling adding book from eReader onboard
                        memory. Enabled by default
  --sd_sw {on,off}      Enabling/disabling adding book from SD card memory.
                        Enabled if SD card present
  -s, --showsettings    Display settings and exit. Reader must be connected.
  -v, --version         show program's version number and exit


Какие могут быть траблы.

Скрипт в стадии экспериментальной, поэтому возможно все. Если по какой то причине испортилась база данных KoboReader.sqlite, то восстанавливаем ее из сохраненной копии.
Как всегда, все вы выполняете на свой страх и риск. Я ни за что не отвечаю.

Исходный код можно посмотреть в Git репозитории:

https://github.com/Axa-Ru/KoboShelfes/blob/master/KoboShelf.py

В скрипте меняйте, что хотите, хоть автора, хоть код. :P

Всем удачи.

среда, 17 августа 2016 г.

VMWare 12.1.1. на ядре 4.6.4 и 4.7


Для запуска VMWare на Ubuntu 16.04 на ядрах выше 4.2 необходимо пропатчить ядро.
Для 4.6.4 нашел в сети вот этот патч


#!/bin/bash
usr=`whoami`
if [ "$usr" != "root" ]; then
    echo "Run $0 ar superuser"
    exit 1
fi

WORKDIR=/tmp/vmw
SRCDIR=/usr/lib/vmware/modules/source
MODDIR=/lib/modules/`uname -r`/kernel/misc
mkdir $WORKDIR
mkdir $MODDIR
cp $SRCDIR/vmmon.tar $WORKDIR/
cp $SRCDIR/vmnet.tar $WORKDIR/
cd $WORKDIR
tar -xf vmmon.tar
tar -xf vmnet.tar
cd vmnet-only
# cat netif.c | sed -r 's/dev->trans_start = jiffies/netif_trans_update(dev)/g' > netif.c1
# mv netif.c1 netif.c
cat userif.c | sed -r 's/get_user_pages/get_user_pages_remote/g' > userif.c1
mv userif.c1 userif.c
make
cp *.ko $MODDIR/
cd ../vmmon-only/linux
cat hostif.c | sed -r 's/get_user_pages/get_user_pages_remote/g' > hostif.c1
mv hostif.c1 hostif.c
cd ../
make
cp *.ko $MODDIR/
depmod -a
modprobe vmnet
modprobe vmmon
rm -R $WORKDIR
Скрипт сохранить в любой каталог, дать права на исполнение и запустить под root.
Для ядер 4.6.7 этот патч не работает.

Для ядра 4.7 запускаем этот патч:
#!/bin/bash
usr=`whoami`
if [ "$usr" != "root" ]; then
  echo "Run $0 ar superuser"
  exit 1
fi
WORKDIR=/tmp/vmw
SRCDIR=/usr/lib/vmware/modules/source
MODDIR=/lib/modules/`uname -r`/kernel/misc
mkdir $WORKDIR
mkdir $MODDIR
cp $SRCDIR/vmmon.tar $WORKDIR/
cp $SRCDIR/vmnet.tar $WORKDIR/
cd $WORKDIR
tar -xf vmmon.tar
tar -xf vmnet.tar
cd vmnet-only
cat netif.c | sed -r 's/dev->trans_start = jiffies/netif_trans_update(dev)/g' > netif.c1
mv netif.c1 netif.c
cat userif.c | sed -r 's/get_user_pages/get_user_pages_remote/g' > userif.c1
mv userif.c1 userif.c
make
cp *.ko $MODDIR/
cd ../vmmon-only/linux
cat hostif.c | sed -r 's/get_user_pages/get_user_pages_remote/g' > hostif.c1
mv hostif.c1 hostif.c
cd ../
make
cp *.ko $MODDIR/
depmod -a
modprobe vmnet
modprobe vmmon
rm -R $WORKDIR
Ветка обсуждения на rutracker.

пятница, 25 марта 2016 г.

Установка Transmission 2.92 в Thecus NAS

Вышла новая версия демона торрент клиента Transmission под номером 2.94.
Предыдущий релиз 2.90 был скомпрометирован тем, что в сборке под MacOS X был обнаружен вирус вымогатель. Этому было посвящено недавнее обсуждение на форуме tansmission
Про сборки под другие ОС информации нет, но на всякий случай я бы их удалил.
Разработчики сразу выпустили версию 2.92.

Скачать: transmission for Thecus N4800eco.

После установки нужно поправить файл конфигурации. У меня на Thecus N4800eco он находится здесь:
/raid0/data/MOD_CONFIG/transmission/settings.json Нужно прописать пути закачки:
    "download-dir": "/raid/Nas4d0/transmission",
    "incomplete-dir": "/raid/Nas4d0/transmission/00_incomplete",
и белый список ip адресов с которых разрешен вход на transmission:
    "download-dir": "/raid/Nas4d0/transmission",
    "incomplete-dir": "/raid/Nas4d0/transmission/00_incomplete",
Полностью конфиг выглядит так:
{
    "alt-speed-down": 1000,
    "alt-speed-enabled": true,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 62,
    "alt-speed-time-enabled": true,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 300,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": true,
    "blocklist-url": "http://list.iblocklist.com/?list=mcvxsnihddgutbjfbghy&fileformat=p2p&archiveformat=gz",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/raid/Nas4d0/transmission",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/raid/Nas4d0/transmission/00_incomplete",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-id-ttl-hours": 6,
    "peer-limit-global": 200,
    "peer-limit-per-torrent": 50,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": true,
    "preallocation": 1,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-authentication-required": false,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "{278f607764923e503ac7c3b8c1f88890db4e2e63nBqhB/sz",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "",
    "rpc-whitelist": "127.0.0.1 192.168.1.*",
    "rpc-whitelist-enabled": true,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 200,
    "speed-limit-down-enabled": true,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": true,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true
}

вторник, 1 марта 2016 г.

Устанавливаем PyQt в Ubuntu

Если вы не знаете, что такое PyQt то отправлю Вас в википедию. Там все коротко и по существу.
Если Вы не знаете, что такое Python, то может и к лучшему. Ну, или опять в википедию.

Вернулись?
Ну тогда вперед!

Сначала подготовим место, где будем проводить работу с пакетами. Я обычно делаю это в директории ~/tmp

Устанавливаем пакеты, необходимые для установки и работы PyQt

sudo apt-get install build-essential python3-dev python3-pyqt5 pyqt5-dev-tools

Скачиваем и устанавливаем SIP

wget http://sourceforge.net/projects/pyqt/files/sip/sip-4.17/sip-4.17.tar.gz
tar -xzf sip-4.17.tar.gz
cd sip-4.17
sudo python3 configure.py
make
sudo make install

Скачиваем и устанавливаем PyQT5

wget http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.5.1/PyQt-gpl-5.5.1.tar.gz
tar -xzf PyQt-gpl-5.5.1.tar.gz
cd PyQt-gpl-5.5.1
sudo python3 configure.py
sudo make
sudo make install

Вот и все. Установка завершена.
Теперь для проверки создадим небольшую программу на Python. Назовем ее pyqt_test.py

#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
import sys
from PyQt5.QtWidgets import QApplication, QWidget
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
 
    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('PyQT установлен')
    w.show()
 
    sys.exit(app.exec_())



Дадим файлу pyqt_test.py права на исполнение и запустим:

chmod +x pyqt_test.py
./pyqt_test.py

Если мы увидим такой результат, то это значит, что мы все сделали правильно и установили PyQt.



Полезные ссылки: