Подбор окончания в соответствии с количеством

Шлифуя очередную программу и вкладывая в нее души, хочется выводить не: «1 карточек», «2 карточек» и «5 карточек», а «1 карточка», «2 карточки» и 5 «карточек». Т.е. к слову, связанному с целым количественным числительным хочется подобрать правильное окончание. Можно заменить, что для целых количественных числительных максимально можно выделить три различных окончания. Эти рассуждения привели меня
Читать далее…

Парсинг DN (Distinguished Names)

В ЭЦП данные о её владельце и изготовителе хранятся в виде Distinguished Names (DN). Например: CN=БЛОГОВ БЛОГ,SURNAME=БЛОГОВ,SERIALNUMBER=IIN123456789012,C=KZ,L=АСТАНА,S=АСТАНА,G=БЛОГОВИЧ,O=ТОО \»Рога\, копыта 24\\7\»,OU=BIN000111222333 Атрибуты отделяются между собой запятыми, каждый атрибут представляет из себя ключ и значение, разделенные символом равно (=). Так же некоторые символы экранируются, например: \" \, Предлагаю следующую функцию, которая принимает строку в формате DN и
Читать далее…

Интеграция Discourse с Keycloak

Статья подразумевает, что у вас уже установлены и настроены Discourse c Keycloak. Интегрировать Discourse с Keycloak будем через плагин discourse-oauth2-basic. Для этого нужно папку плагина discourse-oauth2-basic перенести в директорию plugins, которая находится в корневой папке Discourse. После запуска Discourse c новым плагином, который автоматически подтянется из директории plugins, в админке появятся новые поля настроек. Их
Читать далее…

Подключение MongoDB(+GridFS) к Play2 (Scala)

В нашем новом проекте в качестве файлового хранилища мы решили использовать GridFS. GridFS эффективен для файлов размером свыше 16 МБ, поэтому мы решили хранить файлы менее 16 МБ в виде байтов в MongoDB. К тому же GridFS — это всего лишь надстройка над MongoDB, и размер документа MongoDB ограничен как раз 16 мегабайтами. Для начала
Читать далее…

Тестовые ссылки с различными файлами

Часто бывает необходимо проверить какой-то функционал по получению файла через web. Мы либо ищем в интернете нужную ссылку, либо размещаем файлы где-то у себя на веб-сервере (который еще нужно поднять :-)). Сегодня пришла идея сделать страницу, на которой будут размешаться ссылки на тестовые файлы, причем файлы будут храниться на этом же домене, поэтому пока работает
Читать далее…

Конвертирование кортежа со списком в JSON (Scala)

Всем привет! Меня перевели на новый проект, решили делать его на Play2(Scala). Я джавист и тяжело с моим багажом перестраиваться, прежние подходы в разработке не работают. Долго бился на конвертированием структуры в виде кортежа со списком (List). В итоге пришел к такому варианту: implicit val questionReads = Json.reads[Question] implicit val questionWrites = Json.writes[Question] implicit val
Читать далее…

Встраивание атрибута Id в тег Body SOAP-запроса

С некоторой версии Java (примерно с 7u25 см. http://stackoverflow.com/questions/17331187/xml-dig-sig-error-after-upgrade-to-java7u25) начались проблемы со встаиванием атрибута Id в тег Body SOAP-запроса. Такое встраивание необходимо с целью подписания запроса ЭЦП. Пока я встретил две ошибки в зависимости каким путем идет встраивание атрибута Id: com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment org.apache.xml.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID … Чтобы решить проблему нужно специальным образом пометить
Читать далее…

Бэкапирование

В прежние времена я часто занимался автоматизацией бэкапирования, т.е. создания резервной копии баз данных, файлов и т.д.. Сейчас таких задач у меня не возникает, но все же решил написать о том, как писать такие скрипты. Перечислим базовые шаги алгоритма скрипта: Выбрать директорию, где храняться резервные копии Снять резервную копию базы данных Сжать файлы с помощью
Читать далее…

Нахождение медианы в массиве (MySQL)

Нахождение медианы в массиве для MySQL я решил способом ниже. Кто знает более лучшие варианты скидывайте :). Но, желательно, без использования стандартных функций СУБД для нахождения медианы. set @a := 0; set @cnt := (select count(*) from t_table); select (sum(case when num = ceil(@cnt / 2) then c_value else null end) + sum(case when num
Читать далее…

Как искать ошибку в программе?

Список подсказок, как найти ошибку: Проверить, там ли вы ищите/смотрите ошибку. Например, вы могли подключиться не к тому серверу или базе. Вспомнить и посмотреть, что недавно менялось. Попросить коллегу посмотреть на проблему незамыленным взглядом Отстраниться от проблемы. Например, переключиться на другую сферу деятельности, проблему или просто отдохнуть Внимательно посмотреть сообщение об ошибке, может там уже
Читать далее…