Category: it

Хлебные крошки системотехника, watchdog под armbian

Я тут немного воюю с ресурсами nanopi с 256MB RAM, хочу, чтобы там себя хорошо чувствовала java8, при этом swap изначально там очень маленький, что-то около 200MB.
А сама JVM любит кушать 150MB минимум(без кучи), не хватат в общем.

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

Взаимодействие проще некуда:
Я добавляю параметр при запуске java контрллера -w /dev/watchdog.
А дальше работает мой контроллер, он инициирует watchdog и каждые 5 секунд обнуляет его, при завершении процесса watchgog отключается.
Таким образом, произойдет полный перезапуск железки, если упадет jvm или зависнет linux(ядро).

Watchdog кормлю '1' для инициализации, '.' для сброса счетчика и 'V' для отключения.

Выбираю Gluon, нет не клей.

Сегодня не совсем обычный день ночь, и я объявляю свой дом безъядерной зоной начало разработки клиента на основе той же JavaFX в купе продуктов компании Gluon https://gluonhq.com/.

Давно к ним приглядывался, но раньше не было стимула, теперь он есть в виде Huawei P Smart 2019 https://consumer.huawei.com/ru/phones/p-smart-2019/. Да, я не люблю Андроид, но еще больше я не люблю современные поделия до которых опустился Apple, тем более за огромную сумму.

Если вкратце, эти ребята обещают, что единожды написанный код будет работать на десктопах, Android устройствах и IOS устрйоствах без какого либо веба.  Здорово да? Мои давние тесты для десктопа и Android показали, что это вполне реально. Правда для Apple устройств нужен Mac. Может быть в будущем он у меня будет, а может мы в конце концов наберем команду и Mac будет у другого разработчика, что тоже не плохо.

Итак,  у меня есть библиотека со всем функционалом необходимым клиенту, необходимо обновить UI - вью и контроллеры. И главное - у меня есть ровно та же среда разработки, тот-же язык и те же инструменты(как например SceneBuilder). Из изменений только дополнительный плагин Gluon и немного больше требований по коду.

Я серьезно считаю, что это просто бомба. Но почему же тогда оракллл закрыл бесплатную лицензию для их бинарников JDK8 и вырезал JavaFX в свежих версиях Java? Почему основные разработчики оракл вводят всякие ламбда хулямбда но не расширяют JavaFX на все платформы? Почему при оракл JavaFX не развивался никак существенно? Хм, лично я считаю потому, что такие компании как оракл, мелкопакостные и гугел никогда не ставили себе цель сделать нашу жизнь лучше, в отличии от Sun Microsystems.

P.S. Вот что интересно, большинство ПО которое я использую в работе создало Sun Microsystems.

Update: Вот так выглядит новый клиент(на gluon), видно разницу?



Все основное реализовано, осталось допилить мелочевку.

Java Json + Deflater/Inflater

Не совсем новый функционал, но теперь это рабочий функционал.

Здесь стоит рассказать о вещах лежащих в основе.
Если рассмотреть тот-же радиус протокол(ну понятно такого протокола нет, есть куча rfc), то мы увидим, что раньше передаваемые данные старались сделать максимально компактными, особенно в вопросах заголовков, посмотрите в тот-же ipv4 протокол(не забываем про флаг security rfc3514, шутка про голубей, лично по мне, меркнет по сравнению с этим rfc).

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

Ну а старым пердунам куда деваться? Пока опишешь, перепишешь все поля и их содержимое в статическую структуру - так и кони двинуть можно, не молоды ведь. Остается пользоваться более простыми вещами, пусть и расточительными.
Вот и я, вырвав несколько седых волос, решил не заморачиваться и использовать текстовый формат передачи данных - JSON. Но! первое что я сделал для оптимизации - вместо названий полей стал использовать численные идентификаторы в шестнадцатеричном формате, затем обернул все зиппом используя Dedlater и Inflater. В итоге получил существенную оптимизацию, для больших данных экономия достигает 80%.
Стоит ли говорить о том, что передача показаний(а это основное) сжимается плохо, где-то на 30%, однако передаваемые сжатые данные чаще всего весят меньше чем обычный http заголовок(который сейчас очень популярен).

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

А теперь напомню, что у мобильных провайдеров почти ни у кого не осталось безлимитного интернета.
Я думаю, что данное решение позволит мне сэкономить траффик и растраты на него существенно.
Чего и вам желаю.

Время собирать камни?

Да, наверное завтра я решу, что это было зря.

Но тем не менее я попробую высказаться, просто для себя или типа я предупреждал.

Думаю настал тот момент когда мой проект достиг максимальной фазы и уже летит в тар-та-ра-ры.

Потратил я на него что-то около 5-6 лет, лет проведенных за проектом вместо кружки пенного вкусного пива с соленой рыбкой, вместо игрушек, вместо дополнительного времени с семьей, вместо отдыха, вместо жизни по большему счету (когда вы развлекались я скорее всего хреначил над проектом, или продумывал его). И на это есть причины, но эти причины, какие бы они не были, никак не умаляют проделанную работу.

Сделал я не мало, учитывая что 5-6 лет назад я только нахватался опыта по автоматизации. А в схемотехнике я только знал, что есть какие-то микроконтроллеры и что такое pnp и npn транзистор.
Сейчас я достаточно хорошо владею схемотехникой в вопросах цифровой электроники(ttl) и достаточно уверенно себя чувствую в разработке подобных устройств (да, именно настолько чтобы презирать ардуинщиков).
У меня есть комплексное Java решение, охватывающее очень многие задачи, которое почти нигде не использует чужие наработки, типа библиотек Apache. А различные фреймворки меня забавляют как малые дети.

Я вырос из тех задач, которые 5-6 лет назад для меня были фантастикой. Не просто вырос, теперь у меня есть мощный универсальный и легко расширяемый инструмент.
А главное есть опыт, знания и наработки, которые я мог бы повторить.
Ведь самое сложное не написать код или сделать дизайн и рекламу. Самое сложное - опробованная, реально работающая концепция, сделать решение которое будет содержать минимум костылей и будет интуитивно понятно (конечно речь о крупном решении). Этого достичь можно только перелопатив кучу кода, найдя в итоге максимально подходящее решение. Да куча кода(сил, времени, стараний) было выброшено/потрачено для того, чтобы достичь чего-то стоящего.

Сейчас я в положении, при котором я получаю совсем не высокую зарплату(хотя мне платят за проект, по большей части на который я имею полные права, и компания тоже, конечно же) и в течении нескольких лет слышу постоянные обещания(99% которых не выполняется, к примеру у меня нет рабочего места вообще, работаю с дома в кабинете 2x3м с плохой вентиляцией и жарой минимум в 30 градусов Цельсия, по сути работаю в шкафу при этом часто с токсичными веществами. При этом часто за дверью орет подросток играя в игрушку про зэков и вертухаев), и это меня пока устраивает, так как есть семейные обстоятельства.

И это тупик, данное занятие начинает больше требовать чем отдавать. Далее либо каким-то образом оно становится решением приносящим прибыль, либо поддерживается правой пяткой, хотя это не страшно, большинство пи№;арасов людей вокруг меня считают такой подход к клиенту вполне нормальным.

Да, я помню свои обещания, проблема только в том, что я склонен постоянно совершенствовать свое решение(есть подходящее слово, увы, не помню, типа мании). Не хочу я отдавать продукт с проблемами. Благо у меня теперь есть гараж, остается только реализовать решение сначала себе и затем можно отгружать.

Ну и в конце концов, за эти 5-6 лет у меня появился сын, которому сейчас почти 4 года и дочь, которой еще нет 2-х месяцев. А еще есть подросток 17-ти лет, который 90% времени вне сна проводит в свое удовольствие ничем существенно не помогая(вопрос влияния отчима на пасынка и его мать). Времени свободного сами понимаете - не много.

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

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

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

А главное нет сил, времени, опыта, знаний и желания, чтобы продвигать продукт в массы. Никто кроме меня не знает его возможностей, даже мой директор(должен быть максимально заинтересованным лицом) не знает и 30% возможностей моего решения. Как-то так.

Все спасибо если прочли.

Java, изменение строки

Наткнулся на статейку http://www.skipy.ru/technics/strings.html#mutation

Там вполне грамотный чел рассказывает о возможности в Java изменить текст строки, даже не смотря на то, что строка объявлена неизменяемой (final).

Можно считать, что это очень хороший вопрос для собеседования.
В Джава есть множество подобных нюансов и список вопросов можно написать совсем не маленький.

В принципе так и делают многие компании, в нете также много онлайн тестов подобного характера.

И меня мучает один вопрос, как подобные знания применимы на практике?
Лично для меня это загадка.
Попросту потому, что нет никакой необходимости изменять таким образом текст строки в собственном проекте.
Более того, все эти хитрости в основном надуманные, мне незачем усложнять свой собственный код.
Оптимизация? А вам, к примеру, известно, что очень крупная торговая компания, пишет свои проекты в основном на 1C? Для этого она выделяет сервера с терабайтами оперативки и сетка между компьютерами там как минимум 1ГБит. Разработчики там получают по максимуму для нашего рынка.
Т.е. выигрыш в производительности после оптимизации кода на Java просто ничтожен, если сравнивать с продуктами писаными в той компании, а ведь там, судя по ЗП, программисты высшего уровня.

Да, можно сказать, что знание таких аспектов явно подчеркивает высокий уровень специалиста.
Можно было бы, если бы я лично не знал программистов с заученными шаблонами.
Ведь можно попросту начитаться книжек, если память хорошая. Но главное ли это свойство программиста?
Выходит, что да, для многих топовых компаний - хорошая память и начитанность - главное, за это и платят.

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

В этом главное отличие. Как-то я спросил у одного программиста на фарпосте, который владел огромным багажом знаний(я там многих названий попросту не знал), сколько у него рабочих или завершенных проектов. В ответе он винил бардак в компании, количество проектов он не назвал, похоже попросту ни одного. При этом он просил ЗП что-то около 150 тыс. руб. в месяц.

А еще меня смущает мода. Меня как-то поправил студент которого спросили, как правильно  Ява или Джава?
Парнишке с умным видом было невдомек, что некоторые названия имеют русский вариант произношения, например Австралия, мы же не говорим Оустрэлия.

Короче все плохо, мало того, что сферу интенсивно занимают люди, чья главная особенность - хорошая память, так еще хуже то, что сделать они надежные решения не могут. Ведь приглядитесь, все глючит, глючит в элементарной логике, в базовой логике, зачастую ошибки лезут из-за отвратительно плохой логики взаимодействия узлов системы.
Я из того поколения, который юность провел без интернета, работая на ZX Spectrum, позже немного в MS-DOS.
Я отлично помню программы, достаточно сложные программы, которые не глючили и были интуитивно понятны, в том числе и игры. Сейчас такое ПО - большая редкость. И можно сказать, что современная разработка ПО находится где-то на дне. Плохо то, что сейчас тоже самое происходит и со схемотехникой, где, на мой взгляд, основной причиной выступает торговая марка Ардуино.

О проекте (периодически обновляется)

Приветствую.

Похоже мне стоит кратко описать свой проект.

Проект представляет собой конструктор, под этим термином подразумеваются следующие особенности:
1) Широкая поддержка различных производителей и их устройств.
В проект заложены основы позволяющие его дополнять поддержкой сторонних устройств, в том числе сделанных своими руками.
2) Широкие возможности настройки подключения устройств.
Проект поддерживает большой набор различных интерфейсов подключения. Позволяет подключать конечные устройства через большое количество шлюзов, как простых так и с дополнительно настраиваемой логикой.
3) Контроллер (основной локальный узел управления конечными устройствами) может быть развернут на любом компьютере поддерживаемом Java 6 и выше (это может быть настольный компьютер, сервер, мини компьютер и даже в будущем Android устройство).
Проект позволяет выполнить поддержку всех интерфейсов подобных устройств при этом пользовательский интерфейс описания данных подключений достаточно понятный и не требует специфичных знаний.
4) Возможность как локального подключения клиента к контроллеру, так и облачного, что дает широкие преимущества, как например информирование, сбор статистики и удаленное управление.
5) Финансовая выгода - основные компоненты проекта бесплатны, платными будут дополнительные сервисы, как например разработка доп. функционала под заказ, использование дополнительных веб сервисов, аренда дискового пространства под статистику или разработка нового устройства.
6) Проект не потребует от вас специфичных знаний в электронике или знаний программирования, все достаточно просто и понятно. Однако подразумевается, что Вы имеете некоторое представление в области автоматизации.
7) В рамках проекта также разрабатываются недорогие устройства с существенными особенностями в сравнении с аналогами на рынке.


Основными компонентами проекта являются:
1) Удаленный сервер.
Предоставляет облачное решение (авторизация пользователей,  удаленное управление, мониторинг, сбор статистики и ее выгрузка, информирование, виртуальные контроллеры и тому подобное)
Сервер не распространяется, права на его использование есть только у меня и у компании 'Dipex group'.
На текущий момент заложены три площадки - официальная dipexlab, студентческая dipexlab и моя, для DIY инженеров.

2) Java контроллер.
Программное обеспечение которое можно развернуть практически на любом устройстве поддерживаемом Java 6 и выше.
Размещается на сайте вместе с устройствами автоматизации. Выполняет опрос устройств, управление (в том числе и по заложенным сценариям), передачу данных на сервер либо непосредственно в клиент.
Вся логика управления устройствами заложена в нем (хотя часть может находиться на конечных устройствах),
т. е. не требует наличия сервера(доступа к облаку).
В будущем будет доступен для Android устройств начиная с версии 4.0

3) Клиент.
Выполнен на JavaFX и может быть развернут на многих десктоп устройствах. Является главным инструментом интегратора, содержит детальную информацию о проекте, конструктор для создания проекта и дополнительный функционал, как например выгрузка статистики. Также можно использовать как приложение для мониторинга и управления устройствами.
На его базе будут выполнены решения для мобильных устройств и веб.
Также есть консольная утилита позволяющая получать данные для таких решений как MRTG

Кроме этого, есть сторонние решения для управления устройствами (точки входа). В проекте заложен механизм позволяющий получать информацию об устройствах и управлять ими на базе фраз. На текущий момент реализованы следующие точки входа:
1) Мессенджер Телеграм.
2) Голосовой помощник Алиса.
3) Электронная почта
В будущем будет поднят СМС шлюз, появится СМС точка входа.

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

Среда передачи данных
Я сторонник проводных решений, в основном RS485. Существует большое количество минусов в беспроводных решениях, а их плюсы вряд ли перевесят минусы. В Dipexlab, как и в моих проектах, используется RS485 но с разными протоколами. Однако мои предпочтения никак не сказываются на самом проекте, точно также можно легко создать решение на базе WiFi к примеру.



И главное, еще раз, это конструктор.
Он Вам не нужен, если Вы купили комплексное решение от, скажем, Xiaomi. Но если Вы интегратор, или просто увлекаетесь электроникой и решили обвесить свой дом различными недорогими устройствами управления и датчиками, то здесь он в самый раз.
Безусловно, если вы купили, скажем, с десяток RGB WiFi ламп и теперь желаете все это дело объединить, то этот проект Вам также будет очень полезен.
Хотя, Вы в любой момент можете купить ограниченный в функционале готовый контроллер известного производителя  для ограниченного количества и типа устройств заплатив за него значительно больше чем за недорогой мини копьютер.

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

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

У проекта есть юр. лицо http://dipex.ru, есть лаборатория в ДВФУ(C305 - центр проектной деятельности)

UPDATE, 12.08.2019 добавлена информация