Как стать автором
Обновить
-23
0

Инженер-программист

Отправить сообщение

PostgreSQL Antipatterns: Индиана Джонс и максимальное значение ключа, или В поисках «последних» записей

Время на прочтение2 мин
Количество просмотров9.9K

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

Кажется, что тут и споткнуться-то негде в реализации - но все оказывается совсем не тривиально.

Читать далее
Всего голосов 24: ↑22 и ↓2+20
Комментарии42

Prostore — простой Event sourcing + CQRS фреймворк

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров9.4K

На данный момент на рынке мало Event sourcing + CQRS фреймворков. А те, что есть, непопулярны и имеют слабую поддержку, поэтому многие создают свои in-house решения. В этой статье расскажу о выполненном командой «Programming Store» проекте Prostore, который может послужить примером при создании вашего собственного решения.

Читать далее
Всего голосов 16: ↑14 и ↓2+12
Комментарии16

Разбираемся с Machine Learning в Elastic Stack (он же Elasticsearch, он же ELK)

Время на прочтение7 мин
Количество просмотров23K


Напомним, что в основе Elastic Stack лежат нереляционная база данных Elasticsearch, веб-интерфейс Kibana и сборщики-обработчики данных (самый известный Logstash, различные Beats, APM и другие). Одно из приятных дополнений всего перечисленного стека продуктов — анализ данных при помощи алгоритмов машинного обучения. В статье мы разбираемся что из себя представляют эти алгоритмы. Просим под кат.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии13

Централизованное логирование в Docker с применением ELK Stack

Время на прочтение10 мин
Количество просмотров32K

По мере роста вашей инфраструктуры наличие роботов и надежная централизованная система логирования становится критически важными составляющими. Централизация логирования становится ключевым аспектом множества IT-задач и дает вам хороший обзор всей вашей системы.

Лучшее решение — агрегировать логи с метаданными из всех контейнеров. Это предоставит вам лучшие варианты отслеживания и возможность получить хорошую поддержку от сообщества. Здесь на сцену выходит ELK Stack. ELK, также известный как Elastic stack, представляет собой комбинацию современных инструментов с открытым исходным кодом, таких как ElasticSearch, Logstash и Kibana. Это полное решение для сквозного анализа журналов, которое вы можете использовать в своей системе.

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

В этом руководстве вы узнаете, как развернуть ELK и наладить агрегирование контейнерных логов. Мы собираемся объединить ELK с Filebeat, чтобы агрегировать контейнерные логи. Для этого мы собираемся создать собственный образ Docker.

Читать далее
Всего голосов 17: ↑14 и ↓3+11
Комментарии4

Прокачка @PreAuthorize в Spring Security произвольными типами и простым инспектируемым DSL

Время на прочтение18 мин
Количество просмотров39K

Spring Security — must-have компонент в Spring-приложениях, так как он отвечает за аутентификацию пользователя, а также за авторизацию тех или иных его действий в системе. Одним из методов авторизации в Spring Security является использование аннотации @PreAuthorize, в которой с помощью выражений можно наглядно описать правила, следуя которым модуль авторизации решает, разрешить ли проведение операции или запретить.


В моём REST-сервисе возникла необходимость предоставить точку доступа к описанию правил авторизации для всех методов контроллеров сервиса. Причём, по возможности, избежать раскрытия специфики именно SpEL-выражений (т.е., вместо permitAll нужно что-то вроде anybody, а principal избегать вовсе как избыточное выражение), но возвращать свои выражения, с которыми уже можно делать что угодно.


Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии3

Археология Git: назад и вперед во времени

Время на прочтение6 мин
Количество просмотров4.4K

При работе с большой кодовой базой довольно естественно не помнить каждую подсистему или вариант реализации. Особенно если вы новичок в кодовой базе, или вы сосредоточились на определенной области кодовой базы.

Большинство людей начнут с использования «git blame» (или соответствующей функциональности в своей среде IDE/редакторе). Но в большинстве нетривиальных проектов вы обычно заканчиваете коммитом рефакторинга, переименованием или тривиальным исправлением проекта, например переключением на другую библиотеку assertion. При первом взгляде, мы видим только самые последние изменения, но не самые важные.

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

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Кастомная (де) сериализация даты и времени в Spring

Время на прочтение4 мин
Количество просмотров7.4K

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

1)      При получении запроса привести дату к серверному времени и сохранить в базу данных в таком виде

2)      В ответ возвращать дату и время с указанием серверного часового пояса

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

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии6

Контролируем и сохраняем сессии, используя Spring

Время на прочтение9 мин
Количество просмотров29K
Привет, Хабр.

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

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

  • закрыть прошлую сессию и открыть новую
  • не закрывать старую сессию и не открывать новую сессию

Так же при закрытие старой сессии необходимо отправить уведомление администратору об этом событие.

И нужно учесть 2 возможности инвалидации сессии:

  • разлогин пользователя (т.е. нажатие пользователем кнопки logout)
  • автоматический разлогин после 30 минут бездействия
Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии10

PostgreSQL Antipatterns: обновляем большую таблицу под нагрузкой

Время на прочтение6 мин
Количество просмотров27K
Как стоит поступить (а как точно не надо), если в «многомиллионной» активно используемой таблице PostgreSQL нужно обновить большое количество записей — проинициализировать значение нового поля или скорректировать ошибки в существующих записях? А при этом сохранить свое время и не потерять деньги компании из-за простоя.


Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии8

TDD приложений на Spring Boot: работа с базой данных

Время на прочтение14 мин
Количество просмотров31K

Вторая статья из цикла "Test-Driven Development приложений на Spring Boot" и в этот раз я буду говорить про тестирование доступа к базе данных, важного аспекта интеграционного тестирования. Я расскажу как через тесты определять интерфейс будущего сервиса для доступа к данным, как использовать встраиваемые in-memory базы для тестирования, работать с транзакциями и загружать тестовые данные в базу.

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии10

Как построить пирамиду в багажнике или Test-Driven Development приложений на Spring Boot

Время на прочтение9 мин
Количество просмотров9.6K

Spring Framework часто приводят как пример Cloud Native фреймворка, созданного для работы в облаке, разработки Twelve-Factor приложений, микросервисов, и одного из самых стабильных, но в то же время инновационных продуктов. Но в этой статье я бы хотел остановиться на еще одной сильной стороне Spring: это его поддержка разработки через тестирование (TDD-руемость?). Не смотря на TDD-руемость, я часто замечал, что в проектах на Spring либо игнорируются некоторые best practices для тестирования, либо изобретаются свои велосипеды, либо вообще не пишутся тесты потому что они "медленные" или "ненадежные". И вот именно о том, как писать быстрые и надежные тесты для приложений на Spring Framework и вести разработку через тестирование я и расскажу. Так что если вы используете Spring (или хотите начать), понимаете что такое вообще тесты (или хотите понять), или думаете что contextLoads это и есть необходимый и достаточный уровень интеграционного тестирования — то будет интересно!

Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии4

Локальное окружение для разработки Spring Boot веб-сервисов с Docker Compose, Consul, Make

Время на прочтение10 мин
Количество просмотров21K

В статье представлен пример локального окружения, построенного с использованием технологий: Docker Compose, Consul, Make — для разработки Spring Boot веб-сервисов.


Демонстрационное приложение будет по ссылке на страницу возвращать ссылку на наибольшее по размеру изображение с указанной страницы. Изображения будут извлекаться через Browserless, а PostgreSQL будет хранилищем результатов.

Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии5

Mesos. Container Cluster Management System

Время на прочтение25 мин
Количество просмотров59K


Apache Mesos — это централизованная отказоустойчивая система управления кластером. Она разработана для распределенных компьютерных сред c целью обеспечения изоляции ресурсов и удобного управления кластерами подчиненных узлов (mesos slaves). Это новый эффективный способ управления серверной инфраструктурой, но и, как любое техническое решение, не "серебряная пуля".

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

Mesos распределяет ресурсы CPU и памяти в кластере для задач в похожей манере, как ядро ​​Linux выделяет ресурсы железа между локальными процессами.

Представим себе, что есть необходимость выполнить различные типы задач. Для этого можно выделить отдельные виртуальные машины (отдельный кластер) для каждого типа. Эти виртуальные машины, вероятно, не будут полностью загруженными и некоторое время будут простаивать, то есть не будут работать с максимальной эффективностью. Если же все виртуальные машины для всех задач объединить в единый кластер, мы можем повысить эффективность использования ресурсов и параллельно с тем повысить скорость их выполнения (в случае если задачи краткосрочные или виртуальные машины не загружены полностью все время). Следующий рисунок, надеюсь, прояснит сказанное:



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

Пройдемся по компонентам Mesos-кластера.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии32

Аутентификация с использованием Spring Security и JWT-токенов

Время на прочтение10 мин
Количество просмотров152K
Всем привет! Хабр жив! Данный пост вряд ли соберёт кучу просмотров и комментов, но, надеюсь, немного поможет здоровью хабра.

В данной статье рассмотрим принцип аутентификации в веб-приложениях на платформе Spring с использованием относительно нового механизма аутентификации — JSON Web Token (JWT). Этот механизм уже обкатан и реализован для многих языков программирования.

Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии11

Кеширование данных — Java Spring

Время на прочтение6 мин
Количество просмотров41K
Многократно вычитывая одни и те же данные, встает вопрос оптимизации, данные не меняются или редко меняются, это различные справочники и др. информация, т.е. функция получения данных по ключу — детерминирована. Тут наверно все понимают — нужен Кеш! Зачем всякий раз повторно выполнять поиск данных или вычисление?

Так вот здесь я покажу как делать кеш в Java Spring и поскольку это тесно связанно скорее всего с Базой данных, то и как сделать это в СУБД на примере одной конкретной.

Содержание

  • Кеш в Spring
  • Кеш в Oracle PL-SQL функции
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии5

Перегрузка, которая запрещена, или bridge-методы в Java

Время на прочтение7 мин
Количество просмотров16K

В большинстве моих собеседований на технические позиции есть задача, в которой кандидату необходимо реализовать 2 очень похожих интерфейса в одном классе:


Реализуйте оба интерфейса одним классом, если это возможно. Объясните, почему это возможно или нет.


interface WithPrimitiveInt {
  void m(int i);
}

interface WithInteger {
  void m(Integer i);
}

От переводчика: Эта статья не призывает вас задавать такие же вопросы на интервью. Но если вы хотите быть во всеоружии, когда этот вопрос зададут вам, то добро пожаловать под кат.

Всего голосов 22: ↑21 и ↓1+20
Комментарии16

PHP Excel Templator (PHP-шаблонизатор для Excel) или как мы до этого писали хардкод для Excel

Время на прочтение2 мин
Количество просмотров14K
image

Думаю, что по скриншоту уже понятно, о чём идёт речь. Но, дабы не дублировать текст, который уже описан в документации, я расскажу только о важных моментах.
Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии14

Открываем файлы формата Open XML Excel в JavaScript

Время на прочтение4 мин
Количество просмотров20K
Для загрузки информации о торговых точках в наш логистический SaaS-сервис «Муравьиная логистика» из Excel я решил использовать web-браузер. Обычно проще загрузить файл на сервер и с помощью любой библиотеки залить в БД. Но мне было интересно загрузить его построчно для контроля целостности каждой строки на клиенте, ну и, конечно, опробовать так всеми рекламируемое HTML5 FileAPI и Drag and Drop.
Читать дальше →
Всего голосов 6: ↑5 и ↓1+4
Комментарии2

Ищем коды уровней в Prehistorik-2

Время на прочтение12 мин
Количество просмотров37K

В игре Prehistorik 2 не предусмотрены сейвы, но на каждом уровне есть (болтается в воздухе в некотором месте уровня) код уровня. Есть два режима прохождения, Beginner и Expert, код также определяет режим. При старте игры можно начать с первого уровня, а можно ввести код и попасть сразу на соответствующий уровень. На одном и том же компьютере с неизменным окружением коды не меняются, но на разных компьютерах коды, вообще говоря, разные, так что коды, найденные при прохождении и тщательно выписанные на бумажку, станут совершенно бесполезны в другом окружении. Поэтому вместо бумажки лучше иметь программу, которая пишет коды для конкретного окружения. Готовый результат: genpass.com, представляет из себя DOS-программу, которая должна запускаться в том же окружении, что и игра. Альтернативный вариант попасть на нужный уровень из экрана ввода кода: ввести три кода ADDE C0DE F00D либо DEAD C0DE F00D, каждый из трёх кодов сам по себе неверен, но при вводе их в таком порядке четвёртый код — номер уровня от 1 до 10, плюс 10 для режима Expert, приводит сразу на запрошенный уровень.

Под катом — процесс исследования. Требуется знание ассемблера x86 хотя бы на уровне «читаю со словарём».

Читать дальше →
Всего голосов 92: ↑87 и ↓5+82
Комментарии22

Проверка данных — Java & Spring Validation

Время на прочтение14 мин
Количество просмотров123K
Проверка данных класса (bean) в java тема не новая, но актуальная и здесь я объединю различные аспекты: валидацию данных в рамках JSR-303, покажу как это сделать чисто в Java и с использованием Spring, как делать в стандартном приложении и в Web.

Содержание: Валидация данных (JSR-303) в

  • стандартном Java приложении
  • c использованием Spring
  • объединение Java + Spring
  • Spring MVC
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии2

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность