Версия под линукс

Sep 30, 2013 at 8:30 PM
Решил попробовать версию под линукс.
Для этого специально поставил Ubuntu 13.4
Впечатления:
  1. Установка, долго мучался пытаясь найти подходящий mono, вконце концов плюнул и поставил MonoDevelop, с ним запустилось, пробовал поставить пакеты которые указаны в FAQ, но видимо у меня нет подходящего репозитария, в моих этих пакетов небыло.
  2. Сканирование: Сканировал библиотеку Traum Library 2.32 только RU (141.664 книг)
    под виндами сканирование заняло ~3.5 часов и все книги были занесены в базу, ошибок небыло, дублей небыло. Под линуксом вот такая картина Image
    Куча ошибочных книг, и от куда-то взялись дубли.
    Перенос базы созданной под виндами, ни чего хорошего не дал, читалки каталог видят, анатации видят, но книги не отдаются.
    Процессор сканирование, жрет по черному 80-99%, память тоже 30-60%
  3. Конвертация: конвертирует нормально, но с установкой тоже немного помучался, пришлось доставлять пакет g++ , по умолчанию он в убунте не был установлен.
    Почему-то сконвертированные книг, отаются в формате bla-bla.epab.zip , и вот зачем здесь, zip , мне не понятно, epab и так сам по себе контейнер zip, но он не упвкован еще раз, а просто добавлено расширение, короче мои читалки такое не понимают (MoonReader, FBReader, AlReader), пока не уберёшь расширение zip. В настройках программы и конвертора, я не нашёл как это можно исправить.
    После недолгого ползания по каталогу, у меня грохнулось mono, выдав в консоли вот такую хрень:
Native stacktrace:

    mono() [0x80e6431]
    mono() [0x812697c]
    mono() [0x8062aff]
    [0xb777a40c]
    /usr/lib/libgdiplus.so.0(+0x45a4c) [0xb5c45a4c]
    /usr/lib/libgdiplus.so.0(GdipLoadImageFromDelegate_linux+0x25a) [0xb5c2836a]
    [0xb19da568]
    [0xb19d9fd4]
    [0xb19d9df4]
    [0xb19d9db8]
    [0xb19d9d78]
    [0xbf787978]
    [0xbf7876e0]
    [0xb1478064]
    [0xb1476c20]
    [0xbf787114]
    [0xbf786d96]
    [0xbf775dc8]
    [0xbf7736ce]
    [0xbf771fdc]
    [0xb6651cad]
    mono() [0x8066dcc]

Debug info from gdb:

Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Операция не позволена.
No threads.

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================
Завтра попробую погонять консольную версию.

В общем идея программы очень хорощая, давно такое искал,но с такими аппетитами на насах и роутерах, я думаю она к сожалению не взлетит, даже в консольном варианте.
Да и для линукса, мне думается нужно что-то найтивное, но это я так понимаю не к автору,
то что я нашёл в этом плане на PHP и питонах, не зная линукса, сложновато поднять.
А под винду, самое то ... правда для меня лично не вариант круглосуточно держать включённым комп. В блжайшее время думаю собрать себе домашний серверок с пассивным охлаждением, надеюсь на консольную версию программы, может она подтянется к тому времени :) .
Ну и в любом случае спасибо за программу!
Coordinator
Sep 30, 2013 at 9:47 PM
Отвечу по пунктам:

1) Для GUI должно хватать mono-runtime & mono-winforms. Но в долбанутой юбунте постоянно что-то "пилят" и "улучшают", поэтому не факт, что данные сведения не устарели :)

2) Неплохо-бы включить лог, и посмотреть, какие книги посчитаны ошибочными, а какие - дубликатами. Все-таки Mono - не .NET (пишется по white paper), возможно, xml парсер лажает. Что до производительности - тоже понятно. (но, честно говоря, что-то у тебя долговато: у меня либрусек под windows обрабатывается сейчас меньше, чем за час; но windows-индекс у меня >= 8.0 (у SSD диска - 8.1))

Касательно переноса windows-базы: это возможно, только нужно менять относительные пути внутри базы. Добавлю в следующий релиз такую возможность (будет обрабатывать пути автоматом). Главное, не забыть переименовать базу ;)

3) Надо будет перепроверить, и добавить в FAQ
Касательно расширения .zip - надо посмотреть, зачем и как оно добавляется; вероятно, это просто баг.

"Упало" оно у тебя на картинке; если не сложно, определи, на какой книжке и выложи мне для теста, OK?

P.S. Вообще-то, под линухом можно собрать себе флибусту, "один-в-один" (только без форумных троллей и "котегов" :) ), благо, она вся доступна (включая скрипты и сиквел). Единственно, нужно ручками поработать и понимать, что делаешь.

Касательно NAS-ов/роутеров - было-бы очень интересно прикрутить; с памятью можно поработать (уже в транке лежит версия с "low memory" твиком, и это не предел).
Oct 1, 2013 at 6:18 AM
Edited Oct 1, 2013 at 7:25 AM
Знаете, а лог то был включен, я как-то вчера забыл туда заглянуть, по поводу ошибочных книг пишет в основном :
11.0 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Липина, Панышева, Тарасов, Ут09.30.2013 19:00:18.4 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_дом/Хорев - Ремонт и реставрация мебели и предметов антиквариата.fb2.zip@ò«αÑó - ÉѼ«¡Γ ¿ αÑßΓáóαᵿ∩ ¼Ñíѽ¿ ¿ »αÑñ¼ÑΓ«ó á¡Γ¿¬óáα¿áΓá.fb2
09.30.2013 19:00:20.8 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_досуг/Арнольд - 100 забавных игр для семейных праздников.fb2.zip@Çα¡«½∞ñ - 100 ºáíáó¡δσ ¿úα ñ½∩ ßѼÑ⌐¡δσ »αáºñ¡¿¬«ó.fb2
09.30.2013 19:00:22.3 E ZipScanner Book.Parse() exception a name did not start with a legal character 32 ( ) Line 56, position 389. on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_досуг/Голлеон - Все о рулетке.fb2.zip@⫽½Ñ«¡ - éßÑ « απ½ÑΓ¬Ñ.fb2
09.30.2013 19:00:22.9 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_досуг/Зайцев - Новогодние SMS.fb2.zip@çá⌐µÑó - ì«ó«ú«ñ¡¿Ñ SMS.fb2
09.30.2013 19:00:36.1 E FileScanner .ScanDirectory: exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Бильфельд - Волнистые попугаи.fb2.zip@ü¿½∞Σѽ∞ñ - 髽¡¿ßΓδÑ »«»πúá¿.fb2
09.30.2013 19:00:44.6 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Гринев - Попугаи.fb2.zip@âα¿¡Ñó - Å«»πúá¿.fb2
09.30.2013 19:01:кин - Болезни собак (незаразные).fb2.zip@ï¿»¿¡á, Åá¡δΦÑóá, Æáαáß«ó, ôΓ¬¿¡ - ü«½Ñº¡¿ ß«íᬠ(¡ÑºáαạδÑ).fb2
09.30.2013 19:01:20.1 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Орлова - Дрессировка собак. Учимся правильно воспитывать собаку.fb2.zip@ÄὫóá - äαÑßß¿α«ó¬á ß«íá¬. ôτ¿¼ß∩ »αáó¿½∞¡« ó«ß»¿ΓδóáΓ∞ ß«íá¬π.fb2
09.30.2013 19:01:24.5 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Пухова - Лабрадор ретривер.fb2.zip@Åπσ«óá - ïáíαáñ«α αÑΓα¿óÑα.fb2
09.30.2013 19:01:27.0 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Рычкова - Собаки от А до Я.fb2.zip@Éδτ¬«óá - æ«íᬿ «Γ Ç ñ« ƒ.fb2
09.30.2013 19:01:27.2 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Рычкова - Устройство и дизайн аквариума.fb2.zip@Éδτ¬«óá - ôßΓα«⌐ßΓó« ¿ ñ¿ºá⌐¡ á¬óáα¿π¼á.fb2
09.30.2013 19:01:27.8 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Рябинин - Вы и Ваш друг Рэкс.fb2.zip@É∩í¿¡¿¡ - éδ ¿ éáΦ ñαπú Éφ¬ß.fb2
09.30.2013 19:01:28.3 E ZipScanner Book.Parse() exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Сахаров - Техника дрессировки служебных собак.fb2.zip@æáσáα«ó - ÆÑσ¡¿¬á ñαÑßß¿α«ó¬¿ ß½πªÑí¡δσ ß«íá¬.fb2
09.30.2013 19:01:29.3 E FileScanner .ScanDirectory: exception Out of memory on file: /home/bravo123/Traum[FB2]/RU/_/_интересы/_животные/Сергиенко - Ваш щенок.fb2.zip@æÑαú¿Ñ¡¬« - éáΦ ΘÑ¡«¬.fb2
09.30.2013 19:01:32.6 I MainForm Database save time = 00:00:00.2627680, 7500 book records written to disk
По поводу дублей и падения, я ещё не нашёл, лог очень большой ...
Coordinator
Oct 1, 2013 at 3:04 PM
Хмм, "out of memory" - похоже на memory leak в DotNetZip-е (а может, и у меня).

Можешь уточнить: сколько RAM у PC под Windows (где сканируется, по твоим словам, нормально), и под Linux? Надо будет качнуть эту библиотеку, и посмотреть, что происходит при сканировании.
Oct 1, 2013 at 5:10 PM
Edited Oct 1, 2013 at 5:11 PM
Это всё на одном ноуте, память 3Г , процессор 1.8 два ядра, я прсто винты меняю, на одном у меня XP установлен на другом Ubuntu .
А ошибки в логе не только ZipScanner но и ещё FileScanner и другие, но везде Out of memory ...
Coordinator
Oct 1, 2013 at 5:36 PM
После скольки примерно файлов посыпались ошибки памяти? (база во время сканирования периодически сохраняется, и пишет в логе, сколько файлов уже внутри)
Качну сегодня эту библиотеку и поэкспериментирую, как будет время.
Oct 1, 2013 at 5:40 PM
Edited Oct 1, 2013 at 5:41 PM
Блин, я удалил лог и перезапустил сканирование под консольной версией, сформируется скажу. но так на вскидку довольно равномерно, примерно на 1000-1500 файлов 10 ошибок
вот сейчас у меня всего 2900 , ошибок : 28
Oct 2, 2013 at 12:17 PM
С консольной версией тоже ничего не получилось, почему-то до конца не отработало, вроде все книги просканировало и не завершилось (~12часов) пришлось ctrl-c жать, база маленькая 14М, в лог ничего не записало, хотя в параметрах стоит писать ...
Coordinator
Oct 2, 2013 at 1:24 PM
На счет лога - это да, баг (забыл добавить установку property). Библиотека Траума скачалась вчера; как выберу время - постараюсь протестировать, но сначала надо закончить с каталогом "Новые книги" (чтобы идти step-by-step).
Надеюсь, что консольную версию можно будет отлаживать прямо под Ubuntu (с GUI-шной были проблемы, а с консольной еще не пробовал).
Oct 15, 2013 at 10:25 AM
Edited Oct 15, 2013 at 10:26 AM
SeNS wrote:
Касательно переноса windows-базы: это возможно, только нужно менять относительные пути внутри базы. Добавлю в следующий релиз такую возможность (будет обрабатывать пути автоматом). Главное, не забыть переименовать базу ;)
А вот это уже работает? Прсто под линукс, у меня так и не вышло просканировать библиотеку полностью, в смысле всё равно 11259 книг с ошибками. на версии 1.2
Coordinator
Oct 15, 2013 at 12:49 PM
Да, это уже должно работать (вот тут https://www.dropbox.com/sh/7bdoinns0te2vwd/jjOI2U5wu7 )

А вообще попробуй поставить полный monodevelop (см. дискуссию тут https://tinyopds.codeplex.com/discussions/459372 )
Oct 15, 2013 at 1:11 PM
Так monodevelop и стоит, я ж в самом начале писал. Попробую из под винды базу впихнуть.
Coordinator
Oct 15, 2013 at 3:09 PM
А, сорри, подзабыл уже. Там в консольной версии была ошибка, не записывало базу; сейчас это исправлено.
Вообще, я пробовал сканирование в GUI под Ubuntu (на виртуалке) - все нормально отработало; база почти такая-же, как и из-под Windows (на незначительное количество книжек меньше, из-за особенностей парсера XML в mono. Параметры в виртуалке установлены достаточно скромные - RAM 2 GB всего.
Oct 15, 2013 at 7:05 PM
Ну не знаю в у бунте у меня периодически оут оф мемори , а в винде сейчас посканировалось, 1006 ошибочных книжек, ну на порядок лучше чем в убунте, и ошибки в основном про неверный символ или неправильно закрытый тег, проблем с памятью небыло, база в линуксе подцепилась нормально.
Странно что в первый раз на версии 1.1 , под виндой просканировало базу вообще без ошибок.
памяти на компе к стати 3Г .
ZipScanner  Book.Parse() exception "", шестнадцатеричное значение 0x15, является недопустимым знаком.
ZipScanner  Book.Parse() exception Ошибка при разборе EntityName.
ZipScanner  Book.Parse() exception "к" не является допустимым маркером. Ожидается маркер "=".
ZipScanner  Book.Parse() exception Открывающий тег "strikethrough" в позиции 31 строки 84 не соответствует закрывающему тегу "p".
вот такого плана ошибки.
Coordinator
Oct 15, 2013 at 8:09 PM
Ну, вполне нормальные ошибки на сделанные кривыми руками fb2 (fb2 == xml, если xml не валиден, то и fb2-книжка будет невалидной).

"Out of memory" я не видел на Ubuntu; могу смеха ради попробовать на RaspberryPi с 512 "метрами".
Oct 15, 2013 at 9:58 PM
Edited Oct 15, 2013 at 10:05 PM
Ну допустим, что fb2 , в этих книжках не валидный, но почему тогда если в ручную эти книжки в читалку загнать, они их седают и не морщаться? Если уж читалки эти ошибки игнорируют, есть ли смысл, так жестко проверять валидность в OPDS ?
Oct 15, 2013 at 10:32 PM
Edited Oct 15, 2013 at 10:52 PM
Вот к примеру ошибка :
10.15.2013 19:03:40.8   E   ZipScanner  Book.Parse() exception Знак " ", шестнадцатеричное значение 0x20, не может стоять в начале имени., строка 1281, позиция 64. on file: O:\MyHomeLib\MyLibs\Traum[FB2]\RU\Б\Батов Павел\Батов - В походах и боях.fb2.zip@üáΓ«ó - é »«σ«ñáσ ¿ í«∩σ.fb2
Строка 1281 в книжке:
<p>- Спасибо, так и сделаю... Я себе положил: побьем тут немпа< пойду на берег, поклонюсь матушке-Волге и тогда напишу в колхоз полный отчет. </p>
Да, тут лишняя угловая скобка, да ещё и опечатка, но нафига серверу OPDS, вообще эта строчка сдалась? Я конечно не специалист, но думается ему в тег <body> вообще лезть незачем, с него <description> достаточно.

Вот ещё:
Ошибка-
10.15.2013 19:15:58.1   E   ZipScanner  Book.Parse() exception Ошибка при разборе EntityName., строка 590, позиция 142. on file: O:\MyHomeLib\MyLibs\Traum[FB2]\RU\Б\Быстров Андрей\Быстров - Дороги рая.fb2.zip@üδßΓα«ó - ä«α«ú¿ αá∩.fb2
Строка 590 в книге, в позиции 142 амперсанд, что разве это невалидный символ? или его при вёрстке экранировать как-то надо?
<p>Этим украшения паровоза не исчерпывались. Кабину машиниста облагораживала надпись "MAKE LOVE, NOT WAR" , на тендере было написано "PEACE & MUSIC", а над колесами - "FLOWER POWER" под изображением цветка, засунутого в ствол винтовки. </p>
Coordinator
Oct 15, 2013 at 10:36 PM
Это не серверу, а парсеру FB2 из .NET есть дело :) Ну, не любит он невалидные xml (и правильно делает, кстати - невалидных xml вообще не бывает). А вот автору т.н. "тугамента" неплохо-бы ручонки-то повыпрямить - такая, с позволения сказать, "книжка" не должна проходить валидацию вообще нигде. Если кто и пропускает - то "сам лох" :)
Oct 15, 2013 at 11:04 PM
Edited Oct 15, 2013 at 11:04 PM
То-есть, парсер встречает невалидный символ генерит исключение и прекращает свою работу? и нельзя ему сказать например, эй парень, запиши эту хрень в лог и паши дальше? :) - если так, то это очень печальный и занудный парсер ...
Coordinator
Oct 16, 2013 at 2:44 AM
Да нет, так и должно быть по стандарту. XML - это язык с достаточно строгой лексикой (несмотря на всю гибкость представления данных). Базовых ограничений не так уж много (см. http://ru.wikipedia.org/wiki/XML ), но это - "законы, обязательные для исполнения", и игнорировать их просто нельзя.
Oct 16, 2013 at 7:54 AM
Да не так уж и нужны эти 1006 книг, в конце концов, бог, с ними,пройдусь по списку, нужные руками подправлю, но всё же повторюсь, все известные мне читалки читалки да и программы которыми они создавались, эти ошибки проигнорировали, вот не думаю что они в ручную теги разбирают, наверняка тоже парсером.