Задать вопрос
  • Как вызвать Excel из приложения на Visual C++ 6 (MFC)?

    @shupike Автор вопроса
    Не поверите :-) - залез в архивы, нашел саму первую программку, где использовал OLE (еще в 2004), вспомнил, что нужно было вытащить определенные классы из *.olb-файлов (свои для Word и для Excel). Похоже, я сейчас просто перепутал - стал вызывать Excel классами Word'a... В итоге попробовал аккуратно и отдельно по Word и по Excel, но самое главное, что я забыл (даже записал теперь в ReadMe) - вот эти строки:
    BOOL COfficeApp::InitInstance()
    {
    // Initialize OLE libraries
    if (!AfxOleInit())
    {
    AfxMessageBox("Could not initialize COM dll");
    return FALSE;
    }
    AfxEnableControlContainer();
    Нужно было добавить в InitInstance() в файле *.cpp проекта - перед AfxEnableControlContainer(); Вроде заработало. Спасибо за поддержку в любом случае :-)
    Ответ написан
    Комментировать
  • Корректно ли вызывать метод у временного объекта?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    DeepSeek галлюционирует. Временные объекты живут до конца выражения. unique_ptr начнет уничтожение после выполнения всего выражения.

    Вот ссылки на стандарт:

    make_unique<> является prvalue: https://en.cppreference.com/w/cpp/language/value_c...
    prvalue: a function call or an overloaded operator expression, whose return type is non-reference


    В момент вызова происходит материализация временного объекта: https://en.cppreference.com/w/cpp/language/lifetime

    Temporary objects are created ... in the following situations:
    when performing member access on a class prvalue.


    Там же написано:
    All temporary objects are destroyed as the last step in evaluating the full-expression


    Т.е. возвращенный make_unique объект будет уничтожен только в конце строки.
    Ответ написан
    Комментировать
  • Как массово переименовать файлы в папке с кастомной нумерацией?

    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 комментарий
  • Как найти проблему в локальной сети?

    @PiterEgor
    любитель
    Опыт жизни:
    - какая-то хрень с сетью, то работает то нет, какие-то устройства работают ?
    - это кольцо.

    Отключай все и каскадно подключай
    Ответ написан
    Комментировать
  • Как найти проблему в локальной сети?

    @Gansterito
    Нужно начать со структурирования сети:
    1) Убрать гирлянды, каждый коммутатор должен быть включен в один центральный "агрегатор", лучше L3.
    2) Сегментировать L2 домены с помощью VLAN.
    3) Настроить механизмы Loopback detection/Storm control и пр.
    4) Настроить DHCP Snooping/IP Source Guard и пр. для ограничения статических IP.
    5) Мониторинг: опрос всех устройств по SNMP, сбор логов по SYSLOG.
    Ответ написан
    Комментировать
  • Маршрутизатор с функцией Link Aggregation Control Protocol (LACP)?

    @Komrus
    CIO
    LACP позволяет использовать несколько параллельных Ethernet линков (Layer2 линков), отправляя разные Ethernet фреймы в разные линки.
    Вот этот фрейм - в этот линк, а вот тот фрейм - вон в тот линк...
    В зависимости от хеша MAC адресов отправителей/получателей.
    Если общаются один источник с одним получателем, то оно и загонится всё в ОДИН линк из LACP бандла...
    Т.е. работает это, когда есть пара коммутаторов (локальных коммутаторов), между которыми задействованы проложенные в параллель линки. Ну или между сервером и коммутатором. Но когда РАЗНЫХ клиентов стучится много через этот коммутатор.
    Ответ написан
    Комментировать
  • Маршрутизатор с функцией Link Aggregation Control Protocol (LACP)?

    @dronmaxman
    VoIP Administrator
    LACP позволяет объединить каналы между двумя устройствами, между этими устройствами нет промежуточных точек. LACP должен поддерживаться с обоих сторон, а не только на твоей стороне). Если бы у тебя к одному провайдеру было бы три кабеля, и все они на стороне провайдера входили бы в одино устройство, то ты мог бы договорится и объединить их в один LACP.

    То что ты ищеш это решения SD-WAN.
    Peplink
    Speedify
    OpenMPTCProuter

    Суть у них одна и та же. Есть домашний роутер, есть роутер в облаке. Домашний роутер строит через разных провайдеров тунель к облачному роутеру через всех доступных ему провайдеров, облачный сервер объединяет эти туннели и выпускает в интернет. Соответственно облачный роутер должен иметь интернет каналы больше чем все твои 3 провайдера вместе)

    Почему так? Почему просто нельзя сумировать каналы?
    Есть протоколы которые не предусматривают изменение IP адреса в процессе работы, а именно это и будет происходить если просто просумировать интернет каналы. Поэтому в большенстве случаев просто используют балансировку между интернет каналыми ибо тупо дешевле чем SD-WAN
    Ответ написан
    Комментировать
  • Насколько законно создание приложения с шифрованием заметок пользователей?

    @Everything_is_bad
    1. лицензия нужна только если этим софтом будут пользоваться госструктуры
    2. нет
    3. нет
    что-то может измениться когда у тебя активных пользователей за десятки миллионов перевалит
    Ответ написан
    1 комментарий
  • Как сделать файл бинарным для гита?

    Lynn
    @Lynn
    nginx, js, css
    Ответ написан
    Комментировать
  • Какой самый быстрый способ найти позицию последовательности 0-bit заданной длины в int[]?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Зависит от длины n. Если n маленькое то можно прикладывать маску. Байт x содержит 3 ноля в последних битах, если ~x &0x7 == 0x7. Аналогично, сдвигая маску из трех единиц (0x7) можно приложить ко всем позициям.

    Если n большое, то надо чтобы было много нулевых байт в массиве подряд. Тут можно использовать SSE инструкции для массового сравнения байт с нулями.

    Потом, можно еще распараллелить поиск в несколько потоков. Каждый поток ищет последовательность, начинающаюся в отдельном куске массива.
    Ответ написан
    Комментировать
  • Стотит ли менять asp.net mvc на asp.net web api + nextjs?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    нормально себя чувствует.

    Работает и не трогай
    Ответ написан
    3 комментария
  • Как ускорить поиск элементов из статичного string[] по подстроке?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Сначала объедините все ваши строки в одну через какой-то раздилитель, которого не может быть в искомой строке (можно и без него, но с ним код чуть проще будет). В конце поставьте этот же разделитель 2 раза. Вроде "строка1$строка2$строка3$...$строкаN$$".

    Вот уже ваша задача - быстро искать какую-то остроку в фиксированном тексте, а не куче строк.
    Тут есть много вариантов. Например, постройте суффиксное дерево алгоритмом Укконена. Вот эта ваша структура. При запросе, как в боре, поищите искомую строку в этом дереве. Если где-то перехода нет - вхождения вы не нашли. Если вы остановились на какой-то вершине (или ребре в дереве), то вам осталось каким-нибудь обходом в глубину найти все листья в поддереве этого места. Каждый лист соответствует вхождению. Еще при построении суффиксного дерева вы каждый лист пометите началом суффикса. Можно в тот же момент место в строке и конкатенаций перобразовать в номер исходной строки (например, бинпоиском по индексам начал строк в тексте. Или просто заведите массив, где для каждого символа в тексте при построении запишите, какая изначальная строка там была).

    Если разделитель не использовать, то могут быть лишние результаты - где искомый шаблон приложился между двух исходных строк в тексте. Их надо будет выкинуть.

    Другой вариант - через преобразование Барроуза — Уилера. Вот есть лекция. Этот алгоритм часто упоминается в курсах по биоинформатике. Реализацию может даже найдете где-то. Потом можно найти номера исходных строк из индексов вхождений через тот же бинпоиск по сортированному массиву индексов начал всех строк в тексте.

    Да, проблема тут будет, если у вас шаблон короткий, то вы найдете все вхождения, включая повторы в каждой из исходных строк. Тогда эти алгоритмы могут работать не сильно лучше наивного.

    Учтите, что построение структуры данных тут будет в несколько раз медленнее простого for+Contains. Выигрыш вы получите, если у вас текст действительно статичный и вы в нем много раз что-то ищите.
    Ответ написан
    7 комментариев
  • Используют ли Rabbitmq в внешней сети?

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

    delphinpro
    @delphinpro
    frontend developer
    refactor: Restructure directories/files
    Ответ написан
    Комментировать
  • Как происходит разработка по почте?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Единственный такой проект, о котором я слышал — это разработка ядра Linux. Там изначально велась разработка по почте. Да и сейчас кажется ничего не изменилось. На гитхабе мы видим лишь зеркало проекта. Гит изначально был придуман Торвальдсом специально так, чтобы он максимально прозрачно интегрировался в такой процесс. Даже коммиты при просмотре выглядят как электронные письма — там есть имя и мыло автора, тема, тело с подробным описанием изменений…

    А ответ на вопрос «как?» вы найдете в официальной книге Pro Git. Там этому посвящена целая глава. Учебник продолжает дополняться и переписываться сообществом, в том числе и на русском.
    Ответ написан
    1 комментарий
  • Как откатить результат если не комитил?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Неважно, что вы делали, гит перед каждым изменением записывает хэш указателя текущей ветки в специальный журнал — reflog. Соответственно вы можете этот журнал посмотреть командой git reflog
    А можно просто сослаться на порядковый номер в журнале и откатить текущую ветку на два шага назад:
    git reset --hard HEAD@{2}
    Как-то как.
    Ответ написан
    Комментировать
  • Нужно ли под каждую мелкую задачу создавать отдельную ветку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    На текущем проекте требуют, что бы под каждое, даже небольшое изменение, баг (заменить цвет уведомления) создавать отдельную ветку

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

    И сложно себе представить что нужно откатить если ты ушел в отпуск и в 1 мердж реквест положил штук 5 своих задач.

    Вобщем не нужно боятся бюрократии. Нужно ее умело использовать и поворачивать эти техники так чтобы всей команде было комфорто и спокойно. И не нужно бояться за перформанс при выполеннии операций. Этот перформанс вообще не имеет значения с точки зрения ентерпрайза. Ты логаешь общее время разработки куда входит и работа с кодом и работа с репозитарием.
    Ответ написан
    Комментировать
  • Как закрыть доступ к старым commit для разработчиков на ветке master?

    GavriKos
    @GavriKos
    Надо не просто перенести данные в переменные окружения, надо еще и сменить их. И тогда пофиг что они там получат
    Ответ написан
    1 комментарий
  • Как исключить файл из Pull Request?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Как я понял, вы хотите в одном и том же репозитории хранить два енвайрнмента, на одной и той же машине.
    Но это неверный подход. Ветки это не разные версии софта, ветки это разные состояния исходников.
    Сделайте ваш код, чтобы там был prod.config, dev.config и все
    Ответ написан
    2 комментария