Задать вопрос
  • Как убедиться что атомарные операции будут выполнены точно правильно?

    @res2001
    Developer, ex-admin
    Ситуация вполне вероятна. На сколько я знаю, нет гарантии, что поток после создания сразу получит процессор для выполнения.
    Делайте проверку в get в цикле, если x.load вернул false, то можно вызвать yield(), чтоб напрасно не жрать процессор в цикле.
    Ответ написан
  • Как развернуть второй сервер OpenVPN на одном железе?

    @res2001
    Developer, ex-admin
    В винде по умолчанию при установке openvpn добавляется только 1 виртуальный tun/tap адаптер, чтоб запустить несколько экземпляров openvpn нужно для каждого экземпляра использовать свой виртуальный адаптер.
    В комплекте установки есть утилита tapctl, позволяющая добавлять адаптеры, а так же в меню пуск есть ярлыки для запуска этой утилиты с правильными параметрами.

    На самом деле в актуальной версии openvpn по умолчанию устанавливается 3 виртуальных адаптера, но каждый из них разного типа: tun, tap, dco. Похоже можно использовать разные типы адаптеров, изменив опцию dev.
    На сколько помню, раньше был только 1 тип адаптера: tun. Его я и использовал всегда. На сколько хорошо работают остальные типы адаптеров под виндой - не в курсе.

    Кроме того OpenVPN устанавливает свои службы, которые удобно использовать на серверах, когда нужно, чтоб openvpn стартовал автоматически при старте винды, без вмешательства пользователя.
    Ответ написан
    4 комментария
  • Как попасть в IT школьнику?

    @res2001
    Developer, ex-admin
    Если в твоем городе есть нормальный ВУЗ, то иди учись. Если нет, то стоит поискать куда ты можешь поехать учиться. У тебя сейчас единственная возможность в жизни получить бесплатное образование. Скорее всего такого подарка судьбы больше не будет никогда. Бывают, конечно, исключения.
    Обучение это не столько "новые технологии" программирования. Это еще и математика и прочие предметы, которые хорошо ставят мозги на место. Это то же нужно, если и не для программирования, то для собственного развития.
    Но самое главное, чему ты должен научиться в ВУЗе - учиться самостоятельно. Впрочем, похоже, это у тебя не плохо получается. Значит будешь оттачивать навык :-)
    Желаю удачи!
    Ответ написан
    5 комментариев
  • Как вывести два сервиса в сеть из одного/двух ip?

    @res2001
    Developer, ex-admin
    1 и 2. Делайте проброс разных портов в NAT на роутере на разные внутренние сервисы. Т.е. номер внешнего порта будет определять внутренний адрес (и порт) сервиса.
    Ответ написан
    4 комментария
  • Вылетает программа на C++ с кодом -1073741571 (0xC00000FD)?

    @res2001
    Developer, ex-admin
    Если вы под виндой, то запустите программу в дебагере без точек останова. Когда произойдет ошибка, то дебагер остановится в том месте где произошла ошибка, перейдете по стеку вызовов к вашему последнему вызову (т.к. ошибка может проявляться где-то в коде стандартной библиотеке) и начнете анализировать это место программы.

    В линуксах надо включить создание coredump в ОС, выполнить программу, получить файл coredump и проанализировать его в gdb. Схема анализа кода та же, что под виндой.

    Возможно у вас выход за пределы массива. При анализе внимательно смотрите на используемые индексы и размеры выделенного вектора к которому идет обращение.

    Результаты вашего анализа можете скинуть сюда.
    Ответ написан
    Комментировать
  • Как избежать коллизии по данным?

    @res2001
    Developer, ex-admin
    Сделать в таблице уникальный индекс по одному или нескольким полям, которые образуют уникальный ключ для объекта. В этом случае при попытке создать в базе запись с таким же уникальным ключом будет ошибка.

    Вообще нагрузка 100% - это повод задуматься о масштабировании приложения или оптимизации базы, не понял где у вас нагрузка 100%.
    Необходимость масштабирования не отменяет создания уникального индекса.
    Ответ написан
  • Для чего внутри связного списка нужен массив?

    @res2001
    Developer, ex-admin
    Видимо планируется хранить список на медленном устройстве хранения (на диске). Тогда такое построение связного списка вполне оправдано - за одно чтение можно прочитать несколько блоков данных.
    Возможно примерно таким же способом хранятся таблицы в СУБД. Называться это может по разному.
    Так же в СУБД часто применяют b-tree для хранения индексов, в этом дереве то же хранится несколько элементов данных в одном узле.
    Ответ написан
    Комментировать
  • Что делать с ошибкой unresolved external?

    @res2001
    Developer, ex-admin
    У вас не включен в сборку Firm.cpp. Поэтому все что в нем определено и используется в unit1.cpp будет вызывать ошибку.
    Как собираете проект?
    Ответ написан
    Комментировать
  • Как бы упростить непростое сравнение строк?

    @res2001
    Developer, ex-admin
    Если в отдельной таблице базы хранить еще и предварительно посчитанные количества нулей для каждой позиции во всех строках, то задача сократится до 1 прохода по символам новой строки.
    При добавлении/удалении строк, надо будет модифицировать и таблицу с количеством нулей.
    Ответ написан
  • С++ На всех ли платформах одинаковая точность операций с float?

    @res2001
    Developer, ex-admin
    Форматы чисел с плавающей точкой стандартизованы IEEE754.
    Скорее всего, операции выполняемые процессором над числами с плавающей точкой будут давать одинаковый результат на разных платформах.
    Но вот программные реализации различных математических алгоритмов из стандартной библиотеки, типа того же sqrt и т.п., могут отличаться.
    Для гарантии, вам нужно использовать для этих целей какую-то единую библиотеку для всех платформ, а не стандартный math.h.
    Ответ написан
    1 комментарий
  • Откуда OpenSSH Server грузит ключи?

    @res2001
    Developer, ex-admin
    Обычно пользовательские ключи лежат в пользовательских профилях в каталоге .ssh: cd %USERPROFILE%\<user name>\.ssh
    Так же как в линухе. Там их и ищет сервер.
    Но у вас для чего то в конфиге 2 опции AuthorizedKeysFile. Возможно одна из них лишняя.
    Ответ написан
    Комментировать
  • Как быстро округлить timestamp до секунд, минут, часов, дней и т.д.?

    @res2001
    Developer, ex-admin
    Думаю, для округления вплоть до дней можно просто отбрасывать остаток от деления на соответствующую константу. Константы вычислить заранее для 1 дня, 1 часа и 1 минуты.
    Округление до года и месяца - по предложенной jcmvbkbc схеме.
    Ответ написан
    Комментировать
  • Как показать все листья в бинарном дереве?

    @res2001
    Developer, ex-admin
    Листьями в дереве считаются узлы, у которых нет потомков.
    Потомки в коде задаются членами узла left и right, соответственно if(p->left == NULL && p->right == NULL), то узел - лист.
    Делаете проход по всем узлам и выводите только те узлы, где условие выполняется.
    Ответ написан
    Комментировать
  • Почему fopen устанавливает ошибку Invalid argument в errno при fopen в режиме r+ после w и fopen в режиме w+ после r?

    @res2001
    Developer, ex-admin
    Интересный вопрос. Ответа у меня нет, что-то не приходилось использовать режимы "+".
    Попробуйте обнулять errno перед вызовом fopen. Возможно значение, осталось от предыдущего вызова. Вообще читать errno надо, только если fopen вернул NULL. При нормальном завершении errno не меняется.
    И если pFile == NULL, очевидно, что не надо вызывать fclose.
    Ответ написан
  • Чем меньше символов, пробелов и пропусков в коде, тем лучше?

    @res2001
    Developer, ex-admin
    Исходные коды программы пишут для людей, которые потом будут ее сопровождать, а вовсе не для компьютера/компилятора.
    Все эти пробелы, пустые строки, короткие имена никак не влияют на производительность программы, но зато очень сильно влияют читабельность, а следовательно и на сопровождаемость. Пишите так, что бы коллеги легко понимали вашу программу.
    Ответ написан
    Комментировать
  • Как думаете, с чем связана ошибка и как ее исправить?

    @res2001
    Developer, ex-admin
    Про size_t - если вы на 100% уверены, что у вас никогда не случится потеря данных при преобразовании из 8 байтного беззнакового size_t в 4 байтный знаковый int, то можете сделать явное преобразование типов (cast). Но гораздо правильней для размера (всего чего угодно) использовать size_t (а не int), как это давно уже делают в std.
    Про strncpy - в некоторых случаях она может быть не безопасной. Если вы на 100% уверены, что в вашем случае она точно безопасна, то можно забить на ошибку, объявить макрос, который указан в тексте ошибки и на этом проблема будет исчерпана. Но есть безопасные аналоги строковых функций у них к имени добавляется суффикс _s. В вашем случае безопасный аналог strncpy_s. Используйте безопасные функции. Безопасные функции немного медленней работают, за счет дополнительных проверок и т.п.
    Ответ написан
    6 комментариев
  • Как передать статический двумерный массив типа float в функцию типа void в качестве аргумента на языке C?

    @res2001
    Developer, ex-admin
    1. В двумерных массивах в Си данные располагаются в памяти по строчно, т.е. сначала идет первая строка массива, затем вторая и т.д. У вас же индекс по строкам указан вторым. Вас тут спасает только то, что матрица квадратная и количество строк равно количеству столбцов.
    2. Внутри функции переданный массив - это не массив, это указатель float *nameMatrix. Соответственно вы не можете делать двойную индексацию nameMatrix[x][y]. Вам надо вычислять индекс вручную:
    *(nameMatrix + y * columnsMatrix + x) = a * (x + 1) * powf(sinf(y + b), 2);

    Для справки, индексация массива это синтаксический сахар для следующей операции: *(nameMatrix + i)
    Ответ написан
    Комментировать
  • Как правильно настроить фильтрацию по портам и ip локальной и глобальной сети в роутере?

    @res2001
    Developer, ex-admin
    Для работы веба в большинстве случаев достаточно:
    1. DNS: UDP, dst=any:53
    2. HTTP/HTTPS: TCP, dst=any:443/80

    DNS нужен, чтоб преобразовывать имена доменов в IP адреса.

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

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

    Если у вас используются еще какие-то службы в интернете, то соответственно их нужно открывать отдельно.

    Любые IP адреса не будут лезть в локальную сеть, только те куда ваши локальные устройства сначала отправят запрос (будет приходить ответ). Точнее они будут пытаться лезть, но дальше роутера не уйдут - там же у вас еще, видимо, NAT работает, вот он их и будет останавливать.
    Ответ написан
    Комментировать
  • Дублирующиеся столбцы - это плохо?

    @res2001
    Developer, ex-admin
    5-6 секунд с inner join - это должно быть несколько миллиардов (сотен миллионов) записей в обоих таблицах.
    Попробуйте создавать индексы по полям участвующим в связывании таблиц.
    Денормализация данных - обычно плохой вариант. Есть некоторые кейсы, когда это допустимо, но лучше этого избегать, пока не перепробованы другие варианты ускорения.
    Ответ написан
    Комментировать