Задать вопрос
  • Какой нужен сервер для приложения для заказа такси?

    @rPman
    Условная поездка - это считанные десятки запросов к серверу (если правильно websocket или любые другие двухсторонние протоколы), даже очень криворукие разработчики могут реализовать порядка секунды на запрос (обычно сотни-тысячи запросов в секунду на ноду, а очень хорошие разработчики могут обеспечить порядка 10к-100к запросов в секунду на ноду)...

    Техническая сторона почти любого бизнеса это его крохотная часть, в такси важен рынок и немножко маркетинг, отжать в текущих реалиях этот рынок почти нереально, нужно предлагать какие то заоблачные условия, только что бы некоторые водители и клиенты стали этим пользоваться... и делать это достаточно продолжительное время, что бы хотя бы часть рынка себе получить.
    Ответ написан
    1 комментарий
  • Почему busybox wget не работает, пока не запустить вручную openssl?

    @rPman
    По больше бы таких интересных вопросов.

    Задал ваш вопрос openai:o1-preview, ответ выглядит очень логичным:
    Вызвано недостаточной энтропией в генераторе случайных чисел (RNG) вашей минимальной системы.
    В системах Linux безопасные операции, такие как установление SSL/TLS-соединений, требуют случайных чисел, сгенерированных из системного пула энтропии.
    В вашей минимальной системе очень мало активности для генерации энтропии (например, нет дискового ввода-вывода, сетевой активности, пользовательского ввода), поэтому пул энтропии мал.

    Когда `wget` пытается установить HTTPS-соединение, он полагается на эту энтропию. Если ее недостаточно, библиотека SSL не может сгенерировать необходимые случайные значения, что приводит к сбоям соединения, таким как «Сброс соединения одноранговым узлом».
    ...
    Когда вы запускаете `openssl s_client`, он выполняет операции, которые помогают накапливать энтропию.

    **Как это исправить:**

    1. **Убедитесь, что `/dev/random` и `/dev/urandom` существуют:**
    - Убедитесь, что в вашей системе есть эти устройства:
    ```sh
    ls -l /dev/random /dev/urandom
    ```
    - Если их нет, создайте их:
    ```sh
    mknod -m 666 /dev/random c 1 8
    mknod -m 666 /dev/urandom c 1 9
    ```

    2. **Заполните пул энтропии при запуске:**
    - **Используйте демон сбора энтропии:**
    - Включите в свою сборку такой инструмент, как `haveged` или `rng-tools`. Эти демоны генерируют энтропию на основе таймеров или аппаратных ГСЧ.
    - Например, с `haveged`:
    - Скомпилируйте и установите `haveged` в свою систему.
    - Запустите его при запуске:
    ```sh
    haveged -w 1024
    ```
    - **Ручное заполнение энтропии (менее безопасно):**
    - Если добавление демона невозможно, вы можете вручную заполнить энтропию (обратите внимание, что это менее безопасно и не рекомендуется для производства):
    ```sh
    dd if=/dev/urandom of=/dev/random bs=1 count=512
    ```
    - Эта команда записывает случайные данные обратно в `/dev/random`, помогая заполнить пул энтропии.

    3. **Проверьте уровни энтропии:**
    - Отслеживайте доступную энтропию:
    ```sh
    cat /proc/sys/kernel/random/entropy_avail
    ```
    - Значение ниже 100 может привести к блокировке или сбою операций SSL.

    4. **Используйте аппаратный генератор случайных чисел (если доступен):**
    ...

    Посмотри, что показывает cat /proc/sys/kernel/random/entropy_avail
    Ответ написан
    3 комментария
  • Почему скрипт не работает через systemctl?

    @pfg21
    ex-турист
    системд не использует интерпретатор командной строки, потому запись ExecStart=/home/mtr.sh не правильна в корне. ты пытаешься исполнить баше-скрипт, а системд не подставляет баш в качестве дефолтного исполнителя.

    говоря проще, первым параметром ExecStart должон быть бинарный исполняемый файл.
    ExecStart=/bin/bash /home/mtr.sh
    ---------
    В процессе обсуждений выяснили что проблема была в ограничениях доступа от selinux
    Ответ написан
  • Нормально ли использовать dynamic_cast?

    1. Не надо путать "класс" и "экземпляр класса" (объект)

    2. dynamic_cast не на много дороже, чем вызов виртуального метода. На сколько это критично для твоих "критичных мест" - это уже тебе решать)

    3. То что ты в коде делаешь dynamic_cast - это странно и уже как-то нехорошо попахивает. Зачем тебе вообще тогда наследование, если какие-то конкретные классы ты по особенному обрабатываешь?
    Ответ написан
    Комментировать
  • Существует ли готовое решение для асинхронного обмена сообщениями по https?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Да, называется веб-сокеты.
    Ответ написан
    Комментировать
  • Могу ли я откатить все изменения на github без возможности вернуть их?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Нет. Всё, что попало в интернет - остаётся там навсегда. Особенно все изменения в git репозитории - копии его есть не только на сервере, который вам не принадлежит и в организации, в которой вы вряд ли админ/владелец, так еще и у всех остальных разработчиков тоже есть копия.
    Ответ написан
    1 комментарий
  • Могут ли наказать разработчика open source проекта, если его код использовался во вредоносном ПО?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нет, если в случае чего, Вы сможете доказать, что Ваша программа так же не является вирусом ("Создание" УК РФ Статья 273). Вы должны понимать, что крайнего все равно придется найти...
    Ответ написан
    1 комментарий
  • Postgres минимальная установка где взять?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Но установка Postgres очень большая...

    PostgreSQL занимает около 185 Mb на диске, не требует установки и в стандартной конфигурации ему требуется для работы всего 128 Mb оперативной памяти, а в минимальной вовсе 8 Mb. Это одна из самых малотребовательных к ресурсам СУБД. Если надо ещё меньше и ваш скрипт будет работать в единственном экземпляре, можно посмотреть в сторону файловых СУБД, например SQLite.
    Ответ написан
    4 комментария
  • Когда каскадное обновление это плохо?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Когда каскадное обновление это плохо?

    Каскадное обновление - в большинстве случаев это... глупо.

    Вспомним, что это вообще такое.

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

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

    Что же есть каскадное обновление? Это изменение связанного значения в подчинённой таблице, если изменяется значение основной таблицы. Ну то есть если изменяется (вспоминаем сказанное выше) значение первичного ключа или поля, объявленного уникальным. В основной таблице. Ага...

    Ну то, что изменение/корректировка значения поля первичного ключа есть bad practice (читай - дурь голимая), хорошо известно, обосновано и весьма логично. Нет, реально возможны ситуации, когда такая операция оправдана и имеет смысл - но такая ситуация абсолютно всегда одноразовая, и есть составная часть административного обслуживания. А если подобная надобность возникла на уровне пользователя, в рабочем процессе - то это гарантия наличия серьёзной ошибки в проектировании БД.

    Практически всё то же относится и к корректировке просто уникального поля. За исключением случая, когда выполняется каскадное изменение значения поля, которое в основной таблице получило значение NULL. То есть когда выполняемая операция по смыслу является не обновлением, а "мягким удалением" основной записи с каскадным удалением всех подчинённых. Правда, на вопрос, как отличить мягко каскадно-удалённые подчинённые записи от мягко явно-удалённых, и как определить, с какой основной записью была связана мягко удалённая подчинённая, не залезая в журнал или бэкап, ответа никто не даст. А получается, что даже в случае исключения всё делается через "универсальный интерфейс", то есть косяк в проектировании структуры имеется и в этом случае.

    Резюмирую. Если каскадное обновление необходимо, оно скорее всего маскирует недостатки и ошибки проектирования. А плохо это или хорошо - прикрывать дырку костылём,- решайте сами.
    Ответ написан
    Комментировать
  • Как соединить 3 роутера в одну локальную сеть?

    @Drno
    РОутеры перевести в режим свитча, отключить на них NAT и DHCP
    Задать роутерам IP из локальной подсети 1го роутера
    приходящий кабель вместо WAN воткнуть в LAN порт (2го и3го ) роутеров
    всё, будет 1 общая сеть
    Ответ написан
    4 комментария
  • Инструмент для создания любого типа файла?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Теми инструментами, которые и предназначены для создания файла необходимого формата.
    Ответ написан
    Комментировать
  • Лучшие практики для русскоязычных аббревиатур в API?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Если предполагается в перспективе использование вне РФ - то лучше использование tin вместо inn, и прочие по возможности таким образом заменять.
    Ну а если сугубо для внутреннего пользователя - то можно использовать русские транслитерированные аббревиатуры.
    Ответ написан
    Комментировать
  • Undefined behavior в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Скомпилирует любой компилятор с++. Может выдать ворнинги, если включена опция реагировать на предупреждения, как на ошибки, то тогда не скомпилирует, но только потому что его конкретно об этом попросили. Это не ошибка компиляции.

    В этом главная проблема Undefined Behavior: компилятор его почти всегда не видит, и программа с ним может даже работать в каких-то случаях так, как программист задумывал. А в других совершенно необъяснимо падает или выдает бред.

    У ОС защита от такой наглости с памятью, конечно, есть. Такая программа рано или поздно упадет с access violation, segmentation fault или еще чем-то подобным, когда цикл дойдет до не вашей памяти.
    Ответ написан
    Комментировать
  • Остаток от деления в Python -1%5?

    По определению деления. Школа 3 класс.
    Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
    Остаток всегда больше нуля.
    При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

    Более формально это выглядит так:

    Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

    a - делимое
    b - делитель
    q - частное (целое)
    r - остаток

    Вот и получается
    1 = 0 * 5 + 1
    -1 = -1 * 5 + 4

    UPD: в python это не совсем так. На самом деле в Python действительно релизован mod, как говорит Rsa97, но у этой операции нет чёткого определения, по тому в разных языках оно реализовано по разному:
    https://en.wikipedia.org/wiki/Modulo
    q = floor(a/b)
    r = a - b*q

    В первом случае: q=0, r=1
    Во втором: q=-1,r=4
    (в принципе то же самое)
    Интересное начинается, если делитель отрицательный:
    Если взять a=1, b=-5, то тогда r=-1, q=-4
    А вот при обычном делении с остатком: r=0, q=1
    Ответ написан
    Комментировать
  • Как устроиться в начинающую компанию?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Никак. В таких компаниях нет необходимости в сотрудниках или в MVP.
    Таким компаниям нафиг не нужен сайт (может быть пригодится группа в ФБ/телеграме).
    В таких компаниях нет денег на третьего сотрудника и вообще не выделен и не создан бюджет на айти.
    Зачем туда устраиваться?

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

    В такую компанию нужен не сотрудник, а инвестор.
    Ответ написан
    3 комментария
  • Как получить имя метода из примененного к нему атрибута?

    petermzg
    @petermzg
    Самый лучший программист
    Никак. Атрибуты это мета информация и отдается она только по запросу
    Ответ написан
    Комментировать
  • Как выбрать записи из таблицы с макимальным значением за каждый день в PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    select distinct on (created_at::date) created_at, value from tablename order by created_at::date, value desc;
    Ответ написан
    Комментировать
  • Как массово переименовать файлы в папке с кастомной нумерацией?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В линуксе:
    rename 's/(\d+)(\..*)$/sprintf("%d-%d%s", ($1+1)>>1, ($1-1)%2+1, $2)/e' *

    В виндовсе bat-файлом:
    @echo off
    setlocal enabledelayedexpansion
    for %%f in (*.jpg) do (
      set name=%%~nf
      set ext=%%~xf
      set /a n1="(%name+1)/2"
      set /a n2="((%name-1)&1)+1"
      rename %%f !n1!-!n2!!ext!
    )
    endlocal
    Ответ написан
    1 комментарий
  • 10к строк по базе размером 500кк?

    @galaxy
    SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    проще всего так, наверно:

    CREATE EXTENSION pg_trgm;
    
    CREATE INDEX trgm_domain_base_idx ON base USING GIST (domain gist_trgm_ops);
    
    EXPLAIN ANALYZE SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    https://www.postgresql.org/docs/current/pgtrgm.html
    Ответ написан
    Комментировать
  • Что лучше, множество запросов на вставку в одной транзакции или один запрос на вставку всех значений?

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

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

    Иначе, лучше второй вариант.
    Ответ написан
    Комментировать