Skip to content

Instantly share code, notes, and snippets.

@Busyrev
Last active June 13, 2018 14:31
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Busyrev/9d2a5dae8d13c9be495fabb748aec3a5 to your computer and use it in GitHub Desktop.
Save Busyrev/9d2a5dae8d13c9be495fabb748aec3a5 to your computer and use it in GitHub Desktop.

Привет! Меня зовут Миша Бусырев, и я ищу TypeScript разработчика в компанию Crazy Panda, чтобы дать вторую жизнь одной нашей очень успешной игре. В августе 2016 года я начал исследовать возможность портирования Flash-игры на HTML5. к концу 2016 года стало понятно, как осуществить этот проект, заработал прототип графдвижка, к концу лета 2017 был завершён второй из трёх этапов исследования, написан транспилер AS3 -> TypeScript. Сейчас мы работаем над рантаймом флеша. Мы работаем вдвоём, я и @ivanpopelyshev и с радостью примем третьего человека в нашу команду. Ваня подхватил разработку движка и скрестил его с PIXI, я специализаруюсь на транспайлере. Проект подходит к своей кульминации, скоро ожидается возможность запустить прототип сконвертированной игры целиком и таки собрать все части воедино. Естественно, во многих местах конвертер сделан, что называется "крупными мазками", предстоит ещё множетсво различных задач, по доведению портированной игры до состояния запуска.

О проекте:

Мы портируем клиент большой и успешной социальной игры с Flash на WebGl. Игра очень большая по объёму кода (1900 классов, 10 мегабайт кода) и продолжает развиваться, поэтому о том, чтобы переписать её с нуля, речи не идёт. Вместо этого пилим автоматический конвертер – то есть, игровую логику писать руками заново не придётся. В данный момент мы активно используем внутренние апи компилятора, и удалось сделать транспилер ActionScript 3.0 в TypeScript последней версии. Если крадко, то удалось научить компилятор тайпскрипта понимать ActionScript. И загрузив AST, мы преобразуем его используя апи для трансформаций кода. Этап исследований по транспайлингу кода завершён, все приципиальные проблемы решены, одним кликом код из actionscript 3.0 конвертируется в typescript и сохраняет работоспособность, написано множество тестов, которые также после конвертации правильно работают, да uint правильно работает в js, да интерфейсы правильно представлены в рантайме, и ещё куча всего, что работает во флеше, но не работает в TS симулировано, причём с адекватной производительностью. Ещё требуется немного работы напильником над конвертером, но все основные очертания ясны и работают, сейчас мы соредоточены на рантайме флеша, выбирая между Mozilla Shumway, OpenFL и других библиотек мы остановили свой выбор на Mozilla Shumway, который уже адоптировали под свременный TypeScript, попутно найдя и исправив некоторое количество багов.

Наши графические задачи не по зубам готовым фреймвёркам, однако Ваня смог адаптировать наш полностью кастомный рендеринг под инфраструктуру PixiJS. Все анимации осуществляются на вершинном шейдере, в то же время мы получаем многие плюшки инфраструктуры пикси. Вот видео тестовой сцены https://www.youtube.com/watch?v=Qynuu95oioU я надеюсь оно снимет вопрос, почему же свой кастомный движок. А вот вкрутили интерактив https://www.youtube.com/watch?v=adixpp9CK_A

Браузеры поддержим все популярные: Chrome, Firefox, Edge, IE 11 (на западе он ещё вполне жив). WebGL во всех них работает нормально, так что многих проблем непосредственно совместимости с браузерами не ожидается, DOM использовать почти не будем.

Вообще, автоматизация портирования подарит нам множество незабываемых часов, дней и ночей. Работать будем небольшой и независимой командой технарей (втроём). Это ультрамарафон, активная стадия разработки идёт уже полтора года, а работы ещё вагон, дальше – поддержка и, возможно, портирование других проектов. Ожидается огромный профессиональный рост всех участников в процессе, так как количество технических вызовов огромно, а сложность задачи пугает с первого взгляда. Да, internal апи typescript слабо документировано. Много приходится изучать по исходникам, тестам, проводить эксперименты, кстати мы таки форкнули компайлер и сидим на кастомном билде тайпскрипта, при этом обновляя его синхронно с выходом новых версий.

О компании:

Crazy Panda основана в 2010 году, и наши игры собрали более ста миллионов игроков; компания уверенно стоит на ногах с момента своего основания и закрепилась на множестве рынков. Более подробно о Crazy Panda можно узнать на официальном сайте: https://crazypanda.ru/o-nas и в интервью (хоть оно и немного устарело): https://goo.gl/I0Xgrd Фотки офиса можно посмотреть тут https://moikrug.ru/companies/9031891857

Требования к кандидатам:

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

Так как мы пишем на TypeScript, то:

Искренне любить строгую типизацию и понимать, зачем она нужна. Пишем с noImplicitAny. Уметь строить прозрачную и эффективную архитектуру больших проектов. Уметь писать хорошо читаемый и при этом высокопроизводительный код, уметь профилировать. Понимать, что такое модульность программ и зачем она нужна. Плавать среди замыканий как рыба в воде. Любить и читать спеки. Возможно, ваш опыт в TypeScript небольшой, но вы обладаете хорошим опытом в JavaScript и хотите двигаться в сторону TypeScript. Ваша библия: http://www.ecma-international.org/ecma-262/7.0/index.html и https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md

Про офис:

Работаем только в офисе в Москве (м. Автозаводская). Переезд из другого города или страны? Отлично, мы поможем. Плюшки: компенсации по страховке, фитнесу и парковке; гибкий рабочий график; английский разного уровня в офисе; холодильник с едой и напитками, печеньки с темной стороны, кофе-машина, приставки, пинг-понг, бамбук, Oculus Rift и HTC Vive для развлечений.

Вы готовы?

Если вы чувствуете в себе силы и уверенность, но какие-то моменты не соответствуют вышеуказанным требованиям, всё равно пишите – обсудим! Вы же умеете осваивать новое?

Уровень зарплаты? Наши требования весьма гибки и мы рассматриваем кандидатов с широким диапазоном знаний. Ну давайте, скажем, 100-200 тысяч рублей в месяц на руки, обсуждение на собеседовании. Стоящий кандидат получит стоящее предложение. Если заинтересовались, напишите мне пару слов на m.busyrev@crazypanda.ru. Есть резюме – отлично, но если лень его обновлять – не проблема, обсудим голосом. Также меня можно найти на почти любом BeerJS или MoscowJS.

Бусырев Михаил. Руководитель WebGL Research, Crazy Panda. m.busyrev@crazypanda.ru

@Busyrev
Copy link
Author

Busyrev commented May 30, 2017

@stepancar

Если есть AST - в чем именно проблема кодогенерации?

Проблемы особой то и нет, всё понятно, работы много есть. Но например в ActionScript есть int. И основная работа конвертации не синтаксическая а семантическая. С интом кстати уже порешали на принципиальном уровне.

Покрыт ли проект тестами, которыми можно проверить корректность сгенерированного приложения?

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

Можете поделиться, примерами плохой документации typescript internal API?

microsoft/TypeScript#13940
microsoft/TypeScript#13761
Всё очень неочевидно и тесты в тайпе поверхностны. Я сейчас в процессе формирования issue к ним про трансформ апи, там будут подробности.

Может какая-то часть вашего конвертера есть в опенсорс? Интересно посмотреть

Нет, на данный момент нет. Вероятность опенсурса частей существует, но только вероятность и нам сейчас вообще не до этой работы.

@stepancar
Copy link

Спасибо за развернутый ответ!

@Busyrev
Copy link
Author

Busyrev commented Jan 9, 2018

Текст вакансии отредактирован и приведён в соответствие современному положению дел.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment