The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск каталогизатора домашней библиотеки MyLibrary 3.0, opennews (??), 22-Фев-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


50. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 25-Фев-24, 16:05 
Thanks for effort, как говориться, но автор, прикрутите к своему проекту какой-нибудь coderabbit (https://coderabbit.ai/) что ли. Живых ревьюверов для хоббийного опенсорса всегда найти трудно.

У вас проект, который по идее должен работать в среде адищенского бардака, а он вместо обработки ошибок делает, нпример, такое:

```
else
    {
      throw MLException(
      "PDFParser::pdf_annotation_n_cover: pdf file has not been opened");
    }
```

Ну не срослось с конкретной pdf-кой, какого ж черта это прям конец света-то?

Ответить | Правка | Наверх | Cообщить модератору

51. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 25-Фев-24, 17:13 
> Ну не срослось с конкретной pdf-кой, какого ж черта это прям конец света-то?

Почему - конец света? Это исключение по идее там же в коде и обрабатывается, без завершения программы. Если я нигде не ошибся.

Ответить | Правка | Наверх | Cообщить модератору

52. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 25-Фев-24, 21:59 
Ну судя по логам в https://github.com/ProfessorNavigator/mylibrary/issues/11 - таки где-то ошиблись. Я конечно так-себе кассандра, на ваш почти глобальный указатель bie и то что вы его .reset по делу и не очень (https://github.com/ProfessorNavigator/mylibrary/blob/3982a8a...) - оставляет ощущение недодуманности всей этой кухни.

И да, "ваш КО" - где ваши юнит-тесты, сэр?

Ответить | Правка | Наверх | Cообщить модератору

53. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 25-Фев-24, 23:02 
> Ну судя по логам в https://github.com/ProfessorNavigator/mylibrary/issues/11 - таки где-то ошиблись.

Таки нет. Первая причина "цветастого" лога там была в использовании неродной для файловой системы кодировки имени файла. И тут как бы я мало что могу сделать. Потому что есть два способа определять тип файла - по расширению и по содержимому. Оба имеют свои плюсы и минусы. MyLibrary определяет по расширению. А для этого расширение сначала нужно корректно прочитать. Кое-что я подправлю, ошибок в логе будет меньше, но файлы при этом читаться лучше не станут. Вторая причина, по которой программа собственно падала - rar архивы. Об этом есть предупреждение в README, и опять же я в данном случае мало что могу сделать. Ибо формат проприетарный, поддержка его осуществляется через стороннюю библиотеку. А падает как раз именно она. Баг я у них подвесил, опциональное отключение поддержки rar архивов сделал - будет в следующем релизе. На этом мои возможности заканчиваются.

> Я конечно так-себе кассандра, на ваш почти глобальный указатель bie и то что вы его .reset по делу и не очень (https://github.com/ProfessorNavigator/mylibrary/blob/3982a8a...) - оставляет ощущение недодуманности всей этой кухни.

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

> И да, "ваш КО" - где ваши юнит-тесты, сэр?

Я стесняюсь спросить - а зачем они тут? Каждую функцию я проверяю по мере написания/внесения изменений. С запуском всего этого дела через дебагер и проверкой конечного результат. Step by step. Что-то тестировалось отдельно от основного кода, например классы LibArchive и XMLParser. Ну так конечный результат тестирования собственно и попал в основной код программы, зачем там что-то ещё? А для тестов программы в целом у меня отдельно лежит специальный набор книг и архивов, особо замороченных. Теперь к ним добавится ещё один.

Ответить | Правка | Наверх | Cообщить модератору

56. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 27-Фев-24, 15:20 
> На этом мои возможности заканчиваются.

Ну можно еще:
1. Обложить try-except-ом и аккуратно все ловить и обрабатывать
2. Если оно в core dump-ит, то вынести в отдельный процесс эти рарчики, и следить за ним снаружи

> Таки разберитесь, что это вообще такое, и всё станет сразу понятно.

Да, стало
1. bie указатель на _экземпляр_ класса BookInfoEntry, который возвращает get_book_info.
2. Вы в 277-й строке bie.reset() вызываете, и забываете, что там раньше было
3. В 280-й строке ваш get_book_info может raise MLException, правильно? Но это должно произойти _до_ того, как ваш bie получит новое значение, правильно?
4. Однако, в 285-й строке вы зачем-то снова делаете bie.reset. Значит, одно из двух - либо это копипаста (и вот как раз такие штуки ловят нормальные ревьюверы и иногда - ИИшечка), либо ваш bie может откуда-то получить значение параллельно всему этому, и вы его reset чтобы не разбираться и не заморачиваться с аккуратным параллельным программированием.

> Я стесняюсь спросить - а зачем они тут?

Плавали-знаем. Да, так технически можно разрабатывать хобби-проект и _технически_ - это ок.
Из опыта - с ростом кодовой базы и сложности - бегать по всему коду с дебаггером на каждый чих становится все более и более сложно. Стесняюсь спросить - а почему переписать с нуля это-вот-все оказалось проще, чем инкрементально развивать? Неужели сложность крышу проломила?

Выкладывать в опенсорс проект, в котором тестов нет никаких - очень _этически_ сомнительное действие. Потому что кроме прямого действия - "читалка библиотеки опенсорсная" - у проекта есть и косвенное действие, даже два:

1. Вы демонстрируете свой код другим разработчикам, и они впитывают (до какой-то степени, естественно) ваши паттерны поведения. И паттерн - "пройдусь дебаггером и так сойдет" - он вреден. Как и паттерн - "юзер сам виноват что мой код у него падает - это опенсорс, я сделаль, берите-что-дают-а-то-и-эти-кончатся"

2. Вы демонстрируете свой код потенциальным коллегам и работодателям (да, люди читают гитхабчики других людей!) И паттерны поведения, как технического так и личностного, могут ограничить ваши карьерные перспективы.

Кстати - пойти и зафайлить багу в библиотечке rar-чиков - это прям хорошо и правильно, keep doing!

Ответить | Правка | Наверх | Cообщить модератору

58. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 27-Фев-24, 18:29 
> Ну можно еще:
> 1. Обложить try-except-ом и аккуратно все ловить и обрабатывать
> 2. Если оно в core dump-ит, то вынести в отдельный процесс эти рарчики, и следить за ним снаружи

Там SIGILL вылазит. Можно сделать обработку сигнала, но она всё равно должна заканчиваться exit. По крайней мере, насколько я понял из чтения документации. Т.е. в лучшем случае можно перед носом пользователя подвесить на несколько секунд сообщение вида, "Хьюстон, у нас проблема", но не более того. Игнорировать же такой сигнал я бы не стал - неизвестно, чем это может закончится.

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

Нет, просто банальная перестраховка. Так-то да, если там вылетит исключение, то bie по идее должен остаться nullptr, и reset действительно лишний. Уберу потом.

> Стесняюсь спросить - а почему переписать с нуля это-вот-все оказалось проще, чем инкрементально развивать? Неужели сложность крышу проломила?

Нет, просто предыдущая версия была кривовата изначально. Я сопоставил объём работы по переписыванию всего этого дела кусками, с возможным поиском ошибок (а они возникнут неизбежно), с полным переписыванием и понял, что оно то на то и выйдет. Плюсом, предыдущая версия была, мягко говоря, не очень предназначена для встраивания нового функционала. Опять же из-за кривоватой изначальной структуры. А хотелось кое-чего добавить. Дизайн кривоватый был, потому что когда проект начинался - я не очень представлял, что в конечном итоге хочу получить. В плане конкретного функционала. К третей версии же уже сложилось общее понимание, что от программы хочу я, чего хотят пользователя, и как это всё можно реализовать с учётом моей компетенции в программировании.

> 1. Вы демонстрируете свой код другим разработчикам, и они впитывают (до какой-то степени, естественно) ваши паттерны поведения. И паттерн - "пройдусь дебаггером и так сойдет" - он вреден. Как и паттерн - "юзер сам виноват что мой код у него падает - это опенсорс, я сделаль, берите-что-дают-а-то-и-эти-кончатся"

Я всё понимаю, ключевой вопрос тут во времени. Ну и в самой архитектуре проекта - я не очень вижу, где там можно всунуть серьёзные юнит-тесты. Те, что писал я, занимали максимум 10-20 строчек кода, и накидать их можно и так, на коленке за 10 минут в случае возникновения необходимости. Что называется "по месту".

> 2. Вы демонстрируете свой код потенциальным коллегам и работодателям (да, люди читают гитхабчики других людей!) И паттерны поведения, как технического так и личностного, могут ограничить ваши карьерные перспективы.

Расскажу коротко, кто я и что я, тогда может быть станет понятней, почему оно всё так, как есть. Образование моё - морская академия. После чего я работал сначала третьим, потом вторым помощником капитана. С морем, так получилось, завязал в 2017 году. Примерно в это же время занялся программированием. Но не с целью каких-то карьерных перспектив, а потому что понадобилось обрабатывать большое количество цифр. Что, скажем, в каком-нибудь офисном пакете делать в принципе можно, но, мягко говоря, не очень удобно. Курсов никаких не заканчивал, всё исключительно самообразованием. Данная программа появилась давно, гораздо раньше, чем попала в публичный доступ. Просто в один день перестала нормально работать штатная, которая прилагалась к одной библиотеке, и я на коленке за неделю сварганил замену. Под ту конкретную библиотеку. Ну и опять же, чтобы вы несколько представляли круг моих интересов: http://samlib.ru/editors/b/bobylew_j_w/society.shtml

Ответить | Правка | Наверх | Cообщить модератору

61. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 27-Фев-24, 20:01 
> Там SIGILL вылазит. Можно сделать обработку сигнала, но она всё равно должна заканчиваться exit.
> По крайней мере, насколько я понял из чтения документации. Т.е. в лучшем случае можно перед
> носом пользователя подвесить на несколько секунд сообщение вида, "Хьюстон, у нас проблема",
> но не более того. Игнорировать же такой сигнал я бы не стал - неизвестно, чем это может закончится.

Поиграйтесь с запуском процессов и анализом результатов их работы - это полезное умение не только в контексте этого проекта. Можно, например, все ошибки в отдельный списочек складывать, или даже в отдельный файлик писать и после всего выдавать сообщение - "Дорогой юзер, у нас тут возникло N проблем, тыкни сюда если интересен весь список"

> Что, скажем, в каком-нибудь офисном пакете делать в принципе можно, но, мягко говоря, не очень удобно. Курсов никаких не заканчивал, всё исключительно самообразованием.

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

Ответить | Правка | Наверх | Cообщить модератору

62. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 28-Фев-24, 13:37 
> Можно, например, все ошибки
> в отдельный списочек складывать, или даже в отдельный файлик писать и
> после всего выдавать сообщение - "Дорогой юзер, у нас тут возникло
> N проблем, тыкни сюда если интересен весь список"

Да, у меня была мысль сделать класс Logger, который будет заниматься выводом ошибок в консоль или сохранением их в файл, по выбору пользователя. С отметками времени. Пока просто руки не дошли.

> Это одна из траекторий по которым проходят люди. Программирование как скилл, даже
> если он не основная специальность - может быть очень полезным во
> всех смыслах.

На самом деле, на мой личный взгляд, если вы пользуетесь неким устройством, то вы должны знать, как оно работает. Хотя бы основные принципы. В том числе на уровне физики. Поэтому общее представление о работе программ, о понятиях "язык программирования", "компилятор", "интерпретатор", их связи, должен иметь каждый, кто садиться за компьютер. Иначе он просто будет представлять опасность для себя и окружающих (в худшем случае), или будет создавать проблемы на ровном месте и себе, и всем вокруг (в лучшем случае).

Ответить | Правка | Наверх | Cообщить модератору

57. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 27-Фев-24, 15:56 
> А для тестов программы в целом у меня отдельно лежит
> специальный набор книг и архивов, особо замороченных. Теперь к ним добавится
> ещё один.

Воот - этот набор и есть ваши тесты. Это конечно e2e, но это _сильно_ лучше чем ничего. А на гитхабе - ничего. Грубо говоря, если я у вас багу найду и на своих книжках проверю, а на ваших оно сломается - мы потратим кучу времени на разборки что-да-как-да-почему. А так - вы тесты выложили, кто угодно их взял и проверил, что не то что есть не сломалось - и вам хорошо и проекту

Ответить | Правка | К родителю #53 | Наверх | Cообщить модератору

59. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 27-Фев-24, 18:38 
> Воот - этот набор и есть ваши тесты. Это конечно e2e, но
> это _сильно_ лучше чем ничего. А на гитхабе - ничего. Грубо
> говоря, если я у вас багу найду и на своих книжках
> проверю, а на ваших оно сломается - мы потратим кучу времени
> на разборки что-да-как-да-почему. А так - вы тесты выложили, кто угодно
> их взял и проверил, что не то что есть не сломалось
> - и вам хорошо и проекту

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

Ответить | Правка | Наверх | Cообщить модератору

60. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от Аноним (50), 27-Фев-24, 19:41 
Ну вот, докопались до правообладателей. Они может и вымрут, но контроля над этим у нас с вами нет.

И тут мы и приходим к идее синтетических тестов - грубо говоря, напоролись вы в _реальной_ книжке на некую проблему - крокозябра в имени файла не читается, например. Вы ее сейчас, открыв дебагер, находите и фиксите - это занимает полчаса, к примеру. Если в этом месте (когда у вас все в голове, это важно!) добавить еще 5 минут на то, чтобы из ничего и _под своим копирайтом_ создать тестовую _не книжку_ которая ведет себя по отношению к программе так же - вы получившийся тест можете спокойно публиковать. Со временем набор тестов будет расти, но прогонять код по ним каждый раз будет в разы быстрее, чем по реальной библиотеке. В итоге эти 5 минут инвестированного времени сейчас окупятся в вашем проекте вдолгую.

Ответить | Правка | Наверх | Cообщить модератору

63. "Выпуск каталогизатора домашней библиотеки MyLibrary 3.0"  +/
Сообщение от ProfessorNavigator (ok), 28-Фев-24, 14:23 
> Ну вот, докопались до правообладателей. Они может и вымрут, но контроля над
> этим у нас с вами нет.

На самом деле есть, но это опять же отдельный разговор.

>[оверквотинг удален]
> напоролись вы в _реальной_ книжке на некую проблему - крокозябра в
> имени файла не читается, например. Вы ее сейчас, открыв дебагер, находите
> и фиксите - это занимает полчаса, к примеру. Если в этом
> месте (когда у вас все в голове, это важно!) добавить еще
> 5 минут на то, чтобы из ничего и _под своим копирайтом_
> создать тестовую _не книжку_ которая ведет себя по отношению к программе
> так же - вы получившийся тест можете спокойно публиковать. Со временем
> набор тестов будет расти, но прогонять код по ним каждый раз
> будет в разы быстрее, чем по реальной библиотеке. В итоге эти
> 5 минут инвестированного времени сейчас окупятся в вашем проекте вдолгую.

Мысль здравая. Но есть пара "но". Во-первых, никто не гарантирует, что вы сами при создании тестов ошибок в формате не наделаете. Скажем, fb2 - это ещё нормально (есть вполне читаемая xsd схема формата https://github.com/gribuser/fb2/tree/master). С epub же - там всё сложно. В плане документации. На первый взгляд она очень подробная, только вот пользоваться ей непросто. Потому что писали её, на мой взгляд, ... не очень умный человек. Или юрист. У которого цель была не формат описать, а отмазаться ото всех мыслимых и немыслимых претензий. Цели он достиг, только вот для реального использования результат мало подходит.

Во-вторых, сами пользователи и программисты. Моя фантазия пасует перед их "изобретательностью". MyLibrary например пытается определить кодировку текста тремя различными способами. Первый - прочитать из заголовка xml. Второй - определить средствами icu по содержимому всего текста. Третий - опять же средствами icu попытаться определить кодировку текста каждой читаемой строки (точнее - xml тега) индивидуально. Включаются они последовательно, если результат предыдущего - неудовлетворительный. И тем не менее, на 500000 книг нашлось штук двадцать, где кодировку определить так и не удалось. А ведь есть ещё Windows, где программисты любят использовать для нелатинских алфавитов wchar_t (и для этого пришлось отдельно извращаться, потому что бОльшая часть нормальных людей сохраняет всё через обычный char). Или есть вообще уникумы, которые в fb2 засовывают текст в т.н. формате "html". Это когда символы записываются в виде "&#<номер_символа_в_юникоде>". Хотя это вообще ни в каких стандартах толком не прописано. У меня целый день ушёл на то, чтобы понять что это вообще такое, и как его читать. А внятного описания этого формата я так нигде и не нашёл - просто догадался.

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

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


Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру