Search
Write a publication
Pull to refresh
12
7
Alexander Kardapolov @akardapolov

User

Send message

Шифрование данных на виртуальном сервере

Reading time8 min
Views21K


Немного здоровой паранойи еще никому не вредило. Помимо мессенджеров с оконечным шифрованием, шифрованием файлов на смартфонах «из коробки» и обязательным использованием SSL на сайтах, не лишним будет защитить данные на виртуальных серверах. Тем более, современные технологии сделали это простым и доступным любому пользователю. Крупные провайдеры, предоставляющие услуги хостинга VPS, предлагают шифровать данные пользователей используя стандартные средства операционных систем. Например, Microsoft, в своем облаке Azure, использует для серверов на Windows — BitLocker, а для виртуальных машин на Linux — DM-Crypt. Эти средства позволяют сохранить приватность ваших данных, даже если злоумышленник получит доступ к ЦОДу, где находятся сервер или вашему локальному компьютеру.

 Можно доверять свои данные хостерам предоставляющим VPS, можно не доверять, но никто не запретит вам использовать те же самые способы у любого VPS-провайдера, настроенные самостоятельно. В этой статье я расскажу вам как это сделать.
Читать дальше →

Топ 10 ошибок в проектах Java за 2020 год

Reading time9 min
Views9.6K
image1.png

Новый год неумолимо приближается — а, значит, настало время подводить итоги. Продолжая традицию, мы прошлись по нашим статьям о проверках Java-проектов из мира open-source за этот год и составили рейтинг 10 самых интересных ошибок.
Читать дальше →

Мониторинг Tarantool: логи, метрики и их обработка

Reading time18 min
Views11K

Tarantool — это платформа in-memory вычислений с гибкой схемой данных. На её основе можно создать распределённое хранилище, веб-сервер, высоконагруженное приложение или, в конце концов, сервис, включающий в себя всё вышеперечисленное. Но какой бы ни была ваша промышленная задача, однажды настанет момент, когда её решение придётся мониторить. В этой статье я хочу дать обзор существующих средств для мониторинга приложения на базе Tarantool и пройтись по основным кейсам работы с ними.


Мониторинг Tarantool


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

Читать дальше →

Изучающий математику студент расширяет рубежи теории графов

Reading time4 min
Views16K

Ашвин Сах возрастом в 21 год выдал несколько научных работ, которые опытные математики посчитали беспрецедентными для студента колледжа




19 мая Ашвин Сах опубликовал лучший на сегодня результат в одной из самых важных областей комбинаторики. В такой момент иной человек поднял бы бокал в честь данного события, однако Сах тогда был ещё недостаточно взрослым для того, чтобы пить алкоголь [по законам США / прим. пер.].

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

«Будучи студентом, он опубликовал достаточно работ для того, чтобы его можно было принимать на работу в университет», — сказал Дэвид Конлон из Калифорнийского технологического института.
Читать дальше →

Как расширить Spring своим типом Repository на примере Infinispan

Reading time6 min
Views3.5K

Это моя первая статья, в ней я попытаюсь описать полученный мною практический опыт работы со Spring Repository под капотом фреймворка. Готовых статей про эту тему я в интернете не нашёл ни на русском, ни на английском, были только несколько репозиториев исходников на github, ну и исходники самого Spring. Поэтому и решил, почему бы не написать, вдруг тема написания своих типов репозиториев для Spring для кого-то ещё актуальна.

Программирование для Infinispan я не буду рассматривать подробно, детали реализации всегда можно посмотреть в исходниках, указанных в конце статьи. Основной упор сделан именно на сопряжение механизма Spring Boot Repository и нового типа репозитория.

Читать далее

Теория здравомыслия

Reading time12 min
Views17K

Как мыслить и действовать адекватно ситуации, избавиться от инфантилизма и не наступать на одни и те же "грабли"? Эта статья может стать отправной точкой для получения навыков усвоения материала почти любой сложности.

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

Аристотель уникален тем, что его последователи поклонялись не только его лучшим качествам, но также и его недостаткам, чего он никогда не делал в отношении кого-либо, живого или мертвого; за что и был не раз он порицаем – за непоклонение. Огастес де Морган - "наука и здравомыслие" А. Коржибски.

В 1933 году польский математик по имени Альфред Коржибски издал книгу "наука и здравомыслие", а в 1938 году основал институт общей семантики в США. В основе его концепции лежит утверждение о том, что любое человеческое познание ограничивается структурой нервной системы и структурой языка. Это значит, что человек априори не может знать всё обо всём. Коржибски проанализировал структуру языков индоевропейской группы математическими методами и выявил фундаментальные основы логики языка, которым люди пользуются изо дня в день, скрытые в неопределяемых и многопорядковых терминах (принимающие значение только при наличии контекста). Через них показана метафизика лежащая в основе используемого нами языка, его несовершенство, некоторое несоответствие действительности (например, может использоваться одно слово для нескольких сущностей одновременно, что может способствовать неверной оценке и неэффективному поведению (об этом позже)). Для преодоления этого барьера Коржибски ввел в ОС (общая семантика) в обиход не-элементалистский (позже станет понятно что это значит) термин семантической реакции - психологическая реакция индивидуума на слова, язык и другие символы и события в связи с их смыслом, и психологические реакции, которые становятся смыслами и конфигурациями отношений в тот момент, когда индивидуум начинает анализировать их, или кто-то другой делает это за него. Так же разработал простое и наглядное средство для обучения новым, более адекватным семантическим реакциям - структурный дифференциал. Данный подход предлагаю начать с изложения о понятии механизма времясвязывания.

Читать далее

Трассировка сервисов, OpenTracing и Jaeger

Reading time7 min
Views145K
image

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

Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
Читать дальше →

Анонс, предзаказ и бесплатные уроки видеокурса по Apache Kafka

Reading time2 min
Views2.6K


Открываем предзаказ продвинутого курса по Apache Kafka.


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

Читать дальше →

7 вещей, которые нужно проработать, прежде чем запускать OpenShift в продакшн

Reading time11 min
Views4.5K
Взрывной рост использования контейнеров на предприятиях впечатляет. Контейнеры идеально совпали с ожиданиями и потребностями тех, кто хочет снизить затраты, расширить свои технические возможности и продвинуться вперед по пути agile и devops. Контейнерная революция открывает новые возможности и для тех, кто подзадержался с обновлением ИТ-систем. Контейнеры и Kubernetes – это абсолютно и принципиально новый способ управления приложениями и ИТ-инфраструктурой.



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

Как избежать гниения ПО

Reading time6 min
Views48K

Недавно я наткнулся на историю столь же удивительную, сколь и ужасную:

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

Написавший её человек умер уже 15 лет назад, да и ушёл из компании много десятков лет назад. Программа была не такой большой, однако оказалась непостижимой. Её писали в стиле, отдававшем приоритет вычислительной эффективности, а не простоте чтения. И, разумеется, у неё не было никаких тестов.

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



Ещё одна программа, занимающаяся переводом прибыли, должна была уведомлять пользователей, что их вкладов недостаточно для прогнозирования дохода. Заметив, что из первой программы из-за её вылета нет выходных данных, она восприняла эту ситуацию как «все вклады равны 0». Разумеется, она должна была вести себя совершенно иначе. Но никто не знал, что она будет действовать так, поскольку первая программа никогда не вылетала.



Я получил от ИТ-директора неожиданное текстовое сообщение. «Простите за беспокойство, у нас огромная проблема. s1X. Можете прилететь сегодня во второй половине дня?» В их терминологии S1X обозначает «хуже, чем уровень серьёзности 1, потому что проблема распространилась на несвязанные с ней части бизнеса».

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

Принцип слоеного теста

Reading time12 min
Views6K
Всем неустрашимым на пути от отрицания до убеждения посвящается…

image

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

Управление признаками сущностей в Apache Kafka

Reading time6 min
Views2.5K

Введение


Во время работы над задачами машинного обучения с онлайн-данными есть необходимость собирать различные сущности в одну для дальнейшего анализа и оценки. Процесс сбора должен быть удобным и быстрым. А также часто должен предусматривать бесшовный переход от процесса разработки к промышленному использованию без дополнительных усилий и рутинной работы. Для решения этой проблемы можно воспользоваться подходом с использованием Feature Store. Этот подход со многими деталями описан вот здесь: Meet Michelangelo: Uber’s Machine Learning Platform. В этой статье описывается интерпретация указанного решения для управления признаками в виде прототипа.

Читать дальше →

Базы данных. Тенденции общемировые и в России

Reading time33 min
Views50K

Эта статья не является ответом на множество вопросов по базам данных (БД) и системам управлениям базами данных (СУБД). Я как автор выражаю своё собственное мнение о  трендах, стараясь опираться на беспристрастные показатели, статистики и т.д., но для примера приводя собственный опыт. Я не являюсь ангажированным представителем какой-либо компании и выражаю точку зрения опираясь на опыт более 25 лет работы с разными СУБД, в том числе, которую создавал своими руками. Не так много даже опытных программистов и архитекторов, которые знают все термины, технологии, какие подводные камни и куда идёт движение. Тема поистине огромная, поэтому в рамках одной статьи не раскрыть даже верхний уровень информации. Если кто-то не встретит свою любимую СУБД или её невероятный плюс, который стоит упомянуть, то прошу в комментариях указать и этим дополнить общую картину, что поможет другим разобраться и понять лучше предметную область. Поехали!

Open Source DBMS vs Commercial DBMS

 Для начала приведён график с сайта, db-engines.com, по моим ощущениям, неплохо отслеживающим тренды БД. Именно этот график добавил желания написать статью о текущем положении дел.

Читать далее (в конце краткие итоги)

Агрегаты, мои агрегаты, как приятно о вас думать

Reading time7 min
Views33K

В Domain-Driven Design выделяют стратегические и тактические паттерны. Например, первые — это Единый язык, а вторые — Агрегаты. Я много раз слышал от коллег, что со стратегией всё понятно, но когда дело доходит до перехода на тактический уровень (до кода) — всё в тумане. Это приводит к некорректным техническим решениям, которые не могут компенсировать даже правильный настрой и близость к бизнесу. Для успеха проекта крайне важно освоить тактические паттерны, особенно Агрегаты. Всё потому, что Агрегаты инкапсулируют в себя почти всю бизнес-логику, это основа вашего приложения. В этой статье я и расскажу про Агрегаты, как они могут помочь и почему важно их освоить. Но...

...сперва антипаттерны

Практическое применение аннотации в Java на примере создания Telegram-бота

Reading time20 min
Views20K
Рефлексия в Java — это специальное API из стандартной библиотеки, которая позволяет получить доступ к информации о программе во время выполнения.

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

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

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

Приятного чтения

Статьи — это тоже исходный код {

Level of difficultyMedium
Reading time9 min
Views16K

Title


Открываю VS Code и начинаю набирать статью с самого начала. Но вот незадача — формат маркдауна не совсем совместим с имеющимся форматом Хабра. Получается выхода нет и придётся возвращаться к встроенному редактору Хабра;


Или не придется?

В голову пришла идея написать утилиту, которая конвертирует разные форматы маркдаунов друг в друга, например, из формата GitHub в формат Habr;


Такую программу я в итоге и разработал. Теперь не надо копировать статьи в редактор Хабра, чтобы посмотреть как она выглядит, можно продолжать писать в любимом VS Code;


Хотя я и использую множество плагинов VS Code, но мысли о неэффективном процессе написания статей не исчезли. Раз уж я набираю текст в VS Code, то почему бы сразу не делать коммиты контента в гит-репозиторий?


Это дало бы немало новых возможностей, которыми пользуются программисты: версионирование, бекапы на локальные носители или веб-сервисы, правки от редакторов и пользователей. А еще можно внедрить CD/CI;


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

Читать дальше →

Эксперименты с kube-proxy и недоступностью узла в Kubernetes

Reading time8 min
Views26K
Прим. перев.: В этой статье, написанной техническим консультантом и сертифицированным администратором Kubernetes из Великобритании — Daniele Polencic, — наглядно показывается и рассказывается о том, какую роль играет kube-proxy в доставке пользовательских запросов до подов и что происходит, когда на одном из узлов кластера возникают проблемы.

Код приложений, развёрнутых в Kubernetes, запускается на одном или более рабочих узлов. Узел может располагаться как на физической или виртуальной машине, так и в AWS EC2 или Google Compute Engine, а наличие множества таких площадок означает возможность эффективного запуска и масштабирования приложения. Например, если кластер состоит из трёх узлов и вы решаете отмасштабировать приложение на четыре реплики, Kubernetes равномерно распределит их среди узлов следующим образом:

Читать дальше →

Real Time API в контексте Apache Kafka

Reading time12 min
Views12K

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

События (Events) предлагают подход в стиле принципа Златовласки, в котором API реального времени (real-time APIs) могут использоваться в качестве основы для приложений, которые являются гибкими, но в то же время высокопроизводительными; слабосвязанными, но эффективными.

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

Читать далее

PostgreSQL Antipatterns: скованные одной цепью EXISTS

Reading time2 min
Views8.1K
Я уже как-то рассказывал про особенности вычисления условий в SQL вообще и в PostgreSQL, в частности. Сегодня продолжим тему и попробуем написать и пооптимизировать простой запрос — у кого из сотрудников есть на выполнении «суперприоритетные» задачи.

CREATE TABLE task AS
SELECT
  id
, (random() * 100)::integer person -- всего 100 сотрудников
, least(trunc(-ln(random()) / ln(2)), 10)::integer priority -- каждый следующий приоритет в 2 раза менее вероятен
FROM
  generate_series(1, 1e5) id; -- 100K задач
CREATE INDEX ON task(person, priority);

Слово «есть» в SQL превращается в EXISTS — вот с самого простого варианта и начнем:

SELECT
  *
FROM
  generate_series(0, 99) pid
WHERE
  EXISTS(
    SELECT
      NULL
    FROM
      task
    WHERE
      person = pid AND
      priority = 10
  );


все картинки планов кликабельны

Пока все выглядит неплохо, но…
Читать дальше →

Information

Rating
1,472-nd
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity