Pull to refresh
5
0
Федотов Владимир @vlfedotov

CTO, backend, SRE, devops

Send message

Генерация подземелий и пещер для моей игры

Reading time4 min
Views25K

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

Разбиение пространства


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

Способов разбиения пространства тоже очень много: разделение на сетки, двоичное разбиение пространства, разбиение пространства деревом квадрантов, диаграммы Вороного и т.д. Я решил использовать двоичное разбиение пространства, потому что оно хорошо подходит для генерации прямоугольных комнат. Этот метод получил популярность благодаря статье на RogueBasin.

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


Такого поведения можно избежать несколькими способами. Один из них — ограничить позицию разделения двумя соотношениями длин сторон, например, в интервале от 30% до 70% или от 40% до 60%. Другой способ — использовать вместо равномерного распределения нормальное или биномиальное, благодаря этому повысится вероятность разделения по центру стороны, а не по краям. Эти способы устраняют проблему, но сложно понять, как конкретно параметры влияют на окончательный результат.
Читать дальше →
Total votes 67: ↑65 and ↓2+63
Comments26

Бесшовная (почти) миграция между мажорными релизами PostgreSQL с помощью логической репликации

Reading time9 min
Views18K
У нас в True Engineering на одном проекте назрела необходимость в смене версии PostgreSQL с 9.6 на 11.1.

Зачем? База данных на проекте уже объемом 1,5 Tb и растет. Перформанс – одно из основных требований к системе. А сама структура данных эволюционирует: добавляются новые колонки, меняются существующие. Новая версия Postgres научилась эффективно работать с добавлением новых колонок с дефолтным значением, так что не нужно городить кастомных костылей на уровне приложения. Ещё в новой версии добавили несколько новых способов партиционирования таблиц, что тоже крайне полезно в условиях большого объема данных.

Итак, решено, мигрируем. Конечно, можно поднять параллельно со старой новую версию сервера PostgreSQL, остановить приложение, через dump/restore (или pg_upgrade) переместить базу и снова запустить приложение. Нам это решение не подошло из-за большого размера базы, к тому же, приложение работает в боевом режиме, и на даунтайм есть считанные минуты.

Поэтому мы решили попробовать миграцию с помощью логической репликации в PostgreSQL с использованием стороннего плагина под названием pglogical.

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



TL;DR

  • Всё получилось (не без костылей, о них и статья).
  • Мигрировать можно в рамках PostgreSQL версии от 9.4 до 11.x, с любой версии на любую, вниз или вверх.
  • Даунтайм равен времени, которое требуется вашему приложению, чтобы переподключиться к новому серверу БД (в нашем случае это был перезапуск всего приложения, но в дикой природе, очевидно, «возможны варианты»).
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments30

Как усилить защищенность веб-приложений при помощи HTTP заголовков

Reading time18 min
Views32K
image

Это третья часть серии по веб-безопасности: вторая часть была «Web Security: введение в HTTP», первая "Как работают браузеры — введение в безопасность веб-приложений".

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

В настоящее время браузеры внедрили очень широкий спектр заголовков, связанных с безопасностью, чтобы злоумышленникам было труднее использовать уязвимости. В этой статье мы попытаемся обсудить каждый из них, объясняя, как они используются, какие атаки они предотвращают, и немного истории по каждому заголовку.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments9

Пишем собственную виртуальную машину

Reading time24 min
Views54K
В этом руководстве я расскажу, как написать собственную виртуальную машину (VM), способную запускать программы на ассемблере, такие как 2048 (моего друга) или Roguelike (моя). Если вы умеете программировать, но хотите лучше понять, что происходит внутри компьютера и как работают языки программирования, то этот проект для вас. Написание собственной виртуальной машины может показаться немного страшным, но я обещаю, что тема удивительно простая и поучительная.

Окончательный код составляет около 250 строк на C. Достаточно знать лишь основы C или C++, такие как двоичная арифметика. Для сборки и запуска подходит любая Unix-система (включая macOS). Несколько API Unix используются для настройки ввода и отображения консоли, но они не являются существенными для основного кода. (Реализация поддержки Windows приветствуется).

Примечание: эта VM — грамотная программа. То есть вы прямо сейчас уже читаете её исходный код! Каждый фрагмент кода будет показан и подробно объяснён, так что можете быть уверены: ничего не упущено. Окончательный код создан сплетением блоков кода. Репозиторий проекта тут.
Читать дальше →
Total votes 50: ↑50 and ↓0+50
Comments28

Лучшие доклады 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

Эксплуатация кроликов (RabbitMQ) в режиме «Выжить любой ценой»

Reading time16 min
Views30K
«Компания» — оператор связи ПАО «Мегафон»
«Нода» — сервер RabbitMQ.
«Кластер» — совокупность, в нашем случае трех, нод RabbitMQ работающих как единое целое.
«Контур» — совокупность кластеров RabbitMQ, правила работы с которыми определяются на стоящем перед ними балансировщике.
«Балансировщик», «хап» — Haproxy – балансировщик, выполняющий функции переключения нагрузки на кластеры в рамках контура. Для каждого контура используется пара серверов Haproxy, работающих параллельно.
«Подсистема» — публикатор и/или потребитель сообщений, передаваемых через кролика
«СИСТЕМА» — совокупность Подсистем, являющая собой единое программно-аппаратное решение, используемое в Компании, характеризующееся распределённостью по всей территории России, но обладающее несколькими центрами, куда стекается вся информация и где происходят основные расчёты и вычисления.
СИСТЕМА – географически распределённая система – от Хабаровска и Владивостока до Санкт-Петербурга и Краснодара. Архитектурно это несколько центральных Контуров, разделенных по особенностям подсистем, к ним подключённым.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments30

Песочница в Windows

Reading time6 min
Views126K
Песочница — это новый легковесный инструмент в ОС Windows, позволяющий запускать приложения в безопасном изолированном окружении.

Случалось ли Вам оказаться в ситуации, когда необходимо запустить какую-то программу, но Вы не совсем уверены в источнике её происхождения? Или другой пример — необходимость проверить что-то на «чистой» версии Windows. Во всех подобных случаях раньше был только один выход — установить ОС на отдельную физическую или виртуальную машину и провести нужный эксперимент. Но это больше не так.

Microsoft разработал новый механизм под названием Песочница (eng. Windows Sandbox). Это изолированное временное окружение, в котором Вы можете запускать подозрительное программное обеспечение без риска навредить своему ПК. Любое ПО, установленное в Песочнице, остаётся только в Песочнице и не может взаимодействовать с основной ОС. Как только Вы закрываете Песочницу — всё её содержимое безвозвратно уничтожается.

Вот основные особенности Песочницы:

  • Это часть ОС Windows. Если у Вас Windows 10 Pro или Enterprise, то Вы уже можете начать ею пользоваться.
  • С чистого листа. При каждом запуске Песочницы Вы получаете одно и то же, чистое, неизменное окружение. В точности такое, какой была Ваша ОС сразу после её установки.
  • Никаких следов. При закрытии Песочницы уничтожаются все установленные в ней приложения, все созданные там файлы. Закрыли Песочницу — не осталось никаких следов её существования.
  • Безопасность. Используется аппаратная виртуализация, которая использует гипервизор для запуска отдельного ядра ОС и изолирует его от Вашей основной ОС
  • Эффективность. Используется интегрированный планировщик задач, умное управление памятью, виртуальный GPU.
Читать дальше →
Total votes 83: ↑80 and ↓3+77
Comments125

Кто и зачем делает TeamLead Conf

Reading time7 min
Views2.2K
Знакомьтесь – это костяк программного комитета нашей TeamLead Conf: Георгий Могелашвили (Booking.com), Николай Крапивный (Badoo) и Станислав Цыганов (Tutu.ru). Те люди, которые формируют содержание и задают направление. Мы задали им несколько простых вопросов о работе ПК, подборе тем и тому, на чем будет делаться упор на очередной февральской конференции.


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

Стреляем в ногу, обрабатывая входные данные

Reading time8 min
Views9.7K


Связующее звено сегодняшней статьи отличается от обычного. Это не один проект, для которого был проведён анализ исходного кода, а ряд срабатываний одного и того же диагностического правила в нескольких разных проектах. В чём здесь интерес? В том, что некоторые из рассмотренных фрагментов кода содержат ошибки, воспроизводимые при работе с приложением, а другие – и вовсе уязвимости (CVE). Кроме того, в конце статьи немного порассуждаем на тему дефектов безопасности.
Total votes 37: ↑35 and ↓2+33
Comments8

Как не потерять данные в PostgreSQL

Reading time5 min
Views61K
PostgreSQL предлагает несколько вариантов резервирования данных. Обо всех них уже рассказано не раз, в том числе и на хабре. Но в основном рассказывается про технические особенности методов. Я же хочу постараться рассказать про общую стратегию резервного копирования, объединив все методы в эффективную систему, которая поможет вам сохранить все данные и уменьшить число погибших нервных клеток в критических ситуациях.
Вводные данные: сервер PostgreSQL 9.2, База размером >100Gb.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments16

Как поддерживать здоровые привычки в коммуникации удалённых команд

Reading time4 min
Views7.2K
Прим. перев.: Эта статья написана Taurie Davis — дизайнером из GitLab, которая любит «выявлять проблемы, создавать надёжные решения и творить интуитивно понятные интерфейсы». В ней даются простые советы о том, как наладить коммуникации далеко не только в удалённых командах, но и в нашей повседневной жизни. Даже если они покажутся очевидными, их ценность проявляется тогда, когда мы не забываем их постоянно применять, формируя полезную и выигрышную для всех привычку.

У себя в компании («Флант») мы регулярно проводим performance review для всех инженеров (и не только) и постоянно работаем над тем, чтобы улучшать этот процесс. В частности, на них разбираются и сложности коммуникации — как общие, так и индивидуальные. Посему поднятые автором проблемы нам близки не только в теории: они отлично пересекаются с тем практическим опытом, что накоплен у нас. Надеюсь, их осмысление окажется полезным и для других.


xkcd #1028: «Communication» (см. также его расшифровку)

Коммуникация на рабочем месте может оказаться непростой проблемой. Недопонимания и напряжённость — обычное явление, особенно в случае «асинхронного общения» (возникает при использовании тикетов и электронной почты вместо онлайн-чатов — прим. перев.), где ещё меньше ключей к пониманию голоса и его тона. Прямая коммуникация может восприниматься как жёсткая или грубая. А когда ко всему этому добавляется ещё и упущенный контекст, то ошибки в коммуникации и эмоции могут превзойти саму суть разговора. Улучшить взаимопонимание и коммуникации с течением времени поможет сознательное отношение к потребностям команды и к вашим собственным потребностям.
Читать дальше →
Total votes 31: ↑28 and ↓3+25
Comments4

Защищаем веб-приложение: как закрыть его от стороннего вмешательства

Reading time4 min
Views7K
image

От переводчика: публикуем для вас статью Джима Медлока, программиста и архитектора ПО. Медлок рассказывает об основных способах защиты своего приложения или веб-сервиса. Стоит отметить, что этот материал, скорее всего, будет полезен начинающим программистам. Хотя если профи оставят свои комментарии — все будут благодарны.

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

За последние несколько месяцев многие крупные организации попали в новости после гигантских утечек информации. Среди них Facebook и его 50 млн украденных аккаунтов, FIFA с 3,4 ТБ данных и 70 млн документов, Google с 0,5 млн аккаунтов, Marriott Hotels с данными 427 млн клиентов всей сети.
Читать дальше →
Total votes 23: ↑16 and ↓7+9
Comments1

Защита от DDoS на уровне веб-сервера

Reading time5 min
Views46K
Статистика DDoS-атак показывает неизменный рост и смещение вектора с сетевого уровня на уровень приложений.

image

Если у Вас есть небольшой сайт на сервере с минимальными характеристиками, то положить его можно любым вполне легальным средством стресс-тестирования. (Не рекомендую этого никому делать т.к. IP-адрес легко вычисляется и экспериментатор может влететь на возмещение ущерба.) Поэтому сайт без защиты от DDoS очень скоро будет выглядеть так же дико, как компьютер с Windows-98 без анивирусника.
Читать дальше →
Total votes 28: ↑25 and ↓3+22
Comments4

DDoS великий и ужасный

Reading time10 min
Views68K
Знаете ли Вы, что по данным исследований, проведённых Arbor Networks, Verisign Inc. и некоторыми другими компаниями:

  • ежедневно наблюдается порядка 2000 DDoS атак;
  • атака, способная «положить» небольшую компанию на неделю, стоит всего $150;
  • около 2/3 участников исследований (63%) страдали хотя бы раз от DDoS в течение года;
  • помимо прямых убытков и потери лояльности пользователей, атаки также влияют на продуктивность работы персонала;
  • 11% респондентов были под атакой шесть и более раз за год;
  • среди тех, кто за последние 12 месяцев был под атакой, 46% лежали более 5 часов, а 23% — более 12 часов;
  • примерно треть всех случаев даунтайма у респондентов вызваны DDoS атаками.

Каким бывает DDoS, можно ли с ним бороться и как можно предостеречься? Об этом я вкратце поведаю в данной статье.

Читать дальше →
Total votes 40: ↑31 and ↓9+22
Comments12

Kubernetes tips & tricks: о выделении узлов и о нагрузках на веб-приложение

Reading time7 min
Views21K


В продолжение наших статей с практическими инструкциями о том, как облегчить жизнь в повседневной работе с Kubernetes, рассказываем о двух историях из мира эксплуатации: выделении отдельных узлов под конкретные задачи и конфигурации php-fpm (или другого сервера приложений) под большие нагрузки. Как и прежде, описанные здесь решения не претендуют на идеал, а предлагаются как отправная точка для ваших конкретных случаев и почва для размышлений. Вопросы и улучшения в комментариях — приветствуются!
Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments3

Пишем торговых роботов с помощью графического фреймворка StockSharp. Часть 1

Reading time15 min
Views17K


В нашем блоге мы много пишем о технологиях и полезных инструментах, связанных с биржевой торговлей. Один из них – бесплатная платформа StockSharp, которую можно использовать для профессиональной разработки торговых терминалов и торговых роботов на языке C#. В данной статье мы покажем, как использовать графический фреймворк, входящий в S#.API, с целью создания торгового терминала с возможностью запуска алгоритмических стратегий.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments2

Некоторые заметки по проектированию информационных систем

Reading time4 min
Views16K
Моя прошлая статья Секреты удачного проектирования ИС (информационной системы) на примере строительства больницы вызвала временами бурное обсуждение в комментариях. Поэтому я решил изложить ряд тезисов по мотивам данного обсуждения.

Проектирование не для программистов


Очень часто при обсуждении методов проектирования и осуществления проекта информационных систем слышишь критику этих методов со стороны разработчиков (программистов).
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments1

Иерархическое внедрение зависимостей в React и MobX State Tree в качестве доменной модели

Reading time12 min
Views19K

Довелось мне как-то после нескольких проектов на React поработать над приложением под Angular 2. Прямо скажем, не впечатлило. Но один момент запомнился — управление логикой и состоянием приложения с помощью Dependency Injection. И я задался вопросом, удобно ли управлять состоянием в React используя DDD, многослойную архитектуру, и внедрение зависимостей?


Если интересно, как это сделать, а главное, зачем — добро пожаловать под кат!

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

Фантастические тимлиды и где они обитают

Reading time12 min
Views25K

Всем привет! Меня зовут Анатолий Панов, я работаю в ИТ уже больше 15 лет. За это время прошел путь от разработчика до руководителя тимлидов. Работал в таких компаниях как Badoo, Lazada. С начала этого года я в Авито. Руковожу разработкой новых проектов и разработкой для вертикалей Авто и Недвижимость.


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


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


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


Читать дальше →
Total votes 49: ↑41 and ↓8+33
Comments50

May the Code Review be with you

Reading time9 min
Views27K
Code review может быть большой болью для команды, которая только начинает его внедрять. Вы в любом случае наступите на много граблей: будете проводить ревью дольше, чем пишете код, устраивать смертельные споры про расположение скобочек и разбираться, можно ли сливать ветку в master до аппрува команды или нет. Я собрал ряд практик, которые помогут вам сделать процесс адаптации чуть менее болезненным — по крайней мере, мне они точно помогли.
 
Этот материал — краткая выжимка моего опыта, накопленного за несколько лет работы в крупных командах мобильной разработки. Опыт по большей части в мобильной разработке, что оказало влияние на используемые примеры и ссылки. Для тех, кто предпочитает не читать, а смотреть, в течение пары месяцев должно появиться видео с конференции Mobius, где я рассказываю доклад на эту же тему, но с кучей подробных практических примеров.
 

Читать дальше →
Total votes 61: ↑61 and ↓0+61
Comments16
1
23 ...

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity