Задать вопрос
  • Почему некоректно обновляется ширина в кастомном хуке?

    Aetae
    @Aetae
    Тлен
    Классика: ты этот width наверняка присваиваешь какому-то элементу. Соответственно, ширина этого элемента становится ровна width. Когда ты меняешь ориентацию - ты не убираешь width перед этим, а значит innerWidth окна не минимальное значение, а то, какое получилось с учётом элемента с width, который это окно распирает.
    Т.е. после каждого увеличения width, window.innerWidth не может быть меньше чем width.

    Такие задачи принято решать вёрсткой.
    Ответ написан
    2 комментария
  • Pritunl - почему Великий Русский фаервол блокирует openvpn?

    @Drno
    ПОтому что РКН блокирует опенВПН + WG.. и уже давненько. Потому что Вы ОБЯЗАНЫ смотреть только разрешенный кем надо контент, а не это вот всё...

    Варианты решения - если надо просто обходить незаконные ограничения от РКН - тогда -
    берем и настраиваем на сервере xray+vless+reallity, можно взять веб морду - 3x-ui на гитхабе

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

    Почему надо именно Pritunl использовать тоже не очень понятно... можно попробовать заменить на Amnezia, там есть обфускация изКаропки
    Ответ написан
    2 комментария
  • Для чего нужна отмена задач, кроме таймаутов и каналов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Отмены задач используются, как ни странно, для отмены задач. А чтобы отменить задачу, это должно быть кому-нидуь нужно. Например, этим "кем-нибудь" часто бывает пользователь, которому результат задачи перестал быть нужным.

    В качестве примера: пользователь послал на сервер через веб-страницу запрос и ждет результата. Представим, что запрос - сложный, результат так сразу не получить, запрос выполняется, а пользователь ждет, потому что всё это понимает. Потом пользователю внезапно надоедает ждать и он посылает команду Отменить. Или - закрывает страницу. Так вот, по-хорошему, в этом случае надо отменить задачу, которая выполняет запрос, чтобы она не тратила впустую ресурсы сервера.

    А ещё отмена полезна для прерывания процессов потенциально бесконечных, типа смотреть, как горит огонь, как течет вода, как люди работают... :-)

    Таймауты тут не помогут в обоих случаях. В первом случае пользователь сам часто не знает, сколько он согласен ждать, а во втором - вообще нет никакого таймаута, ибо процесс бесконечен.
    Ответ написан
    Комментировать
  • Почему ajax выполняется по очереди?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вангую - на бэке PHP и сессии. Причём, открываются сессии в начале скрипта, а закрываются никогда, то есть по завершении скрипта.
    Тогда пока работает скрипт, файл сессии держится открытым и второй скрипт в той же сессии будет ждать освобождения файла. Файл сессии надо освобождать как можно раньше. session_start, считали нужные данные и сразу же session_write_close. Если надо что-то изменить в сессионных данных в процессе работы скрипта, то снова открыть сессию, записать изменения, закрыть.
    Ответ написан
    Комментировать
  • Как должен выглядеть идеальный контроллер?

    Если хотите идеал, то он должен соответствовать следующим пунктам:

    1. Сериализация/десериализация - это дорогостоящее мероприятие, поэтому оно должно делаться только в двух местах: прямо на входе и прямо на выходе. Вход - это ваш контроллер, Выход - это другой сервис, куда вы передаёте данные, или база данных (тут тоже происходит сериализация, либо явно, либо в ORM). Во всех остальных слоях инфообмен должен совершаться уже при помощи объектов PHP либо нативных типов. Это экономит ресурсы. При передаче между слоями приложения объектов вместо значений либо ассоциативных массивов вы сразу будете видеть очепятки, IDE вам прекрасно поможет при помощи автодополнения, объекты могут иметь какие-то полезные методы.

    2. Очень желательно в каждом из слоёв иметь собственный класс, отвечающий за данные. Например, нам в слой API приходит JSON-чик с новым пользователем.
    - Сериализуем JSON в DTO UserInAPI, сразу валидируем всё то, что мы можем валидировать без слоя бизнес-логики, и либо отдаём клиенту ошибку, либо передаём сам объект UserInAPI в следующий слой: слой бизнес-логики
    - В слое бизнес логики, получаем DTO UserInAPI на входе, преобразуем его в свой бизнес-объект UserInBusiness, валидируем его уже с точки зрения бизнеса, и либо возвращаем ошибку в слой API, либо совершаем над ним действия, и передаём объект класса UserInBusiness в слой работы с базой
    - В слое работы с базой данных получаем на входе объект UserInBusiness, преобразуем его уже в сущность базы данных UserInDB, валидируем всё на предмет корректности данных для базы, и либо возвращаем ошибку в бизнес, либо сохраняем сущность класса UserInDB в базу.

    Зачем такие сложности, вы спросите? А просто обратите внимание на то, что скорость изменения кода в разных слоях разная.
    - API вообще должен меняться раз в сто лет, чтобы не злить клиентов. Поэтому DTO класс UserInAPI будет стабильным и редко будет меняться.
    - Бизнес-логика меняется очень часто. У класса UserInBusiness постоянно будут добавляться поля и методы, тут жизнь будет кипеть.
    - Слой базы данных будет меняться реже, чем слой бизнеса, но чаще, чем слой API, потому что нам нужны будут новые поля в базе, новые таблицы и связанные таблицы.
    - И если мы один тип сущности протащим во все слои, то эта сущность обрастёт таким количеством различной хрени, что нам плохо станет, когда будем на неё смотреть. Либо она обрастёт кучей декораторов в каждом из слоёв. Поэтому лучше всё разделить.

    3. Теперь внимание, казалось бы, что мы слишком сильно связываем наши слои, и нижестоящие слои знают что-то о вышестоящих, а это неправильно. Ведь мы передаём объект UserInAPI в слой бизнеса, т.е. слой бизнеса должен уметь работать с этим объектом. И так же слой базы должен уметь работать с объектом бизнеса UserInBusiness. Как же быть? А очень просто. На входе слоёв использовать интерфейсы. Т.е. в слое бизнеса мы будем принимать не сам класс UserInAPI, а объект, имплементирующий интерфейс UserIncoming, который объявим в бизнес слое, и заставим слой API сделать так, чтобы его класс UserInAPI имплементировал этот интерфейс. Таким образом слой бизнеса ничего не будет знать о слое API, а будет ждать на входе данные по контракту, описанному в интерфейсе. Бизнесу плевать на конкретную реализацию, ему нужны только методы getUsername, getEmail из интерфейса. А какой класс ему их предоставит - пофигу. Таким образом мы практически полностью разделяем слои и в два счёта сможем поменять слой API, где у нас HTTP контроллеры, на слой RabbitMQ, SOAP, Grpc и т.д.
    Ответ написан
    6 комментариев
  • Почему на многих крупных сайтах не используются смысловые теги main,section, article, aside, header, footer?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Потому что современные веб-сайты основаны не на той концепции, которую продвигают теоретики-разработчики HTML.
    Вся эта смысловая разметка - она относится к коцепции документа как основного содержимого страниц. То есть - структурированного как текст содержимого, основное взаимодействие с которым - чтение и прочий просмотр. А в реальности большинсво крупных сайтов - это интерактивные приложения, у которых совершенно другая структура, в рамки "смысловой разметки" плохо впихуемая.

    Короче, смысловая разметка подобна Скрипачу: "А Скрипач не нужен, дорогой.".
    Ответ написан
    Комментировать
  • Можно ли чтобы PHP Storm напоминал про GIT обновления?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Если вы просто откроете настройки шторма и в поиске (слева вверху) просто напишите три буквы "git", то легко найдете настройку "Explicitly check for incoming commits remote", которую следует выставить в Always

    Так же можете изменить "Check for conflicts with the server every"
    Ответ написан
    Комментировать
  • Как превратить напряжение 3,3 в 5 вольт в ардуино у ESP32 и обратно?

    @Everything_is_bad
    серьезно, в который раз? ты на каждый "детский" вопрос так и будет набегать сюда? т.е читать доки, специализированные форумы, гуглить, где подобное кучу раз разжевано ты вообще не хочешь?
    Ответ написан
    Комментировать
  • Какой ближайший хоп у России с европейской страной?

    ValdikSS
    @ValdikSS
    Всё зависит от вашего местоположения, от связности вашего провайдера, от ширины его каналов, от стыков, на каких присутствуют интересующие вас провайдеры.

    Я обычно делаю так:
    • Заходим на https://looking.house/points.php, ищем наиболее географически близкие страны/города
    • Пингуем тестовые адреса интересующих провайдеров, смотрим трассировку
    • Смотрим трассировку с серверов на свой IP-адрес
    • Берём сервер, где ниже пинги и шире каналы
    Ответ написан
    Комментировать
  • Какая нейросеть умеет в веб-дизайн?

    @rPman
    Адекватных и универсальных мультимодальных ИИ (с модальностью - изображения) на текущий момент не существует.

    С очень большой натяжкой можно считать топовые openai/claude/google/(может китайский qwen но они совсем внизу), с поддержкой изображений подходящими, в интернете даже гуглятся тестовые helloworld, но проблема в том что когда доходишь до реального использования, сил на то чтобы объяснить ИИ что тебе нужно и исправлять его ошибки уходит БОЛЬШЕ чем если бы ты делал это сам.

    ИИ на текущий момент подходит как удобный помощник, делать что-либо что ты сам умеешь прекрасно делать, понимаешь как это понимает ИИ (мы в голове строим модель знаний нашего собеседника, чтобы не скатываться в объяснения алфавита, так вот то же самое и с ИИ, мы должны понимать что они понимают и до какой степени) и используешь его для ускорения./. плюс как замена поисковика (только не по всему интернету, а в пределах его знаний, очень мало какие продукты дают адекватный поиск в интернете).
    Ответ написан
    Комментировать
  • Деление строки в список Python?

    Vindicar
    @Vindicar
    RTFM!
    Там список хранит данные о rect из pygame, это отрисовка поля

    Так передавай данные так, чтобы их удобно было парсить. Простейший вариант - используй json.
    Например, сначала генерируешь данные для отправки:
    import json
    # в словаре для отправки могут быть только числа, строки, bool, списки, словари, None.
    # и никаких других объектов. Так что переделываем список rect в список списков.
    # как из rect координаты добыть ищи сам
    rects_to_send = [ [rect.x, rect.y, rect.w, rect.h] for rect in rectangles ]
    data_to_send = {  # в словарь можно также добавить другие данные
      'rects': rects_to_send,
    }
    string_to_send = json.dumps(data_to_send, ensure_ascii=True)+'\n'
    # дальше через сокет эту строку и передаёшь

    Ну и чтение аналогично.
    import json
    
    received_string = ...  # это строка, которую ты получил из сокета
    received_data = json.loads(received_string)
    #received_data будет таким же словарём, как data_to_send выше
    for x, y, w, h in received_data['rects']:
      ...  # рисуешь эти прямоугольники у себя
    Ответ написан
    2 комментария
  • Является ли опыт работы в гос. организации плохим знаком в резюме?

    @alexalexes
    Работодателя может напрячь, что вы долго работали в организации, где была низкая культура разработки.
    Что я имею ввиду. Работника берут на должность разработчика, а по факту у его обязанности "подай-принеси" - без участия в задачах изменения функций проекта. Или наоборот, обязанностей на одного человека больше, чем у группы разработчиков - ввиду нехватки низкооплачиваемых специалистов, оставшиеся специалисты берут обязанности уволенных - получаются человек-оркестр.
    Ввиду выше сказанного, даже если в организации есть команда разработчиков, то у них слабое распределение задач, так как отсутствует компетентный руководитель, либо не хватает звеньев руководителей от начальника отдела до рядового работника, кто бы мог распределять задачи на низком уровне исполнителей.

    Если вы устроитесь в гос. организацию, и увидите такие симптомы, то лучше ищите другую работу на перспективу. Если задержитесь на этом месте больше 2-3 лет, то привыкнуть к другому порядку работы вам будет сложно.
    Работодатель, где хорошая культура разработки, знает такой нюанс.
    Ответ написан
    1 комментарий
  • Что будет, если не удалять графические объекты при завершении программы в C++ SDL2?

    @Everything_is_bad
    Что будет если не удалять вопросы Ланской Кирилл - он засрёт глупыми вопросами весь этот сайт.
    Ответ написан
    2 комментария
  • Назначение жёстких дисков Seagate?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Зачем нужны HDD Seagate SkyHawk (видео)

    Именно для него, родимого, и нужны.
    По словам Сигейт, Скайхок оптимизированы для записи (90% и выше), в т.ч. для записи 24/7. С учётом того, как работают видеорегистраторы, они наверняка имеют в виду последовательную запись. При этом ничего не говорится про чтение и смешанные нагрузки.

    В целом основные отличия между подобными сериями часто заключаются в микрокоде ("прошивке"), которая тюнингуется под задачи, в данном случае, систем видеонаблюдения.

    Это подтверждает и документация: SkyHawk имеют определённое сходство с дисками для крупных систем хранения с точки зрения того, что они пытаются обрабатывать ошибки в течение ограниченного количества времени. Т.е. быстро отдать хоть что-то и минимизировать общую потерю кадров для них важнее, чем попытаться провести максимально полную коррекцию и отдать данные без ошибок:

    ImagePerfect supports the ATA-8 Streaming command set and allows a host to request delivery of data within an allotted time; it places a priority on a time to transfer the data, rather than the integrity of the data.
    In addition, the ATA-8 Streaming command set is optimized to handle large sequential block transfers.

    Internal and background operations of SkyHawk HDDs with ImagePerfect are interruptible and scheduled such that they do not hold up any requests from the host. Command completion times (CCT) are kept low to minimize any host buffer overruns or underruns.


    Можно ли HDD SkyHawk использовать в NAS?

    Можно. Если будете пользоваться один, без супер-нагрузок, то разница в производительности вряд ли будет очень большой.

    Главное - не берите Seagate SkyHawk Lite/Mini, они SMR.

    Если же есть необходимость купить именно Сигейт и есть возможность выбирать, то думаю, что лучше всего будет взять Exos.
    Ответ написан
    Комментировать
  • Тормоза браузера из-за стилей, решение?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Для начала для нас важно осознать, что у разных фильтров разная вычислительная сложность. Они не все "плохие". Алгоритмы для brightness, grayscale, hue-rotate и других манипуляций с цветом выполняются за O(1) для каждого пикселя. Т.е. нагрузка на железо растет линейно в зависимости от площади элемента на экране. Это не так страшно. А вот фильтры размытия, blur или drop-shadow, имеют сложность где-то в районе O(R^2). Там есть разные варианты оптимизаций, но в среднем мы говорим именно о квадратичной зависимости от радиуса размытия. И это для каждого пикселя. Именно отсюда мы имеем сильные тормоза при попытке что-то большое размыть на пол экрана. Дохлые видеокарты телефонов и ноутбуков не вывозят. Браузеры не умеют такие вещи переиспользовать, так что это переразмытие происходит снова и снова, и мы имеем что имеем.

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

    В контексте верстки тут есть полтора варианта, что можно сделать. Можно рассчитывать такие вычислительно-сложные штуки еще при разработке и загружать в страницу сразу в виде картинок или видео. Это не идеальный вариант, пропорции получаются фиксированные, но иногда подходит. Есть вариант рассчитывать такие штуки в фоне на WebGL. Т.е. мы грузим интерфейс, смотрим какого там все размера получается, и один раз в фоновом режиме генерируем картинки нужного размера и потом плавно показываем. Такой вариант частенько встречается в рекламно-конкурсных проектах, когда за прелоадером в начале скрывается в том числе и такая генеративная история. Тут мы получаем гибкость в плане размеров и хорошую производительность сайта в целом, потому что все операции проходят только один раз, а дальше у нас все переиспользуется в виде обычных картинок. Каких-то принципиально других вариантов у нас пока нет. Только дизайн менять.
    Ответ написан
    3 комментария
  • Как организовать умное кеширование MYSQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как всегда, в заголовке одно, а в тексте вопроса совсем другое. И никакое кэширование автору делать на самом деле неохота - это же переделывать всё придется.

    При этом чего именно нужно автору, из вопроса непонятно. То ли проблема с потреблением памяти, то ли скорость запросов, то ли вообще никаких проблем нет, а просто поговорить на с кем.

    Ускорение запросов решается за счет создания индексов. Не "есть индексация", а конкретные осмысленные индексы для каждого используемого запроса. Если конкретный запрос тормозит, ему надо сделать explain, и на основе полученного результата подумать и реализовать индексы.
    При этом нормально индексы работают только если все они помещаются в памяти. А это значит, что по поводу "7 гигов занято" надо не плакать а радоваться.
    Существование "таблиц" для новых и старых сообщений в рамках одной таблицы - это партиционирование, например по дате. Но опять же, сначала надо определиться задачей, которую мы решаем.
    Ответ написан
    7 комментариев
  • Почему не получается задать либо один тип либо другой в typescript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    В action ты кладёшь функцию onClick с сигнатурой (item: LinkItem) => void, а требуется (data: MobileMegaMenuItem | LinkItem) => void, , т.е. функция которая умеет работать и с тем и с тем. Подразумевается что onClick как раз не умеет и может привести к ошибке, потому и не даёт.

    Используй дженерик чтобы вывести конкретный тип:
    export const useOpenMenuByHash = <Data extends MobileMegaMenuItem | LinkItem>(
        data: Data[],
        action: (data: Data) => void,
        actionRoom?: () => void
    ) => {
      //...
    };
    
    useOpenMenuByHash(data, onClick); // ok

    Ну или кастуй руками:
    useOpenMenuByHash(data, onClick as (d: LinkItem | MobileMegaMenuItem) => void);
    Ответ написан
    4 комментария
  • Как преобразовать число вида 20240617114532 в дату-время?

    @SunTechnik
    Вам должно быть виднее, что там за формат времени у Вас, но, на первый взгляд, это выглядит как объединение без пробелов:
    Год месяц число часы минуты секунды.
    Соответственно Ваш запрос легко превращается в интервал (или два условия больше - меньше)
    Ответ написан
    1 комментарий
  • Самопроверка целостности кода контрольной суммой, как реализовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для точного восстановления кода по контрольной сумме последняя должна быть размером с архив этого кода.
    Как правило, если контрольная сумма не совпадает, то просто выдаётся ошибка и запуск оборудования останавливается. Так поступают, например, BIOS'ы компьютеров. Дальше нужно восстановить код из внешнего источника, это дело для сервисного техника, или внутреннего хранилища (если там всё в порядке), такое есть на материнских платах с двумя чипами BIOS.
    Как более сложный вариант - проверять контрольную сумму каждой функции. Если повреждена критическая функция, то останавливать работу, если некритическая, то не вызывать её во время работы.
    Ответ написан
    2 комментария
  • Что такое AxCMS?

    @maksam07
    Стоит ли использовать эту систему? Какие отзывы/рекомендации?

    Смотри. Я понятия не имею что эта за система, но из их сайта можно сделать вывод, что они перестали обновлять свой продукт примерно в 20-21-м году. Ссылка на блог не работает. Ссылка на твиттер ведет на аккаунт, у которого последний пост был в 21-м. Вряд ли этот продукт будет рекомендоваться к использованию.
    Ответ написан
    2 комментария