Pull to refresh
0
0
Send message

Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали

Reading time1 min
Views42K


Почему определенные недостатки языка JavaScript в реалиях разработки такого большого проекта, как наш, оказываются критическими? Как решить проблемы JS, когда количество кода превышает 2 млн строк, а команда насчитывает более 20 человек и постоянно растет? Об этом — в докладе фронтенд тимлида Wrike в рамках митапа, проведенного в нашем офисе совместно с сообществом Piter JS.

Смотреть
Total votes 35: ↑20 and ↓15+5
Comments67

Почему я больше не использую MVC-фреймворки

Reading time16 min
Views132K


Уважаемые хабравчане.

Поскольку дискуссия вокруг статьи идет весьма активно, Жан-Жак Дюбре (он читает комментарии) решил организовать чаты в gitter.

Вы можете пообщаться с ним лично в следующих чатах:
https://gitter.im/jdubray/sam
https://gitter.im/jdubray/sam-examples
https://gitter.im/jdubray/sam-architecture

Также автор статьи разместил примеры кода здесь: https://bitbucket.org/snippets/jdubray/

По поводу кода он оставил следующий комментарий:
I don't code for a living, so I am not the best developer, but people can get a sense of how the pattern works and that you can do the exact same thing as React + Redux + Relay with plain JavaScript functions, no need for all these bloated library (and of course you don't need GraphQL).
Читать дальше →
Total votes 78: ↑67 and ↓11+56
Comments254

Процедурная генерация случайных игровых подземелий

Reading time6 min
Views64K
image

В посте подробно рассматривается техника генерации случайных подземелий. Основной алгоритм генерации, пример работы которого можно посмотреть здесь, используется разработчиками игры TinyKeep. Оригинальный пост от разработчика был размещён на reddit.

Оригинальное описание алгоритма


1. Сначала я задаю нужное количество комнат – к примеру, 150. Естественно, цифра произвольная, и чем она больше, тем сложнее будет подземелье.

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

Вместо равномерно распределённых случайных чисел (какие выдаёт генератор Math.random в большинстве языков), я использую нормальное распределение Парка-Миллера. В результате вероятность появления маленьких комнат превышает вероятность появления больших. Зачем это надо, объясню позже.

Кроме того я проверяю, что соотношение длины и ширины комнаты не слишком велико. Нам не нужны как идеально квадратные комнаты, так и сильно вытянутые.

3. И вот у нас есть 150 случайных комнат, расположенных на небольшом пространстве. Большинство из них наезжают друг на друга. Теперь мы осуществляем их разделение по технологии separation steering, чтобы разделить прямоугольники так, чтоб они не пересекались. В результате они не пересекаются, но находятся достаточно близко друг от друга.

4. Заполняем промежутки клетками размером 1х1. В результате у нас получается квадратная решётка из комнат различного размера.

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

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

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

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

9. Чтобы превратить его в коридоры, для каждого ребра строится серия прямых линий (в форме Г), идущих по рёбрам графа, соединяющим комнаты. Тут нам пригождаются те клетки, которые остались неиспользованными (те, что не превратились в комнаты). Все клетки, накладывающиеся на Г-образные линии, становятся коридорами. А из-за разнообразия размеров клеток стены коридоров будут неровными, что как раз хорошо для подземелья.

И вот пример результата!

Осторожно — под катом много монстров анимированных гифок!
Читать дальше →
Total votes 53: ↑49 and ↓4+45
Comments16

10 главных ошибок масштабирования систем

Reading time7 min
Views52K
Мартин Л. Эббот и Майкл Т. Фишер, авторы книги «Искусство масштабируемости», перечисляют наиболее распространенные архитектурные, организационные и технологические проблемы масштабировании в product-группах. Список был сформирован на основе их опыта, а также в ходе коммуникаций с клиентами и лег в основу первой книги.

Архитектурные ошибки



Читать дальше →
Total votes 53: ↑45 and ↓8+37
Comments33

Большая кухня больших данных. Часть 1

Reading time4 min
Views9.9K
Настало время поделиться нашим опытом организации процесса разработки в модной теме «Больших Данных». В телекоммуникационной отрасли с Big Data связаны немалые надежды на новые ниши, продукты, и, соответственно, доходы. Правда, многие телекоммуникационные компании предпочитают покупать готовые решения в области Больших Данных, а не заниматься развитием собственной экспертизы. Еще с 2013 года «МегаФон» пошел другим путем, сделав ставку на команду сильных специалистов по Big Data, способных эффективно решать весьма непростые задачи.
Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments4

Почему Mobile First?

Reading time8 min
Views115K
О Mobile First написано достаточно много и есть хорошие книги на эту тему. И все равно большинство разработчиков и компаний не используют его в своих проектах или не знают вообще об этом подходе.

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

  • Что такое Mobile First и его плюсы
  • Реализация подхода
  • Статистика результатов
Читать дальше →
Total votes 32: ↑23 and ↓9+14
Comments17

Unity — Концептуальные идеи и подсказки для новичков игродева. Простая процедурная генерация моделей для 2D игры

Reading time5 min
Views40K
Введение в проблему

Здравствуйте, дорогие читатели!

Мысли о создании серии простых уроков «концептуальные идеи для новичков игродева» появились у меня спонтанно, где-то в 2:00 по Московскому времени во время создания своего нынешнего проекта. Ну нет, это так мне кажется, что спонтанно, но, наверное, это мое подсознание так среагировало. Среагировало потому, что все больше юных (коим я и сам являюсь) и очень юных программистов решают заняться созданием игр. Как мне кажется, общая тенденция молодежи-программистов (и людей, интересующихся сферой программирования) плавно перешла от создания сайтов и модных блогов к созданию развлекательных продуктов. Я начинаю замечать это и среди своих знакомых, которые одно время говорили, что, мол игры — это не серьезное программирование, но теперь уже проявляют настоящий интерес к этой среде.

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

Но пришла эра развлечений – я не буду упоминать с каким трудом делались первые игры, но прошли десятилетия, стали появляться платные игровые движки, через какое-то время они стали практически бесплатные (Unity, Unreal Engine4), причем не движки от Васи с соседнего подъезда в которых можно только сделать “грабеж корованов ”, а движки мастодонты который представляют из себя комплексные среды разработки, способные реализовать ваши проекты мечты. Однако есть и обратная сторона этих популярных технологий. А именно большое количество некачественных продуктов. Обленились придумывать что-то свое… “Лучше сделаю флеппи берд!” – подумал Вася.
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments3

Что такое красивый код, и как его писать?

Reading time22 min
Views205K

1. Вступление


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

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

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

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

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

Да, все это необходимо знать. Но при этом, понимание того, как должен выглядеть достойный код, обычно появляется уже при наличии практического (чаще в той или иной степени негативного) опыта за плечами. И при условии, что жизнь “потыкала” тебя не только в сочные образцы плохого кода, но и в примеры всерьез достойные подражания.

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

Но если для нас действительно важно качество кода, который пишут люди, работающие вместе с нами, то попробовать все же стоит!
Читать дальше →
Total votes 97: ↑79 and ↓18+61
Comments145

Секреты Stack Overflow

Reading time5 min
Views64K
Приветствую, коллеги. За последние несколько лет Stack Overflow стал полезнейшим инструментом для разработчиков. Множество вопросов, заданных Гуглу и Яндексу, в первых же ссылках ведут на понятные и исчерпывающие ответы на этом ресурсе. Большинство разработчиков используют сайт Stack Overflow именно как базу знаний программистов, возможность быстро получить нужный ответ. Под катом я расскажу про несколько интересных кейсов подводной части айсберга: спрятанные ответы, награды, прокачивание кармы и многое другое, скрытое от поверхностного взгляда.

Читать дальше →
Total votes 90: ↑84 and ↓6+78
Comments93

Клетка со всеми удобствами

Reading time4 min
Views8.9K
Хабр активно реагирует на все инициативы (чего бы они ни касались) по ограничению возможности выбора. И это замечательно. Тот же интернет (в те времена, когда он еще не писался с большой буквы) декларировался как средство свободного общения всех со всеми и свободного поиска информации в целях развития общества. И ключевое слово в предыдущем предложении естественно — «свободного».

Вот только один вопрос. Насколько свободен от ограничений и в итоге насколько адекватен результат нашего выбора?
Читать дальше →
Total votes 22: ↑15 and ↓7+8
Comments5

Опубликованы jQuery 3.0 alpha и jQuery Compat 3.0 alpha

Reading time18 min
Views24K
(Перевод этого рассказа от авторов популярнейшей библиотеки будет весьма поучительным для всех, кто хотел бы держать руку на пульсе тектоники браузеров в свете решаемых проблем с парсингом DOM на данном этапе.)

Много воды утекло со времени последнего крупного релиза, и вы, конечно, заслуживаете обновлений. Поэтому мы рады объявить о выходе первой альфа-версии jQuery!

Несмотря на номер версии 3.0, мы ожидаем, что этот выпуск не доставит слишком много неприятностей при модернизации кода. Да, есть несколько критичных изменений, что оправдано сменой старшего индекса версии, но, надеемся, что эти переделки не повлияют на многих. Плагин jQuery Migrate поможет выявить проблемы совместимости кода. Также, ваши мнения об этой альфе нам сильно помогут, поэтому, пожалуйста, попробуйте её на существующем коде и плагинах!

Первый из релизов, jQuery 3.0, поддерживается новыми браузерами и IE 9+. Второй, jQuery Compat 3.0, поддерживается в IE 8+. Как бонус, оба релиза будут поддерживаться Яндекс-браузером, выпущенным в 2012-м.
Читать дальше →
Total votes 40: ↑38 and ↓2+36
Comments6

Немного о защите идентификаторов веб-сессий

Reading time8 min
Views16K
Предлагаем вашему вниманию перевод статьи из блога Eran Hammer — создателя фреймворка hapi.js. На этот раз речь пойдет об обеспечении безопасности идентификаторов сессий.



На Github прозвучал вопрос о том, зачем в Node.js-фреймворке Express к идентификационной cookie сессии добавляется хэш-суффикс? Отличный вопрос.

Но сначала небольшой дисклеймер: как и любой другой совет по безопасности от человека, не знакомого со спецификой конкретной системы, рассматривать все, что будет написано ниже, следует лишь с образовательной точки зрения. Безопасность — это сложная и крайне специфичная область знаний, поэтому, если обеспечение должного уровня защиты критически важно для конкретной компании, ей следует нанять выделенного ИБ-специалиста или обратиться к услугам профессионалов по защите информации.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments10

Критический путь рендеринга веб-страниц

Reading time5 min
Views39K
В среде веб-разработчиков все больше распространяется знание о том, что скорость важна. Многие стараются ускориться: используют сжатие gzip, минификацию, кеширующие заголовки, сокращение запросов, оптимизацию картинок и другие.

После выполнения этих рекомендаций возникает вопрос: а что именно мы оптимизируем? Оказывается, что в большинстве случаев это время полной загрузки страницы со всеми элементами. Однако, это не совсем то, что нужно. На самом деле важно время, за которое пользователь получает «первый экран» страницы с важными функциональными элементами (заголовок, текст, описание товара и т.д.) Другими словами, важен момент начала рендеринга страницы. Здесь и возникает критический путь рендеринга, который определяет все действия, которые должен выполнить браузер для начала отрисовки страницы. С этой штукой мы и будем разбираться в статье.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments18

Семь смертных грехов разработки ПО

Reading time6 min
Views47K
Перевод статьи Seven Deadly Sins of a Software Project автора Yegor Bugayenko.

Сопровождаемость — это наиболее ценное достоинство современной разработки программного обеспечения. Сопровождаемость может измеряться, в основном, рабочим временем, которое требуется новому разработчику, чтобы вникнуть в проект, до того, как он начнет вносить значимые изменения. Чем больше времени это занимает, тем меньше уровень сопровождаемости. В некоторых проектах это время близко к бесконечности, что означает, эти проекты практически не сопровождаемы. Я хочу рассказать вам о семи смертных грехах, которые делают программный продукт несопровождаемым.
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments18

Создание Dragon Age: Inquisition

Reading time14 min
Views31K
Прошло уже несколько месяцев со дня релиза игры, однако я вполне допускаю, что вы еще не поиграли или не прошли Dragon Age: Inquisition.

Перед тем, как читать статью, рекомендуем вам пройти эту игру.

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


Читать дальше →
Total votes 23: ↑17 and ↓6+11
Comments31

Создание игр без Canvas

Reading time8 min
Views20K
Однажды мне попалась на глаза карточная игра HeartStone от Blizzard. Играя в нее пришла мысль, что подобные вещи можно создавать используя технологии html5, что позволит им быть кроссплатфорсенными. На мой взгляд, подобные вещи могут делать люди, до сих пор занимающиеся только созданием сайтов.

Итак, что мы имеем:
  • Выделенный сервер с LAMP (без phpDaemon);
  • Желание обкатать WebSockets.


Собственно, все. Этого вполне хватит, чтобы осуществить задуманное.
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Comments13

Information

Rating
Does not participate
Registered
Activity