Pull to refresh
6
0
Iurii Glushenkov @Arx777

Java Software Engineer

Send message

Неизбежность, незаменимость и туманные перспективы пилотируемой космонавтики

Reading time9 min
Views10K

В течение минувшего лета и даже немного ранее мы с моим замечательным собеседником и старшим товарищем Виктором Викторовичем Доценко (заведующий кафедрой органической химии в КубГУ) немало переписывались о пилотируемой космонавтике, вернее, о её стагнации. Именно благодаря этим беседам и изящным недоспойлерам Виктора я прочитал и осмыслил роман Питера Уоттса «Ложная слепота». Недавно уважаемый @SLY_G, с которым мы также не раз затрагивали эту тему, опубликовал на Хабре перевод «Как учёные снижают пагубное влияние космических полётов на организм человека». Поэтому давайте попробуем рассмотреть эту проблему в более широком контексте. Действительно, будучи голой обезьяной, человек с эволюционной точки зрения совершенно не приспособлен к обитанию в космическом пространстве и, вероятно, на абсолютном большинстве экзопланет.

Читать далее
Total votes 42: ↑40 and ↓2+38
Comments96

Как из метрик Prometheus построить график Latency

Level of difficultyEasy
Reading time6 min
Views14K

Обычно мы подключаем сбор метрик в prometheus к нашим web‑приложениям с помощью каких‑то клиентских библиотек, которые отдают метрики на /metrics. В этой статье я хочу рассказать как визуализировать Latency с помощью Histogram метрики.

Будет полезно тем, кто еще не строил метрики из Prometheus, а так же тем, кто хочет понять как их интерпретировать.

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

Что же такое этот GraphQL?

Reading time9 min
Views685K

Вашему вниманию предлагаю перевод статьи Sacha Greif "Что же такое этот GraphQL?"


Если вы такой же, как и я, вы обычно проходите через три этапа, когда узнаёте о новой технологии:


  • Отрицание: Ещё одна JavaScript библиотека?! Зачем? У меня уже есть jQuery!
  • Интерес: Хм, наверное мне следует взглянуть на эту библиотеку...
  • Паника: Помогите! Мне нужно изучить эту библиотеку прямо сейчас, иначе мои знания устареют!

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


Именно поэтому сейчас самое время узнать, что же такое этот GraphQL, о котором вы повсюду слышите.

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments55

Как достичь максимального счастья в обществе? (теория игр)

Reading time4 min
Views6.5K

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

Возникает логичный вопрос: а можно ли с помощью концепций теории игр смоделировать поведение индивидов в обществе?

Ознакомиться
Total votes 6: ↑6 and ↓0+6
Comments10

Паттерн: Сага

Reading time2 min
Views132K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pattern: Saga" автора Chris Richardson.


Ситуация


Есть приложение, к которому применялся паттерн Database per Service. Теперь у каждого сервиса приложения есть своя собственная база данных. Некоторые бизнес транзакции охватывают сразу несколько сервисов, так что нужен механизм, обеспечивающий согласованность данных между этими сервисами.


Например: давайте представим, что мы разрабатываем интернет магазин, где у клиента есть кредитный лимит. Приложение должно гарантировать, что новый заказ не превышает кредитный лимит клиента. Так как Заказы и Клиенты — различные базы данных, то приложение не может использовать локальные ACID транзакции.


Проблема


Как обеспечить согласованность данных между сервисами?


Решение


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


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


Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments10

Как работает Tor

Reading time9 min
Views178K


Tor – инструмент для анонимности, используемый людьми, стремящимися к приватности и борющимися с цензурой в интернете. Со временем Tor стал весьма и весьма неплохо справляться со своей задачей. Поэтому безопасность, стабильность и скорость этой сети критически важны для людей, рассчитывающих на неё.

Но как Tor работает «под капотом»? В этой статье мы с вами нырнем в структуру и протоколы, используемые в сети, чтобы близко ознакомиться с работой Tor.

Краткая история Tor


Концепция луковичной маршрутизации (позже поясним это название) впервые была предложена в 1995 году. Сначала эти исследования финансировались министерством военно-морских исследований, а затем в 1997 году к проекту подключилась DARPA. С тех пор Tor Project финансировали разные спонсоры, а не так давно проект победил в кампании по сбору пожертвований на reddit.

Код современной версии ПО Tor был открыт в октябре 2003 года, и это было уже 3-е поколение ПО для луковичной маршрутизации. Идея его в том, что мы оборачиваем трафик в зашифрованные слои (как у луковицы), чтобы защитить данные и анонимность отправителя и получателя.

Основы Tor


С историей разобрались – приступим к принципам работы. На самом высоком уровне Tor работает, перекидывая соединение вашего компьютера с целевыми (например, google.com) через несколько компьютеров-посредников, или ретрансляторов (relay).
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments15

Пара слов о Solana и ed25519

Reading time11 min
Views16K

Децентрализованные технологии развиваются всё быстрее, капитализации проектов растут, рынок наполняется новыми вакансиями. Нет сомнений, что эта сфера уже оказывает сильное влияние на мир. Об этом, конечно, можно долго и интересно рассуждать, но моя статья о другом. В фокусе статьи две вполне себе конкретные вещи: on-chain программы Solana и алгоритм цифровой подписи ed25519. К чьему-то сожалению здесь не будет ничего об уязвимостях, потому что мне не хватает компетенций в таких вопросах. Зато я расскажу о программной модели Solana, которая позволяет строить децентрализованные приложения, а также о том, какое место в ней занимает алгоритм цифровой подписи ed25519 и как он математически работает.

Читать далее
Total votes 31: ↑28 and ↓3+25
Comments23

Тесты своей реализации ассоциативных массивов vs хеш-таблица

Reading time7 min
Views4K

Приветствую, читатель. Я являюсь автором языка программирования Shar. В стандартном модуле Shar есть несколько реализаций ассоциативных массивов и при написании данного модуля я подумал: "А какую структуру данных для реализации ассоциативных массивов мне выбрать?". Являясь любителем слушать различные конференции по программированию, я периодически натыкаюсь на выступления людей, принимающих участие в разработке популярных языков программирования. На основании таких выступлений, у меня сложилось субъективное восприятие того, что в большинстве случаев для реализации ассоциативных массивов используется хеш-таблица. Хеш таблица действительно является очень хорошим выбором, но тогда почему я начал задумываться о выборе подходящей структуры данных? А причина в том, что ...

Читать далее
Total votes 7: ↑5 and ↓2+3
Comments5

Измеряем производительность String.format() в Java

Reading time6 min
Views6.1K

Я раньше считал, что JDK в целом хорошо оптимизирована, и если в JDK есть простой способ решения какой-то задачи, то он вполне подойдет для большинства ситуаций и будет работать хорошо.

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

В этом посте рассмотрим один из подобных кейсов: поразительно низкая производительность String.format() при простой конкатенации строк.

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments2

Создание реалистичных тестовых данных для Java приложений

Reading time9 min
Views7.2K

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

В этой статье я покажу вам, как использовать пример генератора данных Vaadin для создания демонстрационных данных для простой базы данных SQL. В статье показано, как создать полное приложение, используя Spring BootJPAProject LombokVaadin и MariaDB.

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

Сколько мне стоило попасть в Гугл и получить повышение, не проработав там ни одного дня

Level of difficultyEasy
Reading time10 min
Views92K

Декабрь 2020, вторая волна Ковида в разгаре. Я ПМ на удаленке в Американской компании. После похорон отца в Тбилиси я находился в прострации, надо было возвращаться в США и как-то менять своё положение, ведь денег, которых я зарабатывал явно не хватало на нормальную жизнь. Сами воспоминания о моём предыдущем поиске вызывали во мне холодный озноб и какой-то внутренний голос тихо шептал «подожди, сейчас пандемия, многие и о таком мечтают, как-нибудь выкрутишься…».

Каждый день я пытался убить в себе ссыкуна, и убеждал что кризис — это всегда новые возможности, но на следующий день, он все равно приползал обратно и скулил знакомые до тошноты фразы.

Я зарегистрировал себе американский номер в Google Voice, чтобы мне начали звонить рекрутеры и начал рассылать резюме. Я разослал около сотни адаптированных резюме и указал в LinkedIn что активно ищу работу. Постепенно на меня начали выходить рекрутеры небольших компаний, но я понимал, что в них условия будут в лучшем случае на 40% лучше текущей и это все равно не решало моих проблем. Хоть и казалось, что на LinkedIn висят тысячи позиций, однако основных работодателей я этим исчерпал. Подавался я в основном на Sr. Project Manager или Engineering Manager позиции.

Осознание пришло, когда я стал читать teamblind.com – лучший ресурс в США по анализу рынка в ИТ и levels.fyi где можно посмотреть реальные зарплаты. Раньше я читал Glassdoor, но информация на нем устарела.

Оказалось, что в финансовой сфере в США, которая мне была интересна - плохие условия и токсичная культура, тоже самое в консалтинге кроме компаний из Big4 или MBB где надо работать долгие часы, но возможно получать 1+ миллион долларов в год дослужившись до партнёра. Самыми интересными оказались компании, которые называют FAANG (Fb, Apple, Amazon, Netflix, Google) иногда в место этого списка используют FAANGMULA справедливо добавляя туда Microsoft, Uber, Lyft и Airbnb – все они технологические, инновационные компании не просто создающие бизнес-продукты, но и технологии, которыми пользуются весь мир. Компании, создающие де-факто стандарты разработки цифровых продуктов, инвестирующие в научные исследования, создающие легендарные условия для своих сотрудников, чем привлекают умнейших инженеров и ученных со всего мира.

Читать далее
Total votes 149: ↑133 and ↓16+117
Comments125

Вилкой в глаз, или ForkJoinPool в Java

Reading time8 min
Views53K

Всем привет. Сегодня я хотел бы поговорить о многопоточности. Вернее, не о многопоточности вообще, а о таком её механизме как ForkJoinPool. Нельзя сказать, что данная технология является новой (она появилась ещё в Java 7), или что в сети нельзя найти материалы по данной теме. Информации хватает. Например, для глубокого погружения могу порекомендовать лекцию блистательного Алексея Шипилёва, которую можно без труда найти на YouTube. Но лично мне большинство этих материалов показались либо слишком сложными, либо наоборот – поверхностными. Так же некоторые из них содержат явные ошибки, что вносит ещё большую неразбериху в данную тему. Судя по тому, что в комментариях под одной из этих статей я нашёл вот такую картинку, подобные проблемы были не только у меня.

Читать далее
Total votes 12: ↑10 and ↓2+8
Comments11

Spring @Transactional — ошибки, которые совершали все

Reading time5 min
Views37K

Вероятно, одной из наиболее часто используемых аннотаций Spring является @Transactional. Несмотря на ее популярность, иногда она используется неправильно, в результате чего получается не совсем то, что задумал инженер-программист.

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

1. Вызовы в пределах одного класса

@Transactional редко подвергается достаточному количеству тестов, и это приводит к тому, что какие-то проблемы не видны на первый взгляд. В результате вы можете столкнуться со следующим кодом:

Аннотация не работает в методе registerAccount:

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

Удобство наблюдения, atop

Reading time3 min
Views107K
Добрый день, сообщество,
На Хабре уже говорилось о всевозможных TOP- овых утилитах, на этот раз, я хочу попробовать рассмотреть поближе утилиту atop. Постараюсь немного сравнить ее с существующими утилитами наблюдения за производительностью и научиться читать выводы данной команды.
У системных администраторов задача наблюдения за производительностью встает чуть ли не каждый день, и конечно же хотелось бы все это сделать в рамках одной утилиты и без особых танцев с бубном, как мне кажется удобнее всего в таком случае использовать команду atop.
Читать дальше →
Total votes 47: ↑43 and ↓4+39
Comments18

Создаём REST-сервис на Rust. Часть 4: переходим к REST API

Reading time9 min
Views26K
В прошлый раз мы реализовали обновление БД.

Осталось сделать только REST-интерфейс. Давайте займёмся этим.

Введение


Эта часть будет, пожалуй, самой сложной — мы близко узнаем типажи Send и Sync, а также тонкости работы замыканий и времён жизни. По-другому я бы озаглавил её «зануда исследует, почему обязательно нужно клонировать данные». Она полезна тем, что затрагивает тонкие места Rust и показывает причины некоторых неочевидных ошибок. Так что если хотите разобраться досконально — добро пожаловать.

Также хочу отметить: если вам что-то непонятно относительно приведённого кода или сами объяснения кажутся недостаточно ясными, не стесняйтесь писать об этом в комментариях. Автор потратил не минуту и не полчаса, пытаясь понять, почему код работает именно в том виде, в котором он написан, и вынужден был не раз сходить в IRC и на форум за разъяснениями.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments2

Spring Boot + ControllerAdvice + ResponseBodyAdvice или как обернуть ответ контроллеров

Reading time10 min
Views26K

Всем привет, друзья! Сегодня хочу рассказать про способ использование Controller Advice для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне DispatcherServlet.

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments6

Логическая организация кэш-памяти процессора

Reading time3 min
Views38K
На днях решил систематизировать знания, касающиеся принципов отображения оперативной памяти на кэш память процессора. В результате чего и родилась данная статья.

Кэш память процессора используется для уменьшения времени простоя процессора при обращении к RAM.

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

Логически кэш-память представляет собой набор кэш-линий. Каждая кэш-линия хранит блок данных определенного размера и дополнительную информацию. Под размером кэш-линии понимают обычно размер блока данных, который в ней хранится. Для архитектуры x86 размер кэш линии составляет 64 байта.



Так вот суть кэширования состоит в разбиении RAM на кэш-линии и отображении их на кэш-линии кэш-памяти. Возможно несколько вариантов такого отображения.
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments10

PostGIS + JPA. Погружение в детали и тонкости для чайников

Reading time12 min
Views14K

Привет. Сегодня я расскажу о работе с геоданными в PostgreSQL и немного о том, как это сделать в своем Java/Kotlin-приложении.

Допустим, есть прикладная задача: написать приложение, которое находит ближайший к текущему местоположению магазин с мороженным. Для человека, который прежде не сталкивался с решением подобных задач, это покажется чем-то нетривиальным. Наверное, так и есть. Ну, что ж, появилась необходимость — значит, надо реализовать задуманное, а заодно и расширить свой кругозор и опыт работы с технологиями.

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

А нужен ли Redis или хватит PostgreSQL

Reading time3 min
Views18K
image

Есть проверенная архитектура, которую я видел много раз для поддержки ваших веб-сервисов и приложений:

  • PostgreSQL для хранения данных
  • Redis для координации очередей фоновых заданий (и некоторых ограниченных атомарных операций)

Redis — это фантастика, но что, если бы я сказал вам, что его наиболее распространенные варианты использования этого стека на самом деле могут быть достигнуты с использованием только PostgreSQL?

Сценарий 1: очередь заданий


Пожалуй, наиболее частое использование Redis, которое я видел, — это координация отправки заданий из вашего веб-сервиса в пул фоновых воркеров. Идея состоит в том, что вы хотите записать желание выполнить какое-то фоновое задание (возможно, с некоторыми входными данными) и гарантировать, что только один из многих ваших фоновых воркеров выполнит его. Redis помогает в этом, поскольку предоставляет богатый набор атомарных операций для своих структур данных.
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments10

Основы Elasticsearch

Reading time12 min
Views672K

Elasticsearch — поисковый движок с json rest api, использующий Lucene и написанный на Java. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.


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


В этой статье я расскажу про основы ES на примере индексации постов блога. Покажу как фильтровать, сортировать и искать документы.

Читать дальше →
Total votes 39: ↑38 and ↓1+37
Comments78
1
23 ...

Information

Rating
Does not participate
Date of birth
Registered
Activity