5 откликов 28 просмотров 18 дней назад Он исполнитель
- Обо мне
-
- Стоимость работы:
- от 3 000 руб. за час
- Профессиональный опыт:
- более 10 лет
- Форма собственности:
- ИП, Физ. лицо
- Способы оплаты:
- безналичный расчёт, наличный расчёт
Golang/Linux разработчик
20 лет опыта
6 лет - Golang
* Языки программирования:
Go/Golang, Python, C/C++, JS/Nodejs, Java/Kotlin, php, perl, lua, elixir, asm.
* ОС:
Ubuntu Linux и производные, Debian, RedHat/CentOS, OpenWRT, FreeBSD,
FreeRTOS
* Приёмочное тестирование: BDD, формат требований Gherkin, на русском (или англ)
* TDD - Test Driven Development - Разработка через тестирование, Чистый код, ООП, принципы SOLID
* Железо: кроме обычных компов, микрокомпы (RaspberryPi,
OrangePi), микроконтроллеры (Atmega, STM32, ESP32), Wifi-роутеры
(прошивка OpenWRT), Arduino, KiCAD, электросамокаты (ремонт,
доработка), 3d-печать (Klipper, Marlin, Octoprint), Видеокамеры (OpenIPC), UEFI (EDK2/DXE драйвера).
* Мобильные платформы: Android (Kotlin/Java/Smali/Go/Magisk/LSposed).
* Сети: IP routing, shaping, FW/iptables, IPVS, onion routing/tor, cisco.
* Протоколы: OSI model, IPv4, IPv6, TCP/UDP/ICMP, HTTP, SIP
* Контейнеры: Docker, K8s, LXC
* Контроль версий: Git, svn
* Web: Nginx, Apache, Squid
* Веб контент: HTML, CSS, JS/Vue.js, Wasm, XML, JSON, AJAX, Canvas, API/REST, Websocket
* DB: Mysql/Percona, Postgresql, sqlite, redis, mongodb
* Email: Exim, qmail, sendmail
* DNS: named
* Messaging: SIP/kamailio, RabbitMQ, NATS
* Кластера: Pacemaker (corosync/heartbeat), Ceph, Lustrefs, DRBD,
Mysql replication, Innodb cluster
* Облака: AWS, GC
* CRM: Odoo/OpenERP
* Управление проектами: Gitea, Taiga, Phabricator
* Бекапы: Restic, Bareos (bacula)
* Мониторинг: Prometheus/Grafana, Zabbix, nagios
* Криптовалюта/блокчейн: Ethereum/ETH
* Проектирование электронных плат: библиотека Skidl (схема пишется кодом на Питоне или Golang)
**Образование:**
Бакалавр, Электронные аппараты, 2004
Преподаватель математики/информатики, 2024
**Языки:**
Русский - родной
Английский - Средне Продвинутый.
**Интересы:**
* теория управления (ДОТУ), выявление и решение проблем
* самообразование и система образования
* TDD, программирование
* электроника
**Сайт:**
https://golang1.ru
**Проекты:**
*Проект:* [Сервис мессенджера для медперсонала - Qliqsoft]
*Время:* декабрь 2012г - продолжается (9,5 лет)
*Роли:* программист, системный администратор
*Задачи:*
* поддержка и развитие сервера сообщений на базе открытого Kamailio
SIP сервера (на C)
* написание с нуля pushserver'а для отправки FCM/APNS push
нотификаций для мобильного приложения (Python/Twisted)
* переписывание сервера сообщений с нуля на Nodejs
* внедрение тестирования C кода сервера сообщений на Go и при помощи Cgo
добавление нового функционала уже на Go (+Gorm как-то добавить)
* администрирование линукс серверов и cisco свичей
* написание небольших вспомогательных программ на Go для администрирования инфраструктуры сервиса:
* * dbcleaner: программа для архивирования и очистки устаревших данных из базы мессенжера (время хранения переписки и пр.)
* * udpredis: буферизация запросов push-нотификации в базе Redis
* * backup_db: бекап баз данных мессенжера (снимок базы по расписанию, архивирование с шифрованием)
* * webmanager: переключатель между активной и запасной Docker-нодой Веб сервера
* * dns-hosts-cacher: программа кеширования критически важных DNS записей внешних сервисов (twilio, assembla и пр.), используемых Web частью мессенжера
* * memcleaner: перезапуск процессов Веб сервера Puma для ограничения потребления памяти (Ruby/Puma подтекает)
* * checkdb: проверка состояния базы данных
* * puma_list_long_reqs: поиск долгих запросов в Puma/Ruby-on-Rails логах веба
* * sq_runner: запуск пула процессов sidekiq, используемых вебом
* * ssh-timer: контроль и закрытие неактивных ssh сессий по таймауту
* * diagrams: визуализация инфраструктуры сервиса (логической, физической) в svg/png картинках для сертификации
*Использованные технологии:*
* ОС: Ubuntu Linux, CentOS
* Контейнеризация: Docker, lxc
* Кластеризация: микросервисы/Docker, K8s, Mysql replication, Innodb cluster
* Методология разработки: TDD
* Языки программирования: Golang, Python/twisted, NodeJS/CoffeeScript, C
* Мониторинг: Zabbix, Prometheus/Grafana
* Сети: IP routing, iptables, IPVS
* SIP: Kamailio
* Web сервера: Nginx, Unicorn, Puma
* DB: Mysql/Percona (Innodb cluster, replication), Redis, RabbitMQ, NATS
* Бекапы: Bareos, Syncthing
*Проект:* [Сервис изучения иностранных языков - Fluency
Academy]
*Время:* сентябрь-декабрь 2020г, апрель-июль 2021г (8 месяцев)
*Роль:* программист
*Задачи:* написание с нуля FCM/APNS push нотификатора для мобильного приложения.
*Использованные технологии:* TDD, Golang, либы: swagger, go-fcm, pgsql.
*Проект:* [Сайт знакомств, ориентированный на встречи в кафе -
For-lunch.ru]
*Время:* март 2013г - сентябрь 2018г (5,5 лет)
*Роли:* программист, системный администратор
*Задачи:*
* участие в разработке сайта (Python/Django/JS; backend+frontend)
* написание с нуля системы почтовой рассылки (Python/Django)
* администрирование линукс VPS
*Использованные технологии:* Ubuntu Linux, Python (django), Mysql, Exim, JS (jQuery).
*Проект:* [Сервис торгов на онлайн биржах - AlgoLabs]
*Время:* февраль 2017г - май 2018г (1 год, 3 месяца)
*Роли:* программист, системный администратор
*Задачи*:
* разработка клиентской панели управления торгами
* автоматизация взаимодействия со сторонней трейдинг-программой (Java)
* поддержка линукс серверов
*Использованные технологии:* Linux, JS/Nodejs (Web-frontend/JS/css, Backend/NodeJS/Coffeescript), Java, Pgsql.
*[Работа в IT-фирме Текс]*
*Время:* лето 2004г - осень 2011г, май-ноябрь 2012г (8 лет)
*Роль:* системный администратор Linux
*Задачи:*
* поддержка Linux вебхостинг-серверов и контрольной панели Cpanel
* поддержка иностранных клиентов (хелп-дески, мыло, мессенжеры - на английском)
* сопутствующая автоматизация работы:
* * разработка внутренней GUI проги для удобного наблюдения за тикетами
и мониторингом - PyQt
* * php фаерволл для exec-функций: на шаред хостинге с PHP - просто
прорва уязвимостей в коде пользователей и эксплоиты запускают что
хотят через PHP exec-функции. Фильтр с настраиваемыми правилами
хорошо решил проблему: кому можно что выполнять, кому нельзя - C,
в виде PHP extension
* * патчи на Линукс ядро - чистый C: удаленное логирование, удалённая
перезагрузка отправкой специального пакета (полезно если сервер
завис и ничего, кроме ядра, не отвечает), дополнительный sshd
сервер с отдельными от ОС ключами доступа (больше контроля над
системой)
* * свой модуль Линукс фаервола для ограничения нагрузки на сервер: при
превышении заданного порога загрузки системы - новые запросы
временной блокируются до снижения загрузки (сохраняет сервер
работоспособным и доступным для администраторов, не даёт
пользователям его перегрузить).
*Использованные технологии:*
* ОС: CentOS/RedHat, Gentoo Linux, Ubuntu Linux, FreeBSD, windows
* Контрольные Web-панели: Cpanel, ISPConfig
* Кластеризация: балансировка веб-траффика на Linux/IPVS, Mysql replication/IPVS, heartbeat
* Языки программирования: C, Python, Perl, PHP
* Мониторинг: Nagios, Icinga
* Сети: IP routing, shaping, FW/iptables, IPVS
* Контроль версий: Git, svn
* Web: Nginx, Apache
* FTP: proftpd, pureftpd
* DB: Mysql, Postgresql
* Email: Exim, qmail, sendmail
* Бекапы: Bareos (bacula)
**Личные проекты:**
***[Программные:]***
[Улучшения для открытой среды разработки для языка Golang - Liteide]
*Время:* 2018г - продолжается
*Роли:* идеолог, программист, пользователь
*Задачи:*
* добавлены авто открытие последнего проекта при запуске, автозапуск
Go-тестов при сохранении, переход между тестами/функциями и
ошибками компиляции, автодополнение русских имён переменных,
исправление go fiximport, оптимизация для TDD
* для тестирования C++/Qt кода из Golang - используется libffi:
бинарные модули динамически загружаются и из них вызываются проверяемые C++ функции
* возможно, что-то из этого примут в апстрим проект
*Использованные технологии:* BDD/gherkin, TDD, Golang, C++, Qt, libffi, опенсорс.
[МойВеб - система отдельных браузеров с настройками под свои задачи]
*Время:* 2015г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* самая сложная программа на компьютере в среднем - браузер. Но в то
же время, зависимость от неё уже огромна (многие ли могут себе
позволить прожить и день без браузера?), а новые уязвимости
продолжают выходить. Да и некоторые вроде бы функции - с точки
зрения пользователя выглядят уязвимостями (ведь браузеры пишутся
под интересы корпораций...).
* и сайты сегодня - уже целые программы. Но позволять всем сайтам
открываться в одном браузере - это играть в рулетку с
уязвимостями, атаками на систему, пользовательские данные (банки,
соцсети) и много чем ещё. А ведь жаловаться разработчикам браузера
на ущерб - это писать в "спортлото".
*Решение:*
* Выход - в более сильном разделении доступа и минимуме ресурсов для
работы: каждой задаче - свой отдельный браузер с доступом только
куда нужно.
* для браузинга новостей и прочих случайных сайтов - браузер без
доступа к остальным программам и файлам пользователя, вебкамере,
звуку, 3d-ускорителю, доступ только в интеренет. А по закрытию
браузера - всё специально не сохранённое удаляется.
* каждой соцсети - тоже свой отдельный браузер с сохранением настроек,
а, возможно, и с доступом к вебке, звуку, если используются
звонки.
* для WebGL игр и демок - пригодится браузер с доступом к
3d-ускорителю.
* какому-то внутреннему корпоративному сайту не всегда нужно что-либо
в интернете. И с поправкой на специфику, ещё какие-то устройства.
* ну и банковские данные лучше открывать отдельно и осознанно, в
отдельном браузере и без доступа к мультимедиа устройствам. Кроме
игр "приведёт ли случайная ссылка в интернете к взаимодействию с
вкладкой личного кабинета в банке" - в мире есть много других
интересных занятий.
*Использованные технологии:* Linux, Docker, Firefox, Golang, Qt.
[Программа для скачки роликов с YouTube - Video-dl]
*Время:* 2020г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* кучу Youtube рекламы и тормоза в сети бывает лучше оставить за кадром.
*Решение:*
* скачалось - можно спокойно смотреть в своём любимом плеере без перерывов и рекламы
*Использованные технологии:* TDD, Golang, Qt.
[Программа для контроля времени доступа в интернет ребёнку]
*Время:* 2021г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* иногда кроме интернета полезно посмотреть и на реальный мир,
особенно детям
*Решение:*
* отсчёт и контроль времени в программе на сервере
* и отправка команд "включить-выключить" на интернет-роутер
* под контролем - заданные IP-адреса
*Использованные технологии:* TDD, Golang, интерфейс псевдографики CLI, iptables
[Автоматизация управления Docker-контейнерами - библиотека
"magefile/docker" (Go)]
*Время:* 2019г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* во времена контейнеризации, когда даже браузеры и "телега" в
контейнерах, не говоря уже о серверных приложениях, важна простота
управления ими
*Решение:*
* для открытого Go автоматизатора "mage" (альтернатива
make/Makefile) - библиотека конфигурации контейнеров (такой себе
сильно упрощённый K8s)
* для создания очередной программы нужно лишь задать название,
docker-образ, какой доступ к файлам и сети нужен - остальные
команды (start, stop, logs и т.д.) общие
* не нужно набирать длинные "docker [run|start|stop] имя_контейнера" команды,
достаточно лишь зайти в нужную диру и сказать "mage start" и т.д.
*Использованные технологии:* TDD, Golang, mage
[Библиотека на Go для написания конфигов программ на самом же Go -
"goconf"]
*Время:* 2021г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* все скриптовые языки (Python, PHP, Ruby и т.д.) умеют штатно
подключать конфиги на своих же синтаксисах - это удобно, а часто
существует и автоформатирование, чтоб не считать пробелы вручную.
* для Go такого готового не нашлось. Предлагается использовать общие форматы,
типа INI, не всегда удобные в редактировании.
*Решение:*
* Если применить штатный функционал парсинга своих же go-файлов -
вопрос решается, конфиг обретает вполне себе структурный вид
go-кода, и, конечно же, с удобным автоформатированием.
* ещё и несравнимо меньше по размеру, в сравнении с популярной либой viper
*Использованные технологии:* TDD, Golang, AST
[Улучшения программы для чтения RSS Quiterss]
*Время:* 2017г - продолжается
*Роли:* идеолог, программист, пользователь
*Задачи:* добавлена поддержка МойВеб'а для открытия урлей в
определенных браузерах и прочие улучшения взаимодействия с окружением
рабочего стола.
*Использованные технологии:* C++/Qt, опенсорс
[Улучшения в децентрализованный мессенджер qTox]
*Время:* 2017г - продолжается
*Роли:* идеолог, программист, пользователь
*Задачи:* добавлена поддержка МойВеб'а для открытия урлей в
определённых браузерах: по нажатию урлы youtube.com открывается в
медиа-браузере, остальные - в новостном.
*Использованные технологии:* C++/Qt, опенсорс
[Улучшения в программу учёта рабочего времени Gnotime]
*Время:* 2019г - продолжается
*Роли:* идеолог, программист, пользователь
*Задачи:*
* улучшения для удобства
* Python-скрипты для конвертации данных в формат для загрузки в
Odoo/OpenERP для последующего учета и выставления счетов
*Использованные технологии:* C++/Gtk, Python, опенсорс
[Улучшения в библиотеку приёмочного тестирования софта и BDD -
Godog]
*Время:* 2022г - продолжается
*Роли:* идеолог, программист, пользователь
*Задачи:* добавлена поддержка генерации русских названий функций -
удобнее затем работать с кодом тестов
*Использованные технологии:* TDD, Golang, опенсорс
[Telegram-desktop клиент Kotatogram]
*Время:* 2022г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
* реклама - это реклама. Она часто имеет мало общего с тематикой интересующих каналов
или вообще выходит за рамки приличий
* да и в программе навешано множество других отвлекающих мелочей
*Решение:*
* добавлена фильтрация постов по строковым шаблонам
* убраны ненужные лично мне оценки под постами
*Использованные технологии:* C++/Qt, опенсорс
[Упрощение перевода проектов на Go]
*Время:* 2021г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
Продолжение существующего проекта на прочих языках - на Go.
Go - язык компилируемый, а значит при всех прочих равных быстрее
интерпретируемых виртуальных машин (Python, Ruby, Java, JS и пр), на нём
написано уже много замечательных библиотек, включение которых в проект
может сэкономить значительные средства при разработке и/или ускорит
работу (уменьшение затрат на железо) -
(https://github.com/avelino/awesome-go).
Но чтобы получить программу на Go - её же якобы нужно сначала полностью переписать.
А это не всегда быстро и просто.
*Решение:*
Как же без полного переписывания проекта получить выгоды Go?
Расширение Cgo - это мостик между существующим кодом проекта и кодом на
Go. Специальным образом собранный Go код загружается в существующую
программу и получается возможность вызывать функции обоих языков друг
друга.
При этом есть некоторые накладные расходы на межъязыковые вызовы, но они
заметны лишь на мелких функциях, сравнимых по размеру с самим мостом,
что на практике редкость. Взаимодействовать возможно со всеми языками,
от c/c++ до Python и Java - ведь если они работают на одном процессоре -
значит совместимы на низком уровне.
Так из кода виртуальной машины может быть вызвана библиотека на Go,
обрабатывающая запросы быстрее, чем родная виртуальная реализация. И так
далее.
Прежний код остаётся тот же, но добавляется и код на Go.
Тестирование - и можно запускать в продакшн в тот же день.
И ещё более важное: далее можно добавлять новый функционал уже на Go с
сохранением существующего, а также плавное переписывание на Go (хоть по
одной функции), со всё так же быстрыми релизами (хоть ежедневно).
Со временем, весь проект будет на современном языке. Не нужно ждать
месяцами полного переписывания, продолжая терпеть прежние ограничения.
Проект продолжает жить, работать и развиваться на Go.
*Использованные технологии:*
* Golang, Cgo
* Опционально: Python, Ruby, Java и пр.
[Использование в одной программе/процессе сразу нескольких
языков:]
*Время:* 2021г - продолжается
*Роли:* идеолог, программист, пользователь
*Проблема:*
Бывает, необходимый функционал есть в уже существующих библиотеках, но
на разных языках. Существуют просто выдающиеся библиотеки-шедевры в
своем роде (к примеру: в GUI - лидер Qt/C++, для сетевых протоколов на
высоте - Go, а для академических задач силён Python). Но они не всегда
на языке проекта. А хочется! В том числе и экономически: получить тот же
функционал на каком другом языке - значит внушительные затраты на
разработку.
А если таких прекрасных библиотек ещё больше?
3 и больше языков? Какой же выбрать? Или микросервисная архитектура?
(несколько процессов, и можно на разных языках). Но это сразу значит
более сложное - сетевое - взаимодействие и мониторинг (хотя иногда и это
оправдано).
*Решение:*
А вот можно не выбирать, а взять все 3 языка и даже больше.
Примеры известны: интерпретаторы того же Python или Lua встраивают в
сложные C++ CAD приложения (KiCAD, FreeCAD) или игры для реализации
пользовательских скриптов, дополнений и прочего.
У Java есть JNI (Java Native Interface), который позволяет загружать
библиотеки, написанные на С/C++. Это же применяется и в Андроиде, а это
уже 2 языка в одном процессе. Очевидно, что добавить 3 и больше - не
проблема. Назначить определённый интерфейс взаимного вызова функций
(либо динамический, возможно, при помощи библиотеки libffi; либо
компилируемый) - и дорога открыта.
Их можно добавлять как в новый, так и в существующий проект на любом
языке и этапе реализации, получая выгоду от лучших библиотек в своих
областях.
И само собой, что продолжать разработку собственного кода тоже можно на
любом из этих языков. И так же плавно, если нужно, переливая функционал
с одного языка на другой.
*Использованные технологии:*
* Опционально: Golang, Cgo, libffi, Python, Ruby, Java и пр.
***[Экспериментально-программные: ]***
[Преобразование кода с одного языка программирования на
другие]
*Время:* 2021г - продолжается
*Роли:* идеолог, программист
*Описание:*
Все языки программирования связаны между собой через AST (Abstract
Syntax Tree - абстрактное синтаксическое дерево), или другими словами -
базовые алгоритмические блоки, общие для всей Вселенной: операция,
условие, переход, цикл, подпрограмма.
Всякая же библиотека - это тоже своего рода язык, значит и все
библиотеки тоже так же связаны. А потому, если существующий проект
довольно большой, то вместо ручного его переписывания возможно
экономически более выгодным будет написать конвертер кода с этого языка
и использованных библиотек - на другой язык и его соответствующие
библиотеки того же рода, а затем просто запустить этот конвертор,
возможно в конце вручную поправив какие-то мелочи (это допустимо и имеет
смысл, если их объем меньше, чем код конвертера, необходимый для их
правильного преобразования).
В дальнейшем этот конвертер можно расширять другими библиотеками и
использовать для других проектов на том же языке.
Практические эксперименты были на связке Scala -> Go. Небольшой класс
на Scala, печатающий некий вывод, был преобразован в Go код, который при
запуске выдаёт то же самое.
*Использованные технологии:* Golang, AST. Опционально: Scala и пр.
[Изменение функционала почти любой готовой apk-шки (установочного файла для Андроида)].
*Описание:*
APK-файл - это просто zip архив: можно распаковать и запаковать обратно.
Код находится в .dex файлах (компилённые из Java/Kotlin) и в бинарных
.so либах (компилённые C/C++/Rust/Go). Чаще всего интересующая логика
находится в dex-файлах, которые загружаются виртуальной машиной Андроида
ART (Android Runtime).
К счастью, низкоуровневые команды виртуальной машины ART довольно близки
к командам Java, чем пользуются многие Java-дизассемблеры, в частности:
dex-tools. Графическая утилита jadx-gui из его набора показывает
буквально близкий к изначальному дизассемблированный Java код, который
можно почитать, примерно понять что и какие функции делают, а также что
нужно поменять для желаемого результата (часто это что-то небольшое,
буквально одна-две команды). Затем с помощью открытой программы apktool
dex-файлы возможно дизассемблировать в человекочитаемый формат
виртуальной машины Java - т.н. формат Smali. И уже эти smali-файлы
вполне возможно поправить в текстовом редакторе (где и что править -
нужно понять из дизассемблера jadx). А затем тем же apktool'ом собрать
dex-файлы заново из smali-файлов (возможно, изменённых) и запаковать в
новую apk-шку. Остаётся подписать и залить на устройство.
И вот программа ведёт себя немного по-другому, даже если она не из мира
опенсорс, либо же попросту нет желания качать гигабайты Android SDK
чтобы поправить даже опенсорс программку.
На практике опенсорс менеджер задач Tasks начал работать и без Wifi
(проброс порта через ADB) - всего пара строк на smali, и закрытый Wifi
Manager стал менее назойливым со всплывающими вопросами.
*Использованные технологии:* Android, APK, Java, Apktool, Smali
***[Аппаратно-программные:]***
[Автоматизация освещения и электрики в доме:]
*Описание:*
Вопреки общеизвестной фразе, дом должен быть автоматизированным, а умным
должен быть хозяин.
Существуют закономерности, согласно которым какие-то действия людей в
доме или события должны приводить к изменению режима работы тех или иных
бытовых устройств.
Нажатие кнопки, разнообразные датчики (движения, освещённости,
температуры, влажности, газов), время суток, дата, команда через
интернет и пр - обильный источник событий, которые могут запускать
какие-либо сценарии.
Можно человека обязать нажимать кнопку, чтобы включился свет. Хотя для
этого достаточно условий: темнота и срабатывание датчика движения. А
где-то и одной темноты достаточно (или даже периода времени), а человек
пусть занимается своими делами.
Вытяжку в ванной можно включить и по датчику влажности, а не только
кнопкой.
Полная яркость лампы где-либо - не всегда уместна. Иногда нужен
приглушённый свет. А выход ночью в туалет и яркая лампа в коридоре
вызывают кривизну лица и покупку фонарика. Но даже когда нужна полная
мощность, включение лампы обычным выключателем увеличивает яркость с
нуля до 100% за доли секунды, что вызывает раздражение и ненужную
нагрузку на глаза. Тем более, если это происходит ночью.
Потому если рост яркость лампы от 0 до 100% растягивать хотя бы на
0.5-1-2 секунды - это даст время глазам подстроиться и избежать
малоприятного.
Появление же человека ночью в коридоре/туалете - уже достаточный повод
плавно включить свет на 20-30% яркости и после его ухода так же плавно
выключить, не заставляя искать в потёмках выключатель.
*Используемое железо:*
* микроконтроллеры STM32 или ESP32 (перспективнее), прошивка на
Arduino с либой firmata - непосредственно собирает состояния
кнопок, ручек и датчиков, и управляет лампами и вентиляторами;
логическая связь с ближайшим микрокомпьютером;
* микрокомпьютеры OrangePI/RaspberryPi - логика на Go (с IoT
фреймворком gobot/firmata), собирающая события с микроконтроллеров
и принимающая решения;
Микрокомпьютеры объединены в свою отдельную локальную сеть обмена
событиями, что позволяет строить более сложные сценарии и управлять
устройствами из разных мест дома, в том числе с компьютера, телефона или
стационарно установленного в коридоре планшета с соответствующей
программой (типа OpenHAB или Home Assistant).
Вся логика и лампы - на УПСе.
[Реле напряжения на вводе 220 в дом для защиты техники от скачков
напряжения:]
*Проблема:*
У заводского сгорело силовое реле (было простенькое). Пока менял реле,
сгорел и микроконтроллер. Остался, по сути, корпус, идея и память о цене
и качестве такого же нового.
*Решение:*
* установлено нормальное реле и микроконтроллер ESP32 + прошивка на
Arduino
* уже больше 2 лет в работе
* уже два ESP32 пришлось заменить (впрочем, стоят они, в сравнении -
копейки)
* защищаемые приборы в норме (впрочем, и напряжение на входе довольно
стабильное)
[Домашние Wifi роутеры:]
* прошиты открытой OpenWRT
* модели Xiaomi хороши - за сущие копейки получается 4-ядерный MIPS
линукс компьютер с 3 гигабитными сетевухами и Wifi
* с прекрасным Luci Web-интерфейсом на русском
* и на этих роутерах Go тоже работает
[Мобильные Android-телефоны:]
* заливка кастомных прошивок, в том числе открытой LineageOS (Samsung,
OnePlus)
* на основном телефоне стоит LineageOS, самостоятельно собранный из
исходников
[Широко известная в узких кругах зарядка аккумуляторов
Imaxb6:]
* залита открытая прошивка cheali-charger, крепко расширяющие
возможности (Atmega, Arduino/C++)
* в эту прошивку добавлена стадия капельной зарядки (для поддержки
батареи в заряженном состоянии продолжительное время)
[Плавное включение охлаждения двигателя на автомобиле]:
*Проблема*:
Штатный запуск вентиляторов охлаждения происходит довольно поздно (выше
100 градусов С) и скачкообразно (on/off), что в пробке чревато
перегоранием поршней и недешевым ремонтом.
*Решение:*
МК STM32 с Arduino/C++ прошивкой, обратная связь с датчика температуры и
прямая на полевик вентиляторов. Вентиляторы включаются плавно в районе
91-95 градусов, обороты пропорциональны температуре.
В итоге стрелка визуально лишь немного отклоняется от 90 градусов -
поршни в норме. Вентиляторы часто обходятся минимальными оборотами - и
сами дольше проживут, и проводка
[УПС Powercomm 1кВт:]
*Проблема:*
С большим внешним аккумулятором обнаружилось, что штатная прошивка
ограничивает время автономной работы (безотносительно нагрузки).
Неоднократный подход к браузеру показал, что даже с более дорогими
фирмами/моделями защиты от маркетинга нет: ограничат не тут, так там.
*Решение:*
Выбор очевиден: осциллограф, изучение работы платы и перевод на свой
микроконтроллер: Arduino Leonardo.
Штатное поведение изучено, в своей прошивке пока реализовано не всё, но
работа от аккумулятора есть - а это главное и самое сложное. Работает
даже газовый котёл (чистый синус - из доп. стабилизатора).
Прошивка: Arduino, Go, либа esp32-transpiler позволяет писать на Go,
конвертируя затем в C++ с последующей сборкой в прошивку для Arduino.
Так высокоуровневую логику УПСа можно тестировать (TDD!) и писать на Go,
соединяя с низкоуровневыми Atmega-специфическими деталями на C++.
- История работы
-
-
13 откликов 82 просмотра 17 дней назад Он исполнитель
-
5 откликов 34 просмотра 6 дней назад Он исполнитель
- Отзывы (12)
Задача выполнена отлично! Николай сразу предложил и подробно описал алгоритм решения задачи. Провел все необходимые исследования, требуемые для выполнения задачи - т.к. задача нетривиальная, необходимо было провести анализ программного кода готового продукта, предложить как правильно имплементировать необходимые мне доработки/продумать тесты и, собственно реализовать их. Николай отлично справился как с исследовательской частью задачи, так и с реализацией, учел все мои пожелания, активно предлагал подходы к решению, объяснял и документировал результаты. Рекомендую этого исполнителя, с ним комфортно и интересно сотрудничать.
~ 16 часов
назад
Все прошло прекрасно! Николай справился с тем, с чем другие не смогли. Рекомендую к сотрудничеству!
9 дней
назад
Быстрая реакция на запросы.
Хорошая манера общения и обьяснения.
Подробные ответы на вопросы.
Хорошая манера общения и обьяснения.
Подробные ответы на вопросы.
18 дней
назад
Николай выполнил задачу по разработке парсера-кроулера на Go с высоким профессионализмом. Все требования были учтены, работа выполнена в срок и с отличным качеством. Особенно порадовало внимание к деталям и способность предложить оптимальные решения. Очень доволен сотрудничеством, рекомендую Николая как ответственного и грамотного разработчика!
~ 1 месяц
назад