Задать вопрос
Всем доброго! Я Вячеслав, веб-разработчик, а также руководитель команды разработчиков "Итерация Идей". Моя работа — создавать сайты: от проектов на CMS до кастомных веб-сервисов со сложной логикой. Уверенно владею Python, JavaScript (включая React), SQL и Git. Понимаю и применяю принципы DevOps, когда это необходимо.
Сейчас активно погружаюсь в мир AI и нейронных сетей. Вижу огромные перспективы в этой области и целенаправленно изучаю, как применять эти технологии для создания действительно умных продуктов.
Здесь планирую делиться опытом из веб-разработки и своими первыми практическими шагами в AI. Буду рад конструктивным обсуждениям и обмену знаниями!
Ресурсы моей команды:
ТГ: https://t.me/IterationIdeas
ВК: https://vk.com/Iterationideas
Мои:
ТГ: https://t.me/KVS_CT
Личный сайт: https://cuteslippers.netlify.app
Контакты
Местоположение
Россия

Наибольший вклад в теги

Все теги (7)

Лучшие ответы пользователя

Все ответы (5)
  • Какие курсы для обучения на разработчика порекомендуете, с менторами и сопровождением?

    Kuzmin_Vyacheslav
    @Kuzmin_Vyacheslav
    Веб-мастер, на пути к искусственному интеллекту.
    Если говорить по-простому, то там должны быть настоящие наставники. Ищите не те школы, где просто показывают видео и дают задачки, а те, где код вашего сына будет проверять живой, опытный разработчик. Человек из индустрии, который сможет сказать: «Смотри, вот тут можно сделать лучше, и вот почему». Именно это и отличает будущего специалиста от простого кодера.
    я бы предложил сыну начать с Яндекс.Практикума. Это самый сбалансированный и надежный старт. Пусть он обязательно попробует их бесплатную вводную часть — она ни к чему не обязывает, но сразу станет понятно, нравится ли ему такой подход.
    Ответ написан
    1 комментарий
  • Python Flet вертикальные вкладки?

    Kuzmin_Vyacheslav
    @Kuzmin_Vyacheslav
    Веб-мастер, на пути к искусственному интеллекту.
    Я тоже сталкивался с этой проблемой. Оказалось, что стандартный компонент ft.Tabs в принципе не поддерживает вертикальное отображение, он работает только горизонтально. Поэтому простые решения и не работают.
    1) Суть в том, чтобы создать ряд (Row) с двумя колонками:
    import flet as ft
    import time

    def main(page: ft.Page):
    page.title = "Вертикальные вкладки - Пример 1"
    page.vertical_alignment = ft.MainAxisAlignment.START

    tab_content = [
    ft.Container(content=ft.Text("Это содержимое первой вкладки"), alignment=ft.alignment.center),
    ft.Container(content=ft.Text("Содержимое второй вкладки"), alignment=ft.alignment.center),
    ft.Container(content=ft.Column([ft.Text("Третья вкладка"), ft.TextField(label="Введите что-нибудь")]), alignment=ft.alignment.center),
    ]

    content_area = ft.AnimatedSwitcher(
    content=tab_content[0],
    transition=ft.AnimatedSwitcherTransition.FADE,
    duration=300,
    reverse_duration=100,
    switch_in_curve=ft.AnimationCurve.EASE_IN,
    switch_out_curve=ft.AnimationCurve.EASE_OUT,
    )

    def change_tab(e):
    selected_index = e.control.data
    content_area.content = tab_content[selected_index]

    for i, tab in enumerate(tabs_menu.controls):
    if i == selected_index:
    tab.bgcolor = ft.colors.BLUE_GREY_700
    else:
    tab.bgcolor = ft.colors.BLUE_GREY_900

    page.update()

    tabs = ["Вкладка 1", "Вкладка 2", "Вкладка 3"]
    tabs_menu = ft.Column(
    spacing=5,
    controls=[
    ft.Container(
    content=ft.Text(name),
    padding=10,
    border_radius=5,
    width=150,
    bgcolor=ft.colors.BLUE_GREY_900,
    on_click=change_tab,
    data=i
    ) for i, name in enumerate(tabs)
    ]
    )

    tabs_menu.controls[0].bgcolor = ft.colors.BLUE_GREY_700

    page.add(
    ft.Row(
    controls=[
    ft.Container(
    content=tabs_menu,
    padding=10,
    bgcolor=ft.colors.BLUE_GREY_800,
    border_radius=5,
    ),
    ft.Container(
    content=content_area,
    expand=True,
    padding=10,
    border_radius=5,
    bgcolor=ft.colors.with_opacity(0.05, ft.colors.WHITE),
    )
    ],
    vertical_alignment=ft.CrossAxisAlignment.START,
    expand=True
    )
    )

    ft.app(target=main)
    2) Это специальный компонент Flet как раз для таких боковых меню. Код получается гораздо чище и проще:
    import flet as ft

    def main(page: ft.Page):
    page.title = "Вертикальные вкладки - NavigationRail"

    tab_content = [
    ft.Container(content=ft.Text("Главная страница"), alignment=ft.alignment.center, expand=True),
    ft.Container(content=ft.Text("Страница с настройками"), alignment=ft.alignment.center, expand=True),
    ft.Container(content=ft.Text("Страница профиля"), alignment=ft.alignment.center, expand=True),
    ]

    content_view = ft.Column([tab_content[0]], expand=True)

    def change_tab(e):
    selected_index = e.control.selected_index
    content_view.controls[0] = tab_content[selected_index]
    page.update()

    rail = ft.NavigationRail(
    selected_index=0,
    label_type=ft.NavigationRailLabelType.ALL,
    min_width=100,
    min_extended_width=200,
    group_alignment=-0.9,
    destinations=[
    ft.NavigationRailDestination(
    icon=ft.icons.HOME_OUTLINED,
    selected_icon=ft.icons.HOME,
    label="Главная",
    ),
    ft.NavigationRailDestination(
    icon_content=ft.Icon(ft.icons.SETTINGS_OUTLINED),
    selected_icon_content=ft.Icon(ft.icons.SETTINGS),
    label="Настройки",
    ),
    ft.NavigationRailDestination(
    icon=ft.icons.PERSON_OUTLINE,
    selected_icon=ft.icons.PERSON,
    label="Профиль",
    ),
    ],
    on_change=change_tab,
    )

    page.add(
    ft.Row(
    [
    rail,
    ft.VerticalDivider(width=1),
    content_view,
    ],
    expand=True,
    )
    )

    ft.app(target=main)
    Ответ написан
    1 комментарий
  • Как отдать большую часть скорости устройству?

    Kuzmin_Vyacheslav
    @Kuzmin_Vyacheslav
    Веб-мастер, на пути к искусственному интеллекту.
    Это делается через Simple Queues в MikroTik. Тебе нужно два правила:
    1) Для приоритетного ПК: Гарантируем и ограничиваем 80 Мбит/с.
    /queue simple add name=PC_Priority target=192.168.5.35 max-limit=80M/80M limit-at=80M/80M
    2) Для всех остальных: Ограничиваем оставшимися 20 Мбит/с.
    /queue simple add name=Others target=192.168.5.0/24 max-limit=20M/20M

    В списке очередей (Queues -> Simple Queues) правило PC_Priority должно стоять выше, чем правило Others. Просто перетащи его наверх.
    Ответ написан
    34 комментария
  • Как отправить POST запрос в playwright nodeJS?

    Kuzmin_Vyacheslav
    @Kuzmin_Vyacheslav
    Веб-мастер, на пути к искусственному интеллекту.
    Проблема в том, что page.goto() — это навигация, она имитирует ввод адреса в браузере и всегда работает через GET-запрос.
    Ты же пытаешься отправить POST-данные на этапе загрузки страницы, что для любого сайта выглядит как очень подозрительное, нестандартное действие. Именно поэтому защита тебя и блокирует.
    Ответ написан
    Комментировать
  • Откуда корректно брать OID пользователя в ЕСИА?

    Kuzmin_Vyacheslav
    @Kuzmin_Vyacheslav
    Веб-мастер, на пути к искусственному интеллекту.
    Это классическая путаница между маркером доступа (Access Token) и маркером идентификации (ID Token), которые являются основой протокола OpenID Connect, используемого в ЕСИА.
    "urn:esia:sbj:oid (из ID Token)" - это постоянный и уникальный OID пользователя. Он предназначен для идентификации. А "urn:esia:sbj_id (из Access Token)" - это временный идентификатор сессии. Полагаться на него некорректно, даже если где-то это случайно работает.
    Ваш алгоритм должен быть таким:
    1. В процессе авторизации запросить и получить от ЕСИА и access_token, и id_token.
    2. Распарсить id_token (это стандартный JWT).
    3. Извлечь из него значение поля urn:esia:sbj:oid. Это и будет искомый {oid}.
    4. Сформировать URL запроса, подставив туда полученный oid.
    5. Выполнить GET запрос по этому URL, передав access_token в заголовке Authorization: Bearer ... для авторизации на сервере.
    Ответ написан
    Комментировать