Pull to refresh
-1
0

Веб-разработчик

Send message

Разбор квалификации чемпионата по программированию среди бэкенд-разработчиков

Reading time7 min
Views29K

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


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



В этот раз мы придумали шесть задач, для каждой из которых можно было придумать несколько альтернативных формулировок: одна придуманная задача порождала сразу четыре! Тем самым варианты получились сопоставимыми настолько, насколько это вообще возможно.


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

Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments7

Создание шейдера травы в движке Unity

Reading time25 min
Views26K

Из этого туториала вы научитесь писать геометрический шейдер для генерации травинок из вершин входящего меша и использовать тесселяцию для управления плотностью травы.

Статья описывает поэтапный процесс написания шейдера травы в Unity. Шейдер получает входящий меш, и из каждой вершины меша генерирует при помощи геометрического шейдера травинку. Ради интереса и реализма травинки будут иметь рандомизированные размеры и поворот, а ещё на них будет влиять ветер. Чтобы управлять плотностью травы, мы используем тесселяцию для разделения входящего меша. Трава сможет и отбрасывать, и получать тени.

Готовый проект выложен в конце статьи. В созданном файле шейдера содержится большое количество комментариев, упрощающих понимание.
Total votes 53: ↑50 and ↓3+47
Comments5

Разработка приложения для потокового вещания с помощью Node.js и React

Reading time21 min
Views47K
Автор материала, перевод которого мы сегодня публикуем, говорит, что работает над приложением, которое позволяет организовывать потоковое вещание (стриминг) того, что происходит на рабочем столе пользователя.

image

Приложение принимает от стримера поток в формате RTMP и преобразует его в HLS-поток, который может быть воспроизведён в браузерах зрителей. В этой статье будет рассказано о том, как можно создать собственное стриминговое приложение с использованием Node.js и React. Если вы привыкли, увидев заинтересовавшую вас идею, сразу же погружаться в код, можете прямо сейчас заглянуть в этот репозиторий.
Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments6

«Жить в кайф» или моя история от прокрастинации к саморазвитию

Reading time6 min
Views38K
Здравствуй, друг.

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


Читать дальше →
Total votes 49: ↑32 and ↓17+15
Comments65

Ломаем паттерн проектирования — Singleton в PHP

Reading time2 min
Views10K

Одним прекрасным рабочим днём я писал unit-тесты для бизнес-логики на проекте, в котором работаю. Передо мною стояла задача инициализировать некоторые приватные свойства класса определёнными значениями.

Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments24

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

Reading time4 min
Views14K


От переводчика: сегодня публикуем для вас статью Фабиана Терха. Статья в первую очередь будет полезна для начинающих программистов.

Я программист-самоучка, этот пост отражает мой личный опыт и навыки в такой сфере, как алгоритмы и структуры данных; кроме того, я рассказываю и о способах решения задач (к слову, второе мне дается несколько хуже, чем первое).
Читать дальше →
Total votes 37: ↑23 and ↓14+9
Comments6

Изучая go: пишем p2p мессенджер со сквозным шифрованием

Reading time9 min
Views44K

Yet another P2P Messenger


Читать отзывы и документацию о языке не достаточно, чтобы научиться на нем писать более менее полезные приложения.


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


Пример UI чата на ReactJs


Статья ориентирована на новичков интересующихся языком go и пиринговыми сетями.
И для профессионалов, умеющих предлагать разумные идеи или конструктивно критиковать.

Читать дальше →
Total votes 59: ↑56 and ↓3+53
Comments25

Чек-лист: что нужно было делать до того, как запускать микросервисы в prod

Reading time9 min
Views50K

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


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


Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.


English version is also available.

Читать дальше →
Total votes 138: ↑135 and ↓3+132
Comments71

Thinking with Portals: создаём порталы в Unreal Engine 4

Reading time32 min
Views19K
image

В этой статье я расскажу, как создавать порталы в Unreal Engine 4. Я не нашёл никаких источников, подробно описывающих такую систему (наблюдение сквозь порталы и проход через них), поэтому решил написать собственную.

Что такое портал?


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

Примеры порталов в играх (GIF)


Antichamber (2013 год) и Portal (2007 год)


Prey, 2006 год

Из трёх игр самой известной, вероятно, является Portal, однако лично меня всегда восхищала Prey и именно её я мечтал скопировать. Однажды я попробовал реализовать собственную версию в Unreal Engine 4, но не особо преуспел, потому что в движке не хватало функционала. Тем не менее, мне удалось провести вот такие эксперименты:


Однако только в новых версиях Unreal Engine мне наконец-то удалось добиться нужного эффекта:

Total votes 33: ↑31 and ↓2+29
Comments13

Network tools, или с чего начать пентестеру?

Reading time9 min
Views42K
Toolkit начинающего пентестера: представляем краткий дайджест главных инструментов, которые пригодятся при пентесте внутренней сети. Эти инструменты уже активно используются широким кругом специалистов, поэтому знать об их возможностях и владеть в совершенстве будет полезно каждому.


Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments6

Виды моделирования. Основы скульптинга, ретопологии и развертки

Reading time5 min
Views59K


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

Предположим, что мы решили создавать персонажа для игры, но что если это будет окружение, архитектура или что-то еще? Сначала нужно узнать какие бывают способы моделирования и понять какой нам больше подходит.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments23

GHIDRA, исполняемые файлы Playstation 1, FLIRT-сигнатуры и PsyQ

Reading time13 min
Views12K

Привет всем,



Не знаю как вам, а мне всегда хотелось пореверсить старые приставочные игры, имея в запасе ещё и декомпилятор. И вот, этот радостный момент в моей жизни настал — вышла GHIDRA. О том, что это такое, писать не буду, можно легко загуглить. И, отзывы настолько разные (особенно от ретроградов), что новичку будет сложно даже решиться на запуск этого чуда… Вот вам пример: "20 лет работал в иде, и смотрю я на вашу Гидру с большим недоверием, потому что АНБ. Но когда-нибудь запущу и проверю её в деле".

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

Unity: отрисовываем множество полосок здоровья за один drawcall

Reading time9 min
Views23K
Недавно мне нужно было решить задачу, достаточно распространённую во многих играх с видом сверху: рендерить на экране целую кучу полосок здоровья врагов. Примерно вот так:


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

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

Метод, к которому я в результате пришёл, немного отличается от всего того, что я видел у других, и не использует вообще никаких классов UI (в том числе и Canvas), поэтому я решил задокументировать его для общества. А для тех, кто хочет изучить исходный код, я выложил его на Github.
Читать дальше →
Total votes 30: ↑28 and ↓2+26
Comments9

Импорт 3D-моделей в Unity и подводные камни

Reading time7 min
Views32K
Представляем третью статью нашего цикла о работе с 3D-моделями в Unity. Предшествующие статьи: «Особенности работы с Mesh в Unity» и «Unity: процедурное редактирование Mesh».

В мире компьютерной графики существует множество форматов представления 3D-моделей. Некоторые из них позиционируются как универсальные, другие — как оптимизированные под конкретные задачи или платформы. В любой сфере мечтают работать с универсальным форматом, но реальность говорит нам «нет». Более того, из-за такого зоопарка получается порочный круг: разработчики «универсальных» инструментов придумывают свои внутренние форматы для обобщения предыдущих, увеличивая популяцию и плодя средства преобразования форматов. Так появляется проблема потери или искажения данных при конвертации. Проблема стара как мир (мир IT, конечно), и она не обошла стороной импорт моделей в Unity.

В этой статье мы расскажем о некоторых трудностях, с которыми приходится сталкиваться при работе с моделями в Unity (особенности функционирования ModelImporter, разница представлений 3D-объектов и др.), а также о том, какие инструменты мы создали, чтобы эти трудности преодолеть.

Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments3

Прогнозирование физики на стороне клиента в Unity

Reading time12 min
Views10K
image

TL;DR


Я создал демо, показывающее, как реализовать прогнозирование на стороне клиента физического движения игрока в Unity — GitHub.

Введение


В начале 2012 года я написал пост о как-бы-реализации прогнозирования на стороне клиента физического движения игрока в Unity. Благодаря Physics.Simulate() тот неуклюжий обходной способ, который я описал, больше не нужен. Старый пост до сих пор является одним из самых популярных в моём блоге, но для современного Unity эта информация уже неверна. Поэтому я выпускаю версию 2018 года.

Что-что на стороне клиента?


В соревновательных многопользовательских играх необходимо по возможности избегать читерства. Обычно это значит, что применяется сетевая модель с авторитарным сервером: клиенты отправляют серверу вводимую информацию, а сервер превращает эту информацию в перемещение игрока, а потом отправляет снэпшот получившегося состояния игрока обратно клиенту. При этом возникает задержка между нажатием клавиши и отображением результатом, что неприемлемо для любых активных игр. Прогнозирование на стороне клиента — это очень популярная техника, скрывающая задержку, прогнозируя то, каким будет получившееся движение и сразу показывая его игроку. Когда клиент получает результаты от сервера, он сравнивает их с тем, что спрогнозировал клиент, и если они отличаются, то прогноз был ошибочным и нуждается в коррекции состояния.
Total votes 28: ↑27 and ↓1+26
Comments6

Его ворсейшество из 11 полигонов, ничего общего с настоящим

Reading time2 min
Views35K


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

Поэтому, да, ковер из всего 11 полигонов. Просто, но изящно. Под катом перевод небольшого гайда.
Читать дальше →
Total votes 102: ↑99 and ↓3+96
Comments45

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

Reading time13 min
Views4.3K
image

Gamescom и Tokyo Game Show, как и E3, являются важнейшими игровыми мероприятиями для сотен тысяч разработчиков, фанатов и профессионалов отрасли, работающих в Европе и Японии. Обе выставки привлекают к себе множество разных людей, от инди-разработчиков из Швеции до огромных студий из Осаки с тысячами сотрудников.

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

Увольнения, закрытие студий, кранчи — в США всё это кажется обычной рутиной. Такие компании, как Rockstar заставляют сотрудников постоянно работать по шестьдесят часов в неделю, а Telltale увольняет бОльшую часть персонала без предупреждений и выходного пособия. Поэтому очень важно обращать внимание на несправедливые условия труда, чтобы эту ситуацию можно было исправить.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments2

«Монстры в играх или 15 см достаточно для атаки»

Reading time3 min
Views12K

Дистанция атаки противников




Спасибо читателям за проявленный интерес, рад что материалы полезны.

Представляю вам четвертую статью цикла.

Сегодня я хотел бы разобрать такой важный элемент для любого монстра — дистанция атаки.

Их существует всего три:

  • ближняя
  • средняя
  • дальняя

В первой части разберем типичные примеры поведения (паттерны).

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

Статьи становятся более сложными и основываются на предыдущих материалах.

Вы можете ознакомится с ними по ссылкам ниже:
«Монстры в играх или как создать страх»
«Монстры в играх или делаем страх разнообразным»
«Монстры в играх или как удивить игрока»

Поехали


Читать дальше →
Total votes 19: ↑15 and ↓4+11
Comments17

Давайте уберём кватернионы из всех 3D-движков

Reading time13 min
Views30K
image

Для записи трёхмерных поворотов программисты графики используют кватернионы. Однако в кватернионах сложно разобраться, потому что изучают их поверхностно. Мы просто принимаем на веру странные таблицы умножения и другие загадочные определения, и используем их как «чёрные ящики», поворачивающие векторы так, как нам нужно. Почему $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ и $\mathbf{i} \mathbf{j} = \mathbf{k}$? Почему мы берём вектор и превращаем его в «мнимый» вектор, чтобы преобразовать его, например $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Да кому это интересно, если всё работает, правда?

Существует способ описания поворотов под названием ротор, который относится к области и комплексных чисел (в 2D), и кватернионов (в 3D), и даже обобщается до любого количества измерений.

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

Кроме того, для визуализации и понимания трёхмерных роторов не нужно использовать четвёртое пространственное измерение.

Было бы здорово, если бы начали вытеснять использование и изучение кватернионов, заменяя их роторами. Заменить их очень просто, а код останется почти таким же. Всё, что можно делать с кватернионами, например, интерполяцию и устранение блокировки осей (Gimbal lock), можно сделать и с роторами. Но понимать мы начинаем гораздо больше.
Читать дальше →
Total votes 54: ↑53 and ↓1+52
Comments85

GPU консоли Nintendo DS и его интересные особенности

Reading time10 min
Views11K

Я хотел бы рассказать вам о работе GPU консоли Nintendo DS, об его отличиях от современных GPU, а также выразить своё мнение о том, почему использование Vulkan вместо OpenGL в эмуляторах не принесёт никаких преимуществ.

Я не особо знаю Vulkan, но из прочитанного мне понятно, что Vulkan отличается от OpenGL тем, что работает на более низком уровне, позволяя программистам управлять памятью GPU и подобными вещами. Это может пригодиться для эмуляции более современных консолей, в которых используются проприетарные графические API, обеспечивающие уровни контроля, недоступные в OpenGL.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments2
1
23 ...

Information

Rating
Does not participate
Registered
Activity