В статье написано, что используется WebSocket, как один из возможных средств доставки сообщений клиенту, Tomcat, как servlet контейнер. А как Вы web socket в Tomcat реализовывали? С помощью Tomcat-зависимых «штук»? А то, насколько я знаю, в Java пока ещё нет стандарта на WebSocket.
На счёт дебага — насколько я понял, breakpoint поставить не удастся? На счёт выполнения lua на компьютере — я имел ввиду, что lua — это же скриптовый язык, разве его нельзя выполнить просто в интерпретаторе? Понятно, что если использовать системные библиотеки, которые есть только в NodeMCU, то ничего не получится. Но если абстрагироваться от системных вызовов, то неужели это нельзя сделать?!
P.S. Вообще, спасибо за ответ!
Не могли бы Вы подробнее рассказать о процессе написания скриптов? Как проходил debug, например. Насколько удобно было их загружать. Можно ли выполнять скрипты без загрузки на устройство? Т.к. это lua, то может удастся запустить без устройства. Например, при разработке или тестировании. И написать unit test.
Интересно было почитать — я подобное сам писал, когда нужно было POJO объект заполнить для проверки сериализации/десериализации. Заняло несколько десятков строк кода. А тут прямо серьёзная вещь, даже с поддержкой стратегий генерирования :)
оффтоп: В комментариях уже несколько раз упоминалось неблагозвучное название. А как вообще правильно произносить название Вашей компании? Не могли бы Вы по русски его написать?
Это «открытый хват». Очень опасный, т.к. гриф может соскользнуть, но часто видел что его используют опытные спортсмены. Вот тут не знаю почему — особых преимуществ и отличий от «закрытого хвата» он не даёт (по крайней мере, так пишут). Может потому что могу? :)
P.S. Не обновил комментарии.
Спасибо за статью! Было интересно прочитать про софт для просмотра DICOM — сам сталкивался с этой проблемой когда мне КТ делали (не касательно стоматологии).
В статье не нашёл, на мой взгляд, самого интересного — названия первой стоматологии и фирмы ДМС. А то Вы на них столько времени потратили и денег. Нужно же сделать им «рекламу»! :)
Проблема, с который мы недавно столкнулись и которую пробовал решить с помощью аспектов — логгирование CallableStatement. Т.е. стандартный код:
CallableStatement c = con.createCallableStatement("{call package.procedure(?,?,?,?)}");
c.setString(1,"a");
c.setInteger(2,2);
c.setStruct(3,struct);
c.execute();
И я пробовал с помощью аспектов получить {call package.procedure(?,?,?,?)} и потом отследить вызов set методов с логгированием переданных параметров и при вызове execute() записывать эти параметры в лог.
В итоге не осилил — при включении аспектов на нашем проекте компиляция стала занимать какое-то нереальное время. И пошёл по другому пути — сделал wrapper вокруг connection, а он возвращает wrapper вокруг CallableStatement который уже производит логгирование. Кода получилось очень мало — большая часть кода wrapper была сгенерирована IDEA, а я в итоге написал сохранение параметров в set методах и вывод их в лог при выполнении execute().
Но мне бы было интересно, если бы Вы показали на этом примере, как можно применить аспекты.
Успешный пример их применения у меня был на гораздо меньшем проекте — там нужно было логировать просто время выполнения определённых методов (проект был по нагрузочному тестированию). И там было всё гораздо проще — написал pointcut для поиска этих методов, сохранял текущее время, вызывал метод, писал разницу между текущим временем и сохранённым.
Но в примере с CallableStatement по другому — нужно не просто подменить вызов метода своим, а ещё и отследить что вызывались set методы у объекта и отследить вызов exceute().
Я делал что-то подобное — только у меня Arduino преобразовывал сигналы от одного пульта в сигналы в другого. Нужно было, когда пульт от колонок потерялся, а ручка управления громкость находится сзади, неудобно. Так же использовал эту библиотеку. А Вы не заменяли энерго потребление? Можно ли на батарейки перевести конструкцию? А то у меня сейчас от USB компа питается (т.к. возле компа находится), но хотелось бы отвязаться от него.
Хм. В IDEA проверяются. Я когда аспектами пользовался в нескольких приложениях, там удобно всё подсвечивалось. Но от них пришлось отказаться — тормозило ужасно при разработке и компиляции!!! (именно три восклицательных знака, т.к. всё было очень плохо :) )
P.S. Или может я Вас не понял? Я имел ввиду, что есть подсветка синтаксиса и поиск совпадения по PointCut.
Кстати, у меня на этом коде FindBugs не нашёл ошибку. В консоль выводилось, что Вы указали (т.е.фактически ошибка была), но FindBugs не показал её.
P.S. Проверял в IDEA с плагином FindBugs. При проверке другого кода ошибки находятся, т.е. FindBugs работает.
Поддерживаю!
P.S. Вообще, спасибо за ответ!
P.S. Не обновил комментарии.
В статье не нашёл, на мой взгляд, самого интересного — названия первой стоматологии и фирмы ДМС. А то Вы на них столько времени потратили и денег. Нужно же сделать им «рекламу»! :)
И я пробовал с помощью аспектов получить {call package.procedure(?,?,?,?)} и потом отследить вызов set методов с логгированием переданных параметров и при вызове execute() записывать эти параметры в лог.
В итоге не осилил — при включении аспектов на нашем проекте компиляция стала занимать какое-то нереальное время. И пошёл по другому пути — сделал wrapper вокруг connection, а он возвращает wrapper вокруг CallableStatement который уже производит логгирование. Кода получилось очень мало — большая часть кода wrapper была сгенерирована IDEA, а я в итоге написал сохранение параметров в set методах и вывод их в лог при выполнении execute().
Но мне бы было интересно, если бы Вы показали на этом примере, как можно применить аспекты.
Успешный пример их применения у меня был на гораздо меньшем проекте — там нужно было логировать просто время выполнения определённых методов (проект был по нагрузочному тестированию). И там было всё гораздо проще — написал pointcut для поиска этих методов, сохранял текущее время, вызывал метод, писал разницу между текущим временем и сохранённым.
Но в примере с CallableStatement по другому — нужно не просто подменить вызов метода своим, а ещё и отследить что вызывались set методы у объекта и отследить вызов exceute().
P.S. Спасибо за статьи по аспектам!
P.S. Или может я Вас не понял? Я имел ввиду, что есть подсветка синтаксиса и поиск совпадения по PointCut.
P.S. Проверял в IDEA с плагином FindBugs. При проверке другого кода ошибки находятся, т.е. FindBugs работает.