Статьи

RubyMotion: Эрл Грей с сахаром

Граф сообщества RubyMotion объясняет Sugarcube

ctagray Ruby хорошо подходит для создания предметно-ориентированных языков (DSL).

Если вы впервые приступаете к разработке под iOS, у вас, вероятно, будет одна из этих последовательных реакций, основанная на вашем прошлом

  • Тяжелый C / C ++: у этого Objective-C даже не должно быть буквы «C»!
  • SmallTalk или NeXT: я снова дома
  • Рубин: WTF?

Как было описано в предыдущей статье , в RubyMotion было подразумеваемое обещание «Ruby заменить Objective-C». Это было на самом деле не совсем правда. Несмотря на то, что RubyMotion — это набор инструментов, который компилирует код Ruby (или подобный Ruby) в исполняемый файл iOS, нет никакого способа понять структуру и архитектуру iOS и Objective-C.

В сообществе RubyMotion было предпринято много попыток «смягчить удар», который был нанесен, когда злобный Rubyist встречает Бегемота Objective-C.
Bubble-Wrap (так удачно названный) был первым и оставался самым популярным в течение довольно долгого времени. Это помогает «обернуть» неясный и запутанный синтаксис, требуемый iOS, в стиле Ruby-esque.

Конечная в синтаксическом сахаре пришла вместе с SugarCube . SugarCube — это почти совершенно новый язык, написанный как DSL, для RubyMotion .

«Человек за занавесом» для SugarCube — это Колин Томас Арнольд Грей.

Усилия Колина в сообществе RubyMotion , особенно с его DSL под названием SugarCube, принесли ему официальную должность менеджера сообщества в сообществе RubyMotion.

Я говорил с Колином о его прошлом , его введении в RubyMotion , истории и развитии SugarCube и его новой должности в сообществе RubyMotion .

Интервью

Том: Расскажите нам о своем прошлом и своем введении в Ruby (и RubyMotion ).

Колин: Да, я рано узнал, что мне нравится создавать инструменты, вещи, которые используют другие люди. Я также люблю создавать продукты, но мне больше нравится создавать инструменты. Мне нравится писать код многократного использования. Поэтому, даже если это только для меня в будущем, мне очень нравится этот аспект.
Это весело, чтобы повозиться. Конечно, программирование — такая удачная профессия, потому что это непосильная работа, и мы любим ее, и нам платят, чтобы мы просто возились весь день.

Том: Вы сказали, что работали в Денвере на PHP — помогали создавать Framework — примерно в то время, когда была опубликована первая книга PickAxe . Итак, Руби интересовала тебя, но это не было основным языком для тебя в то время?

Колин: Итак, я заинтересовался Ruby, и, как я уже сказал, я писал нашу собственную структуру. Так что я основал многое из идей Rails; ORM сильно отличался, у него был больше доступа к сырому SQL.

Таким образом, Ruby был чем-то вроде «там», это было то, что я хотел использовать, я читал это и пытался узнать больше об этом, но я не использовал это каждый день и ничего не делал с Rails.
Но в то время было очень сложно настроить сервер для использования Rails, поэтому PHP был всего лишь запасным вариантом. Каждый сервер поддерживал это.

Затем он был отложен на некоторое время, потому что мы переключились на Django и Python, а затем я занимался Python большую часть дня, и поэтому Ruby был отложен. Все это время iPhone отсутствовал, и я хотел создавать приложения для него. Я продолжал собирать книги Objective-C и iOS. Я уже знал Objective-C, поэтому я подумал: «Я должен быть в состоянии сделать это». Но я не мог полностью погрузиться в это. Я думаю, что одна проблема была временем. Я не делал это профессионально, поэтому у меня не было целого дня, чтобы играть с этим. Другим был рабочий процесс, и то, что, как мне кажется, многие программисты RubyMotion сразу же идентифицируют, — это неестественно .

Том: Я думаю, что это обычное дело. С Xcode, это хорошая IDE, я думаю, с точки зрения Apple, но есть кое-что, что кажется таким неуклюжим.

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

Том: Да, вы правы, это отчасти похоже на GUI.

Колин: Да, это глупо, потому что как только вы поймете это, вы поймете, что нет никакого волшебства для UINavigationController. Это просто тупой контейнер. Вы могли бы написать свою собственную навигационную панель днем, она не была бы настолько полнофункциональной и, конечно, не интегрировалась бы, но вы могли бы просто написать ее. Это не волшебство.
Но Xcode творит чудеса, потому что вы не видите, что на самом деле происходит.

Том: Я думаю, что Xcode пытался стать тем, кем стал Visual Basic. Знаете, Visual Basic позволял любому человеку писать плохое программное обеспечение.

Колин: Это верно. Я написал свою долю этого.

Я решил изучать Objective-C, когда я был студентом, в Японии. Итак, я хотел продолжить. У меня было много времени и сил, чтобы по-настоящему хорошо это понять.

Поэтому я подумал: «Хорошо, я сделаю приложение, приложение для Mac OS X, и посмотрим, какое приложение я могу сделать? Я сделаю электронную таблицу ». Это была моя« гениальная »идея.

Я подумал: «У меня будет электронная таблица, и в ней будет целый язык, не язык электронных таблиц, а целая вещь».
И я написал язык, я назвал его LX, что означало «Как Excel», но задом наперед. Так что XL задом наперед.

Том: Это умно.

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

Том: Так как и когда вы открыли RubyMotion ? Вы были вовлечены в это с самого начала.

Колин: Я совершенно случайно наткнулся на МакРуби. Я думаю, что, может быть, я Гугл «писал программы для Mac OS на другом языке», потому что я знал, что раньше вы могли использовать Java, и раньше у вас была возможность делать это в том-то и том-то, и я слышал о PyObjective-C или что-то. В этом поиске МакРуби был номером один. Вы можете написать, и он работает изначально! Ну вот, вау! Это действительно круто!

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

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

«Я собираюсь полностью прыгнуть в это», — подумал я. Я прочитал книгу Мэтта Аймонетти, а затем говорил с Джошем: «Что я мог сделать? Что я мог написать для этого сообщества? Что полезно? ». И, конечно же, ответ был ДОКУМЕНТАЦИЯ.

Том: Да!

Колин: Всегда документация. Я думал о создании инструмента CoreData, чтобы сделать CoreData проще. И именно тогда, когда мне просто не терпелось погрузить зубы в более крупный проект, было объявлено о RubyMotion , и это было просто: облака разошлись и светло …

Том: Серендипити.

Колин: Это было даже лучше, чем узнать о МакРуби. Я хотел заниматься разработкой для iOS, я хотел быть частью этого мира Mac Ruby, и все это было одновременно. Итак, я вскочил, я поднял комнату RubyMotion на IRC. Там уже было несколько человек, может быть, десять или около того. Все были взволнованы, просто: «Это так круто!» Это скомпилировано, на самом деле скомпилировано , это было просто сумасшествие.

Я думаю, что Мэтт Аймонетти уже выпустил BubbleWrap, а затем в этом чате мы обсудили идею этого представления DSL, и мы все согласились, давайте сделаем это проектом сообщества. Поэтому, конечно, мы должны были выяснить имя. Мы играли под разными именами, и давайте посмотрим, кто-то сказал — я думаю, это был Крис Кларк — «Как если бы у нас был чай вместо какао».

Колин: Итак, мы запустили Teacup, и он начинался как вики-страницы. Вы могли бы представить предложение о синтаксисе, и мы все обсудили бы его, некоторые лучше, чем другие, и мы в итоге — по предложению Конрада Ирвина — основывались на этих других.

Я начал работать над SugarCube в качестве помощника для Teacup . Я смотрел на Teacup и думал: «Ну, это довольно низкий уровень, как и должно быть, но я не хочу выписывать все это, я хочу просто сказать« белый », как SugarCube. »

Я в конечном итоге взял на себя проект чашка. Я думаю, что первым, что я добавил, были обработчики. Они используются для перевода значения в таблицу стилей и присвоения его любому методу или свойству. Есть возможность сказать: «Хорошо, подожди, что ты хочешь делать с этим значением?». Так вот, где ты можешь превратить имя цветового символа в цветной объект. Это проходит через обработчик.

Том: Итак, ваше представление, или, скорее, то, что соблазнило вас в RubyMotion, было этой возможностью участвовать в проекте сообщества.

Колин: Точно.

Том: А также осознай свою первоначальную цель — написать что-то вроде DSL на языке Ruby. Я правильно охарактеризовал это?

Колин: Я так думаю, да. Ладно. Так что моя любимая часть SugarCube, которая меня больше всего порадовала — это инструменты REPL.

Том: Да.

Колин: Каждый раз, когда я запускаю новый проект, это только первый шаг.

Том: Предположим, вы были в лифте и у вас было 15 секунд, чтобы убедить кого-то, кто никогда о нем не слышал, почему им стоит взглянуть на RubyMotion . Какие вещи об этом приходят на ум, которые так волнуют?

Колин: Когда вы работаете с RubyMotion и находитесь в мире iOS, RubyMotion ставит вас в центр всех инструментов; как работать с REPL и писать свой код. Вы начинаете в AppDelegate, вы создаете свое окно, вы все настраиваете, вы работаете очень близко к металлу. Так что, возможно, существует более высокая кривая обучения, хотя вы также изучаете ее довольно быстро, во многих случаях вы можете просто копировать и вставлять один и тот же код Application Delegate каждый раз. Когда вы продолжаете, вы всегда будете получать это, это заставит вас тщательно изучать вещи. Это одна из причин.

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

Том: Я согласен с этим.

Колин: Он должен чувствовать себя хорошо, и когда он будет чувствовать себя хорошо, вы это узнаете. Это будет интуитивно понятно, это будет похоже на правильный инструмент для работы, а XCode не будет, Инструменты не будут, вы не захотите их использовать.

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

Кубик сахара

Том: Расскажи мне немного больше о Sugarcube . Что послужило вдохновением для этого?

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

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

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

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

Том: SugarCube — это удивительный DSL, который помогает упростить переход [с Ruby] на iOS.

Посол RubyMotion

Так расскажи мне об этом с HipByte, потому что это было очень интересно.

Колин: Да, поэтому, написав SugarCube и Teacup , я смог найти место, чтобы Лоран попросил меня, еще в ноябре, он рассказал мне о конференции — у нее тогда не было названия — и тогда она собиралась быть в начале февраля, и я бы пришел и поговорить? Я был просто взорван. Конференция никогда не просила меня говорить, это было абсурдно. Так что это было довольно круто.

Что ж, это познакомило нас друг с другом не только с билетами поддержки, а тут и там, и с IRC, так что тогда мы стали немного болтать о конференции, о том, кто будет говорить и что происходит в сообществе. Было совершенно очевидно, что он хочет работать над RubyMotion , он программист, он не менеджер, он хочет работать над своим продуктом, и у него только так много времени, чтобы принять участие в сообществе. Это большой облом, потому что он хочет знать, что происходит, но что вы можете сделать? Так что я бы как бы подал ему информацию. Вот групповой чат Google, вы должны посмотреть на это, вы должны позвонить сюда, это важно. Кто-то пытается, недавно у кого-то возникли проблемы с Cocos2D, и я послал это ему и сказал: «Я знаю, что интеграция с Cocos2D важна, так что вы думаете об этом?» И он и Уотсон вроде как ответили на это. ,

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

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

Том: Так у тебя есть какое-то официальное название?

Колин: Да, рабочее название, и я не знаю, является ли это «официальным» названием, но менеджер сообщества — это должность.

Том: Хорошо.

Колин: И сейчас это очень ограниченная роль. У меня есть адрес электронной почты HipByte, и я как бы внутри здания.

Том: Но вы действительно больше член сообщества, представляющего HipByte?

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

Том: Это замечательно. И я думаю, что видел один твит о смерти вашей батареи, я думаю, что именно тогда вы, ребята, обсуждали это.

Колин: Да. И это было то, что я хотел упомянуть ранее, это было еще одно, что я хотел сделать, и это было перенесено из Mac Ruby в RubyMotion , действительно являясь активным членом сообщества программистов. Так что я наблюдал за Django больше на расстоянии, и это был первый большой программный проект, который я использовал, который я мог бы включить, но это уже старый клуб для мальчиков. Это было в течение долгого времени, и у них есть свои участники, которые вмешиваются и отвечают, поэтому я просто сидел в стороне.

С RubyMotion я смог просто заскочить . Я решил ответить на столько вопросов, сколько смогу, даже если это будет немного раздражать. Даже если я не знаю полностью, если у меня просто есть мнение, я собираюсь быть активным, это именно то, что я собираюсь сделать. Было действительно здорово видеть, как это происходит.

Том: Я думаю, что это послужило вам хорошо.

Колин: Есть.

Том: Как я уже сказал, ты своего рода знаменитость, и твое прозвище признано в группе Google .

Колин: Да, это заняло много работы. С одной стороны, это может быть кто угодно, вы знаете, потому что есть целая группа активных участников, особенно в группе Google , я думаю, вы просто заходите, и вы просто видите их, понимаете?

Том: Да.

Колин: И это тоже замечательное сообщество, было очень приятно видеть электронные письма и наблюдать, как они растут постепенно, и все так рады быть там, и я действительно думаю, что это похоже на наблюдение за сообществом Rails, если ты пришел рано и смотрел, как он растет, и просто как бы «О, боже мой!» Это был мой опыт.

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

{Во время этого интервью Колин упомянул «секретный проект». Это было представлено на первой конференции RubyMotion, #inspect}

XRay — выставьте ваше приложение RubyMotion

Том : Расскажи мне о своем новом проекте: Xray.

Колин: Идея создания Xray появилась, когда я демонстрировал новую функцию приложения, и меня попросили внести несколько простых изменений:

  • поменять местами пару просмотров
  • изменить шрифт
  • изменить некоторые цвета

Такие вещи. Если бы я был в браузере, я бы смог включить Firebug / Web Inspect и сделать это прямо сейчас. Или, если бы я был на терминале, я мог бы использовать потрясающий REPL RubyMotion для перемещения вещей. Но, вздох , это на устройстве. Итак, вернемся к компьютеру для цикла код / ​​компиляция / просмотр / загрузка / повтор.

Меня поразила мысль, что если бы я мог просто отредактировать эти вещи на месте, я мог бы показать эти изменения за считанные минуты, прямо сейчас… еще лучше, я мог бы передать им телефон и сказать «сойти с ума», и ОНИ могли бы внести любые изменения, которые они хотел. Конечно, для этого потребуется некоторый механизм регистрации, но это разумно … И это было началом Xray. В самом начале разработки я понял, что, хотя редактирование пользовательского интерфейса было «аккуратным», здесь можно было сделать еще кое-что. Журнал консоли был бы прост в реализации и очень удобен! Так что это было брошено. Остин Серафин собирался выступить с докладом о доступности в #inspect, и мне пришла в голову мысль, что я могу показать визуализацию доступных представлений, поэтому был создан плагин «доступность».

Когда это возможно, мне нравится стремиться к расширяемым системам — они делают код чище, потому что они вызывают разделение интересов. Так что это была легкая победа. Теперь, конечно, идеи для дополнительных плагинов постоянно растут: график использования памяти, частота кадров cocos2d / количество текстур, визуализация ограничений автопрокладки (ОЧЕНЬ сложно!), Сканер для устройств Bluetooth, регистрация использования сети — и идеи, которые никогда бы мне не пришли в голову выскочил! Тот, который приходит на ум: Joffrey Jaffeux создает плагин, который отображает переменные среды, и вы можете редактировать их. Таким образом, вы можете, например, переключиться со своего сервера «разработки» на свой «рабочий» сервер или отредактировать некоторые учетные данные, чтобы имитировать пользователя, у которого возникли проблемы! Так что не только среду разработки, вы также можете использовать Xray в качестве «суперпользователя»! Насколько удобно было бы иметь функцию «Войти как пользователь X» в ПРОСТО вашем приложении !?

Отзывы сообщества были хорошими — я думаю, что люди понимают ценность наличия этих вещей на устройстве , так что вы можете на самом деле сделать некоторую отладку и самоанализ, скажем, из метро, ​​где сетевое подключение нечеткое.
Есть несколько вещей, которые особенно сложно протестировать на iOS — используете ли вы RubyMotion или XCode.

Том : Большое спасибо, Колин. Я надеюсь, что вы продолжаете вводить новшества от имени сообщества RubyMotion .

Колин Томас Арнольд Грей чрезвычайно активен в группах Google . Его можно найти по адресу www.colinta.com , Colinta в Github и @colinta в Twitter.