The OpenNET Project / Index page

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

Опубликована библиотека urm для Python

14.01.2021 09:30

Доступна библиотека urm.py с реализацией URM (UnRelational Mapper) для языка Python. Проект может оказаться полезным, когда требуется сохранить какие-нибудь данные не в реляционной базе данных, а в нереляционном хранилище, таком как файловая система, архив, облачное хранилище, NoSQL-база.

Примеры библиотек, в которых необходимы подобные манипуляции:

  • Библиотека UniGrammarRuntime должна уметь читать с диска несколько вариантов (сгенерированных разными генераторами, поддержка которых реализована в UniGrammar в виде бэкендов) парсера для одной и той же грамматики. Парсер может состоять либо из одного файла (файл грамматики в DSL-виде, для parsimonious и tatsu), либо из нескольких (лексер + парсер в транспилированном виде (ANTLR4, CoCo/Py), или 1 файл с транспилированным кодом + 1 файл с байт-кодом (parglare), или, если грамматика модульная, то все модули (пока не реализовано в UniGrammar), причём раскладка по диску должна быть такова, чтобы корректно импортировалось ). Также желательно хранить результаты измерений их производительности. Пример 1, пример 2.
  • В артефактах библиотеки AutoXGBoost необходимо хранить пары файлов, один из которых - модель в одном из поддерживаемых форматов (а их на данный момент 3 - бинарный, транспилированный в AST python с помощью pyxgboost (можно проводить inference без установленного xgboost) и json), а второй - информация о колонках, необходимая для правильного проведения inference и прочие метаданные. И ещё есть файл с гиперпараметрами, который имеет решающее значение при повторной тренировке модели. Ещё планируется добавить туда LightGBM и CatBoost и конвертацию между форматами моделей.

В описанных примерах есть общее:

  • Данные имеют смысл как файлы. Их можно вырвать из контейнера и использовать без него. Но это будет неудобно - контейнер предоставляет дополнительные данные для унифицирующей обвязки.
  • Для гибкости требуется хранить дополнительную информацию. Эта информация должна быть связана с файлами, а хранилище у нас нереляционное.
  • Дополнительную информацию приходится серилизовывать. Нет бесплатного лэнча, есть разные форматы сериализации с разными достоинствами и недостатками. Например YAML красиво выглядит, JSON компактнее и при этом совместимее, бинарные форматы по типу JSON ещё компактнее и не нуждаются в "спасении" строк. Нужно иметь свободу выбирать тот формат, какой наиболее подходит для конкретной задачи. И легко переключать, при изменении требований.
  • Не всегда можно контролировать раскладку файлов. В архитектуру сторонних программ могут быть встроены предположения о том, как файлы лежат на диске. Например если файлы - модули какого-либо ЯП, то импортируемые модули должны лежать относительно импортирующих по известным путям. Можно извратиться с загрузчиками, это приведёт к проблемам (для отладки которых пришлось даже разработать FrozenTable).

Соответственно, имеется 3 критерия:

  • явно-неявно - понятность при взгляде на код, возможность наличия не очевидного с первого взгляда для человека не знакомого с работой системы поведения и необходимость разбираться в системе;
  • легко-трудоёмко - затраты труда и времени на написание и сопровождение;
  • гибко-негибко - будем ли реализовывать всё многообразие.

с предпочтением "явно, легко, гибко", и треугольник "выбери два":

  • явно, легко, негибко - выбрать и написать 1 вариант вручную полностью;
  • явно, трудоёмко, гибко - написать весь код вручную, а потом удалить весь этот код, потому что поддерживать и отлаживать такое нет никакого желания;
  • неявно, легко, гибко - использовать композицию.

В некоторых случаях может быть целесообразно выбрать третий вариант, особенно если писать код вручную не надо, а нужно только освоить готовую библиотеку - urm.py. urm - значит UnRelational Mapper, созвучно с ORM.

Сначала определимся с хранением и сериализацией. И то, и другое инкапсулировано в библиотеку. Всё тривиально: есть интерфейс и несколько классов, один метод распаковывает и парсит, другой сериализует и жмёт, и можно объединять в конвейеры "распаковать из LZMA2 -> декодировать в UTF-8 -> распарсить JSON" (и в обратную сторону тоже работает). Кроме urm эта библиотека используется в Cache.py.

Набор частей данных, связанных друг с другом, хранимый в хранилище, назовём bundle ("свёрток"). Ему соответствует класс ProtoBundle (который основан на метаклассе, создающем нужные дескрипторы), от которого нужно унаследовать свой класс. А в нём есть дескрипторы, получая и устанавливая значения в которые мы читаем/пишем в хранилище.

Хранилищ 2 вида, "горячие" и "холодные", холодные для хранения, горячие - для кеширования. Пример холодного хранилища: файл на диске, хранящий данные, сериализованные конкретной схемой сериализации. Пример горячего хранилища - префиксное дерево.

2 вида свойств: 0-мерные (скалярные) и многомерные. К скалярным обращаться нужно через само свойство, к многомерным - через оператор [].

Между дескриптором, свёртком и хранилищами у нас располагается стратегия. Стратегии две:

  • холодная - читает и пишет в холодное хранилище незамедлительно;
  • кешированная - читает из кеша, если кеш пуст - из холодного хранилища, при установке значения пишет в кеш, запись в холодное хранилище производится только тогда, когда вызывается `save` у "свёртка". Есть возможность вызвать `save` для отдельного свойства.

Стратегии параметризуются просто отображателями (Mapper). Просто отображатели бывают холодными (ColdMapper) и горячими (HotMapper). Каждый отображатель - это как минимум пара связанных объектов:

  • отображатель ключей, преобразующий "ключи", родные для холодного хранилища, в ключи, удобные для доступа в приложении (используются в горячем хранилище).
  • хранитель, сохраняющий данные в холодные и горячие хранилища.

Холодный отображатель получает ещё конвейер преобразователей. Горячий, соответственно, не получает, так как горячее хранит данные в формате, удобном для хранения.

Для выражения отношений между хранимыми сущностями через Dynamic задаётся путь по именам свойств с корнем в объекте-"свёртке". В остальных классах присутствует логика, проверяющая, является ли параметр или его компонент Dynamic, и если является - проходящая по указанному в нём пути и использующее полученное значение.

  1. Главная ссылка к новости (https://github.com/KOLANICH-li...)
  2. OpenNews: Выпуск Python-библиотек Bind.py и RichConsole.py
  3. OpenNews: Выпущен первый релиз Issuer, бота для автоматической модерации issues на GitHub
  4. OpenNews: Экспериментальный API для редактирования about:config из WebExtensions
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/54400-urm
Ключевые слова: urm, python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (58) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.12, Аноним (12), 10:35, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    https://github.com/KOLANICH-libs/transformerz.py может работать как конвертер форматов json <-> yaml ... ?
     
     
  • 2.17, Аноним (17), 11:23, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не из коробки При композиции трансформеров композитный трансформер вызывает мет... большой текст свёрнут, показать
     
     
  • 3.61, Аноньимъ (ok), 01:51, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я вот тут битый час вас слушаю, случайно.
    И вот скажу, что поэтому вас питонистов никто и не любит, потому что фремворки гигабайтные для парсинга XML в json придумываете, недорого. Ни вас ни жаваскриптеров.
     
     
  • 4.74, Аноним (74), 11:55, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    XML для чтения машинами и человеку неудобен. XSLT - вкус мазохиста.

    Есть люди попроще, которым просто работать надо. Без экзерсисов на XSLT.

     

  • 1.15, Аноним (15), 11:09, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    этот чудо-маппер написал чувак, ранее написавший т. н. "Issuer" - https://www.opennet.me/opennews/art.shtml?num=53420

    Причем новость про т.н. "Issuer" от июля прошлого года, а в репе ровно один коммит от декабря того же года, что говорит о том, что он всегда подчищает историю коммитов, чтобы не было видно, что изменилось.

     
     
  • 2.18, Аноним (17), 11:36, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –24 +/
    Я обычно подчищаю историю коммитов просто коммичу с --amend , но не чтобы не бы... большой текст свёрнут, показать
     
     
  • 3.19, Аноним (19), 11:44, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Зачем тебе коммиты тогда, чудила? Сохраняй в архивы годмесяцдень_1, 2, 3 и не захламляй больше мой гитхаб говнорепами
     
     
  • 4.39, An O Nim (?), 16:02, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Коммиты нужны для сохранения полезной истории. Для возможности выборочного переноса изменений. Для пояснения в большой группе кто что когда сделал, чтобы спросить объяснений.

    Львиная доля коммитов может быть схлопнута в один. Когда автор один, все коммиты могут быть схлопнуты в один коммит на одну версию релиза.

     
  • 3.20, Аноним (15), 12:00, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ошибочное суждение История коммитов нужна не только разрабам, но и пользователя... большой текст свёрнут, показать
     
     
  • 4.24, Аноним (17), 13:04, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    В инструкции к Issuer явно написано, что рекомендуется делать свой форк, и его у... большой текст свёрнут, показать
     
  • 3.22, Аноним (22), 12:15, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Автор, ты болван. (С)
     
     
  • 4.51, Sw00p aka Jerom (?), 21:42, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вам бы майкрософт попросить, чтобы открыли исходный код винды, да еще с историей изменений. Думаю они пошлют вас на три буквы, а вы как думаете? Или попросите Линуса не материться в рассылке :) А лучше, попрошу вас, будьте любезны, избавьте опеннет от таких коментариев.

    пс: Вам кобылу подари, а вы в зубы смотрите. Автор, никому ничем не обязан!

    https://ru.wiktionary.org/wiki/%D0%B4%D0%B0%D1%8

     
  • 4.75, Аноним (74), 11:58, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Автор, ты болван. (С)

    Займитесь уже собственным унылом умом. А автору спасибо за подаренный труд, сделал и поступил хорошо.

     
  • 3.27, Ivan_83 (ok), 14:24, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вам ещё учится и учится.

    1. Даже когда автор один, бывает надо вспомнить как оно раньше было и как было исправлено.
    Бывает надо откатить изменения, потому что фикс поломал что то другое.

    2. Места оно занимает минимум. На скорость клонирования не влияет практически ни как, тк гит хранит большие паки где все запаковано. А клонирование вообще редкая операция.
    Ну и жалобы из этой серии можно начинать когда у вас в репозитории больше гигабайта файлов лежит и хотя бы 50к коммитов.
    Насчёт захламления вида - серьёзно!?

    3. Если у вас падает notepad++ и стирает файл то явно делате что то сильно не правильно, даже как вендузятник.

     
     
  • 4.31, Аноним (17), 15:08, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Предлагаю склонировать репозитории hg и гита hg почему-то клонирует намного быс... большой текст свёрнут, показать
     
     
  • 5.56, банан (?), 22:41, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ни разу не видел чтобы хоть кто-то пренебрегал историей изменений.
     
  • 5.60, Ivan_83 (ok), 00:59, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Какой репозиторий то?
    на 10мб и 1к коммитов - там разница будет секунд 5-10 в худьшем случае.

    Для CI клонирование одна из самых быстрых операций, для таких мелких репозиториев.

    Я рад за вас и ваш конфиг, но как минимум compression = 9 тут практически бесполезен, это огромный перекос в сторону жора проца с минимальным профитом по размеру.
    Опять же, вы можете делать правки хоть в бумажном блокноте, почему вы думаете что ваши пользователи должны от этого страдать?

    Я даже не знаю, продайте мобилку и докупите ещё 2 гига в свой компьютер. Или на свалке поищите, такой хлам уже повыбрасывали.
    Опять же, почему notepad++ а не pycharm или ещё какая вменяемая IDE для петонистов!?
    В общем даже kate/geany и то интереснее будут на линуксе то.

     
  • 4.59, пох. (?), 00:06, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуй, просто оставлю это здесь:
    https://github.com/lizardfs/lizardfs/commit/d61a93e397f5692373dfefb79f34b6b9c5
    Тут все прекрасно - и фикс, и та "проблема" которую он фиксит, и то что километр копипасты  перемешан с одной строкой реального исправления (найди ее, для тренировки ;-) и причина, вызвавшая этот километр опасных (ибо копипаста и где-нибудь _обязательно_ промазали) изменений в и так неизлечимо больном коде.

    И да, на самом деле это три комита. Раздельных.

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

    "ваша история никому не нужна" - это только для lkml и тому подобных помоек. Где действительно никто не собирается потом в твоем коде ничего исправлять.

     

  • 1.21, Atterratio (ok), 12:11, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Люди, вы чё?! Как это пропустили и оно у меня в ленте оказалось? Сегодня не первое апреля, и не первое января кончайте бухать!
     
  • 1.23, Аноним (22), 12:16, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ух ты, корчеватель!
     
  • 1.25, Rodegast (ok), 14:12, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Проект может оказаться полезным, когда требуется сохранить какие-нибудь данные в нереляционном хранилище, таком как файловая система, архив, облачное хранилище, NoSQL-база.

    А почему бы сразу не сохранять данные там где потребуется без сторонних библиотек?

     
     
  • 2.26, Аноним (26), 14:17, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем делать просто если можно сделать сложно ?
     
  • 2.35, Аноним (17), 15:16, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я поначалу так делал. Пришлось слишком много почти одинакового кода написать. А потом весь этот код править при улучшении UniGrammarRuntime и UniGrammar, не забывая о нюансах каждого отдельного бэкенда. Слишком трудоёмко. После разработки и внедрения этой либы стало намного легче.
     
     
  • 3.41, Rodegast (ok), 17:09, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Про абстрагирование не слышал?
     
     
  • 4.42, kai3341 (ok), 17:17, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вроде эта либа как раз про абстрагирование. Правда, её назначение для меня ещё туманно. Но это потому, что таких задач у меня ещё не было)
     

  • 1.28, Ivan_83 (ok), 14:26, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Автор малость того, спасайся кто может :)
     
  • 1.29, YetAnotherOnanym (ok), 14:45, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прям не новость, а целый тьюториал...
     
     
  • 2.33, Аноним (17), 15:13, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я по нему новость и писал.

    Вот полная версия: https://nbviewer.jupyter.org/github/KOLANICH-libs/urm.py/blob/master/tutorial.

     

  • 1.30, Кот (??), 14:59, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья[1]. Можно покупать и т.п. возможности как в Daggerfall. И враги 3-хмерные тоже, и труп тоже 3д. Можно прыгать и т.п. Если играть за охрану дворца то надо слушаться командира, и защищать дворец от злого (имя я не придумал) и шпионов, партизанов эльфов, и ходит на набеги на когото из этих (эльфов, злого…). Ну а если за злого… то значит шпионы или партизаны эльфов иногда нападают, пользователь сам себе командир может делать что сам захочет прикажет своим войскам с ним самим напасть на дворец и пойдет в атаку. Всего в игре 4 зоны. Т.е. карта и на ней есть 4 зоны, 1 - зона людей (нейтрал), 2- зона императора (где дворец), 3-зона эльфов, 4 - зона злого… (в горах, там есть старый форт…)

    Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее… поставить протез. Сохранятся можно…

    P.S. Я джва года хочу такую игру.

     
     
  • 2.32, Аноним (17), 15:11, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Все ваши серьёзные пожелания и хотелки (я знаю, что они у вас есть, они у каждого есть) вам может иметь смысл отправить на https://github.com/open-source-ideas/open-source-ideas
     
  • 2.45, не ждущий благодарности аноним (?), 17:39, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://store.steampowered.com/app/1377560/_/
     
     
  • 3.48, Аноним (48), 20:31, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Добавил, буду ждать.
     
     
  • 4.50, Кот (??), 21:25, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Джва года?
     

  • 1.34, Аноним (34), 15:15, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Что эта трешачина делает в новостной ленте?!
     
     
  • 2.36, Аноним (17), 15:26, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Требую аргументировать, где конкретно трешатина, со ссылками на исходный код и вашими комментариями, что конкретно вам не нравится в архитектуре. Не тут, а в issue на  GitHubе. Все ваши идеи по улучшению - туда же. Всё излагать на английском языке.

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

     
     
  • 3.37, Аноним (48), 15:38, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А излагать на английском языке - на таком же как в проекте - полуграмотном гугле транслете? Зачем же так себя мучить, потом тебе же переводить назад прийдется.
     
  • 3.38, Ватрушка с шурупами (?), 15:44, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Сколько пользователей у данной очень нужной и полезной либы?
     
     
  • 4.40, Аноним (17), 16:05, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Как минимум 1. Любая либа начинает с 1 пользователя.
     
     
  • 5.57, Аноним (22), 23:51, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как максимум - тоже.
     
     
  • 6.67, Ты идиот (?), 16:35, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Уж у твоих то либ юзеров миллиарды🤣🤣🤣
     
  • 4.43, kai3341 (ok), 17:20, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Сколько пользователей у данной очень нужной и полезной либы?

    Эта либа решает проблемы хотя бы одного пользователя, чем выгодно отличается от тебя

     
  • 3.47, Аноним (47), 20:04, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Требую аргументировать, где конкретно трешатина, со ссылками на исходный код

    Трешачина прямо в тексте новости, из которого совершенно непонятно, что это за хрень и для чего она нужна. А *требовать* от занятых людей лезть в твой онокод — просто край наглости.

     
     
  • 4.52, Аноним (17), 21:59, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Трешачина прямо в тексте новости, из которого совершенно непонятно, что это за хрень и для чего она нужна.

    Читать внимательно надо.

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

     
     
  • 5.54, Аноним (47), 22:15, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И? Чем это лучше, чем напрямую писать в файл?
    Тут отвечать не надо. Лучше перечитай новость и исправь её так, чтобы стало понятно сразу при её прочтении. Не мне, а каждому. Мне уже из отсутствия у автора культуры работы с СКВ понятно, что к проекту даже приближаться не стоит.
     
  • 3.55, Аноним (55), 22:20, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Требую аргументировать, где конкретно трешатина

    Трешачина это текст новости созданный машинным переводом.

     
     
  • 4.68, Sgt. Gram (?), 19:42, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В машинном переводе не могло появиться слово "серилизовывать".
     
  • 3.69, Аноним (69), 00:21, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Можно я все-таки тут пару строк оставлю. Гитхаб давно уже не годится для свободной разработки, его слили жадные п-сы другим жадным п-сам.
    По существу:
    1. type annotations это трэш и захламление кода, тем более что типы автоматически не проверяются
    2. хотелось бы видеть более ясные имена, вот, например, Dynamic - это скорее прилагательное, чем существительное, а для классов все же лучше существительные
     
     
  • 4.71, Аноним (17), 03:39, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо за отклик Это прежде всего документация Проверку типов через mypy в Gi... большой текст свёрнут, показать
     
     
  • 5.73, Аноним (69), 04:32, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Это прежде всего документация.

    Ее лучше в docstring запихать. ИМХО гораздо приятнее видеть чистое определение функции и затем исчепывающий Args: в docstring на человеческом языке чем нагромождение закорючек. И не забывайте про micropython.

     

  • 1.46, Аноним (46), 19:27, 14/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Сначала выдумываем всякую ерунду, мучаемся с ней потому что кривое. Потом создаём монстролибы.
     
     
  • 2.49, Аноним (-), 21:16, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ни секунды не сомневаюсь, что и десятой части от подобной ерунды не способен придумать, только с*рать на форуме таких же как ты дегенератов горазд
     
     
  • 3.58, Аноним (22), 23:53, 14/01/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Эк автора бомбануло. Вы тут нас облагодетельтвовать решили вашим ненужным поделием, а мы не оценили?

    Ничего, бывает.

     
     
  • 4.62, Аноним (62), 01:53, 15/01/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А я не автор, что еще раз подтверждает твою и 95% местных комментаторов-дегенератов тупость
     

  • 1.63, Аноним (69), 04:55, 15/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Круто. Буду использовать.
     
  • 1.64, Аноним (64), 07:22, 15/01/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Либа, может, и полезная, но текст новости так оформлять нельзя – он больше о том, как она работает, что умеет и как ею пользоваться, чем о том, зачем она нужна. Если лень описывать чем она полезна, то начинать стоило с примеров того, где она уже используется.

    P. S. Коляныч, привет тебе от бывшего участника лохерзталка! Периодически вижу тебя то тут, то там, всегда рад встретить знакомого человека :-)

     
     
  • 2.70, Аноним (17), 03:11, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Либа, может, и полезная, но текст новости так оформлять нельзя – он больше о том, как она работает, что умеет и как ею пользоваться, чем о том, зачем она нужна. Если лень описывать чем она полезна, то начинать стоило с примеров того, где она уже используется.

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


    P.S. Мир тесен, а отрасль ещё теснее :) Рад, что с моими интернет-знакомыми всё в порядке.

     
     
  • 3.72, Аноним (17), 03:49, 16/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    P.P.S. Архангел, насколько мне известно, успел переехать в Польшу до активной фазы боевых действий на Донбассе.
     
     
  • 4.76, Аноним (76), 13:08, 27/01/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, я слышал об этом.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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