Задать вопрос
  • Как можно делать запросы к API в Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Вариантов множество. В одном из недавних проектов я использовал libuv, http-parser и jsmn.
    Ответ написан
    Комментировать
  • Почему так тормозит RDP Windows Server 2003?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Попробуйте выключить аппаратное ускорение в браузере.

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

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

    Некоторые из этих ограничений решает RemoteFX, т.к. передаёт картинку по иному принципу. С ним, опыт использования приложений станет заметно шустрее.
    Ответ написан
    2 комментария
  • Что означает const при объявлении переменной в данном случае?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Квалификаторы могут применяться к любым типам, в том числе уже квалифицированным.

    Например
    const char a;
    const char const a;
    const const char a;
    const const const const const char a;

    обозначают одно и то же - константу типа char.
    Ответ написан
  • Куда дальше - Dev или Ops?

    DevMan
    @DevMan
    Есть ощущение, что настроить себе CI/CD нормальный девелопер и без OPS сможет.
    сможет конечно. только:
    – ненормальных девов намного больше нормальных
    – у нормального дева и так задач больше, чем времени

    кажется, что всё больше платформ переходит на виртуализацию/аутсорс (PaaS, SaaS, managed Kuber и т.д.)
    так и есть. только это никак не отменяет необходимость иметь в штате человека(ов), способного этим рулить.

    опс никуда не денется. разве только в мелких шаражках его в целях экономии переложат на девов.
    Ответ написан
    Комментировать
  • Как установить MS-DOS на HDD и поставить поверх Windows 3.1?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Windows 3.1 не знала что такое USB, и тем более что такое USB-диск, поэтому поставить с флешки не выйдет.
    Нужен либо с CD либо с FDD

    Можно поставить виртуалбокс и найти готовый образ установленного доса и поставить винду поставить из CD образа, подключенного к виртуалбоксу.
    Или даже готовый образ win 3.1 - на торрентах можно это все найти.
    Дома у меня только дос стоит.
    Ответ написан
    Комментировать
  • Почему нельзя перегрузить оператор?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    bool& operator [] (int index) {
        return selfVector[index];
      }

    должен стать
    std::vector<bool>::reference operator [] (int index) {
        return selfVector[index];
      }
    Ответ написан
    Комментировать
  • Почему рекурсия вовремя не останавливается?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При компиляции выдает ошибку

    А на скрине -- отладчик не может найти исходник для функции strcat. Т.е. всё с компиляцией нормально.

    struct SYM* buildTree(struct SYM *psym[], int N)
    ...
    
    void division(struct alphabet *alphabetLetter, int groupCount)
    {
      int psysms[256];
    ...
      psysms[i] = &alphabetLetter[i];
    ...
      struct SYM *root = buildTree(psysms, alphabetLen);
    ...
    }


    Тут происходит что-то фееричное с типами: сначала указатели записываются в массив int, потом этот массив передаётся в buildTree который ожидает совсем другое.
    Ответ написан
    Комментировать
  • Как релизовать хранение истории сущности в реляционной базе?

    duhbox
    @duhbox
    Вот тут
    https://habr.com/ru/post/101544/
    короткое и прозрачное описание разных вариантов организации версионности.
    Ответ написан
    7 комментариев
  • Почему поле fd в событии epoll_event не задано?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    e.data.fd = cfd;
    e.data.ptr = (void*)cfd;


    epoll_data -- это union, не нужно его инициализировать сначала одним, а потом другим:
    typedef union epoll_data {
                   void    *ptr;
                   int      fd;
                   uint32_t u32;
                   uint64_t u64;
               } epoll_data_t;
    
               struct epoll_event {
                   uint32_t     events;    /* Epoll events */
                   epoll_data_t data;      /* User data variable */
               };


    в документации сказано, что там должен быть дескриптор серверного сокета

    в документации сказано, что там должно быть значение, которое было в поле data во время вызова epoll_ctl.

    Кроме того, 0 -- вполне нормальный файловый дескриптор.
    Короче, я попробовал, у меня работает. Если у тебя не работает -- приведи весь код.
    Ответ написан
    1 комментарий
  • Что даст дополнительное обучение по информационной безопасности системному администратору?

    @CHolfield
    начиная с некоторого объема и начиная с определенной категории персональных данных и других защищаемых законом сведений (в том числе, коммерческой тайны), закон требует наличия в конторе-операторе хотя бы одного должностного лица с оконченным образованием по теме ИБ или техническая защита информации. Так што проси прибавки, функции по обеспечению этой самой безопасности скорее всего перекинут на тебя, ответственности прибавится - пусть башляют.
    Ответ написан
    1 комментарий
  • Компиляция c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?

    Да.

    Каким образом происходит передача информации в [mainx] что функция printx() существует?

    Это работа линковщика связывать ссылки на неопределённые символы с определениями этих символов.
    В main.o в месте вызова printx ставится команда вызова, в секции символов заводится неопределённый символ printx а в секции релокаций заводится запись, связывающая команду вызова с символом:

    objdump -dr mainx.o
    ...
    0000000000000000 <main>:
       0:   55                      push   %rbp
    ...
      3a:   89 c7                   mov    %eax,%edi
      3c:   e8 00 00 00 00          callq  41 <main+0x41>
                            3d: R_X86_64_PLT32      _Z6printxi-0x4
      41:   b8 00 00 00 00          mov    $0x0,%eax
      46:   c9                      leaveq 
      47:   c3                      retq   
    ...


    readelf -a mainx.o
    ...
    Relocation section '.rela.text' at offset 0x580 contains 12 entries:
      Offset          Info           Type           Sym. Value    Sym. Name + Addend
    ...
    00000000003d  001400000004 R_X86_64_PLT32    0000000000000000 _Z6printxi - 4
    ...
    
    Symbol table '.symtab' contains 25 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        20: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z6printxi
    ...


    В printx.o в секции символов заводится символ, ассоциированный с адресом в коде, где определена функция printx:

    readelf -a printx.cpp
    ...
    Symbol table '.symtab' contains 24 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        14: 0000000000000000    75 FUNC    GLOBAL DEFAULT    1 _Z6printxi
    ...

    Здесь value == 0 -- потому что printx оказалась по адресу 0 в секции .text.

    Линковщик объединяет входные секции согласно скрипту линковки, после чего вставляет конечные адреса символов в места, которые ссылаются на них.
    Ответ написан
    Комментировать
  • Как вы настраиваете табуляцию?

    @abmanimenja
    Современные (и не очень современные) IDE - это умеют сами.
    Да и не только IDE, а и специализированные программистские редакторы - тоже умеют.

    Общепринятых нет. В некоторых языках есть традиции. В некоторых фирмах есть code style guide.

    Язык - Go .

    Вы вот сейчас серьезно?

    Go чуть ли не единственный, где данной проблемы нет от слова "вообще". Вообще нет.

    Утилита go fmt делает так, как всенепременно рекомендуется делать для всех исходников, написанных на этом языке. Умеет работать как с отдельными файлами, так и с целыми каталогами файлов. Все делает совершенно автоматически.
    Ответ написан
    4 комментария
  • Как вы настраиваете табуляцию?

    для php psr-2 гласит
    Code MUST use 4 spaces for indenting, not tabs.

    для python pep-8 гласит
    As mentioned above, you should use spaces instead of tabs when indenting code. You can adjust the settings in your text editor to output 4 spaces instead of a tab character, when you press the Tab key.
    Ответ написан
    Комментировать
  • Как в Git продолжать разработку без отправки изменений на удалённый репозиторий?

    1) Фичу 1 оставить в своем репозитории и не лить ее в мастер локально
    2) Если для Фичи 2 изменения в Фиче 1 не нужны, просто переходишь в мастер, делаешь гит пулл и делаешь бранч для Фичи 2
    2а) Если для Фичи 2 нужны изменения, которые ты сделал в Фиче 1, то после второго шага делаешь gi rebase F1
    3) Перед тем как делать мерж реквест и к первой фиче и ко второй делаешь
    git fetch && git rebase origin/master таким образом ты в ветку подтянешь накопленные в мастере обновления и решишь конфликты если возникнут
    Ответ написан
    4 комментария
  • Нужен антивирус для слабого нотбука?

    flapflapjack
    @flapflapjack
    на треть я прав
    если обновления включены, используйте стандартный windows defender. Он есть в виндоусах начиная с XP.
    Ответ написан
    Комментировать
  • Требуется совет по разрешению дилеммы интеграции Linux в Winodws, как быть?

    bingo347
    @bingo347
    Crazy on performance...
    Я как то уже писал на хабр статью, про мое использование WSL
    https://habr.com/ru/post/412633/
    используя я его с GUI (Xfce) и норм терминалом

    так же для себя писал хелпер на шарпе (хост) + ноде (WSL), для автоматическим рулением vcxsrv (X сервер под винду), WSL, а так же прокидыванием системной раскладки в WSL
    https://github.com/bingo347/XHelper

    ну и еще добавлю, что перешел сейчас на debian (когда писалась статья его еще не было в сторе), в нем изначально меньше мусора под снос
    впринципе все тоже самое можно провернуть и с виртуалкой
    а у virtualbox еще есть режим интеграции рабочего стола
    Ответ написан
    1 комментарий
  • Как автоматизировать сборку зависимостей программы?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Смотрите в сторону любого менеджера зависимостей вроде Conan или vcpkg. У конана точно есть интеграция с CMake. Только учтите, что много чего вам всё равно придётся писать руками. Управление зависимостями -- это головная боль в C++, т.к. язык очень старый. Обычно у всех компаний есть свои велосипеды для этого.

    С помощью связки CMake + Conan реально получить то, что вы хотите.

    Следующим шагом будет создание установщика для уже скомпилированной программы, который будет устанавливать программу на компьютер пользователя. Тут всё ещё хуже на самом деле :) Но это уже другой вопрос.
    Ответ написан
    2 комментария
  • Как автоматизировать сборку зависимостей программы?

    @rPman
    Возьмите тот же make, мы все привыкли что makefile содержат какой-нибудь автогенирированный эпический код, в котором уже давно никто полноценно не разбирается, но вообще то это неплозая система автоматического контроля версий файлов и сборки с учетом зависимостей.

    Когда вы пишите
    целевой_файл:используемые файлы
      командная строка для сборки целевого файла
    вы фактически описываете процесс, когда make проверяет версии используемых файлов по цепочкам зависимостей автоматически и запускает соответствующие команды.

    Для каждой своей зависимости у вас можно написать bat-файл, который переходит в нужный каталог и пересобирает ее, затем копирует результат в каталог вашего проекта. Вы можете для каждого написать по паре строчек в вашем makefile указав в качестве используемых файлов вообще все файлы каждого проекта или лучше какой-нибудь один (например index файл из их git каталога) и все, при любом обновлении у вас будет происходить запуск сборки. Затем вы можете добавить этот makefile в ваш проект (либо вручную прописать его вызов) на сколько я помню в visual studio есть куча возможностей для этого.

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

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    1. Выбираете 1-е число из полного диапазона.
    2. Выкидываете множество выпавшего числа.
    3. Выбираете 2-е число из оставшегося диапазона.


    Например:
    1. случайное из [0, 2346] оказалось 105 из диапазона "B"
    2. выкидываем диапазон B, остаётся [0, 1902], т.к. длина "B" 544-101+1 = 444, 2346 - 444 = 1902
    3. случайное из [0,1902] оказалось, например, 404. Для чисел выше 100 добавляем 444 и получаем 848 из диапазона "C" по старому стилю )
    Ответ написан
    Комментировать