Александр Воробьев

Александр Воробьев
Рейтинг
72
Регистрация
03.02.2020
Sly32 #:
То что Александр делает - хорошо, но бессмысленно. Кому это надо. Ты его отвлек а сам слился.

Эмм... ну вообще говоря смысл есть и я его даже в доке описал ;) Челендж лишь попытка добавить дополнительный стимул. Хотя конечно было бы интереснее если ArbNet сдержал слово и двигался тоже.  Согласись (если отбросить нюансы): когда два разработчика, не зависимо от уровня подготовки, ведут +- похожие проекты - потенциально много могло быть тем для обсудить.

А еще интереснее если бы он какое то мнение о коде высказывал. Но уж имеем, что имеем.

Ну, а  "для пользователей" у меня по прежнему есть план по созданию сервиса. Я сам таким пользуюсь много лет, при этом он имеет платные тарифы. А до него я пользовался десктопным приложением собственной разработки - т.е. проблематика и подводные камни мне уже известны. Но., приоритет не самый высокий - для пользователей и извлечения дохода у меня есть CAD выкроек :)
ArbNet #:

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

ЗЫ. Хорошие программы должны работать(ими должны пользоваться люди), а не просто быть написанными.

Да будет на домене. Концепт я уже продумал.

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

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

Про "github - это пыль"... ну для кого как. Мне как программисту, гораздо важнее код.  дизайн, сео, юзабилити сайта - вообще не интересно, оно ни как не отражает возможностей инструментов (да и вообще не зависит от фреймворка/cms)

ArbNet #:
ЗЫ. Хорошие программы должны работать(ими должны пользоваться люди), а не просто быть написанными.

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

Жаль статистика github и packagist  не дает расклад кто скачивает пакеты. Скачивания/клонирования есть, но может все и боты или системы тестирования.

ArbNet #:
у меня тоже с БД ещё не решён вопрос.
Я, скорее всего, продолжать модуль БД буду после форума. Нынешнего функционала для форума достаточно. А перед продолжением работ по модулю БД нужны модули консольных команд и миграций (по моему плану). 

[9/12] движение...

Модуль для работы с базами данных

Выпустил первый релиз модуля для работы с SQL базами данных. На данном этапе только взаимодействие на низком уровне - т.е. работа с сырыми запросами.  Из коробки драйвер работающий через PDO (соответственно можно подключаться ко всем типам СУБД, которые есть и в нем). 

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

Реализованный драйвер поддерживает вложенные транзакции.

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

Проверено на версиях PHP 8.5 и 8.6

Репозиторий на github

Документация там же

Записал видео, но не успел подготовить к публикации - будет несколько позднее.

Фреймоворк

Тут тоже было много работы, но релиз пока не выпустил, по этому в ветке next

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

Добавил в фреймворк сервис аутентификации

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

Так же предусмотрена как точка расширения подключение различных источников прав пользователей из которых собирается итоговый набор прав пользователя. Т.к. в самом ядре фреймворка нет работы с БД, то из коробки на основе конфигов. (драйвер для БД будет отдельным модулем). Можно в одном проекте подключать разные одновременно.

Так же и с источником данных пользователя. Можно подключать несколько на проекте.

Сделал конфигурируемый middleware аутентификации, который можно подключать как на все маршруты, так и на группы маршрутов, так и на отдельные маршруты с разными параметрами.

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

Пока делал демо примеры понял, что работа с CORS не достаточно умная - из за ее доработки и не успел :)


PS. ArbNet у тебя есть продвижение?

Sly32 #:
В целом ты прав, и читаемость будет лучше, но в данном случае это однократное применение константы и не уверен что это будет упрощение  а не усложнение кода.

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

А усложнение. Разве что если смотреть код не в ИДЕ то значение не узнаем если захотим без пролистывания. а в иде наверняка ж подсказка появится при наведении

Sly32 #:
А что там можно разбить?

Почитал немного про раст. поковырялся. Ну и объяснил ИИ что я хочу - т.е. не проверял сам это на работоспособность

// Внутри if let Some(config) = &json { ... }

let string_mappings: [(&str, fn(&JsonConfig) -> Option<String>); 14] = [
    ("LLM_PROVIDER", |c| c.default_provider.clone()),
    ("MODEL", |c| c.model.clone()),
    ("REASONING_EFFORT", |c| c.reasoning_effort.clone()),
    ("RUST_LOG", |c| c.log_level.clone()),
    ("MICROSOFT_GRAPH_CLIENT_ID", |c| c.microsoft_graph_client_id.clone()),
    ("MICROSOFT_GRAPH_TENANT", |c| c.microsoft_graph_tenant.clone()),
    ("MICROSOFT_GRAPH_SCOPE", |c| c.microsoft_graph_scope.clone()),
    ("GOOGLE_GMAIL_CLIENT_ID", |c| c.google_gmail_client_id.clone()),
    ("GOOGLE_GMAIL_CLIENT_SECRET", |c| c.google_gmail_client_secret.clone()),
    ("GOOGLE_CALENDAR_CLIENT_ID", |c| c.google_calendar_client_id.clone()),
    ("GOOGLE_CALENDAR_CLIENT_SECRET", |c| c.google_calendar_client_secret.clone()),
    ("WEB_SEARCH_PROVIDER", |c| c.web_search_provider.clone()),
    ("WEB_SEARCH_ENDPOINT", |c| c.web_search_endpoint.clone()),
    ("WEB_SEARCH_API_KEY", |c| c.web_search_api_key.clone()),
];

for (env_key, getter) in string_mappings {
    set_if_some(&mut environment, env_key, getter(config));
}

// Особые случаи (например, working_dir требует резолвинга пути)
// остаются вне цикла, что теперь выглядит гораздо осмысленнее:
if let Some(working_dir) = &config.working_dir {
    let path = PathBuf::from(working_dir);
    let resolved = if path.is_absolute() {
        path
    } else {
        project_dir.join(path)
    };
    environment.insert("WORKING_DIR".to_owned(), resolved.to_string_lossy().into_owned());
}
Sly32 #:
А что там можно разбить?

Сейчас не у компа. На сколько я помню углядел штуки 4 логических блока. Какие-то уже вынесены в отдельные функции. Вот мне как раз захотелось вот ту последовательность однотипных вызовов функций. Убрать. В отдельную . мотивация: а если еще понадобиться, что б раздувался узкоспециализированный метод. Так же , но тут надо знать раст. Поясню пхпшным жаргоном. Вынести массив содержащий имя переменной и геттер, в общем точнее набор параметров для той функции что вызывается друг за другом. Т.е. если понадобиться добавить - не суемся в логику, а только добавляем в репозиторий параметров..... Ну а потом циклом этот репозиторий/массив обойти.

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


Смотрел Например. https://github.com/ViachaslauKazakou/ai-agent/blob/main/src/config.rs метод  load. 

1 Показался очень многословным и, если я правильно прочитал, его можно "разбить". ИМХО если код и пишет ИИ, то все равно полезно сохранять читабельность для человека. 

2 Есть код 

let max_loop_seconds = file_agent.max_loop_seconds.unwrap_or(600);


Магические числа наверно "маст хев" в константах. (тут же есть и пример, что это в расте есть (DEFAULT_MAX_TOOL_ROUNDS)  :)

3 получение пути  resolved_working_dir и в лоад let resolved = if path.is_absolute() { path } else { project_dir.join(path) };   - тут не одно и тоже двумя вариантами?


ArbNet #:

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

ЗЫ. Смекаете?

Скорее разница в умении ставить задачу (для чего тоже необходимы знания). "говенно сделано" - значит постановка задачи была УГ.

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

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

Всего: 1211