• Как сделать отображение версии и прочей информации в специальном окне на Github?

    DevMan
    @DevMan
    не в специальном окне, а, обычно, в ридми.
    не специальные штуки, а бейджи.

    начать можно с https://shields.io/
    а дальше гуглить по обозначенным словам.
    Ответ написан
    3 комментария
  • Как одновременно забирать много email с Gmail?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Любой тулзой, работающей с API гуглопочты, например https://github.com/jay0lee/got-your-back/
    Ответ написан
    Комментировать
  • Как разграничить доступ к информации в многопользовательской системе?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    То ли у меня наступает синдром микроскопа, то ли день сурка. Читаем про ABAC, Casbin или Open Policy Agent
    Ответ написан
    1 комментарий
  • Как стать успешным тестировщиком?

    vabka
    @vabka
    Токсичный шарпист
    Начал проходить соответствующий курс на Яндекс.Практикуме

    Видел этот курс. Так-то его должно хватить, но с ним надо практически всё самостоятельно изучать.
    Имхо, не стоит он 50к
    Вопрос в следующем: что ещё можно прочесть/изучить, чтобы быть более квалифицированным.

    testbase.ru
    Ещё у этого автора много полезных статей на хабре
    Ответ написан
    3 комментария
  • Как сделать шахматную разметку?

    idShura
    @idShura
    Sub MM1()
    For c = 1 To 8
        For r = 1 To 8
            Cells(1, 1).Offset(r - 1, c - 1).Interior.ColorIndex = (r + c) Mod 2 + 1
        Next r
        Cells(1, 1).Offset(0, c - 1).ColumnWidth = 2.5
    Next c
    End Sub


    604740ebbb837795854926.gif
    Ответ написан
    6 комментариев
  • Как сделать скрипт на выделение всей строки GOOGLE SHEETS?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Чтобы не слетало форматирование, не используйте
    ws.getRange(2, 1, 1000, ws.getLastColumn()).clearFormat();

    Чтобы забиндить скрипт на сочетание клавиш - пишите макрос и назначайте. Там сочетания вида Ctrl+Alt+Shift+N
    Или можно подправить appsscript.json
    //...
      "sheets": {
        "macros": [{
          "menuName": "macros1",
          "functionName": "myFunction",
          "defaultShortcut": "Ctrl+Shift+Alt+1"
        }]
      }
      //...

    Также возможно что просто код не выполняется(ошибка), попробуйте это:
    function onSelectionChange() {
      let ss = SpreadsheetApp.getActiveSpreadsheet();
      let as = ss.getActiveSheet();
      let ac = as.getActiveCell();
      let row = ac.getRow();
    
      as.getRange(row+":"+row).setBackground("yellow");
    }
    Ответ написан
    Комментировать
  • Какое создать регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Главное, чтобы было четыре секции между двоеточиями.

    Если это главное (и единственное) требование, то сами секции задаются как раз этим двоеточием. Поэтому банальное (но пока что ошибочное) рег. выражение:
    .*:.*:.*:.*
    Двоеточие в этом выражении соответствует двоеточию в исходной строке. Поэтому строка a:b:c будет не валидной - слишком мало секций. Выражение .* означает любое количество любых символов. Ошибка здесь в том, что любым символом также может быть двоеточие, поэтому это регулярное выражение разрешает более, чем 4 секции. Чтобы исправить это, нужно запретить символ двоеточия в последовательности любых символов. Выражение [^:] означает любой символ, кроме двоеточия:
    [^:]*:[^:]*:[^:]*:[^:]*

    Остался последний штрих. Пока что это рег. выражение всё ещё разрешает более одной секции, потому что поиск можно начинать с середины строки и заканчивать, не доходя до конца. Поэтому если подсунуть строку a:b:c:d:e:f выражение убедится, что подстрока a:b:c:d соответствует рег. выражению, а значит валидна. Чтобы исправить это, нужно указать, что проверку нужно начинать с самого начала строки и дойти до самого конца строки. То есть рассматривать строку целиком, а не по частям. Это делается с помощью указателей позиций. Символ ^ (в начале) означает начало строки, а символ $ (в конце) означает конец строки:
    ^[^:]*:[^:]*:[^:]*:[^:]*$

    Собственно, это и есть правильный ответ в общем виде на вопрос с главным требованием. Секции ровно четыре и они разделены двоеточием. В каждой секции двоеточие запрещено. Выражение [^:]* означает любое количество любых символов, кроме двоеточия, что нам и нужно.

    Однако данное выражение можно немного улучшить, в зависимости от дополнительных требований. Например, нас может не устроить, что для каждой секции считается валидным любое количество символов, даже нулевое. То есть строка a:b::c тоже будет валидной. Для этого нужно сменить квантификатор * на какой-либо другой. Например, можно сменить на +, который означает любое количество вхождений (символа) больше нуля, то есть 1 и более:
    ^[^:]+:[^:]+:[^:]+:[^:]+$

    Далее, может быть желательно выделить группы, чтобы рег. выражение не только проверяло исходную строку на соответствие шаблону ip:port:user:pass, но и извлекало эти самые переменные. Группы задаются просто скобками. Очевидно, что разделители и указатели позиций в группы не входят:
    ^([^:]+):([^:]+):([^:]+):([^:]+)$

    Далее можно вспомнить, что параметр port может содержать лишь арабские цифры. В регулярных выражениях \d (или [0-9]) означает любую цифру. Так что легко вносим улучшение:
    ^([^:]+):(\d+):([^:]+):([^:]+)$
    Хотя постойте-ка. Это ещё не всё с параметром port. Ведь абсолютное любое число, состоящее из цифр, нас не устроит. Как минимум, порт не может быть больше 65535, поэтому любое число выше считается ошибкой. В принципе, на данном этапе можно не заморачиваться и просто проигнорировать это требование, а реально проверить его позже кодом типа такого: $post < 65356, но в качестве примера можно всё же ограничить количество цифр от 2 до 5:
    ^([^:]+):(\d{2,5}):([^:]+):([^:]+)$
    Квантификатор {2,5} означает, что количество вхождений (цифр) должно быть не менее 2 и не более 5, иначе секция будет считаться не валидной, а значит и вся строка тоже.

    Далее, можем также сделать более строгое условие для параметра ip. Для простоты будем считать, что разрешён только IPv4, а IPv6 нельзя использовать. Тогда условием будет 4 цифры, разделённые точкой. Каждая цифра от 1 до 3 символов:
    \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
    Ой, ошибочка вышла! Дело в том, что символ . является квантификатором. И чтобы рег. выражению сказать, что нам нужен сам символ точки, нужно его экранировать: \.
    В результате полностью рег. выражение получается таким:
    ^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{2,5}):([^:]+):([^:]+)$


    Да, получился монстр. Но нет предела совершенству.

    Правда, на этом этапе улучшать проверки уже не целесообразно. Далее уже кодом PHP можно проверить более строги условия. Например, сейчас в качестве ip будет валидной строка 300.400.500.600. Ведь всё сходится - 4 числа, разделённые точкой, в каждом от 1 до 3 цифр. Поэтому нужно либо более монструозное выражение лепить, либо кодом проверять, либо отдать на откуп сетевым ошибкам подключения - зависит от конкретного приложения и конкретной задачи.

    Рег. выражения не заточены на сравнение чисел, например. Чтобы проверить, что число находится в диапазоне от 0 до 255, придётся лепить что-то такое:
    (?:\d\d?|[0-1]\d\d|2[0-4]\d|25[0-5])
    То есть это вообще поразрядная проверка. Глупо. Проще это делать кодом, если это действительно нужно.

    На данном же этапе имеет смысл проверять лишь то, подо что заточены регулярные выражения. Например, можно ограничить класс символов, которые входят в user и в pass. Например, в пароле можно разрешить только латинские символы и цифры, а также ограничит длину: пароль не может быть меньше 6 и не может быть больше 32 символов:
    [a-z0-9]{6,32}
    (просто пример)

    И так далее в таком же духе. Как было сказано выше, прочие тонкости уже зависят от конкретной задачи.
    Ответ написан
    1 комментарий
  • Как объединить массивы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Подойдёт формула:
    =UNIQUE({МАССИВ1;МАССИВ2})
    или
    =UNIQUE({МАССИВ1\МАССИВ2})
    Зависит от того строка это или столбец
    Ответ написан
    Комментировать
  • Как правильно вести схемы сети / хранить актуальную информацию?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    Это вопрос не инструмента, а методологии. Для ответа на него, надо понять, кто будет на схемы смотреть.
    Мой опыт показал, что на детальные сетевые схемы не смотрит никто: они излишне перегружены, на них тяжело искать информацию, они огромны (попробуйте нарисовать на одной схеме хотя бы два 48-портовых коммутатора с полностью расключенными портами), не поддерживаю версионность, тяжело редактируемы (попробуйте добавить хотя бы один линк на схему с 50тью шнурками, уверен, вам придётся много чего подвигать)., а отсюда вытекает, что их редко поддерживают в актуальном состоянии.
    Поэтому верное решение при ведении РАБОЧЕЙ документации - это сочетание схем и таблиц. Схема делается одна на типовое решение, а к ней добавляется таблица с учётом портов, IP-адресов, патчкордов и тд.
    Для чего нужны детальные схемы?
    Во-первых, они используются как тех. задание для организации подключения. Например, в подключении участвуют 12 разных подразделений, с ним надо согласовывать работы. Но если вы сам себе админ и подключаете для себя без привлечения третьих лиц, они вам не нужны.
    Во-вторых, для тех поддержки. Но тех. поддержка работает с конкретным пользователем. То есть ей нужен один сервис. Но в мелких организациях админы сами являются тех поддержкой и все знают. Да и готовы ли вы держать отдельную схему на каждый компьютер? Опять же, такие схемы хороши, когда в организации сервиса принимают участие несколько отделов или компаний. Например, в моей типовой схеме при спутниковых включениях участвуют 12 отделов со своими сегментами сетей. Для этого нужна схема.
    В-третьих, для работы с внешними организациями. В первую очередь это операторы. Но часто ли они у вас меняются? Для этого достаточно нарисовать одну схему раз в год с четырьмя портами и забыть.

    Казалось бы, схемы должна смотреть дежурная смена. Но она смотрит на карту на заббиксе, нагиосе или другом инструменте мониторинга.

    Теперь про инструменты. Они все выбираются в зависимости от масштаба сети и количества изменений в ней за определенный отрезок времени. Я приведу список инструментов, которые используются по возрастанию размеров сети, частоте изменений на сетевых элементах и количестве организаций, вовлечённых в эти изменения.
    1) для совсем мелких организаций это draw.io для схем и гугл докс для таблиц.
    2) далее офисный набор Микрософт, включая визио.
    3) далее к офисному пакету добавляется система мониторинга или управления
    4) вики-движки и CMDB
    5) для ещё более крупных выделенные инструменты типа IPAM и NRI

    P.S. Это касается рабочей документации. К исполнительной и проектной другой подход.
    Ответ написан
    2 комментария
  • Какие существуют визуальные обработчики данных?

    @rPman
    Не нужно делать интерфейс только потому что 'все так делают'.

    Исходить нужно исключительно из задачи! Делать нужно ровно столько сколько нужно и не больше не меньше.

    p.s. Когда то я работал активно с данными, конечно экселя могло бы быть достаточно но он неудобный и медленный
    Обычно нужен для конвертера следующий UI (писался давно, не очень использовался и затерялся):
    * Настройка источника данных (у вас это кнопка/поле - место откуда брать excel источник, плюс к примеру имя/номер листа)
    Показать начальное содержимое листа при выборе, минимальную статистику (количество строк, колонок и т.п.)
    * Список необходимых колонок с указанием, какие колонки чем являются
    При выборе колонки источника показывать список вариантов его значений (не обязательно все, первые десятки, но бегло дает представление о значении поля)
    * Фильтры (пропустить пустые строки, убрать дубликаты и прочее прочее) - не перебарщивай, очень редко задачи повторяются, все объять невозможно, можно предложить поле для ввода кода (использовать в eval), если источник база данных - можно запилить какой то минимальный конструктор sql (без ui, хотя список таблиц и название колонок в базе уже круто, плюс поиск по подстроке по данным во всех таблицах - удобная вещь когда ковыряешь чужую базу, лучше это делать в специализированных программах, помню пользовался dbforge studio community version)
    * настройка назначения вывода данных (имя файла)
    * настройка типа данных в файле вывода (выбор из списка захардкоженных в программу, если актуально само собой)

    Еще момент - интерфейс должен быть исключительно интерфейсом к консольной программе, генерируя для нее строку/файлы настроек, чтобы можно было их использовать к примеру для автоматических регулярных запусков без запуска интерфейса (я генерирую в таких случаях батник с запуском программы с нужными ключами)
    Ответ написан
    1 комментарий
  • Как сделать ячейку с защищенным ввод данных?

    @AstraVlad
    Финансист, консультант, программист-любитель
    Настроить проверку данных по кастомной формуле типа "=NOT(A1="Брак")" и поставить галочку "Запрещать ввод данных". Плюс сообщение можно для полного счастья добавить с объяснением причин.
    Ответ написан
  • Кастом ссылка для блогера?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Пусть блоггер выставляет ссылку на ваш сайт с utm-метками. Тут еще надо смотреть, где он будет выставлять. Если соцсети, то примерно так: site.ru/?utm_source=instagram&utm_medium=social&utm_campaign=blogger-1
    Ответ написан
    2 комментария
  • Хабр Q&A снова болеет?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Замели такую особенность: иконка тега js в формате jpeg, в то время как у всех других тегов - png.
    6033e8bd9c2f0600228356.png
    PS: Отправил в службу поддержки, может подчинять.
    Ответ написан
    Комментировать
  • Как найти различия в двух столбцах Google Sheets и вывести их?

    idShura
    @idShura
    602fbac69dfcc919430859.png

    Формула в ячейке D =FILTER(A1:A11;ISNA(MATCH(A1:A11;B1:B12;0)))
    Формула в ячейке E =FILTER(B1:B12;ISNA(MATCH(B1:B12;A1:A11;0)))

    Ссылка на пример
    Ответ написан
    2 комментария
  • Какой самый эффективный способ контроля времени и внимания в рабочее время?

    vabka
    @vabka
    Токсичный шарпист
    Сам постоянно отвлекаюсь на тостер, так что для меня актуально.

    Раз отвлекаешься, значит другие занятия для тебя интереснее, чем работа.
    Я вот такую методику выработал и пару дней с ней успешно работаю:
    1. Вырубаем вообще всё, что можно. Уведомления и все отвлекающие сайты.
    Телефон убираем подальше и на беззвучный режим.
    2. Рабочее место чистим от всего мусора.
    Кроме мониторов, мыши и клавиатуры на столе ничего быть не должно.
    3. Блокируем все сайты, которые отвлекают.
    4. Заводим распорядок дня. И придерживаемся его. В него нужно внести сон и работу. Добавить приёмы пищи и всё прочее. Пустоту заполняем чем-нибудь типа "посмотреть youtube", "почитать хабр", "поиграть в доту"
    5. Убираем рутину по возможности. Все инструменты должны настроены так, чтобы не пришлось воевать с IDE
    6. Добавляем разнообразие.
    Например мне очень сложно даются всякие задачи на фикс багов.
    Теперь, когда я нахожу причину бага, я разбиваю её на несколько небольших задач и пишу на каждую тест.
    Каждый такой тест становится для меня промежуточной точкой, и благодаря достаточно мелкой разбивке - мозг не начинает "скучать" и постоянно видит, что происходит какое-то продвижение.

    Заставлять себя я не советую, тк со временем вы так начнёте ненавидеть свою работу и перегорите.
    Ответ написан
    1 комментарий
  • Зачем администрация/модераторы/пользователи отмечают решением ответ, который вовсе не является решением?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    • Кураторы тега могут отмечать ответ решением.
    • Через неделю после ответа можно увидеть, кто именно отметил его решением. Так что смотрите свои вопросы недельной давности и более древние, где такое наблюдалось.
    • Зачем - это надо спрашивать конкретно у того, кто поставил отметку о решении. Но навскидку могу сказать, что он посчитал ответ решением. Как бы это банально ни звучало, но это так. Есть, конечно, микро шанс злого умысла, но им можно пренебречь, здесь все взрослые люди, скоро помирать уж, не до этих игр. Так что, скорее всего, кто-то хотел просто помочь, посчитав, что это и правда решение. Вот, зачем.
    • Если вы не согласны с такими отметками, и вам они реально мешают, а не просто любопытство, то внизу есть кнопка для жалоб (Обратная связь).
    Ответ написан
    2 комментария
  • Какие книги лучше подойдут новичку по bash?

    @MechanID
    Админ хостинг провайдера
    Начните с этого например: https://www.opennet.ru/docs/RUS/bash_scripting_guide/
    Ответ написан
    Комментировать
  • Как оставить только уникальные значения после фильтрации по нескольким столбцам?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Попробуйте FLATTEN. Вы можете сопоставить колонки широкого массива в одну и потом уже производить манипуляции со строками.

    =FILTER(
      REGEXEXTRACT(FLATTEN(A:E);"\d*");
      REGEXMATCH(FLATTEN(A:E);"\d{12}")
    )


    60275bbf3d36a583665267.png
    Ответ написан
  • Какую формулу использовать?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Вы правильно выбрали FILTER.

    Необходимо усилить условие

    =FILTER(H:K;MATCH(H:H;A1:A6;0))

    6025f7b2336ec862028182.png

    Пример в Таблице https://docs.google.com/spreadsheets/d/17mpcNilHA4...
    Ответ написан
    1 комментарий