Простой код – плохой код?

История о том, как однажды я чуть не поучаствовал в разработке официального расширения Pocket для браузера Maxthon, но потом пришлось превратить его в формально самостоятельный сторонний сервис. Если скучали по пространным заунывным рассуждениям на мало кому интересные темы, это как раз оно!

Простой код – плохой код?

В далёком 2015-м я решил, что пора сделать что-то значимое. Примерно в тот же период Mozilla начала готовиться к интеграции Pocket, а на макстоновском форуме кто-то из довольных сим фактов пользователей как раз искал официальное расширение Pocket для Maxthon, которого, разумеется, отродясь не было. Звёзды сошлись: я знал, что состряпать простенькое расширение для работы со сторонним сервисом будет несложно, а раз уж Pocket так удачно попал на волну гиковского хайпа, почему бы не сделать всё официально?

В общем, я набрался наглости, нашёл на сайте контакты разработчиков и сделал им предложение, отказаться от которого, как мне тогда казалось, было бы весьма затруднительно: я на чистом энтузиазме собираю вам расширение под Maxthon, а вы заливаете его в Extensions Center со своего аккаунта, попутно указывая меня где-нибудь в конце описания (расширения в Maxthon ломаются сравнительно редко, но вероятность того, что у пользователей могут возникнуть вопросы, всё же была).

Команда поддержки среагировала довольно быстро (особенно на фоне сервисов, которые вообще не считают нужным отвечать на подобные запросы). Конкретного ответа мне на тот момент так и не дали, зато дали контакты парня по имени Джонатан, с которым мне и предложили обсудить подробности и подводные камни.

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

Итак, я связался с Джонатаном и ещё раз объяснил ему, что собираюсь собрать расширение Pocket для Maxthon и хочу, чтобы всё было официально. Честно говоря, в тот момент я, скорее всего, даже не приступил к работе. Вместо этого я снова зашёл на сайт Pocket и перешёл в раздел API. Оказалось, Pocket совсем не против сторонних расширений, если те не нарушают ряд несложных правил: не притворяются официальными и используют собственные иконки. И моё расширение теоретически можно было бы подогнать под эти правила.

Пока я копался в недрах сайта и изучал правила использования API для сторонних разработчиков, пришло письмо от Джонатана: официального расширения под Maxthon нет, но пользователи время от времени про него спрашивают, так что было бы неплохо. Я пообещал в скором времени собрать первый тестовый билд и прислать его для тестов, попутно объяснив, как вообще тестить расширения под Maxthon.

Через пару дней (а может быть, и часов) первый билд был готов. По-моему, в нём даже иконок не было, только логотип Pocket и повсеместные упоминания о том, что какие-то иконки тут всё же будут, но когда-нибудь потом. А вот букмарклет, который Pocket советовали использовать для быстрого сохранения статей, работать по какой-то причине отказывался. Так что я тупо заменил его на уже привычный букмарклет для расшаривания ссылок из предыдущих моих расширений, тупо заменив URL на адрес Pocket. Готово!

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

Pocket / MX4

Через пару дней расширение было готово. Меню почти полностью копировало меню самого сайта. Быстрое сохранение статей работало через отдельную вкладку (что лично мне до сих пор кажется более удобным решением). Мы даже успели перевести расширение на несколько языков: русский, английский, немецкий, итальянский и польский. Но ответа от команды Pocket почему-то всё не было. Так что я поблагодарил парней за помощь и продолжил ждать, попутно рассылая расширения всем, кто о нём спрашивал.

Недели шли, Джонатан куда-то пропал, а расширением в тот момент насчитывало от силы пару десятков случайных пользователей. Кто-то даже спрашивал, почему расширение всё ещё нельзя скачать напрямую из Extensions Center, но ответа у меня, увы, не было. Спустя несколько месяцев я решил, что раз уж всё, что описано выше, формально попадает под определение «закрытого бета теста», то почему теперь бы не сделать его открытым? Так что я снова собрал остатки наглости и загрузил расширение в Extensions Center от своего имени (с пометкой BETA).

Формально этим поступком я нарушил условия для сторонних разработчиков: моё расширение носило гордое имя Pocket, в качестве иконки я использовал официальный логотип сервиса, а меню чисто внешне копировало меню самого сайта, вот только к разработчикам Pocket оно отношения не имело. Вряд ли фраза «неофициальное расширение для работы с сервисом Pocket» хоть как-то контрила правила использования. Вроде бы мелочь, но мире тотальной бюрократии игнорировать такие штуки было бы глупо, и сейчас я это осознаю.

Через несколько месяцев я наконец-то признал, что что-то пошло не так и, если я действительно хочу довести дело до конца, придётся начать всё с начала. Так что я тупо вернулся на сайт и снова попытался связаться с поддержкой. На сей раз у меня уже было готовое расширение с несколькими сотнями пользователей (по-моему, количество скачиваний тогда держалось на отметке в 1 200). В Pocket к тому моменту, видимо, уже забыли о том, что когда-то этот аддон задумывался как официальный. Мне предложили подогнать расширение под требования для сторонних приложений и опубликовать его на их сайте. Перспектива, мягко говоря, так себе, но и выбора у меня не было: так я хотя бы попадал в галерею сторонних приложений Pocket.

Через пару дней моё расширение превратилось в MXPocket, логотип стал полосатым (как карман на пижаме), а иконки наоборот стали светло-серыми. Случайно принять расширение за официальное теперь было довольно сложно, а значит, формально, у Pocket не было оснований не загрузить его себе на сайт.

MXPocket / MX4.9

И вроде бы всё хорошо, но… Сторонние приложения на сайте Pocket были разделены по категориям. Расширения ожидаемо попадали в раздел Браузеры, а уже потом сортировались по подразделам: Chrome, Firefox и т. д. Разумеется, раздела Maxthon там не было, а значит, моё расширение могло стать первым и пока единственным расширением для работы с Pocket в MX. Вот только Pocket не собирались создавать отдельную категорию для одного расширения, и MXPocket попал в общую кучу, затерявшись в десятках сторонних расширений для Chrome.

И на этом вся эта история могла бы закончится, но я решил в последний раз попытаться с Джонатаном и попытаться объяснить ему, что именно произошло с расширением. В тот момент единственным разумным объяснением мне казался уход Джонатана из команды: мол, чувак уволился и забыл рассказать своему приемнику о том, что кто-то со стороны пилит расширение под Maxthon. Спустя ещё какое-то время Джонатан наконец-то вышел на связь. Он объяснил, что сперва у них действительно были планы сделать для Maxthon что-то серьёзное, но потом что-то случилось, и от них пришлось отказаться. Причём без контекста довольно сложно понять идёт ли речь о том расширении, которое сделал я, или команда Pocket в какой-то момент пыталась портировать на Maxthon собственное расширение.

И именно этот момент не давал мне покоя все эти годы: чем Pocket так не понравилось моё расширение и почему они так и не выпустили собственное? Моё расширение было максимально простым: никаких html-страниц и почти никаких скриптов, меню и боковая панель были реализованы через интерфейс самого браузера (в Maxthon так принято), а большинство кнопок – это либо ссылки на конкретную страницу на сайте, либо простенький скрипт, копирующий URL открытой страницы. Максимально топорное решение, которое идеально работало! Что с ним не так?

Уж не знаю, что там в стане Pocket происходит теперь, но в те времена официальное расширение умело лишь сохранять ссылки и добавлять к ним теги (для остального пользователю предлагалось использовать закладки). И по-моему, то, как это было реализовано в расширении под Maxthon, намного удобнее и практичнее. Единственное, что я бы исправил, это лишние ссылки: к примеру, последние четыре строчки мало полезны при повседневной работы (запихнул их только для того, чтобы показать, что тут ещё много чего можно было бы понапихать, а удалить их можно было всего в пару кликов).

Можно ли подобное реализовать в Chrome? Можно, причём тоже довольно просто: тупо добавляем в меню html-страницу с теми же ссылками и скриптами. Так почему Pocket так и не выпустили собственное расширение под Maxthon, которое бы полностью отвечало их стандартам? И главный вопрос: зачем так стараться? Почему бы не воспользоваться простым решением и не использовать сильные стороны конкретного браузера? К чему эта пустая унификация? Неужели простой код – это зашквар для серьёзных разработчиков?

Ответов на эти вопросы у меня до сих пор нет. Мне казалось, аутсорс в разработке это нормально, а простые решения всегда самые верные, но что-то пошло не так. Официального расширения Pocket для Maxthon так и не появилось, а теперь, когда MX6 окончательно превратился в Chromium, старые макстоновские расширения постепенно уйдут в прошлое, а в месте с ними и целый пласт веб-приложений. Печаль…

Забавно, что параллельно я пытался собрать официальное расширение ещё и для Symbaloo. Там обсуждение шло гораздо активнее, и стараниями первых пользователей оно разделилось на два: лёгкая версия для быстрого сохранения ссылок и полная версия, заменяющая собой ещё и страницу быстрого доступа. А потом MX4 обновился до MX4.9, и появилось ещё две версии расширения. Макстоновцы любят до последнего цепляться за старые версии, так что поддерживать пришлось бы все четыре, а на горизонте уже маячил MX5. Наверное, не такого решения ждали в Symbaloo… Но это и к лучшему, ведь в тот момент я не особо шарил в лицензиях и тупо форкнул макстоновский порт New Tab Plus, хотя и не был уверен, что тамошняя лицензия это позволяла.

Symbaloo / MX4

Кстати, недавно я всё-таки завёл GitHub (в основном для того, чтобы поучаствовать в переводе нескольких перспективных открытых проектов), и теперь у меня есть место, куда я мог бы выкладывать старые расширение для Maxthon. MXPocket загрузил туда одним из первых. Так что, если кому-то интересно, как устроены расширения, в которых почти весь функционал прописывается в тамошнем аналоге манифеста, милости просим!

И за сим, наверное, всё…

Comment