• ADB vs Spy Cam & Mic

      Как проверить, ведет ли какое-нибудь приложение на Android-смартфоне фото- или видеорепортаж, хотя ему это ни разу ни к чему? Нижепредлагаемый вариант совсем не идеален, но не требует «рута» или кастомной прошивки.

      P.S. Я добавил в статью описание мониторинга доступа приложений к микрофону.

      Что требуется установить:
      • ADB (Android Debug Bridge) (например, в составе Android SDK Platform Tools — загрузить можно здесь);
      • драйвер для телефона (при необходимости, например, Google USB Driver можно загрузить здесь).

      Включаем на телефоне режим отладки через USB и подключаем смартфон к USB-порту компьютера, причем следует выбрать режим USB-подключения, отличный от «Только зарядка».
      Скрытый текст
      В «Диспетчере устройств» смартфон отображается, например, так:
      в режиме «Фото» или «Файлы»

      в режиме «USB-диск»

      А вот так — в выводе команды lsusb:


      Открываем командную строку в каталоге, в который установились «тулзы».
      Проверяем, что подключение успешно (отображается серийный номер подключенного смартфона):
      adb devices
      (для Windows)

      Для Linux команда бы выглядела так:
      ./adb devices

      Если компьютер не авторизован для использования с этим смартфоном (под Android 4.2.2 и новее), то рядом с серийным номером появится предупредительное сообщение "unauthorized".
      Для авторизации необходимо подтвердить на смартфоне разрешение отладки через USB.
      Скрытый текст
      Под Linux может появляться сообщение "no permissions" — в моем случае удалось решить проблему переключением смартфона в режим «Медиаустройство (MTP)».

      Запускаем оболочку на устройстве (получаем приглашение "$"):
      adb shell



      Затем вводим следующие «магические» символы:
      while true; do ps `while ! (dumpsys media.camera | grep -E "PID") do  done | grep -o "[^PID: ][0-9]*$"` | grep -o "[^S ]*$" ; date; sleep 1; done

      Читать дальше →
    • Создание шаблона для Zabbix на примере DVR Trassir SDK

      • Tutorial
      Цель создания шаблона — автоматизация мониторинга серверов системы видеонаблюдения на основе регистраторов Trassir под управлением одноименного программного обеспечения на основе linux через web-сервер SDK.
      Читать дальше →
    • Плагин «Rainbow CSV» как альтернатива Excel

      Привет, Хабр! Эта статья про плагин Rainbow CSV, который я написал для 5 текстовых редакторов:


      VS Code, Vim, Sublime Text 3, Atom, Gedit


      Думаю, что многие читатели этой статьи периодически сталкиваются с CSV (comma-separated), ТSV (tab-separated) и подобными файлами. Если попробовать открыть их в текстовом редакторе (а как иначе узнать что там внутри?), то откроется совершенно невзрачная картина как с левой стороны изображения. Глядя на это сложно сказать даже сколько колонок в таблице. С правой стороны картинки тот же файл с включенным RainbowCSV, читаемость значительно повысилась за счет синтаксической подсветки.


      image

      Читать дальше →
    • Регулярные выражения + логическое программирование. Что в результате?

        Здравствуйте, уважаемые читатели.

        Регулярные выражения — хорошо известная вещь, которая используется в разнообразных проектах, чаще всего, для не очень сложных случаев разбора структурированных текстов. Занимаясь, на первый взгляд, такой несколько иной задачей, как обратный синтез моделей программ (когда есть код программы, порожденный автоматически некоторой системой по некоторой блочной модели решаемой задачи, и необходимо по этому коду воссоздать исходную модель), а также синтезом моделей программ по текстовому описанию задачи, я столкнулся с проблемой анализа текстов, а точнее — идентификации фрагментов текста некоторым настраиваемым шаблонам. Хотелось получить достаточно простое и гибкое (настраиваемое) решение. Регулярные выражения, с ходу, такими не казались, поскольку даже в такой простой задаче, как проверка слова по словарю, требовала, к сожалению, тщательного перечисления всех вариантов в этом выражении. Да и дерево синтаксического разбора они не строили. Однако, их явно можно было улучшить. Об этом и пойдет речь.
        Читать дальше →
      • Экспорт дерева тестов из JMeter в текст

        Привет, Хабр!


        Работаю на большом интеграционном проекте (IBM WAS, WebSphere MQ, Oracle) и оплетаю наш кровавый энтерпрайз паутиной функциональных тестов в JMeter, который крутится на тестовом стенде и пробуждается по зову Jenkins после деплоя нового билда. По мере увеличения количества тестов столкнулся с проблемой поддержания тестовой документации в актуальном виде.

        Читать дальше →
      • Теория вычислений. Введение в конечные автоматы

        Спойлер
        Cкажу cразу, что не буду объяснять слишком формально.

        Конечные автоматы (finite-state machine)


        Это до предела упрощенная модель компьютера имеющая конечное число состояний, которая жертвует всеми особенностями компьютеров такие как ОЗУ, постоянная память, устройства ввода-вывода и процессорными ядрами в обмен на простоту понимания, удобство рас­суждения и легкость программной или аппаратной реализации.

        С помощью КА можно реализовать такие вещи как, регулярные выражения, лексический анализатор, ИИ в играх и тд.

        У конечных автоматов имеется таблица переходов, текущее состояние автомата, стартовое состояние и заключительное состояние.

        Таблица переходов — В ней хранятся переходы для текущего состояния и входного символа. Простейшая реализация может быть как двумерный массив.

        Пример 1
        • По горизонтали вверху находятся возможные входные символы.
        • По вертикали слева находятся текущие возможные состояния.

        image

        Здесь видно, что из состояния 0 в состояние 1 можно попасть только, если у нас будет входной символ 'a', из состояния 1 в состояние 2, если символ 'b'.


        Текущее состояние — множество состояний в котором автомат может находиться в данный момент времени.

        Стартовое состояние — состояние откуда КА начинает свою работу.

        Заключительное состояние — множество состояний в которых автомат принимает определенную цепочку символов, в ином случае отвергает.
        Read more →
        • +19
        • 11,4k
        • 8
      • Решение больших проблем небольшим семантическим анализатором

          image


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


          Комиссия. Что значит “Тихо”? Они там в филиале пьяные что ли?
          Система. "Тихо" = Сила ветра в пределах нормы.
          Комиссия. Так это они о погоде. Система сдана в опытную эксплуатацию!


          Все события в статье вымышлены. Любые совпадения с реальностью случайны.


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

          Читать дальше →
        • RegExp Unicode Property Escapes в JavaScript: штрихи к портрету

            RegExp Unicode Property Escapes перешли на 4-ю ступень и будут включены в ES2018.


            В V8 они доступны без флага начиная с v6.4, поэтому готовы к использованию во всех текущих каналах Google Chrome от стабильного до Canary.


            В Node.js они будут доступны без флага уже в v10 (выходит в апреле). В других версиях требуется флаг --harmony_regexp_property (Node.js v6–v9) или --harmony (Node.js v8–v9). Сейчас без флага их можно испробовать или в ночных сборках, или в ветке v8-canary.


            При этом нужно иметь в виду, что сборки Node.js, скомпилированные без поддержки ICU, будут лишены возможности использовать этот класс регулярных выражений (подробнее см. Internationalization Support). Например, это касается популярной сборки под Android от сообщества Termux.


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


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

            Читать дальше →
          • Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

            • Tutorial

            Регулярные выражения в Python от простого к сложному




            Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
            Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

            Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
            Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

            Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
            Читать дальше →
          • Регулярные выражения: никакой магии

            • Перевод
            image

            Код этого поста, как и сам пост, выложен на github.

            До недавнего времени регулярные выражения казались мне какой-то магией. Я никак не мог понять, как можно определить, соответствует ли строка заданному регулярному выражению. А теперь я это понял! Ниже представлена реализация простого движка регулярных выражений менее чем в 200 строках кода.

            Часть 1: Парсинг


            Спецификация


            Реализация регулярных выражений полностью — довольно сложная задача; хуже того, она мало чему вас научит. Реализуемой нами версии достаточно для того, чтобы изучить тему, не скатываясь в рутину. Наш язык регулярных выражений будет поддерживать следующее:

            • . — соответствие любому символу
            • | — соответствие abc или cde
            • + — соответствие одному или более предыдущего паттерна
            • * — соответствие 0 или более предыдущего паттерна
            • ( и ) — для группировки

            Хотя набор опций невелик, с его помощью можно создать интересные regex-ы, например, m (t|n| ) | b позволяющий найти субтитры к Star Wars без субтитров к Star Trek, или (..)* для нахождения множества всех строк чётной длины.

            План атаки


            Мы будем анализировать регулярные выражения в три этапа:

            1. Парсинг (синтаксический анализ) регулярного выражения в синтаксическое дерево
            2. Преобразование синтаксического дерева в конечный автомат
            3. Анализ конечного автомата для нашей строки

            Для анализа регулярных выражений (подробнее об этом ниже) мы будем использовать конечный автомат под названием NFA. На высоком уровне NFA будет представлять наш regex. При получении входных данных мы будем перемещаться в NFA от состояния к состоянию. Если мы придём в точку, из которой невозможно совершить допустимого перехода, то регулярное выражение не соответствует строке.
            Читать дальше →
            • +27
            • 17,8k
            • 4

          Самое читаемое