• Как массово переименовать файлы в папке с кастомной нумерацией?

    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 комментария
  • Как эмуляторы транслируют клиентский код в машинный?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Когда эмулятор собирает и компилирует код jit, то как он этот код в машинных инструкциях составляет.

    Если ты посмотришь на QEMU, то у него есть фронт-енды (https://github.com/qemu/qemu/tree/v8.1.0/target), каждый из которых транслирует инструкции эмулируемой машины в промежуточный код. И есть бэк-енды (https://github.com/qemu/qemu/tree/v8.1.0/tcg), каждый из которых транслирует инструкции промежуточного кода в инструкции хостовой машины. Каждая гостевая инструкция может превратиться во множество промежуточных, а каждая промежуточная -- во множество хостовых. У разработчиков есть правило, что если на гостевую инструкцию требуется больше 20 промежуточных, то вместо прямой трансляции такая инструкция реализуется как вызов функции на C. Инструкции транслируются базовыми блоками, с заданного адреса и до достижения одного из следующих условий: 1) встречена инструкция выполняющая переход (условный или безусловный, вызов функции, возврат из функции, сюда же относятся инструкции гарантированно вызывающие исключение), или 2) PC переходит через границу страницы виртуальной памяти, или 3) количество инструкций в базовом блоке превышает заданный предел. Вдобавок с каждым оттранслированным базовым блоком ассоциируется дополнительный набор флагов, определяемый фронт-ендом, который кодирует состояние, в котором была машина при трансляции этого кода. Это позволяет иметь несколько вариантов трансляции для кода начинающегося с одного и того же адреса, например для разных уровней привилегий. Оттранслированные базовые блоки помещаются в кеш с функцией поиска по комбинации адреса и дополнительного набора флагов. В цикле выполнения эмулятор ищет транслированный базовый блок кода в кеше (а если не находит его, то транслирует и помещает в кеш), запускает его и получает контроль после завершения его выполнения.

    надо к примеру Перед выполнением каждой инструкции проверять наличие прерывания

    Вовсе не каждой, даже в 100% точной эмуляции нужно проверять IRQ только когда прерывания разрешены. QEMU обычно проверяет запрос на прерывание только перед входом в оттранслированный базовый блок.

    Или же есть несколько блоков, где линейно выполняется весь блок, а последняя инструкция прыгнет в другой блок.

    Да, QEMU выполняет трансляцию базовыми блоками.

    к примеру для вот такого примера графа, сколько базовых блоков можно построить?

    В этом графе не обозначены безусловные переходы, если их нет, то QEMU мог бы выделить такие базовые блоки: 0-1-2-3, 4-5-6, 7-8-1-2-3, 9-10, 11-12-13, 14-15-16-2-3, 17, всего 7 блоков.
    Если безусловные переходы -- это все переходы от узлов с бОльшими номерами к узлам с меньшими, то картина была бы такой: 0-1-2-3, 4-5-6, 7-8, 1-2-3, 9-10, 11-12-13, 14-15-16, 2-3, 17. Да, фрагмент 2-3 оттранслирован три раза: сам по себе и в составе других блоков.
    Ответ написан
    2 комментария
  • (Теория) В каких случаях принято ставить L3 в центре?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    Фиолетово, при современном оборудовании. Если на файрволле много правил, или планируется/установлен программный, правильнее ставить L2 в центр коммутации, все равно трафик упрется во внешний канал, а при центральном L3 теоретически возможна деградация производительности, если упереться в правила фильтрации трафика. А так, логичнее ставить L2 в центр всегда, основная задача backbone - пересылка трафика, а всё остальное лучше делать вне его.
    Ответ написан
    5 комментариев