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

@stepancar
Copy link

Если есть AST - в чем именно проблема кодогенерации? Покрыт ли проект тестами, которыми можно проверить корректность сгенерированного приложения? Можете поделиться, примерами плохой документации typescript internal API? Они вроде хорошо принимают PR на доки. Может какая-то часть вашего конвертера есть в опенсорс? Интересно посмотреть

@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