Обновить
-12
0
Коля@SbWereWolf

программист эникейщик

Отправить сообщение

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

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

Я использовал ChatGPT, который выдаёт ответ, но как правило первый ответ неирабочий, иногда ошибку сразу видно. Если на ошибку указать, то он её исправляет, а иногда нет. Такое ощущение, что ошибки он допускает намеренно.

Я не пишу на Delphi, для меня чат бот был чисто подсказкой по синтаксису. Я знаю что надо написать, но не знаю как это пишется на Delphi, и чат бот был для меня переводчиком 🙂

Учитывая "забагованность" Rad Studio, советы ChatGPT, часто не работали, я гуглил и находил те же советы, но настроить IDE у меня не получилось, такое чувство, что надо было чаще перезагружаться 😁 Короче LLM что то конечно выдаёт, но помогает оно через раз, это лучше чем ни чего, но если погуглить, то и сам разберешься.

На каких то вопросах экономишь время, на других тратишь его в пустую. LLM это инструмент которым надо уметь пользоваться, надо понимать приминимость и ограничения этого инструмента. Поэтому на вопрос заменят ли программистов или нет, мой ответ нет. Надо ли пользоваться ? Да конечно, пока это бесплатно. Надо ли пользоваться за деньги ? Только если подписку на чат бота оплачивает заказчик (работодатель). Какого то особого ускорения я не заметил. Облегчает работу, но не в разы.

Мне больше толку от автодополнения кода в PHP Storm 😁 когда он в аргументы подставляет правильные имена переменных или foreach / if за меня дописывает, не всегда угадывает, но это не беда.

На текущий момент LLM помощник, но не заменитель.

Канбан кроме накопительной диаграммы потока советует смотреть еще на две диаграммы, контрольную и спектральную

Подробней по ссылке https://scrumtrek.ru/blog/kanban/kanban-glossary/9638/cumulative-flow-diagram-cfd/

Читайте / смотрите лекции Алексея Пименова да прибудет с вами сила Канбан метода, аминь.

И что смешного ? вы общаетесь как будь то бы с самим собой, написали статью из которой всё понятно только вам, сейчас даёте реплику, которая понятна только вам. Вы если хотите со мной вести диалог, то вам надо сообщить мне контекст, который придаёт значение вашим словам.

Во первых не вот это https://habr.com/ru/articles/323498/, а вот это https://habr.com/p/599639/ . Описание идеи и реализация идеи это не одно и тоже :))

Над чем вы смеётесь ? Над тем что я вам дал ссылку на описание работы библиотекой ("Идеальный каталог, пример использования"), а вы пошли смотреть статью про то как она под капотом работает ("Идеальный каталог, вариант реализации") ?

Короче от смеха там не лопните, вы может быть и умеете что хорошего сделать, но людям донести в доступной форме не можете. А раз людям объяснить не можете как пользоваться вашим изобретением, то пользоваться ни кто не будет. И зачем вы писали статью ?

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

Вы пишите " Это вообще не то", вы не считаете что sbwerewolf/eav-manager реализует EAV подход к хранению данных ? не реализует CRUD для каждой части EAV подхода (Entity Attribute Value) ?

Вы пишите у себя в документации:

  • Attributes may have any plain type values or enum values, defined by the user. They, also, can be singular or multiple.

  • Binding attributes to one or to many categories or tags. For example, you want to show certain attributes of product only for one or more product categories. Also, you can include attributes of parent categories.

  • One attribute can be associated with many types of entities and tags.

  • Converting and inverting EAV to or from database and client side. Internal input validation.

  • Factory to help you create queries for filtering your entities by attributes with tag bindings checking.

Всё это можно реализовать с помощью sbwerewolf/eav-manager , нет интеграции с фреймворками / ORM-ами / админками, но реализация EAV сделана на 100%. Интеграция с чем либо, вот это уже другое :))

Плохо искал. Мои первые статьи на эту тему были опубликованы в 2017 году,последние в 2022: Идеальный каталог, пример использования https://habr.com/p/599639/

Можно установить с помощью composer:

composer require sbwerewolf/eav-manager

Если на сайте https://packagist.org/ поискать "eav" или "eav ", то в результатах поиска будет не один десяток пакетов.

Но после того как появиламь MongoDb, и особенно после того как в Postgre появилась поддержка JSON (тип данных jsonb), всё это потеряло актуальность.

EAV имеет смысл только как способ генерации таблиц, но эта таблица теряет исторические данные, когда какое то свойство исключается из сущности. При хранении в JSONB ни чего не теряется, индексы для свойств JSON работают так же как для колонок таблицы, но нет лишних колонок, ч о более совместимо с современным способом разработки микросервисов.

Твоя статья требует продолжения с use cases, без этого ни кто не начнет использование, даже ради эксперимента

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

Почему такие ограничения ? Потому что мы не знаем где и каким образом используется старая функциональность и не можем просчитать последствия ее изменения.

Короче говоря, нельзя изменять существущую функциональность, чтобы не ломать обратную совместимость.

Иначе вам в каждом теге придется писать в соотвествии с какой версией стандарта его надо интерпретировать (отрисовывать/рендерить)

Ни кто на это не пойдёт. Не изучайте старые технологии, бойтесь унаследованого кода, пугайтесь слова легаси, но вот это легаси из стандартов ни кто ни когда не выпилит

Любая СУБД выводит данные на экран пользователя в текстовом виде, какие то как клик хаус, делают это в псевдографике.

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

И конечно я согласен что model first, потому что заказчику нужна не бд, а функции обработки и хранения данных, а где это хранение будет организовано заказчика не волнует. И этот инфраструктурный аспект не должен диктовать логику обработки, логика обработки должна быть такой, что бы заказчику нравилась и удовлетворяла его потребностям,а не ограничениям СУБД

Спасибо за ваши статьи, прочитал все три. В работе всё это использую в большей или меньшей мере, спасибо за сооветы по плагинам, теперь у меня диаграммы будут как код 🙂

Прочитал все статьи вашего курса, было очень интересно.

Первый раз в жизни увидел подробные требования к формулированию требований 😁. У вас получился сильно расширенный SMART.

При этом две трети текста у вас вода, вы пытаетесь объяснить необъяснимое. Лучше подобрать наглядные примеры, потому что переливание из пустого в порожнее не добавляет понимания, если подобрать пример нельзя, то лучше очень коротко сформулировать тезис и на этом остановиться. В целом мне было обидно пропускать значительные куски текста.

При этом местами смыслова нагрузка сконцентрирована до гранита, который приходиться грызть и грызть в несколько приёмов 🙂

Спасибо за то что поделилимь опытом.

В 2020 была задача валидировать кучу произвольнах форм ввода, фронт-энд программист предложил на фронт кидать описание формы ввода, что бы создавать форму динамически в браузере из JS. Иначе ему приглось бы руками прописывать все базовые формы и потом тратииь время на разработку новых. Описание формы мы записывали как JSON. В описании формы ввода так же было описание правил валидации, в таком виде как я на бэке записывал их для Ларавель.

В итоге получилось делать формочку по спецификации из описания формы. Правила валидации были достаточно простыми: обязательность значения, тип, мин, макс, длина строки. Какие то специфичные проверялись только на бэке (например формат инн для юр лиц и для физ лиц)

При том что фронт получал описание формы с бэка у нас не было пролемы рассинхронизации проверок на сервере и в браузере.

Вариант с FFI идеальный, но требует индивидуального подхода. Для быстродействия с JS, получается надо выполнять сборку кода валиатора и написать динамическую подгрузку соотвествующих бинарников.

Своё решение с компиляцией на go если доведёте до ума, то думаю кто то решиться,попробовать применить.

Успехов !

PS

https://bun.sh/docs/bundler/executables

Инструкция как из JS кода сделать исполняемый файл под любую операционку.

В статье чувствуется боль за страну. И в статье же объяснено почему у СССР не получилось, потому что каждый урвал кусочек страны лично для себя. И власть в стране, на этом и держиться, за это ее и поддерживают, что она дает такую возможность.

Поэтому ждать перемен не прихолиться. Люди пришли к консесусу, рыночек порешал.

Нет у власти амбиций сделать из РФ страну равных возможностей для успеха самых достойных. РФ это страна для успеха кого надо, для успеха своих людей, все остальные могу релоцироваться куда угодно, ни кто не держит.

В СССР считалось что Западный мир это мир индивидуалистов, но нет, Западный мир это мир сообществ, мир отдельных групп. Восточный мир это мир общин, внутри общины не может быть групп интересов, на всю общину один интерес, вырастить рис и не допустить прорыва на дамбе.

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

Не будет в РФ как на Западе, не будет в РФ как на Востоке. У России свой путь. Другие условия жизни, дают другой менталитет. В РФ всегда можно сбежать во внутреннюю имиграцию.

Не увидел описания того как выпустить новую версию. Я у себя в пакетах ставлю метку на камит и пушу эту метку, после этого на Packagist появляется новая версия.

Хотел бы я сесть за спину своим пользователям и посмотреть как они используют мой код.

У меня есть библиотека "для композера", ее устанавливают по 50 раз в день, но я понятия не имею как и для чего ее применяют !

А очень бы хотелось знать и наверное внести какие то правки в код и документацию.Если вы когда либо использовали sbwerewolf/xml-navigator или sbwerewolf/language-specific напишите мне отзыв, сюда в коменты или по контактам в профиле.

120 мс выполнение тестов с логированием через MethodBoundaryAspect

100 мс выполнение тестов с логированием через Reflection

070 мс выполнение тестов без логирования

В документации у MethodBoundaryAspect.Fody есть цифры по влиянию логирования, почитайте, что пишут разработчики.

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

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

Пока позволяет логика логирования пользуемся MethodBoundaryAspect.Fody, когда гибкости перестаёт хватать переписываем на Reflection.

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

Но разве это проблемы подрядчика / исполнителя ?

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

Логично ?

волшебная штука, только ради неё стоило написать статью и получить такой полезный комент :)

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

а что вам мешает в сеттере геттере ставить / проверять блокировку ? сеттер и геттер могут быть не на одну строку кода, могут быть любого размера.

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

Но это не значит что ООП не применимо. Включите голову, применяйте.

ООП гарантирует инкапсуляцию?

ООП постулирует использование инкапсуляции. ООП это набор рекомендаций, ответственность за следование этим "правилам" / "рекомендациям" - это ответственность вашего кода.

ПДД предписывается движение на зелёный сигнал светофора, если вы ездите на красный, то пеняйте на себя. а не на ПДД :) Можно конечно требовать что бы каждый светофор был оборудован барьерными автоматами, но толку то ? Требуйте конечно, но решит ли это проблему ?

Автор у вас проблемы не с ООП, а с требованиями к коду. Если код должен что то безопасно сделать, то вы в своём коде должны эту безопасность обеспечить.

У вас требование безопасности есть, а в коде выполнения этого требования нет.

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

В SQL для этого делается блокировка записи через SELECT FOR UPDATE, или можно делать апдейт на конкретное значение, с проверкой того что текущее значение не изменилось:

UPDATE balance SET amount=150 WHERE amount=200 and user_id=123

Как то так надо выполнчть изменение данных. Если это переменнная в памяти, или байты в файле, то изменение значения надо выполнять с аналогичными проверками. Условие выполняется ? Да - тогда обновляем. А что бы ни какой другой поток переменную не поменял используем блокировки, вы это прекрасно знаете.

ООП это метод. Вы его применяйте с учетом всех требований и программа будет работать как надо.

А если ваш код не обеспечивает атомарности, то пеняйте сами на себя, а не на ООП.

ООП это только способ установить границы того как можно изменять данные, ООП это подсказка программисту какие операции над данными можно выполнить. ООП не говорит нам как эти операции должны быть выполнены.

Вообще поэтому объекты и нельзя использоаать как DTO, именно поэтому мы должны сказать объекту: уменьши баланс на 50, если текущий баланс 200. И объект сам разберется как ему это сделать атомарно с транзакционной целостностью.

Говорить объекту: установи баланс 150, это значит брать на себя ответственность за то что баланс должен быть 150. Когда вы так используете объект, то это не ООП, это процедурное императвное программирование.

1
23 ...

Информация

В рейтинге
6 485-й
Откуда
Екатеринбург, Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Архитектор программного обеспечения
Старший
От 3 000 $
SQL
PHP
Laravel
Docker
Git
ООП
.NET
XML
PostgreSQL
MySQL