Что нам стоит биллинг построить
RightInNow
norguhtar
( You are about to view content that may only be appropriate for adults. )

Spring Framework и использование JAXB аннотаций в jackson 2
RightInNow
norguhtar
Понадобилось тут мне получить json из веб приложения на spring. Сделал как обычно через @ResponseBody, маршаллер то подключен по умолчанию. И тут засада. Jackson ВНЕЗАПНО не учитывает аннотации JAXB. В итоге все зацикливается при сериализации. Ну где наша не пропадала ищем в интернетах. В итоге получаем вот такой вот xml

<bean id="jaxbAnnIntrospector" class="com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector"/>

<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="annotationIntrospector" ref="jaxbAnnIntrospector"/>
</bean>
<!-- Configures support for @Controllers -->
<mvc:annotation-driven conversion-service="conversionService">
 <mvc:message-converters>
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
      <property name="objectMapper" ref="jacksonObjectMapper"/>
      </bean>
  </mvc:message-converters>
</mvc:annotation-driven>

Фактически меняется инспектор аннотаций на совместимый с JAXB.
Tags: ,

Новое слово в вебе! Синхронный интерфейс!
RightInNow
norguhtar
Меня продолжает поражать как некоторые люди умудряются создавать себе и другим проблемы на ровном месте. И так у нас веб и интерфейс для генерации отчетов. В этом самом отчете после нажатия кнопки добавляется в сессию (или в куки чесно говоря не смотрел) специальный флаг "мы важные и генерим отчет". Дальше следите за руками. При попытке зайти в этот интерфейс из другой вкладки или окна получаем блокировку в виде бесконечного открытия страницы. Теперь дальше самое веселое, если закрыть эту страницу, то процесс не стороне сервера не завершится. Так-как он ждет пока не завершится генерация отчета и будет снят флажок, ну или пока по таймуту не отвалится. Учитывая что при этом отчетный движок работает весьма не торопливо, получаем комическую ситуацию когда сервер просто перестает отвечать, так-как свободных процессов у него банально нет.

Разработчики модифицировали, модифицировали базу данных и на модифицировали.
RightInNow
norguhtar
Есть тут у меня база данных с одной стороны долгоживущая с другой стороны в которую периодически добавляются изменения. А изменения разные бывают, то мелкие, то большие. Плюс еще тестовая база. И к определенному моменту вести что там и как вручную начало как-то утомлять. Решил посмотреть что же сейчас есть модного и хипстерского для версионности баз данных. В итоге поисков выловилось два решения общего характера liquibase и flyway. Решают они одну и ту же задачу. Но есть несколько но.

В Liquibase при разработке заложено, что мы умеем работать из коробки сразу с несколькими СУБД. Как итог более абстрактное представление миграций, позволяющие генерировать sql под любую поддерживаемую СУБД, но с рядом ограничений. Если требуется SQL или хранимые процедуры или триггеры, то все сразу пишем специфичный для каждой СУБД код. В результате получаем более громоздкую схему изменений и что еще более интересно, полное не умение создавать схему. Точнее схему создать можно, но при помощи указания тут будет sql и дальше вписываем команду. Но при этом поддерживается откат изменений, предлагается как с этим долго жить. Есть развитые инструментальные средства и т.п.

В FlyWay разработчики почесали репу и решили, что поддерживать генерацию в какую угодно СУБД конечно неплохо, но фактически довольно редко требуется. И если уж кому надо то пусть ведет две разных ветки. Что с моей точки зрения разумно. По этой причине формат миграций sql. Что несколько проще но не переносимо. Так же господа заметив что в целом сделать всегда работающий rollback не возможно, сказали делайте ка вы лучше бекапы перед ней. На выходе получается довольно легковесный инструмент по управлению миграциями в БД. И пока я склоняюсь к нему.

Ну а теперь вопрос. Кто какие еще знает средства миграции и может рассказать про упомянутые? Новые предлагаемые же должны подходить по следующим условиям:

Быть независимы от какого либо фреймворка (ну разве что микро можно исключить).
Включать в себя CLI для запуска миграции.
По возможности средства интеграции языками программирования. К примеру для вызова миграций из кода.

Бинарные логи + телефонисты = зло
RightInNow
norguhtar
Пишу тут парсер для бинарного лога АТС IskraTel SI2000. Формат лога делали весьма одаренные люди. Мало того что требуется битовая арифметика, так-как к примеру длина кода зоны и длина номера хранятся в одном байте, но длина зоны это первые три бита, а длина номера это следующие 7, так они еще используют BCD для записи номеров и делают выравнивание по байтам у этих BCD. Но самый ад это "переменная часть записи". Считываем ее тип и... дальше в каждом типе кто в лес кто по дрова. То какой длины будет эта запись зависит исключительно от типа. Типа записей 29 штук. Отдельного упоминания стоит
запись времени. Мало того что для записи времени используются аж 7 байтов. B выглядят они так
ПозицияЗначениеПараметр
20 - 99год
31 - 12месяц
41 -31день
50 - 23часы
60 - 59минуты
70 - 59секунды
80 - 9100 мс


А да и как же можно забыть про контрольную сумму:

Поле Контрольная сумма содержит контрольную сумму, наличие которой позволяет проверять
правильность передачи записи. Она представляет собой последние два байта последовательной
суммы байтов, составляющих данную запись. Байты, содержащие собственно контрольную сумму
не учитываются при суммировании.


CRC? Нет не слышал

Особенности местячкового округления
RightInNow
norguhtar
Как же я люблю нежной любовью сторонние конторы поставляющие софт. Это все же феерично, когда сразу две сторонние конторы делают софт который должен взаимодействовать в рамках компании. В результате может произойти неизъяснимо прекрасное. К примеру потеря 300 тысяч денег при экспорте данных из одной системы в другую. А всего-то одни вместо числа с фиксированной запятой забубенили число с плавающей. А с другой стороны ПО всего-то взяло и молча отбросило странные символы которым не место в числе с фиксированной запятой. А какой эффект!

Про внедрение и миграции ПО
RightInNow
norguhtar
В свете периодических миграций, внедрений и прочего подумалось, что мультфильм "Крылья, ноги и хвосты" Как нельзя лучше характеризует эти самые процессы и да "Крылья, ноги, самое главное хвост!" (c)

Штрих-коды в word
RightInNow
norguhtar
Решил тут я посмотреть, а как можно в word вставить штрих-код? Вдруг натыкаюсь на такое вот шикарное решение Штрих-код шрифты. Берешь ставишь шрифты, пишешь слово, а потом опа-опа меняешь шрифт. В результате получаешь корректный масштабируемый штрих-код. Такое одновременно изящное и ебанутое решение я встречаю в первый раз.


Сниффер-граббер
RightInNow
norguhtar
http://justniffer.sourceforge.net/

Весьма годный сниффер-граббер. Я к примеру использовал для подсмотреть SOAP и его отпарсить. Позволяет использовать внешние скрипты фильтры. 

Net::Radius::Client или что бывает, если люди не дочитали RFC.
RightInNow
norguhtar
Убил сегодня полдня на разбирательства почему же у меня не работает CoA совместно с Net::Radius::Client. Пришлось спуститься аж до tcpdump и чтения RFC на тему как производится отправка Attribute-Value пар в пакете Radius. Выяснилось, что все довольно просто. Автор библиотеки не отправлял одинаковые атрибуты с разными значениями в одном пакете. Причем про такую фичу знал автор Net::Radius::Packet так что весь патч свелся к добавлению цикла. А то без него отправлялся только первый элемент из массива. После добавления цикла CoA заработало как надо.

Патч  берем тут https://rt.cpan.org/Public/Bug/Display.html?id=80447


Tags: ,

?

Log in

No account? Create an account