Pull to refresh
222
0
Павло @TheShock

Senior JS Developer

Send message

Моделирование большого количества взаимодействующих друг с другом частиц

Reading time6 min
Views30K
Рассмотрим ситуацию, когда необходимо обрабатывать столкновения между объектами. Как вы в этом случае поступите? Вероятно, самым простым решением будет проверить каждый объект с каждым другим объектом. И это правильное решение, и все будет замечательно до тех пор пока объектов не много. Как только их станет порядка нескольких тысяч, вы заметите, что все стало как-то медленно работать. А если частиц несколько десятков тысяч или сотен? Тогда все замрет. Вот здесь уже интересно, на какие хитрости и оптимизации вы пойдете, чтобы решить такую проблему.

Для простоты, будем рассматривать 2D случай, частицы круглые, радиус частиц у всех одинаковый.

Содержание


1. Обзор алгоритмов
1.1. Полный перебор
1.2. Sweep & Prune
1.3. Регулярная сеть
2. Некоторые оптимизации
2.1. Sweep & Prune
2.2. Регулярная сеть
3. Сравнение скорости выполнения
4. Приложение (программа и исходный код)
5. Заключение

Читать дальше →
Total votes 147: ↑145 and ↓2+143
Comments45

Генерация музыки в реальном времени

Reading time6 min
Views135K


«Как автоматизировать сочинение музыки?» — этот вопрос тревожит умы музыкантов еще со времен средневековья. Кеплер превращал траектории движения планет в музыку; Моцарт и его современники изобрели игру в «музыкальные кости» — они броском кубиков выбирали из большой таблицы такты и составляли из них менуэты. Но только с появлением компьютеров алгоритмическая генерация музыки получила настоящее развитие. Теория вероятности, марковские цепи, искусственные нейронные сети — все это стало инструментами создания музыки.
Читать дальше →
Total votes 233: ↑224 and ↓9+215
Comments193

Кроссбраузерная кастомизация системного скроллбара

Reading time8 min
Views146K


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

Под катом можно узнать, как в ближайшее время будет работать скролл в 2ГИС Онлайн.
Подробности
Total votes 127: ↑116 and ↓11+105
Comments132

HTML и CSS безумие [перевод]

Reading time6 min
Views107K

или Создаем 3D миры при помощи HTML, CSS и JS


image
В прошлом году, я сделал демо, которое показывает как можно использовать CSS 3D transforms для создания 3D пространства. Демо было технической демонстрацией того, чего можно достичь при помощи CSS на то время, но я хотел увидеть насколько далеко я могу зайти, поэтому последние несколько месяцев я работал над новой версией с еще более сложными моделями, реалистичным освещением, тенями и определением столкновений. Этот пост документирует то, как я это делал и какие техники применял.

Демо Демо2
Читать дальше →
Total votes 207: ↑198 and ↓9+189
Comments71

Что сложного может быть в вычислении гипотенузы?

Reading time2 min
Views48K
В библиотеках различных языков программирования часто может быть включена функция для вычисления гипотенузы прямоугольного треугольника (или вы сами можете написать такую функцию для решения той или иной задачи).

На первый взгляд это может показаться тривиальной задачей, не так ли? Если сторонами треугольника являются x и y, то, формально, формулой для вычисления гипотенузы будет:

sqrt(x*x + y*y)

Это работает теоретически, но на практике данный подход может приводить к ошибке. Если значение x достаточно велико, то вычисление x*x может привести к переполнению типа данных (ни один тип данных от этого не застрахован, если не рассматривать длинную арифметику), и результатом вычислений будет бесконечность.
Читать дальше →
Total votes 144: ↑128 and ↓16+112
Comments73

WebGl-2d.js: Реализация Canvas 2D API на WebGL

Reading time2 min
Views12K
WebGL-2d — весьма интересная javascript библиотека, реализующая стандартные методы для работы с 2d контекстом Canvas на WebGL контексте.

Ни для кого не секрет, что сегодня Canvas не может похвастаться хорошей производительностью и отрисовка сложных сцен в реальном времени может стать проблемой. С WebGL ситуация с производительностью существенно лучше, но этот стандарт поддерживают не все популярные браузеры, в частности Microsoft даже не планирует внедрять его поддержку в IE (сторонние разработчики по этой причине уже начали делать плагин).

Подключив WebGL-2d и добавив всего пару строчек, мы можем существенно ускорить отрисовку графики, реализованную с средствами Canvas 2d API в браузерах, поддерживающих WebGL и обеспечить fallback к обычному 2d контексту.

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

Перестаньте писать классы

Reading time9 min
Views186K
Фото Джэка Дидриха из профиля на G+ Признак того, что объект не должен быть классом — если в нём всего 2 метода, и один из них — инициализация, __init__. Каждый раз видя это, подумайте: «наверное, мне нужна просто одна функция».

Каждый раз когда из написанного класса вы создаёте всего один экземпляр, используете только раз и тут же выбрасываете, следует думать: «ой, надо бы это отрефакторить! Можно сделать проще, намного проще!»

Перевод доклада Джэка Дидриха, одного из ключевых разработчиков языка Питон. Доклад прозвучал 9 марта 2012 на конференции PyCon US.
Читать дальше →
Total votes 234: ↑206 and ↓28+178
Comments148

EQализация: устранение частотных конфликтов

Reading time7 min
Views40K

Начнем с того, что


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

Пара слов о слуховой маскировке

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

Есть проблема? Найди решение!

К превеликому счастью решение уже давно нашли и без нас, так что нам остается только пожинать плоды и радоваться. Решение это — эквализация.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments28

iPad как среда разработки

Reading time2 min
Views20K
Как только у меня появился iPad, у меня сразу же появилась мысль кодить на нем, но первое время было не до этого. Затем, когда появилось время, я решил вернуться к этому вопросу. Идея, конечно, немного бредовая, но иногда все же появляется желание написать пару-тройку строчек во время поездки в метро или в самолете. Итак, под катом инструкция к действия, если вы хотите использовать свой айпад в тех же целях.
Читать дальше →
Total votes 48: ↑32 and ↓16+16
Comments39

Перемещение картинки вдоль произвольной кривой

Reading time4 min
Views14K

Возникла задача сделать анимацию — двигать картинку вдоль заданной кривой. Погуглил и с удивлением нашел, что несколько вопросов с подобной задачей на stackoverflow.com остаются без ответа уже не один год. Пришлось засучить рукава, покопаться в документации и найти подходящее решение.
за подробностями...
Total votes 75: ↑71 and ↓4+67
Comments25

Что бы Нотч ни писал, все равно получается Minecraft

Reading time1 min
Views12K
Небезызвестный в среде инди разработчиков Маркус Перссон aka Notch, после своего ухода с поста главного разработчика Minecraft, решил принять участие в стартовавшем два дня назад конкурсе Ludum Dare 22 по созданию игр на заданную тему. Темой 22-го конкурса стало «одиночество».



Читать дальше →
Total votes 112: ↑107 and ↓5+102
Comments42

Аудит. «Черный ящик»

Reading time6 min
Views13K
В данной статье я предложу вам технику аудита «черного ящика», которую можно освоить не обладая особыми знаниями и применить ее относительно своих ресурсов.

Естественно, статью можно перевести и в технику взлома ресурсов. Но чтобы знать, как защищать — надо знать, как взламывать. Ответственность за приобретенные знания вы берете на себя ;)

И если вы, как разработчик, будете знать хотя бы некоторые принципы и техники, что используют хакеры — думаю вам станет чуть спокойнее за них (ресурсы) и результат вашей деятельности приобретет более высокий уровень

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

Читать дальше →
Total votes 105: ↑92 and ↓13+79
Comments30

Обработка 2D столкновений с использованием LibCanvas

Reading time7 min
Views15K

В большинстве современных игр невозможно обойтись без обнаружения и дальнейшей обработки столкновений (выстрел, прыжок, банальный отскок от препятствия). На первый взгляд их реализация представляется довольно просто, но так ли это на самом деле? Попробую вкратце объяснить суть проблем, с которыми я столкнулся.
По традиции, после прочтения нескольких статей начинаешь чувствовать себя богом, способным сделать все что угодно. Думаю, многие сталкивались с подобной проблемой и могут представить, что последует за ней… правильно, череда больших проблем. Но обо всем по порядку.
Читать дальше →
Total votes 71: ↑65 and ↓6+59
Comments59

Что у сайта под капотом

Reading time1 min
Views2.5K
Появился ещё один полезный инструмент для веб-мастера — UnderTheSite. Он изучает заголовки HTTP, код страниц (краулер скачивает примерно десять страничек), JavaScript и CSS, чтобы идентифицировать характерные следы тех или иных технологий (matcher’ы). Один запрос — и на странице отображается сразу полный список, что удалось обнаружить. Можно сразу набирать URL вида underthesite.com/sites/habrahabr.ru. Например:

Google: Google Webmaster Tools Verification, Google Analytics, Google Web Server, UTF-8 Unicode charset, Google Web Fonts, HTML5, Google Website Optimizer, YUI Library.

Яндекс: jQuery, Nginx, Open Graph Protocol, OpenID, OpenSearch, UTF-8 Unicode charset.

Хабрахабр: Google Analytics, Nginx, MooTools, swfobject, UTF-8 Unicode charset.

Автор просит добавлять новые технологии для определения: каждый может сделать это самостоятельно после регистрации.
Total votes 102: ↑86 and ↓16+70
Comments34

Songsterr — итоги трех лет

Reading time5 min
Views6.1K


Друзья и коллеги!

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

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



Основные показатели проекта:
  • более 110 000 пользователей ежедневно
  • ежемесячная аудитория более 2 миллионов
  • более 70 000 «лайков» на facebook

Предыстория. Прошло уже более трех лет с тех пор, как в феврале 2008 мы опубликовали на Хабре наш первый пост о Songsterr. Собрав обратную связь, в конце июля 2008 мы выпустили новый релиз, который в целом сформировал концепцию проекта. Концепция оказалась работающей, и можно сказать, что Songsterr сегодня — это прямое продолжение релиза июля 2008. В августе 2008 о нас написали Techcrunch, Mashable и Lifehacker; Songsterr был признан лучшим стартапом августа на Хабре.
Читать дальше →
Total votes 80: ↑78 and ↓2+76
Comments59

Нужны ли «приватные» свойства объектов в Javascript?

Reading time4 min
Views4.8K
В последнее время во многих статьях (на Хабре и не только) я часто вижу примеры эмуляции приватных свойств объектов в JS через замыкания. Авторы обычно объясняют это своим желанием использовать такой механизм ООП, как инкапсуляция, и тем самым гарантировать работу с объектом исключительно посредством его методов, не затрагивая напрямую свойства.

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

Читать дальше →
Total votes 40: ↑35 and ↓5+30
Comments193

Красивый пример фишинга во «В Контакте»

Reading time2 min
Views64K
Не так давно в «Часкоре» была опубликована статья «Воспоминания экс-спамера». В ней один из интернет-предпринимателей, зарабатывавших на спаме во «В Контакте», объявил о том, что у такого бизнеса очень скоро почти не останется воздуха.

В какой-то мере с ним можно согласиться — сейчас спама действительно ощутимо меньше, чем было даже в прошлом году. Но оставшиеся спамеры прибегают ко всё более изощрённым методам. Сейчас я хочу рассказать об одном из таких методов, встретившихся мне сегодня.
Читать дальше →
Total votes 299: ↑279 and ↓20+259
Comments197

Отладка становится проще: Opera Mobile Emulator

Reading time1 min
Views14K
Opera Mobile Emulator

Сегодня не иметь мобильной версии проекта или хотя бы не тестировать его на мобильных устройствах — верный способ потерять пользователей. Если я не смогу найти адрес или телефон вашей кафешки со своей малосильной мобилки — значит я к вам просто не приеду.

И верстальщики берут в руки девайсы и начинают тестировать…
Читать дальше →
Total votes 85: ↑79 and ↓6+73
Comments56

Разработка браузерной стратегии

Reading time7 min
Views37K
Всем привет!

Хочу поделиться с хабрасообществом своим опытом написания многопользовательской браузерной стратегии с нуля до рабочего проекта. С точки зрения непосредственно программирования, архитектуры и возникших проблем. Это мой первый опыт создания игры и возможно вы заметите множество недочетов или промахов, или посоветуете чего дельного. Но не суть важно — главное я довел дело до рабочего проекта и наверняка многим будет интересно узнать подробности.

image

Что представляет собой игра? Видимо наиболее коротким описанием будет «клон Цивилизации» =). Но это не значит что у меня не хватило фантазии придумать что-то свое. Просто сделать «Цивилизацию» было моей мечтой. Вряд ли бы я получил столько удовлетворения от написания другой игры. Ну а фанаты Цивилизации наоборот считают, что моя игра совсем не похожа на Цивилизацию, разве что только с виду. Может это и к лучшему.

Игра называется The Fate of Nation http://fatenation.com

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

Для создания игры я использовал php и MySQL на сервере, html и javascript на клиенте. Flash не используется. Из html5 есть только видео на сайте и несколько областей с канвасом в самой игре — включая поверхность карты и мини-карту. Объем кода клиентской части в несколько раз превышает серверную часть, поэтому в основном буду рассказывать о клиентской разработке, но начнем с сервера.

Читать дальше →
Total votes 224: ↑216 and ↓8+208
Comments123

Анимация и Canvas

Reading time9 min
Views51K
Добрались руки мои до Canvas. Посматривал я на него давненько, очень уж он мне в качестве инструмента для графиков приглянулся. Да и неделя Canvas на Хабре поддержала интерес.

Но вместо скучных графиков стал я копать в сторону анимации. Получилось, что отрисовываем сцену каждый раз по-новой, соответственно всю информацию о текущих кадрах храним в JS. И решил я попробовать составить простой алгоритм, который позволял бы хранить анимации для объекта, их состояние и выбор по желанию пользователя.
Читать дальше →
Total votes 34: ↑28 and ↓6+22
Comments61

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity