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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Linux есть замечательная утилита rename. Ну, точнее, их две: одна входит в пакет util-linux, другая - скрипт на базе perl-модуля File::Rename. В deb-дистрибутивах нужный нам скрипт устанавливается в составе пакета rename и также имеет имя второе file-rename (а версия из util-linux имеет имя rename.ul). В других дистрибутивах может быть иначе, поэтому смотрим внимательнее параметры запуска (можно запустить rename без параметров и убедиться, что это нужный вариант).

    Синтаксис предельно простой: rename регулярное_выражение_замены_perl имена_файлов

    Синтаксис rename.ul для сравнения: rename что_заменить на_что_заменить имена_файлов

    Вот что можно сделать для решения задачи (в предположении, что других точек, кроме как перед расширением, в имени файла нет):

    rename 's/-\w+\././' *

    Этот скрипт намного удобнее многоэтажных однострочников, да и пригодится в жизни ещё не раз.
    Ответ написан
    7 комментариев
  • Почему не заходит на сайт по айпи?

    akelsey
    @akelsey
    Нужно добавить заголовок Host, для браузера придется ставить расширение.
    Обычно на одном айпи адресе могут хостится несколько сайтов (от пары до десятка или сотни)
    Так называемые виртуальные хосты получают заголовок Host откуда извлекают информацию, к какому сайту пользователь хотел обратиться. Если веб сервер настроен именно так, то по айпи зайти не выйдет или будет выбрасывать на дефолтный сайт (зависит либо от настройки администратором, либо от вебсервера, часто выдает первый по алфавиту, могут быть любые другие варианты)
    Ответ написан
  • За сколько можно прокачаться не очень хорошему системному администратору до DevOps инженера?

    @vldmrmlkv
    На секунду показалось, что как будто это я писал года 3 назад. Был похожий стек и те же вопросы, пока окончательно не выгорел. За год до этого полностью перешёл на Linux. Потом прошел курсы и поменял работу.

    По теме. Тупой тот, кто не хочет и не может учиться. Рутина без развития демотивирует, работа и профессия должны нравиться. Вы уже начали, значит вопрос решается и это хорошо. Возможно потеряли пару лет - стабильность затягвает, у меня так и было, но теперь вы знаете что делать дальше. Нужно составить план и делать. Попробуйте канбан доски в trello - мне очень зашло. Будет некая игрофикация процесса обучения, приятно когда закрыл ещё одну "таску" и видно объем проделанной работы. Ну или можно купить какой нибудь крутой курс слёрма, но лучше с начала самому - всё основное есть в свободном доступе. Ссылки в конце.

    Начать я бы рекомендовал с linux как основная ОС, а на работе внедрять IaC и мониторинг - ansible, terraform, docker, docker-compose, gitlab, AWX, Portainer, Prometheus, ViktoriaMetrics, Graylog, Loki. Те же агенты zabbix можно раскатывать ansibl'ом, автоматизировать это все в gitlab ci. Провижинить вм terraform'ом. В zabbix api можно много чего автоматизировать. Например, автоматическое добавление новых хостов. Поднять всё, что можно в docker, разобраться с docker-compose. Кубер можно локально посмотреть minikube, поднимается за 10 минут. Для кубера поставьте Lens - не тру конечно, но в нём наглядно видна структура сущностей кубера.

    Пару ссылок по теме:
    https://infinite.education/skillset/linux_administrator
    https://www.youtube.com/@KirillSemaev
    https://github.com/milanm/DevOps-Roadmap
    https://www.youtube.com/@ADV-IT/playlists
    https://github.com/bregman-arie/devops-exercises
    https://landscape.cncf.io/?grouping=category&zoom=60
    https://kubernetes.io/ru/docs/tutorials/kubernetes...
    Ответ написан
    Комментировать
  • Может ли прерывание прервать выполнение конструктора / деструктора в С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Может ли прерывание прервать выполнение конструктора / деструктора в С++?

    Да, конечно может, как и любой другой код, явно не защищённый от прерываний.

    нужно ли в конструкторах / деструкторах защищать код критическими секциями?

    Нужно защищать любое состояние, к которому может обращаться код из разных контекстов выполнения -- например из разных потоков или из потока и обработчика прерывания. В ядре linux (где разных типов контекста много и разных способов синхронизации тоже много) есть руководство, что и когда использовать.
    Ответ написан
    Комментировать
  • Каковы правила конвертации указателя на массив неопределенной длины в указатель на массив определенной длины?

    @code_panik
    В выражении p = p2 мы выполняем неявное преобразование встроенных типов, для которых в стандарте не описаны правила преобразования. То есть такое преобразование не гарантировано, но может быть реализовано компилятором, например
    #include <type_traits>
    using namespace std;
    
    int main() {
        static_assert(std::is_convertible<int(*)[2], int(*)[]>::value, "Non-convertible");
        return 0;
    }

    компилируется в gcc 12.2, в clang 15.0 - ошибка.

    Существует старое не принятое предложение о закреплении такого преобразования стандартом.
    Ответ написан
    1 комментарий
  • Какие варианты миграции корпоративной почты с Яндекс на MS Exchange 2019?

    vlrusanov
    @vlrusanov Автор вопроса
    Системный администратор, Администратор 1С
    Всем спасибо, ушел от Exchange. Все сделано на iRedMail
    Ответ написан
    Комментировать
  • Как изолировать один физический диск от двух других?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Может проще на виртуалку поставить линукс и тренироваться сколько хочешь.
    Ответ написан
    2 комментария
  • Как в ubuntu запускать скрипт при старте?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    1. гуглить enable rc.local ubuntu
    2. написать systemd скрипт автозапуска.
    Ответ написан
  • Стоит ли разработчикам платить за баги?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не платите. Тогда все разработчики просто уйдут туда, где платят. А вы останетесь изучать теорию, объясняющую почему и как появляются баги, пока не осознаете их неизбежность.
    Ответ написан
    1 комментарий
  • Не работает деструктор. В чем ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не работает деструктор

    "Не работает деструктор" -- это когда программу компилируешь, запускаешь, а деструктор не делает того, что в нём написано. У тебя же программа не компилируется. Из-за того, что в настройках компилятора стоит "трактовать предупреждения как ошибки" и "предупреждать о неэффективном коде С++". Ну и вдобавок, предупреждение тебе правильно говорит, что если ты не реализовал конструктор копирования и оператор присваивания для класса самостоятельно управляющего памятью, то жди проблем, когда начнёшь копировать объекты этого класса.
    Ответ написан
    6 комментариев
  • Является ли одинаковой скорость 2-х фрагментов кода (доступ к элементу массива по индексу)?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Из общих соображений - да, умножение нужно и там и там. Однако! Представленный код является шаблоном, следовательно, будет инлайнится по месту. Следовательно - нужно смотреть конкретный код, который вызывает этот метод - может оказаться так, что компилятор сможет выкинуть умножение совсем - например, если обращение происходит в цикле - можно ведь шагать сразу на размер инта.

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

    @Sozdavan
    В PHP вы можете использовать библиотеку TCPDF, чтобы установить размер страницы и создать файл PDF с нужными размерами. Вот пример того, как установить размер страницы 6x4 см:
    require_once('tcpdf.php');
    
    $pdf = new TCPDF('P', 'cm', array(6, 4), true, 'UTF-8', false);
    
    // ... your code to add content to the PDF ...
    
    $pdf->Output('example.pdf', 'I');


    В JavaScript вы можете использовать библиотеку jsPDF для создания и сохранения файла PDF с нужными размерами. Вот пример того, как установить размер страницы 6x4 см:

    var doc = new jsPDF('p', 'cm', [6, 4]);
    
    // ... your code to add content to the PDF ...
    
    doc.save('example.pdf');


    Обе эти библиотеки также поддерживают другие функции для добавления текста, изображений и другого содержимого в документ PDF
    Ответ написан
    6 комментариев
  • Насколько этично предлагать заказчику переделать сайт, который я же и сделал года 3-4 назад?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Нормальному специалисту свойственно расти. По мере роста открываются новые фичи и ты видишь, что то, чем ты гордился несколько лет назад - на самом деле хрень и рукожопость.
    А подойти - так же как к любому вопросу в бизнесе - показав заказчику потенциальную выгоду, если она конечно есть.
    Ответ написан
    Комментировать
  • Как организована отрисовка ui в dos?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Насколько я помню (могу ошибаться, дело было лет так тридцать назад, в 1993 году), в досе текстовый экранный буфер находится по адресу B800:0000. Там он идет топорно просто - байт символ, байт атрибут, байт символ, байт атрибут. Атрибут - это цвет символа, цвет фона, яркость, мигание. Извращался я будь здоров, помнится.

    Во даже чего нашел - структура байта атрибута! Файлик - 1995 года :)
    F_BLACK  equ   0
    F_BLUE   equ   1
    F_GREEN  equ   2
    F_CYAN   equ   3
    F_RED    equ   4
    F_MAG    equ   5
    F_BROWN  equ   6
    F_LGRAY  equ   7
    F_INTENS equ   8
    F_YELLOW equ  0Eh
    F_WHITE  equ  0Fh
    B_BLACK  equ   0
    B_BLUE   equ  10h
    B_GREEN  equ  20h
    B_CYAN   equ  30h
    B_RED    equ  40h
    B_MAG    equ  50h
    B_BROWN  equ  60h
    B_LGRAY  equ  70h
    B_BLINK  equ  80h
    Ответ написан
  • Почему может тормозить простейший запрос?

    @rPman
    В чем отличия в серверах? количество оперативной памяти? мажорная версия mysql? настройки?
    есть возможность сравнить конфигурации mysql прошлого сервера и нового с помощью SHOW VARIABLES и уже сравнив их на примере каких-нибудь буферов можно что то менять.

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

    Вот посмотри тут как предлагают проверить, влезает ли индекс в память или нет (подправь там условие чтобы твои таблицы были а не все)
    --------------------------------

    Так же предлагаю провести эксперимент, замени SELECT page_id FROM blitz_tasks WHERE stage = 1533 на список значений в константах (1,2,3,4,...), и если это поможет (а должно так как запрос теперь лезет только в одну таблицу и не трогает другие индексы) то будешь дробить свои запросы, избавляясь от вложенностей и нескольких индексов в одном запросе
    Ответ написан
    8 комментариев
  • Есть ли разница SELECT * FROM `bd` WHERE `id` = '$id' и SELECT * FROM `bd` с поиском через цикл?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Брать из таблицы все данные, чтобы найти нужное значение циклом - это плохой подход.
    А если записей будет миллион, представляете, сколько времени займёт передача данных из БД и переборка их в цикле. Я уже не говорю про потребеление памяти.
    Посмотрите примеры подготавливаемых запросов например здесь
    Ответ написан
    Комментировать
  • Написание кода коротко плохо?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Оба варианта хорошие. Но обычно если ты работаешь отладчиком и тебе
    интересно где логика ведет себя не так - то второй вариант удобнее.

    Однострочники хороши только когда ты досконально понимаешь
    что внутри них происходит.
    Ответ написан
    8 комментариев
  • Как преобразовать документ pdf в лист excel?

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

    В общем требуется исследование, которое тебе сначала придется провести.

    У тебя 2 варианта решения (как повезет)
    1. если текст в pdf записан как текст
    разбираешь документ на элементы чтобы получить список текстовых строк с координатами (вот тут обсуждалось там же и пример)

    2. если текст не содержится внутри документа и pdf исключительно как картинка (бывают разные случаи, в простом варианте - pdf как векторное изображение, грубо говоря команды принтеру/графопостроителю, бывает прямо изображение помещают, например после сканирования бумажных
    то используй инструменты распознавания текстов на изображении, например открытый tesseract (его можно самому натренировать на шрифты, если будут использоваться необычные, в этом случае конечно вручную придется набирать символы из документа, подготавливать их в обучающую выборку... примеры в интернете есть, но скорее всего так глубоко лезть не придется)
    Чтобы получить текст с координатами так же можно посмотреть пример тут
    Осторожно с мультиязыковыми заморочками, одни и те же буквы в разных языках могут как совпадать по виду так и отличаться (разные шрифты), плюс распознавание может путать букву О и ноль, l и один и т.п.

    Немного поковыряться, чтобы исключить разбиение текстов на буквы а предложения на слова (делать по координатам, если символ или слово находится справа на некотором расстоянии и на той же y координате (+-) то считать что они одно слово-предложение.

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

    Каждое такое приложение будет примитивным, фактически для каждого формата в списке документов - свое.

    p.s. вспоминаю историю, где начальство какой то организации потребовало распечатать тонны (буквально машину) бумаги, какие то документы... а в последствии в другой конторе пришла задача отсканировать всю эту кипу бумаг

    желаю что бы у тебя было не так
    Ответ написан
    4 комментария
  • Как защитить приложение на js+php пока не заплатили?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Развернуть приложение полностью на 100% на своем сервере, а код разместить в своем приватном репозитории.
    2. Показать клиенту, что все задачи выполнены по ТЗ.
    3. Получить оплату на 100%.
    4. Разместить приложение на сервере клиента, а код - в его репозитории.


    Просто по договоренности оплата пойдет только после установки программы на компьютер клиента.

    Если в прошлый раз клиент кинул - что помешает ему сейчас кинуть? Просто не передавайте результат до оплаты, аргументируя это предыдущим случаем.
    Ответ написан