• Централизованный доступ к ЭЦП и прочим ключам электронной защиты с помощью аппаратных USB over IP

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

    Итак, нам необходимо собрать в одном офисе все имеющиеся в нашей компании ключи банк клиентов, лицензий 1с (hasp), рутокены, ESMART Token USB 64K, и т.д. для последующей эксплуатации на удаленных физических и виртуальных машинах Hyper-V. Количество usb устройств – 50-60 и точно, что это не предел. Расположение серверов виртуализации вне офиса (датацентр). Расположение всех USB устройств в офисе.
    Читать дальше →
  • Установка Sparkle на Linux Mint 18.1

    Доброго времени суток, форумчане. Когда-то давно, уже более пары лет назад, пересел я с Win 7 на Linux mint. Для большинства программ находил аналоги и инструкции по их установке, реже разбирался сам, когда инструкций не было, а недавно захотелось посмотреть пару фильмов, и тут до меня дошло, что привычной мне Zona для линуха нет.

    Читать дальше →
  • Генерация меню средствами роутов Angular

    В одном из проектов был интересный таск: сделать компонент универсальной навигации. Иначе говоря такой, чтобы его можно было просто положить на какой-то роут, и в нем, магическим образом, появились ссылки на дочерние к этому роуту сегменты.

    Читать дальше →
  • Spree 3 и Google Cloud Storage

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

    (актуально для версии до Spree 3.4 включительно, начиная с версии 3.5 работать не будет)

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

    Дело в том что, разработчики оpen-source движка для интернет магазина (Spree), подружили его только с S3 (Amazon Cloud Storage).

    Но вы можете это исправить,
    Читать дальше →
  • Получаем интересные статьи в телеграм

    Сегодня, когда в интернете много информации, новостей и статей, возникает необходимость фильтровать данные. Мне интересны новости про технологии и футбол. Часто, посещаю сайт с новостями про футбольный клуб “Рубин”, но там не так часто появляются новости и поэтому решил сэкономить своё время и написать парсинг статей/новостей с постингом в канал telegram.

    Было решено написать мини-проект на чистом PHP, с использованием базы данных sqlite3. PHP был выбран так как больше опыта в нём, sqlite3 так как на мой взгляд его проще перенести на сервер. После повесил крон на файл index.php, запуская его каждый час. Сайт с которого парсю данные: Бизнес OnLine

    Команда крон:

    0 */1 * * * /usr/bin/php /var/www/parsing/index.php > /var/www/parsing/logs/    logcron.log
    
    Читать дальше →
  • Переход на AndroidX

    Не так давно Google представила массам библиотеку AndroidX, которая оправданно навела немало хайпа в Android сообществе, ведь теперь этот переход не просто очередная модная фишечка, которую можно будет опробовать в своих проектах, это более чем must have фича, которую не избежать.

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

    compileSdkVersion 28
    targetSdkVersion 28

    Ну а дальше немного магии, благо сам переход не представляет из себя ничего сложного. И на самом деле сам переход весьма прост для проектов которые Вы только стартуете, или в проекте где за плечами ещё не так много подключенных зависимостей.

    Прыгаем в корень проекта, там находим файл gradle.properties, в котором дописываем следующие строки:

    android.useAndroidX=true
    android.enableJetifier=true

    Если коротко, то эти флаги мы устанавливаем для того, чтобы при сборке нашего проекта, все наши зависимости корректно подменились на зависимости AndroidX автоматически(как удобно).

    И если Вы используете Android Studio, то советую обновиться не менее чем до 3.2 версии, там Вас ждёт приятная функция рефакторинга: “Migrate to AndroidX…”, которая в свою очередь поможет преобразовать существующий код в код(масло масляное) поддерживающий AndroidX.


    При этом Вам студия предложит сделать резервную копию проекта, не ленитесь, лишним не будет(особенно будет актуально для тех, кто по каким то магическим причинам ещё не пользуется системой контроля аля Git, кто ещё не знаком оставлю ссылку здесь, всем настоятельно рекомендую установить Git). После этого смело жмём “Migrate”.
    Читать дальше →
  • Кровь, пот и пиксели

    В детстве у меня был ПК Спектрум. Это тот самый компьютер, на котором главный герой 5-го сезона "Черное зеркало" пытается создать игру "Брандашмыг". Так получилось, что я вырос и стал программистом учетных систем. Программировать учетные системы может показаться не так страшно увлекательно, как в фильме разработка игры, однако здесь тоже есть свои квесты. Фактически разработка и сопровождение систем учета — это один сплошной квест.

    Читать дальше →
  • Отстрел чужих DHCP-серверов на маршрутизаторе MikroTik

    Навеяно статьей

    Но так как на маршрутизаторах такое решение не прокатывает, а готового решения не нашел пришлось придумывать, в итоге «отстрел» злонамеренных юзеров был реализован следующим образом, по шагам/строкам.
    Читать дальше →
  • Применение Linux и СПО в нашем учебном заведении: быть или не быть?

    Доброго времени суток, уважаемые Хабровчане. В последнее время меня стал волновать вопрос: как долго будет продолжаться монополия компании Microsoft в секторе рынка, отвечающего за поставки ПО во многие учебные заведения нашей страны (фактически он был занят корпорацией уже начиная с 90-х годов).

    Приведу конкретный пример: я хожу на относительно популярный it-кружок для старшеклассников при местном университете N (этот ВУЗ довольно-таки престижный в моём городе), там мы изучаем ряд дисциплин:

    1. «Основы информатики и вычислительной техники» (уже пройдено).
    2. «Устройство… ЭВМ»: ОС, «внутренности» PC (завершено).
    3. «Работа на ПЭВМ»: основы проводника Windows, СMD, MS Office (только что закончено).
    4. «Основы программирования»: PascalABC.NET (слава Богу, что хотя бы не Turbo Pascal).

    А теперь критика по большинству пунктов:
    Читать дальше →
  • JS, простая библиотека и роутер

    Всем привет.

    Пишу эту статью по той причине, что сам не нашел достаточно материала на эти темы.

    Примерно месяц назад я решил написать свою первую библиотеку. Вот требования к ней:

    1. Выбор элементов как JQuery — по селектору, через функцию вида "$(selector)".
    2. Вызов функций для выбранного элемента через методы библиотеки.
    3. Очень маленький вес (хоть и по причине малого функционала).

    Читать дальше →
  • Закачка видео с youtube с помощью php

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

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

    Задача сама по себе не сложная. Основной труд составляет процесс сохранения роликов: нужно скопипастить ссылку, найти соответствующий сервис, воспользоваться им, скачать выданный ролик. Все это довольно нудно и скучно. Поэтому было решено сделать инструмент который будет закачивать ролики, примерно как wget по списку url из файла.
    Читать дальше →
  • Снова разбираем URL

    Как было сказано в одном из комментариев на эту вечную тему: «Примерно раз в год, кто-то изобретает этот велосипед, и спешит поделиться с Хабром». Новый год уже наступил, и мне хотелось бы поддержать эту добрую традицию. Предлагаемый мной способ решает задачу, что называется «в лоб» и к нему хорошо подходит крылатая фраза одного из персонажей замечательной советской комедии «Бриллиантовая рука»: «Зато дешево, надежно и практично!».
    Читать дальше →
  • Место для хранения данных о сайте, хостинге, базах данных и прочего

    Около пяти лет назад, будучи тогда сайтоделом, я столкнулся с проблемой: где хранить всю эту кипу паролей в связках с логинами, портами, адресами.


    Оффтоп: искал недолго и неупорно, что могло бы помочь, именно тогда зародилась идея localProjectLockera, скажу сразу — не рекламируюсь, а хочу поделиться трудами, может кому упрощу жизнь.

    Решения самого браузера поначалу спасали, он совестно сохранял пароли и логины у себя, но ровно до того момента, как стаж перевалил за год, так как начали обращаться прошлогодние заказчиками с вопросами "А как оплатить хостинг?", "Как войти в админку?" и прочее. Далее меня ждали мучительные поиски паролей на почте, в заметках, восстановление доступа к хостингам, админкам, базам данных. Спустя еще год, столкнулся еще с одной проблемой, а именно — немереное количество паролей на сайте регистратора доменных имен без каких либо опознавательных знаков. Для избежания подобных ситуаций в будущем, я начал для каждого нового заказчика создавать на почте папку с названием проекта, куда переносил данные, что приходили на почту. И вроде неплохо, искать что-то стало в разы проще, но оставались какие-то данные в вотсапе, вк и прочем — можно было дрессировать заказчиков, чтобы все скидывали на почту, но не вышло.

    Читать дальше →
  • Простые примеры на Pika python для работы со статичными (reject) очередями RabbitMQ

    По работе приходится сталкиваться с очередями, которые по каким-то причинам не удается передать дальше. Они копятся (например что-то вроде queue.queue.reject) в очередь простоя.

    Нужно такие очереди мониторить и понимать(также парсить и пр.), что там собирается. Т.е. по сути нужно эти очереди просто прочитать(не удаляя) и посмотреть, что с ними делать дальше:
    Читать дальше →
  • Следствие из теоремы о неподвижной точке, или quine-программы

    Доброго времени суток, Habr.

    Сегодня мы обсудим некоторые математические аспекты quine-программ, да, тех самых, что выдают полную копию своего исходного кода.

    Займемся некоторым формальным обоснованием данного явления.

    (Далее подразумевается, что читатель знает некоторые понятия: машина Тьюринга, частично вычислимые функции, клиниевская нумерация, теорема о параметризации и s-m-n-теорема, или с помощью google получит первое представление об этом).

    Интересующихся математикой приглашаю под кат.
    Читать далее
  • Делаем временные почтовые ящики на своем exim4 сервере

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

    Но у таких служб все же есть кое-какие недостатки:

    • ящик действительно одноразовый — спустя 5 (10, 20) минут после последнего использования доступ к нему исчезнет навсегда. Нужно быть уверенным что сам ящик и почта на нем не понадобятся уже никогда
    • некоторые сайты не принимают регистрацию с адресом в доменах таких служб
    • про безопасность данных говорить и вовсе не стоит. Маловероятно, конечно, что на такой ящик придет письмо с чувствительной информацией. Но тем не менее, хотелось бы иметь полный контроль над происходящим
    Читать дальше →
  • tagManager2 для MODX Revolution и Scroll вверх страницы при сортировке товаров

    Всем привет. Столкнулся с такой проблемой на MODX: при сортировке товаров на сайте Ajax кидал вверх страницы, естественно заказчику это не понравилось, да и кому понравится. Сделанный проект на тяп-ляп это не серьезно.

    Начал рыть Google в поисках решений, убил достаточно времени, но все предложенные Fix-ы не катили так, как они были за 2015-2016 года, а тогда версия как бы была на порядок ниже чем сейчас (конец 2018) и многое изменилось.

    В итоге пришла идея через средства разработчика в Chrome отследить исполняемый файл и найти функцию которая выдаёт результат сортировки. Поиск увенчался успехом и этот файл назывался filters.js.
    Читать дальше →
  • Тестирование и автоматизация

    Тестирование часто называют процессом «контроля качества», в то время как это куда больше похоже на процесс исследования. Тестировщик занят в сущности тем же, что и испытатель новой модели самолета, и задается теми же вопросами: взлетит ли эта модель или не взлетит? Достаточно ли маневренна? Надежна ли посадка? etc, etc, etc.

    Читать дальше →
  • Пишем свой ORM на подобии RedBeanPHP

    Вступление


    Сейчас почти все программисты хотят облегчить себе работу. Создаются фреймворки, ORM'ы и т.п. Сегодня я хочу показать вам как можно за 20-30 минут создать свой ORM на подобии RedBeanPHP. Покажу я только Систему CRUD (Create, Read, Update, Delete).

    Подготовка


    Для начала нам нужен будет всего лишь два файла это Lyricon.php (вы можете назвать свой ORM как-то по другому, но я напишу так) и index.php он будет являться тестом нашего ORM.

    Основная часть


    Для начала создадим класс. Я написал L (Lyricon) для упрощения.

    <?php
    class L{
    
    }
    

    Теперь нам нужно создать переменную connection или связь с базой данных.

    Читать дальше →
  • React. Lazy loading

    Доброго времени суток.


    Занимаюсь разработкой проекта на React и Redux. Хочу в этой статье описать архитектуру своего проекта.

    И так начнем. Файловая структура:


    Для подключения редьюсеров создаем класс singleton reducerRegister:
    ./reducerRegister.js
    class ReducerRegistry {
      constructor () {
        if (!ReducerRegistry.instance) {
          this._emitChange = null
          this._reducers = {}
          ReducerRegistry.instance = this
        }
        return ReducerRegistry.instance
      }
    
      getReducers () {
        return {...this._reducers}
      }
    
      register (name, reducer) {
        this._reducers = {...this._reducers, [name]: reducer}
        if (this._emitChange) {
          this._emitChange(this.getReducers())
        }
      }
    
      setChangeListener (listner) {
        this._emitChange = listner
      }
    }
    
    const reducerRegistry = new ReducerRegistry()
    
    export default reducerRegistry
    

    С помощью этого класса редьюсеры могут сами себя регистрировать в store.
    Читать дальше →