Блог API Яндекс.Карт

Язык до Кембриджа доведёт, или Как я перестал волноваться и полюбил W3C

15 августа 2013, 13:24

В середине июля этого года руководитель группы разработки API Яндекс.Карт, Сергей Константинов, стал одним из девяти участников W3C TAG. О том, что такое W3C TAG, и как Сергею удалось туда попасть, он сам написал в блоге Яндекса на Хабре. Вы можете прочитать ее там или в этом блоге.

Посвящается Чарльзу, sine qua non.



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

Сегодня я расскажу тебе, %username%, именно такую детективную историю. И завязкой в этой истории будет внезапное возникновение вот здесь, под номером 5, одной подозрительно русской фамилии:

www.w3.org/2001/tag/

История эта начинается в дождливом марте 2013 года, когда я узнал, что рабочая группа W3C Pointer Events собирает последние комментарии к своей спецификации. (Честно говоря, я совершенно не помню, какая была погода в марте, но мне почему-то хочется, чтобы она была дождливой.)
 

Дело в том, что за полгода до того мы убили на реализацию работы с pointer-событиями в IE10 какое-то несоразмерное количество времени. Я бы даже сказал, какое-то абсурдно несоразмерное количество времени. Сложность реализации этого функционала оказалась гораздо больше оценочной вследствие (а) непродуманности и сырости самого стандарта, (б) наличия кучи тонких и не описанных в документации моментов, (в) существенной разницы в реализации на разных платформах (Win 7 / Win 8).

Да, забыл сказать, «мы» — это, в данном случае, команда API Яндекс.Карт, которую я имею честь возглавлять. Мы в API традиционно уделяем существенное время поддержке разного рода мобильных/тач браузеров, но IE10 превзошел все мыслимые ожидания. Думаю, не сильно покривлю душой, если скажу, что на IE10/IEMobile мы убили больше времени, чем на все остальные мобильные браузеры вместе взятые.

И вот, в конце марта наш консультант по веб-стандартам Чарльз МакКети Невилл aka chaals рассказал, что W3C собирает последние замечания по проекту стандарта Pointer Events, и поинтересовался, есть ли у кого-то комментарии. (Note: если ты ничего не понял из этого предложения, %username%, см. большое интервью Чарльза о том, как работает W3C.)

Я почитал эту спецификацию; как ни удивительно, она представляла собой точную кальку уже реализованного в IE10 функционала, только что без префикса «MS». «Давно я не брал в руки шашку», — подумал я, и сел писать замечания.

За перипетиям этой замечательной переписки вы можете пронаблюдать в официальной рассылке группы Pointer Events, начиная вот с этого письма:lists.w3.org/Archives/Public/public-pointer-events/2013JanMar/0184.html и далее по ссылкам. Исходное письмо написал Чарльз, а вот последующие письма от Sergey Konstantinov — это мои.

Упс, я, кажется, невольно раскрыл своё инкогнито. Впрочем, по итогам всей той истории, что я вам рассказываю, я стал существенно более публичным человеком, чем хотел бы; так что, кажется, пришло время немножко развиртуализироваться и на Хабре. Меня зовут Сергей Константинов, я возглавляю группу разработки API Яндекс.Карт (в Яндексе, как подсказывает нам кэп), а с недавних пор ещё и участвую в деятельности W3C Technical Architecture Group (aka TAG). Но до этого мы ещё дойдём.

У меня, кстати, есть виртуал на Хабре — SergeyKonstantinov — которого я заводил, чтобы постить официальные статьи и новости. Надолго меня не хватило — не моё это Поэтому не стоит воспринимать меня как какого-то официального представителя Яндекса на Хабре. Я здесь занимаюсь тем, чем мне нравится; в основном — троллю и набрасываю, местами довольно эпично. Кстати, пользуясь случаем, хотел бы передать отдельный привет тем, кто минусовал этот комментарий.

Так вот, вернёмся к нашим баранам. Пересказывать здесь длительную и бесплодную переписку с Pointer Events WG я не буду; все ответы на мои замечания выглядели примерно так: либо «хороший пойнт, обязательно запилим во второй версии спецификации», либо «а наши эксперты говорят, что так ок». (Например, вопрос: а как мне отменять реакцию на события браузера через одну часть канваса, а через другую — пропускать? Ответ: заведи два канваса, чо как маленький.) В итоге мне удалось добиться ровно одного: из спецификации убрали требование событиям мыши иметь id = 1. (Что, как вы понимаете, не потребовало внесения никаких изменений в код IE.)

Я бросил эту бесполезную переписку примерно через три недели, когда понял, что (а) никто ничего не будет менять, (б) а если и поменяет, то хуже от этого будет исключительно нам, т.к. нам придётся переписать весь код под IE. Ну и до кучи мне уже начали там немного хамить в стиле «what's wrong with you, man?»



Короче говоря, мой первый заход на более плотное общение с разработчикам стандартов закончился полным фейлом и демотивацией. В реальности повлиять на разработчиков стандартов стороннему человеку оказалось практически невозможно. Пришлось пойти другим путём, а именно — через W3C TAG.

TAG (Technical Architecture Group) — это особая группа в W3C, основной задачей которой является координация всех остальных рабочих групп, решение кросс-стандартных вопросов и — самое главное! — разработка единого архитектурного подхода к веб-стандартам. Подробнее об этом можно почитать в TAG Charter. TAG состоит из 9 участников и председателя, которым является Тим Бёрнерс-Ли. Троих участников назначает председатель, а ещё шестерых избирает W3C Advisory Committee.

В мае один из шести избранных участников досрочно покинул TAG, т.к. перешёл работать в Mozilla, а правила TAG запрещают одной компании делегировать более одного участника в TAG. Таким образом, были объявлены досрочные выборы, и мы (Яндекс) решили принять в них участие.

Признаться честно, ввязываясь во всю эту авантюру, я не очень-то рассчитывал на успех. Я написал несколько «предвыборных» постов, доступных в моём tumblr-блоге:konstantinov.cc/, в которых (довольно мягко) покритиковал невнимание рабочих групп к внешнему фидбеку и общую фрагментированность архитектурных принципов в разных рабочих группах. Кроме того, я написал большой пост о том, как, по моему мнению, следует разрабатывать API. (Спойлер: приходите на YaC, там будет часовой доклад от нашей команды про архитектуру API.)

И вот, 18 июля я вдруг обнаружил в почте письмо от Дэниэла Эппелквиста, со-председателя TAG, с поздравлением и курсом молодого бойца. Признаться, я до сих пор пребываю в некотором шоке, хотя прошел уже месяц, я успел поучаствовать в трёх телеконференциях, одном ревью и сделать первый коммит в гитхаб w3ctag.

У TAG нет каких-то особенных формальных обязанностей; каждый её участник, в основном, сам определяет направления своей деятельности. Я же, как и обещал, вызвался проводить ревью новых спецификаций и разрабатывать API Design Guide, чем и пытаюсь заниматься в меру своих скромных сил.



На этом, кажется, почти детективная история появления моей фамилии в списке W3C TAG закончена. Stay tuned.

P.S. Большая просьба к комментаторам не изгаляться в петросянстве. Меня уже попросили сделать нормальное событие change в инпутах и запретить поддомены www. TAG этим не занимается, не надо писать тут безумных предложений; я интеллигентный человек, могу и матернуть.

P.P.S. Но, при этом, одной из целей моей деятельности является донесение пожеланий русскоязычных разработчиков до W3C (и наоборот), так что фидбек на организацию взаимодействия W3C и разработчиков принимается.