Pull to refresh
41
0
Иван @janson

Разработчик. PHP, JS, TypeScript.

Send message

Kerbal Space Program обновилась до релизной версии 1.0

Reading time1 min
Views16K
image

Симулятор космической программы Kerbal Space Program, позволяющей взять на себя руководство ЦУПом одной маленькой, но очень энергичной планеты, недавно обновился до версии 1.0
Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments56

Вы неправильно пишете животных

Reading time5 min
Views368K
Животные – это платформы с очень ограниченной памятью, вычислительными способностями и возможностями модификаций. Разработчикам энимал-сцены приходится выдавать практически гениальные низкоуровневые алгоритмы. Правда, большое количество хардкода вызывает характерные проблемы с отсутствием проверки в экзотических условиях. Та же фильтрация входных данных делается очень и очень криво.


Уязвимость рекурсивных алгоритмов навигации муравья: спираль смерти

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

Но пойдём далее. Я не знаю, кто разрабатывал архитектуру ящериц, но они бегают в одном процессе, а дышат в другом. При этом платформа не поддерживает многозадачность, поэтому костыль с максимальной длиной бега в 4-6 секунд просто эпичен.
Читать дальше →
Total votes 442: ↑438 and ↓4+434
Comments352

PHP-Дайджест № 59 – интересные новости, материалы и инструменты (16 – 29 марта 2015)

Reading time4 min
Views22K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →
Total votes 44: ↑39 and ↓5+34
Comments22

Если нельзя оставить комментарий, но очень хочется, то можно

Reading time4 min
Views13K
Да, именно с такой проблемой я столкнулся при посещении очередной Landing page, продавшей мне якобы первоклассный товар. Но после визита курьера понимаешь, что тебя развели, а оставить отзыв или еще как-либо предупредить остальных ты не в силах. В этот момент в голову и пришла мысль о расширении для браузера, которое позволило бы оставлять комментарии, заметки, отзывы или читать чужие, прямо на посещаемом сайте.



Имя всему этому CommentAll. Если еще интересно — прошу под кат. Даже если не интересно, все равно загляните под кат, может быть, ещё рано делать выводы, а оставить свой гневный комментарий — это всегда пожалуйста.
Читать дальше →
Total votes 59: ↑37 and ↓22+15
Comments60

Пишем SOAP клиент-серверное приложение на PHP

Reading time29 min
Views236K
Всем привет!
Так случилось, что в последнее время я стал заниматься разработкой веб-сервисов. Но сегодня топик не обо мне, а о том, как нам написать свой XML Web Service основанный на протоколе SOAP 1.2.

Я надеюсь, что после прочтения топика вы сможете самостоятельно:
  • написать свою собственную серверную реализацию веб-приложения;
  • написать свою собственную клиентскую реализацию веб-приложения;
  • написать свое собственное описание веб-сервиса (WSDL);
  • отправлять клиентом массивы однотипных данных на сервер.

Как вы могли догадаться, вся магия будет твориться с использованием PHP и встроенных классов SoapClient и SoapServer. В качестве кролика у нас будет выступать сервис по отправке sms-сообщений.
Интересно?
Total votes 48: ↑38 and ↓10+28
Comments26

Как побеждать в компьютерных играх, часть II: конкретные примеры

Reading time6 min
Views54K


Напоминаю, есть мужик Дэвид Сирлин, который известен чемпионством по Street Fighter и в GameDev. Он написал книгу про то, как побеждать и готовиться к турнирам. Первая вступительная часть тут. Ниже — выжимка части II и мои комментарии.

Вот мы и дошли до настоящего мяса. Это разборы игровых ситуаций и конкретные примеры того, как думает оппонент. Например:
Если у тебя есть какой-то дурацкий шаблон действий, который убивает соперника, не надо задумываться над чем-то ещё. У такой техники ещё есть дополнительный бонус — она доводит людей до белого каления. Если кого-то бьют с помощью одной и той же повторяющейся тактики, то они обычно выходят из себя и срываются, в результате играют еще хуже, еще чаще ошибаются, становятся все злее, и так далее. Порочный круг.
Читать дальше →
Total votes 44: ↑37 and ↓7+30
Comments28

PHP-Дайджест № 55 – интересные новости, материалы и инструменты (11 – 25 января 2015)

Reading time4 min
Views23K


Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать дальше →
Total votes 57: ↑53 and ↓4+49
Comments3

Борьба с 2D-физикой в Unity на примере бесконечной игры

Reading time9 min
Views83K


Мой странный творческий путь занес меня в разработку игр. Благодаря отличной студенческой программе от IT-компании, название которой СостоИт из одной Греческой МАленькой буквы, сотрудничающей с нашим университетом, удалось собрать команду, родить документацию и наладить Agile разработку игры под присмотром высококлассного QA-инженера (здравствуйте, Анна!)

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

Наша игра использовала физический движок неожиданным для него способом, что породило множество проблем с производительностью на мобильных платформах. В этой статье, на примере нашей игры, описана моя борьба с физическим движком и все те особенности его работы, которые были замечены на пути к жизнеспособной бета-версии.
Читать дальше →
Total votes 56: ↑49 and ↓7+42
Comments32

N+1 полезных книг о бизнесе

Reading time9 min
Views229K
В топике блиц-обзор книг, которые будут полезны IT-специалистам, бизнесменам и тем, кто собирается открыть своё дело. Рядом с каждой — короткие пояснения, почему и зачем стоит прочесть.

Отобраны лучшие 10% из примерно 200 прочитанных книг о маркетинге, продажах и всем связанном — самые «пробивные» вещи, которые помогут вам не тратить время на всякий шлак, а сразу начать с главного.

В конце — суммация книг, которые хабровчане рекомендуют в комментариях помимо основного списка.

Читать дальше →
Total votes 148: ↑137 and ↓11+126
Comments131

Создание собственного вендорного бандла в Symfony2

Reading time26 min
Views20K
Часто возникает необходимость использовать одинаковый код в разных проектах. Чтобы не было повторения кода, такой код обычно помещают в библиотеку. В фреймворке Symfony2 весь код должен быть помещён в так называемые бандлы (bundle). Уже сейчас существует огромное количество бандлов, решающих совершенно разные задачи, но всё-таки часто возникает необходимость создания своего бандла, решающего рутинную задачу.

Это может быть обычный бандл, находящийся в папке src, и тогда при необходимости использовать его в новом проекте нужно скопировать его в новый проект. Но в таком случае возникает проблема с обновлением кода, ведь, когда код доступен для изменения, то он будет изменён (особые извращенцы изменяют даже код в папке vendor). Для удобства процедуры использования своего кода в других проектах можно оформить бандл как внешний, вендорный бандл, и управлять им через composer наравне с остальными сторонними бандлами.

Эта статья пошагово показывает, как можно с нуля создать бандл, доступный к установке через composer.

Содержание:
  1. Создание нового бандла
  2. Добавление настроек в бандл
  3. Подготовка бандла к публикации
  4. Публикация бандла

Будет рассмотрено создание бандла для управления статичными страницами сайта. Можно найти несколько готовых подобных бандлов, но они либо слишком простые, либо слишком сложные (типа SonataPageBundle). Уровень статьи — продвинутый новичок. Подразумевается, что читатель уже умеет создавать бандлы в проекте, а также пользоваться контроллерами и шаблонами.
Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments6

«Галоп пикселя — часть первая» — базовые понятия, этапы взросления, прикладные упражнения

Reading time42 min
Views269K


«Галоп пикселя», часть I — базовые понятия, этапы взросления, прикладные упражнения (линк)
«Галоп пикселя», часть II — перспектива, цвет, анатомия и прикладные упражнения (линк)
«Галоп пикселя», часть III — Анимация (линк)
«Галоп пикселя», часть IV — Анимация света и тени (линк)
«Галоп пикселя», часть V — Анимация персонажей. Ходьба (линк)
«Галоп пикселя», часть VI — Анимация персонажей. Бег (линк)

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

В данной публикации мы не рассматриваем программы, но копаем нечто большее. Сами пиксели. От истоков, начав с четырехцветной CGA-эры, вплоть до эпохи ренессанса. В публикации мы не рассматриваем игры, не поем дифирамбы художникам прошлого (разве что самую малость), занимаясь именно процессом создания простейшего пиксель-арта. Данный материал будет интересен начинающим артистам и интересующимся. Статья практически не содержит теории, нудных умозаключений и представляет сторонний взгляд на мир пиксель-арта со стороны некоего самоучки, который предпочел открыть каждую из Америк самостоятельно, не оглядываясь на официальных, общепризнанных и задокументированных Колумбов. Статья снабжена обильным количеством поясняющих иллюстраций, примеров, и советов.

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


Лопатить пиксели
Total votes 190: ↑185 and ↓5+180
Comments86

Играй на победу: как побеждать в играх и что нужно знать о профессиональных игроках в GameDev [часть 1]

Reading time6 min
Views127K


Давным-давно мы с друзьями играли в Starcraft по диалапному модему. Я часто проигрывал, пока не прочитал на одной из BBS фразу, которая всё поменяла. Принцип очень простой: в стратегиях реального времени выигрывает тот, кто постоянно атакует. Нужно было научиться мыслить категориями постоянного создания угроз.

К чему я это. Есть такой мужик — Дэвид Сирлин. Киберспортсмен, чемпион по Street Fighter, гейм-дизайнер, настольщик, киберспортивный тренер. У него есть целая теория на тему того, как тренироваться и играть так, чтобы выигрывать. Универсальная, применима ко всем играм. Ниже — основные тезисы первой части и мои комментарии. Прочитать про основные вещи из книги будет интересно и с точки зрения GameDev (в особенности — балансировки), и просто по жизни.
Читать дальше →
Total votes 76: ↑72 and ↓4+68
Comments57

Запуск старых игр на современном компьютере — список методов

Reading time6 min
Views201K
В этом посте я решил собрать все известные мне способы запуска старых игр на современном компьютере. Это не пошаговая инструкция, а именно список способов, утилит и ссылок, что бы понимать, куда копать и что делать. По каждому конкретному методу уже существуют подробные документации, написанные другими людьми, так что моя цель – просто собрать всё это добро воедино.
Откройте хабракат, и ваше импы станут мягкими и шелковистыми.
Total votes 47: ↑47 and ↓0+47
Comments42

События, которые повлияли на ваше развитие в детстве

Reading time3 min
Views142K


UPD: игра вышла.

Привет!

Тут такая история. Я заметил, что в какой-то момент стал отмечать для себя важные вещи для развития ребёнка. Например, у меня в детстве был сначала модульный конструктор с мотором, колёсами, батарейками и так далее, а потом – модульный же радиоконструктор. Эти два предмета очень сильно повлияли на то, чем я потом интересовался в будущем.

Ещё пример – в детстве надо обязательно сходить в политехнический и археологический музеи Москвы. Или, например, запомнились такие штуки: первая хорошая НФ, подаренная в 8 лет; дед, научивший меня чертёжному почерку за 15 минут; шахматы каждые выходные; огромная коробка Лего и так далее. И таких событий – тысячи.

У меня просьба. Давайте накидаем важные и интересные вещи, которые можно и нужно сделать с ребёнком до примерно 10 лет. Наверняка ведь у вас есть такие «чекпоинты», которые запомнились.
Читать дальше →
Total votes 160: ↑154 and ↓6+148
Comments552

Конференция HDConf: видео-отчет

Reading time2 min
Views8.7K
image

4 октября в Минске конференция Highload Dev Conf собрала более 350 разработчиков. С докладами выступили специалисты в разработке высоконагруженных систем из компаний Одноклассники, Amazon, Altoros, Wargaming, Coub, Aviasales, Badoo и др.

В прошлой статье мы опубликовали фотоотчёт конференции и слайды докладов. Как и обещали загрузили видео докладов.
Читать дальше →
Total votes 19: ↑11 and ↓8+3
Comments2

SineRider, игра о построении графиков

Reading time2 min
Views9K
Несмотря на свои небольшие детали в виде рисунков, сближающих игру с легендарным комиксом юмора для гиков xkcd, SineRider была создана не Рэнделом Манро, а Кристофером Уокером. Работы над проектом ведутся как минимум с лета этого года.

Своему созданию игра обязана часами, потраченными автором на построение графиков функций на графическом калькуляторе TI-86. SineRider написана на движке Unity, что позволяет запускать её на Windows, Linux и OS X, а также играть в неё прямо в браузере с установленными плагином Unity.

Правила предельно просты: каждый из уровней является математической задачкой, которую нужно решить заданием функции с нужным графиком. Функция задаётся от x и от переменной t, которая является временем после запуска.

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

При этом нужно обойти все обозначенные области. Некоторые области нужно обходить в определённом порядке. В некоторых областях нужно стоять определённое количество секунд. Некоторые области могут двигаться.
Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments4

Postgres. Выборка N случайных записей

Reading time6 min
Views37K
При работе над одним проектом возникла необходимость написать некое подобие тестовой системы. Задача формулировалась примерно так:

  • из N записей в базе необходимо выбрать m (3-5) случайных строк в серии из k выборок (преимущественно k=2).

А теперь то же самое человеческим языком: из таблицы нужно два раза выбрать по 3-5 случайных записей. При этом не должно быть дубликатов и выборка должна происходить случайным образом.

Первое, что приходит в голову:

 SELECT *
  FROM data_set
  WHERE id NOT IN (1,2,3,4, 5)
  ORDER BY random()
  LIMIT 5;

И это даже будет работать. Вот только цена такого решения…
Читать дальше →
Total votes 56: ↑51 and ↓5+46
Comments47

Изначально ущербная система подготовки к переговорам

Reading time6 min
Views117K


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

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

Давайте ещё раз. Бывают хорошие условия, бывают нормальные, бывают плохие. Одни можно превратить в другие. Но если вы понимаете, что из плохих условий не сделать нормальные, то единственный логичный выход – остановить переговоры как можно быстрее. Вам не нужны компромиссы, странные пути решения и долгие разговоры. Вам нужно встать и уйти.
Читать дальше →
Total votes 187: ↑179 and ↓8+171
Comments146

Почему только hard и hardcore

Reading time4 min
Views78K
Так получилось, что мы играем в игры на высокой сложности. Причина вовсе не в том, что мы упорные обдолбанные гики, а в простой рациональности — желании получить от игры удовольствие.

Дело ведь в чём: раньше все игры были достаточно сложными, потому что были рассчитаны на куда более хардкорных геймеров. Когда у тебя нет интернета, картриджей всего 5 штук, а делать нечего — ты играешь в то, что есть. И пройти игру для ребёнка в 90-х означало вовсе не то, что сегодня.

image

Сегодня «пройти» — это потратить какое-то время на то, чтобы «просмотреть» сюжет и сделать 200 save-load. А раньше «пройти» — это целый подвиг. Без гарантии результата. Вот хотя бы советская «Ну, погоди!». Я до сих пор помню, как зашёл на долгожданный финал… и увидел, что игра циклична как тетрис. Мультфильм тоже не показали.

Но вернёмся к тому, почему только hard или hardcore. И какое это имеет отношение к GameDev и бизнесу.
Читать дальше →
Total votes 109: ↑83 and ↓26+57
Comments247

Zend Framework 2: Service Manager

Reading time7 min
Views21K

Service Manager (SM, CM) в ZF2.


Service Manager — это один из ключевых компонентов Zend Framework 2, который существенно облегчает жизнь разрабочика избавляя его от дублирования кода и рутинных операций по созданию и настройки сервисов, позволяя их конфигурировать на максимально высоком уровне. СМ, по своей натуре, является реестром сервисов, основная задача которого — создание и хранение сервисов. Можно сказать, СМ является очень продвинутой версий компонента Zend_Registry из Zend Framework 1.
СМ реализует паттерн Service Locator. Во многих частях приложения (например, в AbstractActionController) можно встретить функции getServiceLocator(), которые возвращают класс Zend\ServiceManager\ServiceManager. Такое несоответствие названия метода и возвращаемого типа легко объясняется тем, что getServiceLocator() возвращает объект, реализующий интерфейс ServiceLocatorInterface:
Читать дальше →
Total votes 20: ↑14 and ↓6+8
Comments35

Information

Rating
5,615-th
Location
Бишкек, Кыргызстан, Кыргызстан
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Senior
PHP
OOP
Git
Database
Docker