Новости бизнесаСтатьиАналитические колонкиДеньгиКурс валютБизнес технологии
Главная > Новости бизнеса > Hi-Tech > Как упорство позволило совместить увлечение всей жизни с программированием — Разработчик Игорь Гриценко о создании просмотрщика файлов в формате Sketch

Как упорство позволило совместить увлечение всей жизни с программированием — Разработчик Игорь Гриценко о создании просмотрщика файлов в формате Sketch

Пятница, 17 марта 2017 г.

Следите за нами в ВКонтакте, Facebook'e и Twitter'e

Разработчик standalone-просмотрщика файлов в формате Sketch для Windows Icons8 Lunacy Игорь Гриценко написал для vc.ru колонку о том, как хобби и основная специализация помогают создавать успешные продукты.



В избранное Начало пути

С самого детства мне нравились две вещи: программирование и графика. Когда мне было 7 лет, я сделал короткий мультик в текстовом редакторе Lexicon. Немногим позже я нашел то, что позволило мне соединить мои увлечения еще более органично, — игры.

Я люблю игры. Но не играть в них, а создавать. То, как они сочетают в себе программирование и изобразительное искусство, всегда очаровывало меня. В итоге появилась моя первая игра — «гонки», которую я сделал с помощью QBasic. Хотя выглядит она почти как тетрис.



В школе мое увлечение играми только росло. В 10 классе сделал на Basic «танчики» для КПК Palm — помню, играл весь класс.

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

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

Я смоделировал школу и добавил пару кадетских моделей, которые нашел в интернете. Вдохновленный задачей, я зашел немного дальше: создал несколько бронемашин и разработал случайный сценарий (вероятность которого была низка, я бы даже сказал ничтожна) нападения на нашу школу врага. Фактически я сделал 3D-стратегию в реальном времени.

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



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

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

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

Я не хотел далеко отходить от графики и выбрал второе. Устроился на телевидение. Там разрабатывал софт, который снимал видео с 20+ камер в кластере и монтировал его там же в единое целое, а потом это все отправлялось производственной команде. Потом был Music Box, РБК-ТВ, RT, «Доверие», «Россия-2». Меня без проблем брали на работу, потому что был опыт на ТВ и навыки программирования.

Формально я работал видеоинженером или администратором, что несколько отдаляло меня от программирования. Поэтому все свободное время я программировал и на всех каналах оставил после себя какую-нибудь полезную утилиту для сдачи смен, подписи дисков, замены бегущей строки и прочего.

Поначалу работа на телевидении была идеальной для меня, но видеоинженеры получают не так уж и много, а утилитами я ничего не зарабатывал. Затем родилась дочка, расходы сильно выросли, и чаша весов склонялась к первому варианту — скучной работе за более высокую зарплату. Поэтому, когда знакомый предложил разрабатывать сайты на PHP, я легко согласился.

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

Тогда я и решился написать Ивану, основателю Icons8 (каталога бесплатных иконок — прим. ред.) Мы познакомились задолго до того, как я начал работать над своим текущим проектом — просмотрщиком .sketch-файлов Lunacy.

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

К тому времени я уже получил должность мобильного разработчика для Windows в «Рокетбанке», но все-таки понемногу консультировал Ивана по поводу Icons8 Windows App —приложения Icons8 для работы с иконками, и даже сделал рабочий прототип за пару дней.

Позже стало понятно, что полный рабочий день в банке и частичная занятость в Icons8 — это слишком, поэтому наше сотрудничество постепенно свелось на нет.

Однажды директор по маркетингу увидел, как я показываю одну из своих простых игр коллегам. Она ему так понравилась, что он привлек меня к созданию небольших игр для отдела маркетинга. Я полировал банковское мобильное приложение, и при этом примерно 200 людей играли в мои игры каждый месяц. Жизнь была прекрасна. История могла бы легко закончится на этом моменте, но этого не случилось.

Пока я работал в «Рокетбанке», коллега предложил мне сделать клон Sketch, но для Windows. Идея мне показалась перспективной, но все были загружены, и дальше дело не пошло. Тогда же в банке решили, что мобильное приложение для Windows им больше не нужно, а мне предложили переключиться на iOS или заниматься Ruby on Rails в бэкенде.

Мне не понравился ни один из вариантов, и тогда я снова связался с Иваном. Ему понравилась идея создания Sketch для Windows. Более того, оказалось, что он сам думал об этом уже какое-то время.

Мы долго обсуждали идею проекта и в итоге решили начать с чего-то простого, как нам тогда казалось, и полезного. Так началась формироваться идея Lunacy, standalone-программы для просмотра .sketch-файлов на Windows. Разработка Lunacy

Разработка MVP Lunacy заняла три месяца. Первая версия программы могла только открывать .sketch-файлы. Задача звучала тривиальной, но по факту была далекой от этого, ведь нужно было открыть эти файлы на Windows, а не на macOS, где они были созданы в Sketch.

Весь процесс состоял из двух этапов: понимания структуры .sketch-файла и последовательной ее визуализации на Windows. Чтобы понять структуру, нужны были навыки программирования, а мой опыт работы с графикой помог разобраться, как эту структуру визуализировать. Структура .sketch-файла

Если коротко, то структура любого .sketch-файла — набор данных обо всем, что внутри него: об объектах и их иерархии, стилях, размерах и прочем. Вот так выглядит файл, если его просто открыть в Sketch:

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

Что произойдет, если попытаться открыть этот этот файл через обычный консольный файл-менеджер?

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

Выгрузив содержимое этой ячейки, можно столкнуться с кучей символов:

Но все начинается со строки bplist. Заглянув в поисковики, я понял, что это — стандартный формат macOS для хранения структурированных данных, который называется PList. Недолго думая, конвертировал все это в XML с помощью встроенной утилиты для Mac:

Стало похоже на подобие структуры. Пару дней разбирался что и как хранится, что можно вытащить, и понял, что можно вытащить все. Дело осталось за малым — повторить все это на Windows.

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

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

Тут уже легко понять, что у объекта с именем Sketch viewer for Wi в структуре Frame указано положение и размер объекта. Теперь я мог визуально сравнивать сам файл, открытый на macOS, и его структуру, открытую на Windows. Визуализация

Получив структуру файла, можно было последовательно отрисовывать каждый объект, который был в этой структуре.

Для отрисовки на экране используется кроссплатформенная библиотека Google Skia, а точнее, оболочка Xamarin SkiaSharp. С помощью OpenGl она может рисовать графические примитивы, текст или растровые изображения. Кроме того, она обеспечивает все необходимые возможности для визуализации объектов файла максимально близко к оригиналу, так как поддерживает большинство возможностей, которые используются в скетче: градиентные и тайловые заливки, режимы наложения цвета, эффекты тени, размытия и прочее.

[embedded content]

На видео видно, как один за другим последовательно отрисовываются все части файла. В итоге получается то, что мы и называем макетом или .sketch-файлом. Вывод

Много лет назад я заработал первые деньги, делая обычную программу для одного студента, как будто жизнь мне говорила: «Эй, не рискуй, просто программируй и все будет в порядке. Не ищи проекты с какими-то визуальными составляющими, не комбинируй вещи, которые делают разные группы людей. Просто программируй, и все будет хорошо».

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

В избранное

Следите за нами в ВКонтакте, Facebook'e и Twitter'e


Просмотров: 493
Рубрика: Hi-Tech
(CY)

Архив новостей / Экспорт новостей

Ещё новости по теме:

18: 40
Goldenrod: великий рекордсмен, который опоздал |
18: 40
Google объявила о запуске Android Pay в России |
18: 40
Экс-сотрудник Google рассказал подробности о работе подразделения по предотвращению утечек внутри компании |
18: 20
Временно бесплатные: 5 приложений, которые неожиданно обесценились |
18: 20
Космонавты NASA планируют экстренный выход за пределы МКС |
16: 00
5 шагов, которые помогут быстро запустить А/В-тестирование |
15: 20
Рынок ноутбуков вырос в годовом выражении на 6,1% |
15: 20
OUKITEL позволяет купить K10000 Pro за полцены |
15: 20
Появились новые фотографии iPhone 8. Touch ID может оказаться сзади |
15: 20
Первый в мире робот-полицейский приступил к работе |
15: 00
Научно-исследовательский центр CSNE разработает мозговой имплантат на основе архитектуры ARM |
14: 40
Like Like — сервис по вызову специалистов из сферы красоты на дом или в офис |
13: 40
Цифра дня: Сколько смартфонов заразили задержанные МВД хакеры? |
13: 40
Пепел камчатского вулкана нашли на Шпицбергене |
12: 40
Bloomberg: место генерального директора Ford займет руководитель направления беспилотных автомобилей |
11: 40
Россия и США будут являться одними из основных рынков для Android Go |
11: 40
Бесплатный пробный период теперь недоступен для пользователей Apple Music в Австралии, Испании и Швейцарии |
11: 40
Вкладыши и затычки: что опаснее для твоего слуха? |
11: 00
Samsung выпустила 200 млн компрессоров для холодильников |
11: 00
Беспилотный автобус «Матрешка» появится уже в 2017-ом году |
11: 00
Resident Evil перезапустят в кино |
10: 40
Опубликовано изображение планшета Verizon Ellipsis 10 HD |
10: 40
Bentley сделала специальный автомобиль для охотников |
10: 20
PowerColor готова приступить к поставкам видеокарты Radeon RX 570 4 GB Red Devil |
10: 00
Официально анонсирован смартфон Ulefone Gemini Pro |
10: 00
Люди предположительно достигнут ближайших звезд уже через 100 лет |
09: 20
Робоферма без людей откроется в Японии уже в этом году |
09: 20
«Яндекс.Метрика» обошла блокировку украинских властей с помощью Amazon |
08: 20
Странная массовая авария на мотогонке |
07: 40
Смартфон Nubia Z17 получит модную нынче стеклянную крышку с цветовыми переливами |
07: 40
Появился первый обзор коробки для пиццы от Apple |
Новости бизнесаСтатьиАналитические колонкиДеньгиКурс валютБизнес технологии
Rating@Mail.ru
Условия размещения рекламы

Наша редакция

Обратная связь

RosInvest.Com не несет ответственности за опубликованные материалы и комментарии пользователей. Возрастной цензор 16+.

Ответственность за высказанные, размещённую информацию и оценки, в рамках проекта RosInvest.Com, лежит полностью на лицах опубликовавших эти материалы. Использование материалов, допускается со ссылкой на сайт RosInvest.Com.

Skype: rosinvest.com (Русский, English, Zhōng wén).

Архивы новостей за: 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003

Март 2017: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31