Just created simple Python package that will use for duplicate images removal. Also may be used for identical files removal with any type of content.
Blog about my life, my interests and fun! I like RPi and other electronics, Linux (Debian), kayaking and many other things! Hope you will like it. Enjoy!
Sunday, September 22, 2019
Saturday, August 19, 2017
Fast autocomplete using Python and Redis
Fast autocomplete using Python and Redis
General information
Problem
Imagine situation when you need provide autocomplete for some data list. In case when you using SQL probably you will do something like this:select * from table_name where table_field like 'search%'
Labels:
fast autocomplete,
NoSQL,
Python,
Redis,
ZADD,
ZRANGEBYLEX
Wednesday, April 19, 2017
N-Queens problem solving program
N-Queens problem solving program
N-Queen problem - you need N chess queens on a chess board with dimensions NxN in a way that they do not threat each other (according to chess rules).
Program can find all possible solutions for N-dimensional board. Also, program able to print available solutions to console or to the file.
Here is my solution in Python language: https://github.com/JFF-Bohdan/nqueens (MIT license)
Wednesday, April 12, 2017
Yet Another Tiny Backup
Yet Another Tiny Backup
General information
Backup tool for one of my production instances. It implements very simple logic for my special requirements.
Algorithm:
yatbackup can compress whole folder using
specified archiver. In case, when another backup with same hash
available in destination folder, new archive will be deleted.
Yes, it's all.
Why do I need it? I need create backup of some folder using
cron, but I don't need duplicate archives.
Also, I need to understand that utility successfully finished, even no new archives was created.
Source code and documentation available here: https://github.com/JFF-Bohdan/yatbackup
Monday, April 3, 2017
pynvr - Python NVR (Network Video Recorder) based on OpenCV.
pynvr - Python NVR (Network Video Recorder) based on OpenCV.
Source can be found here: https://github.com/JFF-Bohdan/pynvrGeneral information
pynvr can interract with cameras using OpenCV
(supports many types of connection including connection to USB cameras
and network cameras using RTSP, for example)
Captured video stream must be analysed for motion and then saved to files according to specific rules.
When motion detected (or rule triggered) not only video after start must be saved but some frames before (pre-alarm/pre-event frames) must be saved to output file.
Tuesday, March 7, 2017
О проекте TapVisor
О проекте TapVisor
Предназначение системы
Система предназначена для сбора информации с распределённой сети датчиков, хранения информации о событиях и обработке данных - выдачи уведомлений о наступлении тех или иных событий, построении отчётов, выдаче аналитических срезов.
Система ориентирована на B2B и представляет из себя SaaS. Клиент создаёт в системе организацию к которой подключаются источники данных, собирающие информацию на торговых точках или точках автоматизации.
Система спроектирована максимально абстратно, таким образом можно собирать самую разнообразную информацию и автоматизировать такие задачи как:
- контроль температурного диапазона;
- контроль влажности;
- сбор информации о торговле товаром;
- контроль налива жидкого товара;
- контроль наличия объекта на базе - например для проката.
В данный момент система собирает такую информацию:
- события о продажах вина и пива;
- прокат туристического оборудования на точках проката;
- температуру на большом количестве пивных кранов в пабе.
При необходимости, к системе могут быть подключены новые источники данных. Например, если клиенту необходимо считать сколько человек проходит сквозь дверной проход, мы можем разработать контроллер для подсчёта проходящих людей и передачи событий на центральный сервер. После чего клиент сможет в веб-интерфейсе просматривать информацию о количестве людей, прошедших сквозь дверной проход.
Если бизнес-процессы клиента связаны с контроллем влажности, например это может быть хранение и торговля сигарами, торговля гигроскопичным товаром и т.д., может быть создано решение, предоставляющее контроль за режимом влажности и информирование о выходе показаний влажности за границы допустимого режима.
Для сбора информации могут быть использованы как специализированные контроллеры так и решение с необслуживаемыми компьютерами - Raspberry Pi, Orange Pi, etc. Такое решение позволяет максимально быстро выполнить автоматизацию объекта, а в дальнейшем, при необходимости произвести специализированный контроллер.
Система изначально проектировалась для работы с клиентами из разных часовых зон, события в центральной БД имеют несколько атрибутов дата/время, с учётом временных зон. При проектировании контроллеров и кеширующих узлов на базе RPi максимальное внимание было уделено работе в среде с задержками и сбоями при передаче данных. Для обеспечения безопасности, передача данных осуществляется с использованием RSA + PKCS1_v1_5 + AES (для мощных кеширующих узлов) либо с использованием алгоритма Speck для слабых контроллеров.
Где и как это можно увидеть
В системе предусмотрен демо-режим, позволяющий ознакомиться с интерфейсом, для полученя доступа к демо-режиму можно войти в систему http://tapvisor.com с таким данными:
Login : "demo" (без кавычек)
Password : "demo" (без кавычек)
В этом режиме можно увидеть часть функциональности, доступной владельцу организации подключённой к сервису TapVisor. Эта демо-организация состоит из трёх торговых точек по продаже пива:
- Cork / Пробка
- Roger's Place / У Роджера
- The Pub / Пивбар
и торгуёт такими товарами:
- Ginger Beer / Имбирное
- Lager Beer / Светлое
- Light Ale / Эль
- Porter / Тёмное
Среди виджетов можно отметить такие:
- Sales - выручка по магистралям за сегодня и вчера;
- Dashboard - аналитика по продажам, более подробно вы можете прочитать тут http://tapvisor-help-ru.aminis.com.ua/dashboard
- Charts - здесь можно построить графики о продажах по часам, по дням;
- Reports/Sales-products - информация о продажах товара с возможностью наложения фильтров по точкам, дням;
- Director of the world - карта с отметками всех точек. Цветом и текстом можно визуализировать самую важную информацию: выручку за день, состояние остатков, то насколько был выполнен план на день и т.д.;
- Stock/Parameters - контроль остатков на точке, предоставляется информацию о том сколько товара того или иного типа осталось на магистралях точки;
- Reports/All events - список все событий, происходящих на точке
Особенности режима:
- в этом режиме нет доступа к изменению настроек;
- предоставляется доступ к данным с 2017-02-20;
- предоставлен доступ не ко всем виджетам;
- возможности системы и распределение возможностей по тарифам можно посмотреть тут: http://tapvisor.com/tariffs
Как это устроено внутри
Back-end
Система написана на Python, используя Flask и SQLAlchemy. В качестве СУБД используется PostgreSQL, для LRU кеша использован Redis. Используется связка nginx и uwsgi.
Для оптимизации скорости выполнения запросов используется:
- roll-up's (свертки) для событий, используемых для построения Dashboard;
- sharding - на базе Citus single-machine cluster с некоторым количеством worker'ов, обрабатывающих шарды. Шардинг используется в режиме multi-tenant application c table co-location, что обеспечивает обработку SQL запросов в пределах одного шарда;
- фоновое вычисление данных которые могут в будущем понадобиться пользователю;
- кеширование результатов запросов и тех данных, что могут понадобиться пользователю в Redis;
- концепция "горячего архива" - архив за последние несколько дней для "горячих клиентов" (активных пользователей). Более старые события хранятся в "обычном/холодном архиве";
Используемая OS - Debian.
Настроена автоматическая репликация баз данных, автоматическое создание и передача резервных копий БД.
Front-end
Используется TypeScript и Bootstrap, позволяющий корректно отображать сайт на старых версиях iOS и обеспечивающий совместимость с максимальным количеством браузеров.
Используемые библиотеки: Nodejs + webpack + typescript + jQuery + bootstrap
Для визуализации графиков используются Highcharts
Визуализация таблиц (с поддержкой тонких настроек рендеринга, pagination и динамической подгрузки данных) - DataTables.
Как это было сделано
Для управления проектом использовалась такие инструменты как:
- Redmine - управление проектом;
- git - контроль версий;
- Google Drive/Google Docs - хранение протоколов, документации на узлы системы, описание протоколов взаимодействия узлов системы.
Подобный подход позволил максимально эффективно, с наименьшим уровнем бюрократии и минимальной тратой времени, выполнять действия и координировать работу всех разработчиков.
После того как в системе были накоплены данные мы приступили к оптимизации, проходившей по следующему алгоритму:
После того как в системе были накоплены данные мы приступили к оптимизации, проходившей по следующему алгоритму:
- мы выявляли медленно работающие виджеты и сопоставляли фактически обнаруженное с нашими предсказаниями о том, что и как будет замедляться;
- выполняли профилирование;
- искали методики, позволяющие выполнить оптимизацию;
- тестировали и внедряли решение по оптимизации.
- накопление данных в БД, при этом параллельно необходимо выдвигать предположения о том какие ожидаются результаты по работе того или иного виджета;
- тщательное профилирование и поиск того что на самом деле медленно работает, а только затем оптимизация.
Надеюсь вам нравится результат.
Приятного использования.
Tuesday, January 31, 2017
Checking Debian Linux user password without logging into system
Checking Debian Linux user password without logging into system
Problem
Imagine situation when you need to check a user's password without logging into system and any traces of action. I had this situation when I was able:
- can execute sudo command;
- I needed to check password of root user from my machine. Also, I was not interested of password change for root user.
Note: you can check password for any user of your system.
Wednesday, January 25, 2017
Building Python 3.6 on Raspberry Pi 3 from sources (clean Debian)
Building Python 3.6 on Raspberry Pi 3 from sources (clean Debian)
1. Problem
By default clean Debian installation contains Python version 2.7.9 on my Debian (Raspbian GNU/Linux 8 (jessie)"). But we want more! We need Python 3.X, this tutorial shows you how to install Python version 3.6.0 .
Warning! Newer versions of Debian for Raspbery Pi have SSH disabled, so you need enable it by creating empty file with name ssh (Yes, just three letters. Yes, without extension) in /boot section of SD-card. This section also visible under Windows, so you will have no problems to do this.
Note: This is updated version of my previous tutorial Building Python 3.5 on Raspberry Pi 2 (Raspbian) which fixes issues with TLS/SSL support of compiled Python.
Tuesday, January 10, 2017
ACT LED Heartbeat for Raspberry Pi
All models of Raspberry Pi have ACT led. ACT led ON when SD card in use and OFF otherwise.
Except of Raspberry Pi Zero, this devices uses opposite rules - ACT led is always ON and OFF only when SD card in use. This is useful because Raspberry Pi do not have PWD led and you can't understand is it powered on or not.
I like to tune ACT led to be in heartbeat mode, in this mode ACT led blinks twice than pause and again. This is useful because you can understand that device not just powered but also Linux kernel active.
All that you need just add one line to config.txt file located in /boot partition of SD card.
Note: /boot partition have FAT fs, so you can do all operations directly from Windows OS just by editing text file.
From Linux (Raspbian for example) you need execute
$ sudo nano /boot/config.txt
$ sudo nano /boot/config.txt
Then navigate to the end of file and add line:
dtparam=act_led_trigger=heartbeat
That's all. After reboot your ACT led will act in heartbeat mode.
Enjoy!
Monday, January 9, 2017
Raspberry Pi Zero USB dongle (use SSH over USB cable like over Ethernet)
Raspberry Pi Zero USB dongle (use SSH over USB cable like over Ethernet)
About post
Imagine, if you will be able to use SSH (or even VNC) connection to your Raspberry Pi Zero using only USB cable without any hardware modifications. Amazing, isn't it?
You can find other instructions on Youtube requires hardware modification, but you can do this without soldering and so on.
All you need to follow these instructions.
Subscribe to:
Posts (Atom)




