Pull to refresh
10
0
Михаил Берёзин @mehanizm

User

Send message

Ты пожалеешь, но будет поздно: как я участвовала в единственном в России экстремальном триатлоне

Level of difficultyEasy
Reading time13 min
Views16K

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

Плачу. Просто рыдаю. Это не слезы радости или боли, нет, просто выход эмоций после «терпёжки» — двух часов в холодной воде. Вижу свои руки, кто-то мажет их вонючей мазью красного цвета, и они начинают гореть. Кричу: «У меня руки в крови!». И смех, и слёзы. 

Это только один из эмоциональных моментов многочасового экстремального триатлона в горах Алтая. Серия экстремальных триатлонов куда менее популярна в спортивном сообществе, чем классические старты Ironstar и Ironman. Расскажу и покажу, как это было. 

Погнали!
Total votes 39: ↑38 and ↓1+37
Comments32

Что у CDI под капотом? Расскажем на конференции по клиентским данным

Reading time2 min
Views908

Привет, Хабр! Я Никита Назаров, технический директор HFLabs. 4 апреля мы проводим конференцию CDI Tech Conf. На ней поговорим о том, как устроены энтерпрайз-приложения для работы с клиентскими данными и что нужно учесть при их интеграции с другими системами. Расскажем, почему нашу поддержку обожают заказчики и как наш CDI (Customer Data Integration) переехал с Oracle на PostgreSQL.

Узнать больше про конференцию
Total votes 4: ↑4 and ↓0+4
Comments0

«Кто согласовал такую фигню?» — будни переговорщиков из IT

Reading time8 min
Views14K

Привет, Хабр! Я работаю исполнительным директором в HFLabs, а до того, как им стать, больше восьми лет занимался продажами в B2B. Моя первая сделка началась с того, что меня позвали на переговоры с вице-президентом банка. Я подумал: не с моей же рожей к вице-президентам ходить. И позвал взрослых — генерального. В день встречи утром он мне позвонил и сказал, что я уже готов к таким встречам и могу смело идти один. Было страшно.

Так вот, лето, жара, погода изматывающая. Приходит вице-президент и начинает разговор примерно так: «Вот видите во дворе Audi стоят? Я их все купил со скидкой 60%. Так что и вам придется нас услышать». Но вся штука была в том, что я уже успел по этому проекту дать скидку 30%. И это был хороший жизненный урок: скидку я дал вообще не тому человеку — он не был тем самым ЛПР. Я не разобрался в процессе и даже не спросил, кто и как будет решать по сделке. Пришлось в итоге каждый пункт коммерческого предложения объяснять, каждую строчку сметы. Например, написано у нас тестирование 2 дня. А клиент мне в ответ — зачем два, давайте один день будете тестировать!..

Дальше расскажу, какие еще истории у нас случались на переговорах и вокруг них. 

Читать далее
Total votes 49: ↑48 and ↓1+47
Comments26

Погружение в IT Узбекистана: о чём говорили и что показывали на форуме в Самарканде

Reading time5 min
Views3.7K

У Узбекистана есть амбиции стать центром развития всего среднеазиатского региона. У страны многое для этого есть: историческое наследие, население в 35 миллионов, неплохое географическое положение. На этом фоне IT и цифровизация в целом — один из официальных приоритетов. Тем интересней было оказаться на недельном айтишном форуме в Самарканде и своими глазами посмотреть, что к чему. 

Об этом и расскажу в посте. Может быть интересно тем, кто еще не уехал присматривается к релокации в Узбекистан или просто хочет узнать больше об этой стране. Все впечатления в тексте личные.  

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments18

Как небольшой IT-компании запустить обучающий курс: рассказываем о своём опыте

Reading time7 min
Views1.8K

Один из мифов по поводу MDM-систем — «ну что там делать-то, данные взяли, записи объединили, вот тебе и готово. А вы, мол, за работу миллионы хотите. Мы сами всё за полгода сделаем». 

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

Читать далее
Total votes 16: ↑14 and ↓2+12
Comments2

Как собрать образ Oracle DB для Testcontainers

Reading time12 min
Views14K

Код должен тестироваться на той СУБД, с которой он будет работать. Testcontainers — это такая библиотека, которая позволяет использовать в юнит тестах практически любую СУБД с той же лёгкостью, что embedded базы данных типа HSQLDB или H2. Был бы только Docker образ



Именно сборке удобного для использования с Testcontainers докер образа посвящена эта статья. У меня при попытке его сделать возникли проблемы, и тут я делюсь своим решением.
Собирать буду образ для Oracle 11, потому он небольшого размера и мне версии 11 хватает. С другими версиями подход примерно тот же.


Для того, чтобы было понятно, как использовать образ, тут также будет код на Java, который демонстрирует применение образа для тестирования Spring Boot приложений. Способ подключения к testcontainers я привёл, наверное, не самый лучший. Но во-первых он демонстрирует как использовать настройки, заданные при создании образа. Во-вторых он простой. И в-третьих он почти не завязан на Spring, его можно воткнуть даже в джава код, в котором нет ничего, кроме public static void main.


Предполагается, что читатель обладает поверхностным знакомством с Docker и Testcontaners, а также хорошо знает Java. Для сборки нужно использовать linux, если собираете под Windows, нужно будет применить msys2 или что-то в этом духе.


Демонстрационный код залит на гитхаб вот сюда https://github.com/poxu/testcontainers-spring-demo Поправленные скрипты для сборки образа можно посмотреть в моём форке Оракловских инструкций https://github.com/poxu/docker-images/tree/master/OracleDatabase/SingleInstance

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments6

Go: десериализация JSON с неправильной типизацией, или как обходить ошибки разработчиков API

Reading time9 min
Views55K
image

Недавно мне довелось разрабатывать на Go http-клиент для сервиса, предоставляющего REST API с json-ом в роли формата кодирования. Стандартная задача, но в ходе работы мне пришлось столкнуться с нестандартной проблемой. Рассказываю в чем суть.

Как известно, формат json имеет типы данных. Четыре примитивных: строка, число, логический, null; и два структурных типа: объект и массив. В данном случае нас интересуют примитивные типы. Вот пример json кода с четырьмя полями разных типов:

{
	"name":"qwerty",
	"price":258.25,
	"active":true,
	"description":null,
}

Как видно в примере, строковое значение заключается в кавычки. Числовое — не имеет кавычек. Логический тип может иметь только одно из двух значений: true или false (без кавычек). И тип null соответственно имеет значение null (также без кавычек).

А теперь собственно сама проблема. В какой-то момент, при детальном рассмотрении получаемого от стороннего сервиса json-кода, я обнаружил, что одно из полей (назовем его price) помимо числового значения периодически имеет строковое значение (число в кавычках). Т. е. один и тот же запрос с разными параметрами может вернуть число в виде числа, а может вернуть это же число в виде строки. Ума не приложу, как на том конце организован код, возвращающий такие результаты, но видимо, это связано с тем, что сервис сам является агрегатором и тянет данные из разных источников, а разработчики не привели json ответа сервера к единому формату. Тем не менее, надо работать с тем что есть.

Но далее меня ждало еще большее удивление. Логическое поле (назовем его active), помимо значений true и false, возвращало строковые значения «true», «false», и даже числовые 1 и 0 (истина и ложь соответственно).
Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments30

Юлия → Iuliia. Всё о транслитерации

Reading time8 min
Views62K

Транслитерация


Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.


Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).


И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.

Читать дальше →
Total votes 193: ↑192 and ↓1+191
Comments543

Полный набор gRPC, RESTful JSON API, WS и Swagger из одного proto файла. От введения до нюансов и тонкостей grpc-gateway

Reading time9 min
Views33K

В этой статье я опишу процесс создания сервера с gRPC и RESTful JSON API одновременно и Swagger документацию к нему.


Эта статья — продолжение разбора различных способов реализаций API-сервера на Golang с автогенерацией кода и документации. Там я обещал более подробно остановиться на этом подходе.


grpc-gateway — это плагин protoc. Он читает определение сервиса gRPC и генерирует обратный прокси-сервер, который переводит RESTful JSON API в gRPC. Этот сервер создается в соответствии с пользовательскими параметрами в вашем определении gRPC.


Это выглядит вот так:


Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments16

Веб-приложение на Kotlin + Spring Boot + Vue.js

Reading time40 min
Views46K
Добрый день, дорогие обитатели Хабра!

Не так давно мне представилась возможность реализовать небольшой проект без особых требований по технической части. То есть, я был волен выбирать стек технологий на своё усмотрение. Потому не преминул возможностью как следует «пощупать» модные, молодёжные многообещающие, но малознакомые мне на практике Kotlin и Vue.js, добавив туда уже знакомый Spring Boot и примерив всё это на незамысловатое веб-приложение.
Посмотреть, что из этого вышло
Total votes 19: ↑18 and ↓1+17
Comments21

Мой путь от Python к Go — делюсь советами и ресурсами

Reading time5 min
Views39K


От переводчика: перевели для вас статью Илада Леева о переходе с Python на Go. Статья будет полезна не только начинающим программистам, но и всем, кто так либо иначе интересуется Go.

Мне нравится Python. Этот язык был моим фаворитом последние пять лет. Он дружелюбный, эффективный, и его легко выучить. Используется практически для всего: от создания простых скриптов и веб-разработки до визуализации данных и машинного обучения

Постепенное «созревание» Go, обширное комьюнити и тот факт, что все больше компаний принимают этот язык на вооружение после успешных тестов, заставили меня обратить на него внимание и углубиться в литературу. Но этот пост не о том, что лучше — Python или Go: сравнений в сети огромное количество. По моему мнению, все зависит от области применения. Я собираюсь рассказать о том, почему выбрал Go, дав несколько советов и ссылок на полезные ресурсы для всех интересующихся темой.
Читать дальше →
Total votes 51: ↑47 and ↓4+43
Comments30

Лучшие доклады JPoint 2018: Java/JVM и её перформанс, Kotlin, Spring, Docker

Reading time11 min
Views19K

Мы уже выложили на YouTube видеозаписи докладов JPoint 2018 и специально для хаба Java на Хабре сделали традиционную подборку самых лучших из них по мнению посетителей конференции.


Как обычно, наверху «младшие» доклады, в конце — с самым высоким рейтингом. Конечно, это не значит, что один доклад намного хуже другого: если изменить методику расчета, места могут легко поменяться. В реальности, мы её и изменили, теперь используется «soft quorum» вариант рейтинга, учитывающий количество присутствовавших на докладе участников. Этот подход имеет свои минусы (например, на кейноут приходит больше людей, чем на обычный доклад, просто потому что у аудитории нет выбора), но в целом даёт более качественную картину произошедшего.


Под катом — и видеозаписи лучших докладов, и ссылки на их презентации, и короткие описания, и ссылка на полный плейлист.


Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments2

Микросервисы на Go с помощью Go kit: Введение

Reading time12 min
Views55K

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

Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments7

Information

Rating
Does not participate
Location
Россия
Works in
Registered
Activity