Liberal JSON

Tim Bray beat me to writing about this with some very similar thoughts to mine: Fixing JSON. I especially like his idea about native times, along with prefixing them with @ as a parser hint. I'd like to propose some tweaks however, based on my experience of writing JSON parsers ...

Versioning REST: another angle

I've got an interesting comment on "Versioning REST APIs" that boils down to these points: Sometimes you can't really afford breaking clients (ever, or long enough to make no matter). A global version allows to freeze an old code base and have new implementation to be completely independent. This is ...

Versioning: follow-up

After reading a few comments on reddit and by email about my post on versioning of REST APIs I see that I wasn't clear on terminology and have left out some context. That's okay! Overthinking details is the main killer of all my interesting thoughts :-) I'd rather post more ...

Versioning of REST APIs

Don't version APIs, version resources. I.e., this is wrong: https://example.com/api/v1/resource Global version number has a few problems: A backwards incompatible change to any one resource invalidates all clients, even those who don't use this particular resource. This is unnecessary maintenance burden on client developers. It constrains development on the server ...

Problem with JSON encoding

JSON spec says that a UTF shall be used to encode it as a byte stream (with a strong preference to UTF-8). However it also allows characters to be encoded in the form of \uXXXX. This poses a problem on the parser implementation side: You have to decode a byte ...

On automation tools

Ever since I made an automatic publishing infrastructure for highlight.js releases… there wasn't a single time when it really worked automatically as planned! There was always something: directory structure changes that require updates to the automation tool itself, botched release tagging, out of date dependencies on the server, our CDN ...

Glyph Lefkowitz on threads

I value very much the ability to put complex concepts into words in a systematic manner. And I thrive to do the same (at least, I did try when I was blogging actively). So now I'm a big fan of Glyph who laid out everything that is problematic about threads: ...

Partition tolerance

Артём Данилов обратил моё внимание на неверное толкование понятия "partition tolerance" в старом посте про CAP-теорему. За это я ему очень благодарен, потому что сам долго осознавал, что не понимаю этой части теоремы, но стеснялся признаться :-). Артём написал про это свой пост на Хабре, в котором всё хорошо объяснено, ...

Continuation-based фреймворки

Макс Лапшин написал о том, куда нужно двигаться Рельсам на примере Nitrogen, и резюмировал: Важно понять, что код тут выходит за рамки классического «запрос-ответ» и позволяет в процессе обработки долгоживущего процесса что-то рисовать в браузере. […] даже на таком маленьком примере кода ясно, что классический подход а-ля php: reply on ...

Засранцы и Болваны

Это вольный перевод статьи Марка Пилгрима "Why specs matter" от 2004 года. Статья определяет базовую терминологию, применяемую в процессах стандартизации. В рунете она, к сожалению, почти неизвестна, поэтому я решил восполнить этот пробел. Большинство разработчиков — болваны, а остальные — засранцы. Я в разное время причислял себя к обеим группам, ...

Вместе или врозь

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

О сложности и практичности REST

Keel: Прошло уже какое-то время после внедрения - получали какой-нибудь фидбэк от девелоперов, использующих API? Основной вопрос для меня сейчас в том, оправданно ли применение полноценного REST'а с гипертекстом, в ситуациях, когда девелоперы скорее всего не будут разрабатывать полноценный клиент, а когда им нужна какая-то одна конкретная фича. В таком ...

Дизайн API Я.ру

Вчера мы открыли в бету API для Я.ру. Это был первый пост в корпоративном блоге Яндекса с кодом на Питоне, что даже породило фан-арт :-). Для меня этот запуск имеет большое эмоциональное значение, потому что машиночитаемый веб — мой давний интерес, и этот проект — первый неигрушечный публичный API, где ...

Безопасные умолчания

По наводке Романа Ворушина почитал пост Дика Липтона о том, что в проектировании систем должны закладываться безопасные умолчания. И мне вспомнилась похожая штука из истории Джанго. Когда-то давно у модели пользователя был метод is_anonymous(), который предполагалось проверять в шаблонах для определения, что показывать незалогиненному пользователю: {% if user.is_anonymous %} Login... ...

CAP-теорема Брюера

По большей части эта статья — изложение сути статьи "Brewer's CAP Theorem" Джулиана Брауна. В оригинале много полезных ссылок и интересных примеров, поэтому если позволяет время и знание языка, почитайте его. А здесь у меня просто самая суть, покороче и по-русски. В 2000 году Эрик Брюер выдвинул гипотезу, касающуюся ключевых ...

Параллелизм 2

Да, заголовок поста на этот раз скучный :-). Это продолжение темы, начатой в "Надо всё переписать", составленное в большей части по комментариям. Пользуясь случаем хочу сказать большое спасибо комментаторам! Написали много полезного и интересного, статья была бы неполной без этого. Терминология Как многие отметили, термины, которые я использовал, не отличаются ...

Надо всё переписать

На днях Саймон Виллисон написал очень хороший пост про node.js. Саймону очень удаётся писать такие intro-посты про технологии, которые очень ясно передают самую суть вещей. Когда-то он так сподвиг меня взяться за изучение Джанго. Пост про node.js тоже хорошо даёт понять, почему это круто, и какое место в современной экосистеме ...

Кеш - не хак

Периодически встречаюсь (стукаюсь лбом, точнее) со странным отношением к кешированию. Как будто это такой "грязный" способ заставить плохо спроектированную тормозную систему работать сносно. Попробую-ка я развеять это заблуждение... Оптимизация скорости Существует не так много принципиально разных способов софтверно ускорить работу какого-то алгоритма. Можно поменять алгоритм на более быстрый (пузырьковую сортировку ...

Зачем нужны сигналы

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

REST и WS-*

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