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

Пользователь

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

Доставка обновлений из БД MySQL в приложение при помощи клиента репликации libslave

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


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

Для Таргета Mail.Ru, как и для всякой рекламной системы, быстрый учет изменений важен по следующим причинам:
• возможность быстрого отключения показа кампании, если рекламодатель остановил ее в интерфейсе или если у него кончились деньги, а значит, мы не будем показывать ее бесплатно;
• удобство для рекламодателя: он может поменять цену баннера в интерфейсе, и уже через несколько секунд его баннеры начнут показываться по новой стоимости;
• быстрое реагирование на изменение ситуации: изменение CTR, поступление новых данных для обучения математических моделей. Все это позволяет корректировать стратегию показа рекламы, чутко реагируя на внешние факторы.

В этой статье я расскажу об обновлении данных, лежащих в больших таблицах в БД MySQL, фокусируясь на скорости и консистентности — ведь не хотелось бы уже получить новый заведенный баннер, но при этом не получить данную рекламную кампанию.
Читать дальше →
Всего голосов 71: ↑62 и ↓9+53
Комментарии4

Лекция Чарльза Мура, создателя Forth: 144-ядерный процессор, зачем? Сложно ли запрограммировать 144 вычислительных ядра?

Время на прочтение8 мин
Количество просмотров15K
Создатель 144-ядерного процессора GA144 и языка программирования Forth, известный программист Чарльз Мур (Charles H. Moore), известный также под именем Чак Мур (Chuck Moore), в своей лекции рассказывает о перспективах применения 144-х ядерного асинхронного чипа, созданного его компанией, GreenArrays, а также его программировании. Ведь его чип потребляет всего лишь 7 пДж энергии (при выполнении базовой инструкции ALU, что занимает 1.5 наносекунды), что делает его незаменимым в случаях, когда процессор может питаться лишь от автономного источника энергии без возможности подзарядки, начиная от разработок в сфере медицины и заканчивая робототехникой. Незадействованные ядра потребляют всего 100 нановатт, в то время, как активным, требуется всего 4 милливатта при обработке 666 MIPS: плотный код сводит к минимуму количество выполняемых инструкций, уменьшая количество выборки команд, переключения транзисторов и рабочего цикла.

Так как лекция еще не публиковалась ранее, мы опубликовали её для Вас на youtube:



Если кто-то будет в состоянии сделать субтитры — пишите, добавим, будем очень признательны, если кто-то найдет время для выполнения столь важной работы.

Сам процессор поступил в продажу в 2011-м году, по цене $20. В этой публикации мы постарались систематизировать имеющуюся новую информацию и заполнить пробелы, которые могут возникнуть после чтения документации от GreenArrays.
Всего голосов 33: ↑27 и ↓6+21
Комментарии25

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

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


Занимаясь программированием рендеринга графики, мы живём в мире, в котором обязательны низкоуровневые оптимизации, чтобы добиться GPU-фреймов длиной 30 мс. Для этого мы используем различные методики и разработанные с нуля новые проходы рендеринга с повышенной производительностью (атрибуты геометрии, текстурный кеш, экспорт и так далее), GPR-сжатие, скрывание задержки (latency hiding), ROP…

В сфере повышения производительности CPU в своё время применялись разные трюки, и примечательно то, что сегодня они используются для современных видеокарт ради ускорения вычислений ALU (Низкоуровневая оптимизация для AMD GCN, Быстрый обратный квадратный корень в Quake).


Быстрый обратный квадратный корень в Quake

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

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

В статье мы рассмотрим кеширование, векторное программирование, чтение и понимание ассемблерного кода, а также написание кода, удобного для компилятора.
Читать дальше →
Всего голосов 141: ↑133 и ↓8+125
Комментарии103

Сложности при создании изометрической игры в Unity

Время на прочтение4 мин
Количество просмотров26K
Для начала небольшое предисловие. Мы работаем над игрой Empires in Ruins с пререндеренными 3D-моделями, которые перед сохранением в Unity превращаются в спрайты и атласы спрайтов. Если объяснять коротко, то при этом выполняется довольно долгий и медленный производственный процесс, но он позволяет нам использовать текстуры очень высокого разрешения для очень чёткой графики. Такой стиль напоминает стратегические игры 90-х наподобие Age of Empires (и многих других) в смеси с производственным процессом Baldur's gate, дополненным современным стилем и возможностью сильного масштабирования. Нам вообще нравится производить впечатление.



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

Причины просты: результаты может быть и замечательны, но на самом деле трудно найти более медленный рабочий процесс. Для самой первой игры это вполне нормально, работа продолжается бесконечно, и мы наслаждаемся процессом, урок усвоен. Но в будущем стоит всё же выпускать одну игру чаще, чем раз в пять лет.
Читать дальше →
Всего голосов 33: ↑30 и ↓3+27
Комментарии14

Escape analysis и скаляризация: Пусть GC отдохнет

Время на прочтение16 мин
Количество просмотров22K
В этот раз мы решили разнообразить поток технических интервью реальным хардором и подготовили материал на основе доклада Руслана cheremin Черемина (Deutsche Bank) про анализ работы пары Escape Analysis и Scalar Replacement, сделанный им на JPoint 2016 в апреле минувшего года.

Видеозапись доклада перед вами:



А под катом мы выложили полную текстовую расшифровку с отдельными слайдами.
Всего голосов 41: ↑41 и ↓0+41
Комментарии3

Интересные алгоритмы кластеризации, часть вторая: DBSCAN

Время на прочтение10 мин
Количество просмотров101K
Часть первая — Affinity Propagation
Часть вторая — DBSCAN
Часть третья — кластеризация временных рядов
Часть четвёртая — Self-Organizing Maps (SOM)
Часть пятая — Growing Neural Gas (GNG)

Углубимся ещё немного в малохоженные дебри Data Science. Сегодня в очереди на препарацию алгоритм кластеризации DBSCAN. Прошу под кат людей, которые сталкивались или собираются столкнуться с кластеризацией данных, в которых встречаются сгустки произвольной формы — сегодня ваш арсенал пополнится отличным инструментом.


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

Интересные алгоритмы кластеризации, часть первая: Affinity propagation

Время на прочтение11 мин
Количество просмотров52K
Часть первая — Affinity Propagation
Часть вторая — DBSCAN
Часть третья — кластеризация временных рядов
Часть четвёртая — Self-Organizing Maps (SOM)
Часть пятая — Growing Neural Gas (GNG)

Если вы спросите начинающего аналитика данных, какие он знает методы классификации, вам наверняка перечислят довольно приличный список: статистика, деревья, SVM, нейронные сети… Но если спросить про методы кластеризации, в ответ вы скорее всего получите уверенное «k-means же!» Именно этот золотой молоток рассматривают на всех курсах машинного обучения. Часто дело даже не доходит до его модификаций (k-medians) или связно-графовых методов.

Не то чтобы k-means так уж плох, но его результат почти всегда дёшев и сердит. Есть более совершенные способы кластеризации, но не все знают, какой когда следует применять, и очень немногие понимают, как они работают. Я бы хотел приоткрыть завесу тайны над некоторыми алгоритмами. Начнём с Affinity propagation.

image

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

«Как делают игры»: двухчасовой разговор о монетизации онлайн-игр

Время на прочтение3 мин
Количество просмотров10K
8 декабря вышел выпуск подкаста «Как делают игры» про монетизацию. За два с половиной часа ведущие и гости обсудили основные метрики монетизации, сегментирование пользователей, аналитику и проблемы мотивации игроков, схемы и разные модели монетизации. Ниже — полный выпуск и ключевые моменты из него.
Всего голосов 10: ↑8 и ↓2+6
Комментарии1

Динамическое обнаружение в игре Shadow Tactics

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

Что: динамическое обнаружение в Shadow Tactics


В Shadow Tactics игроки управляют отрядом персонажей, каждый из которых имеет свою специализацию (в отряде может быть до пяти персонажей). Их задача — прокрасться по огромному уровню, заполненному врагами, и незаметно убить жертву. Каждый уровень — это головоломка со множеством решений. Один из самых важных инструментов игрока — способность отображать область видимости врага в форме конусов, которые мы называем конусами видимости (Viewcones). У конусов видимости есть области разного цвета, определяющие поведение врагов.

image
Рисунок 1: конус видимости Shadow Tactics.

Для тех, кому интересно, как это реализовано технически, я процитирую нашего ведущего технического инженера Фридера Мильке (Frieder Mielke), человека, создавшего всю систему: «Основной принцип, используемый в вычислениях конусов видимости — это использование карт теней. Сначала мы рендерим текстуру глубины из положения глаз выбранного персонажа. Затем при рендеринге основной камеры мы на основании ранее созданной текстуры глубин генерируем маску, содержащую информацию для разных областей видимости (например, „полная видимость“, „полностью скрытая“, „невидимая, когда персонаж ползёт“ и „за пределами видимости“). С помощью этой маски в последнем проходе мы можем раскрасить конус видимости. В этом проходе используется буфер шаблонов (stencil buffer) для исключения объектов, которые не нужно рендерить, и добавления информации об источниках освещения».

С точки зрения дизайна мы проанализировали, как эти конусы использовались в старых играх, и увидели способ их улучшения. Это привело нас к пересмотру некоторых аспектов обнаружения персонажей в этом жанра.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии19

Новый GC Epsilon. У джавы может не быть сборки мусора. Шок. Сенсация

Время на прочтение6 мин
Количество просмотров38K
Добрый день, господа! Спешу сообщить, что настают последние дни. Кажется, мир Java развился до такой степени, что то ли мы теперь можем спокойно использовать Rust вместо Java, то ли Java вместо Rust. Кровавые подробности ждут вас под катом.
Читать дальше →
Всего голосов 84: ↑69 и ↓15+54
Комментарии96

Серия видеоуроков по Kotlin

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

Приветствую тебя — Человек жаждущий знаний!
Хочу поделится с тобой своим небольшими но думаю полезным для многих знаниями по Kotlin в виде небольшой серии видео.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии16

Эффективный расчёт области видимости и линии взгляда в играх

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

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

image

Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
Читать дальше →
Всего голосов 130: ↑126 и ↓4+122
Комментарии27

Простая реализация FDTD на Java

Время на прочтение13 мин
Количество просмотров13K
FDTD (Finite Difference Time Domain) — метод конечных разностей во временной области — самый «честный» метод решения задача электродинамики от низких частот до видимого диапазона. Суть — решение уравнений Максвелла «в лоб». Здесь неплохо расписано. Особенно посмотрите сетку.

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

Представлена реализация алгоритма на Java и C++.

image
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии104

Поле Галуа на Scala

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

Введение


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

Типы и ограничения


Для начала следует обсудить технические проблемы связанные с представлением полиномов в памяти, с учетом размеров типа Int в языке Scala. Требования сформулированы в списке ниже.

  • Тип Int в Scala/Java имеет размер 32 бита
  • Использовать можно биты: 0..30 — 31, поскольку 32-ой бит является знаковым
  • Полиномы должны быть представлены числами в диапозоне 0..29
  • Неприводимые полиномы (или модули) имеют диапозон 1..30
  • Конечное поле имеет элементов

Реализация


Сначала опишем класс Polynomial, который реализует полином и 4 операции. Этот вид полинома является «полуфабрикатом» и не привязан к конечному полю.
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии6

Классы типов в Scala (с небольшим обзором библиотеки cats)

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

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

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

Вызов методов через reflection

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

Все программисты на Java явно или неявно пользуются reflection для вызова методов. Даже если вы не делали этого сами, это за вас наверняка делают библиотеки или фреймворки, которые вы используете. Давайте посмотрим, как этот вызов устроен внутри и насколько это быстро. Будем глядеть в OpenJDK 8 с последними обновлениями.

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

Оптимизация сложных запросов MySQL

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

Введение


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

Прежде всего хотелось бы ограничить круг рассматриваемых проблем оптимизации «широкими» и большими таблицами. Скажем до 10m записей и размером до 20Gb, с большим количеством изменяемых запросов к ним. Если в вашей в таблице много миллионов записей, каждая размером по 100 байт, и пять несложных возможных запросов к ней — это статья не для Вас. NB: Рассматривается движок MySQL innodb/percona — в дальнейшем просто MySQL.
Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии20

Основы индексирования и возможности EXPLAIN в MySQL

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


Темой доклада Василия Лукьянчикова является индексирование в MySQL и расширенные возможности EXPLAIN, т.е. нашей задачей будет ответить на вопросы: что мы можем выяснить с помощью EXPLAIN'а, на что следует обращать внимание?


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


По индексам мы пройдемся очень кратко, исключительно в плане того, какие нюансы есть в MySQL, в отличие от общей теории.


Доклад, таким образом, состоит из 3х частей:


  • Архитектура;
  • Основы индексирования;
  • EXPLAIN (примеры).

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

Как понять, что происходит на сервере

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


Александр Крижановский ( krizhanovsky, NatSys Lab.)


По Сети уже давно бегает эта картинка, по крайней мере, я ее часто видел на Фейсбуке, и появилась идея рассказать про нее:


Читать дальше →
Всего голосов 98: ↑96 и ↓2+94
Комментарии20

Конкурентность: Параллелизм

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

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


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


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

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность