Pull to refresh
41

Пользователь

0,1
Rating
18
Subscribers
Send message
Спасибо за статью! Было интересно прочитать про софт для просмотра 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().

P.S. Спасибо за статьи по аспектам!
Я делал что-то подобное — только у меня Arduino преобразовывал сигналы от одного пульта в сигналы в другого. Нужно было, когда пульт от колонок потерялся, а ручка управления громкость находится сзади, неудобно. Так же использовал эту библиотеку. А Вы не заменяли энерго потребление? Можно ли на батарейки перевести конструкцию? А то у меня сейчас от USB компа питается (т.к. возле компа находится), но хотелось бы отвязаться от него.
Хм. В IDEA проверяются. Я когда аспектами пользовался в нескольких приложениях, там удобно всё подсвечивалось. Но от них пришлось отказаться — тормозило ужасно при разработке и компиляции!!! (именно три восклицательных знака, т.к. всё было очень плохо :) )
P.S. Или может я Вас не понял? Я имел ввиду, что есть подсветка синтаксиса и поиск совпадения по PointCut.
Кстати, у меня на этом коде FindBugs не нашёл ошибку. В консоль выводилось, что Вы указали (т.е.фактически ошибка была), но FindBugs не показал её.
P.S. Проверял в IDEA с плагином FindBugs. При проверке другого кода ошибки находятся, т.е. FindBugs работает.
Да, насколько я понял, это получилось так, потому что там вручную изменил кеш Integer.
Ой. Точно! :) Не стал использовать source теги, а оказалось, что зря. Там ещё были Generic:

 class MyException<E> extends Exception{}


 class MyException<E> extends Date{}
На счёт generic в блоке throws странно. Почему вообще это разрашили делать? Ведь generic в Exception нельзя применять, а в throws почему то можно?!
P.S. Нельзя, означает, что class MyException extends Exception{} не скомпилируется, а, например, class MyException extends Date{} скомпилируется.
Вы знаете, по моему это то что нужно! А ещё какие-нибудь аналоги есть? Т.е. Вы ещё что-нибудь подобное пробовали?
Как бы банально не звучало, но — Спасибо за статью! У нас как раз в пятницу WebLogic падал с OOM. Так что статья вовремя — завтра будем её использовать. Кстати, по повду jmap, для дампа целевое приложение не нужно запускать с какими то параметрами? Т.е. вот работает приложение в проде без опций heap dump и можно ли с помощью jmap сделать дамп памяти это приложения?
Да, я как раз подобное и видел. Смущает одно — он очень не стойкий. Хотелось бы что то вроде ABS но только с возможностью ручного формирования :)
А если нужна всего одна деталь, можно ли обойтись вообще без формы из силикона? Нет ли такого «пластилина» что бы при застывании был твёрдый как пластик и его можно было бы долго использовать? Или может есть какие-нибудь другие способы быстрого прототипирование, например, корпуса устройства?
И ещё, можно ли делать шаблон и пластилина? Не развалится ли он в силиконе?
Не могли бы Вы скинуть ссылку на плату в AliExpress? А то там много похожих плат и, пишут, не все платы перепрошиваются.
И ещё вопрос про готовые устройства. На AliExpress куча подобных устройств: ru.aliexpress.com/wholesale?&SearchText=transistor+tester А кто нибудь пользовался ими? Какие лучше?
А кто нибудь читал доку, которая в статье упоминалась? (Детальная техническая документация на русском языке доступна здесь. В каталоге нужно выбрать файл ttester.pdf) Там пишут, что китайская реализация не очень — большая погрешность измерения, насколько я понял.
Нубовский вопрос: А на Arduino Uno заработает? Вроде прошивка есть на ATmega328.
Вчера подключил FindBugs у нас на проекте и обнаружил несколько одинаковых ошибок с тернарным оператором.
Есть два метода:
  static void m(int i) {}
  static void m(Integer i) {}

Есть код, который вызывает один из этих методов:
 m(s != null ? Integer.parseInt(s) : (Integer) null);

, где s — типа String.
И суть ошибки — вызывается метод с примитивом (int) и если s == null, то будет вызван m(((Integer)null).intValue()); что приведёт к NPE.
Если не кастить null к Integer, или вместо Integer.parseInt(s) использовать Integer.valueOf(s) то будет вызываться метод m(Integer). Но из за стечения обстоятельств , говнокода и кривых рук будет вызываться метод m(int) и в случае s == null будет NPE
Пробовал в Gradle настроить FindBugs 3.0.1 — не найден в maven репозиториях. Вот только 3.0.0 есть: mvnrepository.com/artifact/com.google.code.findbugs/findbugs
Спасибо за предложение! Но боюсь от меня фидбек не очень будет — мне нужен софт, чтобы просто стоял на компе и при случае можно было посмотреть снимки. Не на постоянной основе :)
Про PACS сервер читал в Вашей прошлой статье. Вы же о нём сейчас говорите?
А про «проект по инвазивному картированию сердца для лечения всякого рода аритмий» интересно было бы почитать! Хотя бы в общем виде — как писали, как тестировали. Всё таки разработка очень отличается от большинства софта — цена ошибки очень высока. На Хабре как то статья была про разработку для Боинга — интересно было читать, как разрабатывают такие проекты, когда нельзя просто на компе запустить и проверить, как оно работает.

Information

Rating
3,490-th
Date of birth
Registered
Activity