Miscellanea X

При том, что GCC ещё долго будет в бою (более того, по бенчмаркам GCC 8 во многом лучше CLang 6), стратегически он уже проиграл войну CLang в частности, платформе LLVM в целом. Вообще хороший пример того, как правильная архитектура поначалу буксует и вызывает скепсис, но по мере выравнивания (в том числе содержимого голов) обязательно отгрызает пирог. Хоп! и университетский проект стоит на плечах Apple и Google. Ну хорошо, хопу уже 18 лет, но это норма.

В России в 2012 году сменился стандарт хэш-функции на ГОСТ Р 34.11-2012. Неофициально функция называется «Стрибог». Всё потому, что в конце текста стандарта одно из значений примера при преобразовании в Windows-1251 даёт текст «Се ветри, Стрибожи внуци, веютъ с моря стрелами на храбрыя плъкы Игоревы» из «Слова о полку Игореве». Няшненько.

История Minix vs Linux (раскручивать можно с поста на Хабре) очень-очень показательна. Обычно смотрят под углом вечного спора «монолит vs микроядро», но история показательна в другом. Упрощу ситуацию. Есть крутая проверенная система (Unix) за много денег. Есть крутая система, совершенно не готовая к production и вообще человекам (Minix). Есть наскоро сделанное нечто среднее — не крутое, но бесплатно и с ним можно работать (Linux). Риторический вопрос: что останется на рынке и начнёт распространяться в массах? Кейс настолько чистый, что должен входить в учебники. Не менее любопытно прикинуть стратегии выхода и удержания позиций для каждого варианта.

Продолжаю краем наблюдать за темой промышленного хранения данных в ДНК. Оказывается, пропустил новость, а ведь в конце февраля IARPA (то же, что и «военная» DARPA, но свежая и для разведки) сделало шаг в эту сторону в виде Molecular Information Storage (MIST) research program. Уже интересно. Как и список тех, кто готов вписаться: Harvard, Intel, Stanford, Western Digital и др. Всё это только начало и публично государство только принюхивается к задаче, но интригующе то, что заход сделала разведка через агентство, которое в фигне пока особо замечено не было.

Все слышали про язык Ada (хотя бы по тому, как часто говорят, что первая программист была Ада Лавлейс). Что-то, что в музее красиво стоит на полочке и красиво пылью покрывается. Ан нет. Во-первых, попался на глаза список 2014 года: Who’s Using Ada. Оооочень много суровых приложений языка. Во-вторых, у меня в голове стандарт ошибочно застыл на Ada 95 (эдакий последний реверанс в сторону эпохи), ан снова нет! Есть Ada 2005 и Ada 2012. Порыскал ещё и совсем вычеркнул язык из «забытых». Вовсю используется военными (в NATO чуть ли не must use) и авиацией с космонавтикой. Такие дела.

Судьба Forth

Начнём с начала. Чтобы язык стал массовым, он должен быть понятен массам (целевой аудитории). Чем больше масса (с максимумом в количество людей на планете), тем более массовый и «победивший» язык. Практика показывает, что на вершине этой метрики оказываются языки, в текущий момент наиболее близкие бытовому представлению о программировании. Эти же языки применяются в учёбе, что наращивает инерцию дальнейшего использования людьми.
BASIC разработан Курцем и Кемени в 1964 году как язык для студентов-непрограммистов. Pascal разрабатывался как упрощение Алгола с потенциалом обучения студентов структурному программированию (Вирт отмечал успех в этом 30 лет спустя, отметив также отсутствие поддержки индустрией) — да до сих в ряде вузов на Паскале кодят. Python используется сейчас первым языком для начинающих, как и JavaScript (книги «(Python|JavaScript) for kids» популярны). Это четыре сверхпопулярных массовых языка. И это четыре языка, которые могла освоить условная тётя Глаша из отдела инвентаризации столов и стульев. Вот вам и массовость.
У Forth уже его постфиксная нотация превратила массовость в недостижимую Фудзияму. И нужда в понимании стековой машины. Все действительно массовые языки исключают понимание работы памяти, стеков, регистров и т.п. Это слишком круто для тёти Глаши. А упрощать никто и не собирался. Соответственно, пока на всю планету было 17 программистов с тремя физмат высшими образованиями на каждого, Форт чувствовал себя прекрасно. Когда за клавиатуру сели Глаши, мир начал меняться.

Второе начало в компенсации человеческого фактора. Иначе говоря, даже лучший в мире программист будет безбожно косячить. От этого устали как сами программисты (ну кому нравится час скармливать стопку перфокарт, чтобы обнаружить непробитую дырочку), так и корпорации (вот весело в масштабах IBM размышлять о том, как твои 10000 программистов половину времени не продукт делают, но баги правят). Потому языки развиваются в стороны «наиболее раннее обнаружение ошибки на стадии разработки» (анализаторы, IDE), «средства языка для обработки ошибок» (исключения), «изгнание провоцирующих конструкций» (война с =/==, например), «приближение к бытовому мышлению» (скажем, та же инфиксная нотация, удобная людям, но неудобная парсерам).
Интересным следствием является поддержка кровавым энтерпрайзом расчудесного (шучу, на самом деле скукота) языка Java. Энтерпрайз требует валового производства ремесленного продукта. Если в мире 1M складов, должны быть 100K разработчиков, которые напишут 10K складских программ. Бизнес такой, особенно бизнес взаимоинтеграции этой свалки на уровне государственных тендеров. Так вот Java оказалась идеальна. Язык простой и безопасный, можно нанимать пушечное мясо. Язык достаточно строгий, потому адовая формализация процессов вместе с автоматикой тестирования и прочим компенсирует адочек в финале. Да, внутри кака, но работает. Язык достаточно развит (включая библиотеки), чтобы покрывать нужды энтерпрайза. Ура-ура. Недавно попадалась статья бойца из IBM, разбирались причины факапов. Так вот современный разработческий IBM — это интерфейс к Бангалору. Зато дёшево. Зато работает, если нанять не 10K, но 20K чуваков. Писать будут долго и мучительно, но ЗАТО ДЁШЕВО.
И снова это не про Forth. Язык, в котором вас никто не защищает ни от чего. Что написал, то в лоб и прилетит. Учитывая забавный синтаксис и стековые особенности… Скажем так, пока я осваивал первые 10 страниц учебника, завесил намертво gforth на Андроиде тоже 10+ раз.

Третье начало в универсальности. Универсальность — свойство языка, позволяющее X лет на Y архитектурах решать Z задач. Сюда стреляет всё. И поддержка массами, пишущими сотую библиотеку разбора командной строки. И поддержка корпорациями, решающими языками свои задачи (привет, Go, привет, Swift). И возможность создавать проекты любого масштаба (с каждым годом всё толще и толще). И включение народом или корпорациями поддержки новых явлений вроде цветных дисплеев и виртуальной реальности. Обилие учебной литературы. Включение в программу вузов (SICP на Python, эх). Выявить один решающий фактор невозможно, особенно во времена интернета. Не будь Райана Даля, были бы сейчас Node.js-программисты вместо jQuery-верстальщиков?
C, C++, Java, Python, Fortran — их объединяет также и расположенность к созданию библиотек, фреймворков, модулей, пакетов. Нафигачил, нафигачил, выложил, оно десятки лет живёт и всё ещё тёплое. Культура накопления и распространения. За эти же десятки лет набирается такая огромная гора решений задач на множестве платформ, что чуть ли не любая ваша обычная задача уже решена. Ну или вы можете её решить, подмазав кирпичик маслом, а шурупчик напильником.
Forth в этом контексте чистый лист. Y архитектур — да, хоть в настенной кукушке. X лет — да, он настолько прост, что его левой пяткой портируют из года в год на новое железо и в новые OS. Z задач — нет. Нечем. Forth не для прямого решения задач. Он для создания инструментов, которыми вы будете решать свои задачи. Нюанс, как мне кажется, в том, что отлично решена будет именно ваша задача, а вот сделать из решения «фреймворк»… не на Forth. Утомитесь любой привычный в других языках код писать с нуля. Утомитесь от нужды писать тысячи строк на языке, на котором эти тысячи строк неудобно читать. Forth позволяет за год сделать катану именно под вашу руку и под ваш стиль. C++ позволяет за месяц (допустим) написать завод по производству стандартных офицерских парадных шашек по сто штук в день, а на сдачу киоск Союзпечати. Разница универсальности в этом.

Вообще же у меня возникло впечатление, что авторам Forth и Forth-сообществу это и не требовалось. Массовость? Ну, побыли массовыми, когда программирование компьютеров было программированием микропроцессоров и микроконтроллеров, которым занимались специалисты. Компенсация человечности? А зачем, если фортофил готов каждый символ няшить и тешить до победы? Универсальность? Изначально не закладывалась, к ней не стремились и дальше. Удовольствие и ниша Forth — создание небольших чрезвычайно «ёмких» и «плотных» решений для крохотных (по нынешним меркам, конечно, а так-то IBM System/360 могли и комнату занять целиком) железок. Доить из Forth коммерцию? Как понимаю, и без того во взятых рамках плохо не было, контракты с NASA не копеечные, надеюсь.
Потому я не могу согласиться с тем, что язык убили. Он без борьбы отдал поле, за которое грызлись поколения BASIC (венцом Visual Basic) и Pascal (венцом Delphi), уехал в провинцию и там возделывает грядку.

Язык Forth

Лет двадцать пять назад копался в давно ископанной стопке книг на полке информатики в библиотеке и некоторое время крутил в руках [С.Н. Баранов, Н.Р. Ноздрунов. Язык Форт и его реализации. Л.: Машиностроение, 1988]. Покрутил, да и вернул обратно. Школота, интереснее казались другие языки, искал крупицы по Паскалю. Запомнил проходной момент потому, что запала в голову схожесть названия с Фортраном. Фигня же, а зацепилась, да.
Года два назад стояли с тестем в дворике на Плющихе, меланхолично курили в небо и долго обсуждали атипичные языки, на которые соскочили после обсуждения того, как на современных студентов влияют сладенькие песочницы Java и Python. Как-то докурили до ассемблеров, потом до стеков и регистров, ну и дальше по цепочке. И второй раз в жизни цепляющим за извилину эпизодом оказался Forth. Тесть как-то бодро рукой махнул, мол, на Форте можно планету покорить, а по пути ещё и Марс с Венерой на сдачу подмять. Я плечами пожал (толку обсуждать, если ничего не знаешь), но запомнил.
На днях ползаю по статьям о разработке. Бац, Forth. В статье 2016 года. И написано вовсе не про каки мамонтов. Тут уже зацепило за живое. Начал раскручивать, шо то воно такое. И докрутился до трёхчасового чтения перед сном.
Лирическое вступление для того, чтобы сразу стало ясно следующее: я не двигаю Forth в качестве рабочего языка, он применим очень узко. Если не используете, вам и не надо. Даже не топлю за него в теме «это знать каждому разработчику, желающему стать программистом». Причины интереса к нему… да вон выше описаны. А всё-таки интуитивно кажется, что с этим языком и его культурой стоит ознакомиться, если хочется почувствовать атмосферу 70..80-х гг. Да, вы не будете писать на Lisp, на Forth, на Ada и Algol. Зато до сих пор используете решения тех лет, потому полезно узнать, для борьбы с какими проблемами придумалось то или иное. Наконец, тексты программистов 30..40-летней давности — тексты людей, которые учат не использовать фреймворк X или быстрее выходить на рынок с прототипом, но учат быть программистом, который создаст язык, на котором создаст фреймворк, который сам по себе создаст рынок. Милый сердцу олдскул.

Так вот, Forth создан Чарльзом Муром в 1968..1970 годах. Если считать выходом языка выход stable production, получим 1971 год — полноценный Forth был доделан и прикручен к телескопу в National Radio Astronomy Observatory, в которой работал Мур. Ну и понеслось.
В первые минут 10..15 знакомства с синтаксисом умиляешься. Оно такое муси-пуси. Синтаксиса почти нет. Вот всё, что в голову приходит, всё отсутствует. В чистом виде Forth представляет собою метаязык, на котором вы сваяете что-то, что решит ваши проблемы. Описывать не буду, ссылок хватает. Задумываешься, ладно, мол, а куда вот это применять-то? Игры типа крестиков-ноликов клепать? Вы всё-таки походите по ссылкам, посмотрите, как язык выглядит. Тем занятнее будут примеры использования в нашем столетии. Приводить примеры из прошлого не вижу смысла, т.к. в период 1970..90 гг Forth был везде. Думаю, если накатить и начинать собирать яркие примеры из периодики («Forth Dimensions», «Journal of Forth Application and Research») и литературы (учебники, статьи в научных журналах, каталоги производителей и т.д.), блога не хватит. Ограничусь цитированием Баранова:

К середине 1980-х гг. Форт выдвинулся на третье место после языков Бейсик и Паскаль в качестве средства программирования для персональных ЭВМ, и рост его применения продолжается. Широкое распространение получили коммерческие программные продукты, написанные на Форте: системы обработки текстов, пакеты машинной графики, трансляторы, видеоигры. Стихийно быстрое распространение Форта и его практический успех обусловили необходимость стандартизации языка. В 1983 г. был опубликован стандарт «Форт-83», в соответствии с которым ведется изложение материала в этой книге.

Вот как-то так это тогда и выглядело, да.


Итак, где нынче живёт Forth.
Космонавтика. Главное в этом разделе — микроконтроллер RTX20x0, выполняющий код на Forth. Этот микроконтроллер впаивали во всё (список собирался до 2003 года, потому полным не является): миссии IMAGE, ROSETTA, Deep Impact, Shuttle, CASSINI и т.д. Да чего далеко ходить. Помните миссию Philae, которая про комету? Так вот там два RTX2010 зарулили.
Embedded. До сих пор используется во всякой цифровой мелочи. Много точечных ссылок и упоминаний, включу лишь одно интересное. Вот на этой странице отмотать вниз до Partial customer list. Partial потому, что NDA. Интересно тем, что это «покупатели» VFX Forth — от BAE и NASA до Rolls Royce и Saab. Sapienti sat. Сюда же можно добавить и этот список. Пролистал также 40+ страниц современных форумов и переписок, выяснил, что (как минимум) в США язык жив не только в заводских условиях. Инженеры его используют для своих поделок и для прототипирования (в чём он знатно силён, как начинаю всё больше понимать).
Наука. Научные статьи выходят до сих пор, т.к. стековые машины всё в той же зоне внимания, а Forth прекрасен в своей чистоте реализации идеи. Правда, это ничему не показатель, учёное сообщество по любой давной забытой штуковине статьи сотнями выпускать будет, но всё же.
А и всё, пожалуй. Космос, промышленность, наука — три современных ниши языка. Более ничего не нашёл, хоть искал старательно, уверяю.

С литературой швах. Есть стандарты, есть ворох всего по начало 2000-х, дальше тишина. Варианты Форт-систем спокойно разрабатываются внутри контор, нужды им информацию наружу выплёскивать особой и нет, потребителя, нуждающегося в свежих учебниках / руководствах, тоже нет. Потому голову питаем прошлым.
На данный момент самыми интересными источниками знания про Forth оказались вот эти (либо прочёл, либо читаю, но уже оценил):

  • Статьище «The Evolution of Forth» — информация из первых рук.
  • Журнал «BYTE, Vol.5, No 8, August, 1980» (200MB PDF). 2/3 номера в 300+ страниц посвящены языку. А ещё там реклама 26-мегабайтного винта за $5К. Были же времена, а. Даже если не читать, важно отметить то, как массовый журнал для народа выделяет целый номер под одну тему. Этого не бывает с маргинальными разработками, ну и 80-е — начало пика популярности Форт-систем, что BYTE не мог пропустить.
  • Книга «Thinking Forth». Выпустили в 1984 году, стала бестселлером. Перевыпустили в 1994. Потом в 2004, уже под CC-лицензией. Исправили опечатки, улучшили типографику и т.д. Книга одна из культовых в мире Forth и правильно — читается запойнее художественного романа.
  • Статья «Язык Форт в СССР и России» — любопытная статья с деталями, из неё же и цитата post scriptum’а.
  • Книга «Язык Форт и его реализации» — первая глубокая отечественная книга по Forth. Интересна ещё и тем, что в «Приложении 2» приведён список распространённых в 80-е Форт-систем, но по понятным причинам почти сплошь советские.

Не проработал (даже не полистал, но собираюсь) следующее потенциально интересное:

  • Кладовка древних ссылок на Forth-ресурсы, половина уже не с нами. Достаточно сказать, что там используется слово webring. ^_^
  • Книга Starting Forth того же Броуди. Примечательна и тем, что в СССР вышел её перевод [Лео Броуди. Начальный курс программирования на языке Форт. Финансы и статистика, 1990]. Милота: «Starting» vs «Начальный курс программирования».
  • Стандарт ANS Forth-1994 для хардкора.
  • Логово фортолюбов. Тоже кладовка ссылок.
  • Наконец, компания тех, кто Forth придумал, использовал и продолжает его двигать.

В сумме ссылок хватит, чтобы обеспечить извилины гимнастикой надолго. Ну и вообще есть смысл поискать издания по Forth 80-х, в США их много вышло, хоть коллекцию собирай.


PS. Хотел бы обратить внимание на слова про упомянутую в первом абзаце монографию: «Первый тираж составил 50 тыс. экземпляров, но затем издательство получило столько запросов с мест, что пришлось допечатать еще 50 тысяч – редкий случай в практике!». Современные тиражи IT/CS-книг для профессионалов — 200..3000 экземпляров за редким исключением. Для объективной оценки тиража и допечатки советую прикинуть, сколько в 1988 году в СССР было компьютеров, программистов и людей, которые могли освоить / использовать Forth.

IT в Китае, часть I

Довольно много читаю про Китай, решил короткими карточками собирать сюда любопытные детали.

В 2015 году китайцы приняли «пятилетку» Made in China 2025. Суть в том, чтобы двинуть промышленность (и около неё) на новый уровень, прям крутой-крутой. Одним из кирпичей плана является продвинутый IT-сектор. Туда вливаются деньги, люди, политика партии, наконец. Соответственно, нарастает давление на людей, с 2015-2016 гг. в хайтеке появился режим работы 996 — с 9 утра до 9 вечера 6 дней в неделю. Режим напрочь против китайского КЗоТ’а, но «всем выгодно», потому ситуация сложилась занятная. С одной стороны закон против и формально никто не может вас заставить так работать. С другой стороны так работают даже в топовых гигантах, правительство в курсе, а попасть под увольнение мало кто желает. Более того, хватает тех, кто не против такой ценой прыгнуть вверх в карьере. В общем, Китай снова забрасывает амбразуры телами.

В 1994 году в Китае появился интернет. В 1998 году правительство решило его контролировать. Так и появился проект «Золотой щит», частью (!) которого является известный всем Great Firewall of China. Или не является. В этом месте все запутались, потому многие источники пишут «быть может». Любопытно же то, что на первых этапах GFK строился отнюдь не одними лишь китайцами, но вполне западными компаниями: Nortel Networks, Motorola, Sun Microsystems, Cisco Systems, Websense, Microsoft. Правда, тот же Nortel уже через несколько лет начал получал на орехи от правозащитников (впрочем, юристы EEF в 2016 году косо смотрели и на Cisco), но бизнес, ничего личного, ага. Попытки засудить участников дележа этого большого китайского пирога не утихают до сих пор.

На удивление быстро и бегло упоминается в 2017 году то, что китайцы разрабатывают квантовую компьютерную сеть — Jinan Project. Призвана защитить от атак хакеров и т.д., сначала подключат военных, финансы и вообще всякое деликатное. Что занятно, новость была одна. Та сотня упоминаний, что есть, основана на ней. А вот дальше тишина, потому ни фига не понять, получилось ли у них, запустились ли. Но сам факт любопытный.

В 2007 году Scott J. Henderson написал книгу The Dark Visitor — годный сборник ключевых слов и событий первых 10 лет китайского хакерства. Годы любопытны тем, как поначалу активно хакеры участвовали в… даже вот как бы назвать… политической жизни. Ну т.е. ломали поначалу всё не денег ради, но исторической китайской справедливости для. Также наводит на размышления о том, как терпимо государство относится к сообществу хакеров, если хакеры атакуют то, что совпадает с целями государства. Ну и в целом любопытно посмотреть на почву, из которой вырос китайский cyber warfare.

Объёмы и масштабы китайской песочницы разработки можно судить по таким числам: 1) выпуск до 100К разработчиков в год, 2) почти 6М разработчиков всего, 3) свыше 40К софтварных компаний. Так, горстка чисел в дискуссии, чтобы живее было.

1Z0-809 (Java SE 8 Programmer II)

1Z0-809 (Java SE 8 Programmer II) — сертификация продвинутого уровня от Oracle, которая и является целью после получения 1Z0-808.
85 рандомных вопросов, 150 минут, проходные 65%. Темы про Java API: стримы, лямбды, многопоточность и т.д. Во время сдачи никаких гаджетов, интернета, IDE, компилятора и т.п. Вас даже рукава попросят закатать, проверяя отсутствие шпаргалок. Пользоваться только головой.
Уровень middle, без подготовки можете застрелиться сразу, мне кажется. Причина простая: половина вопросов о том, что разок в документации читаешь, разок применяешь, потом забываешь. Очень много вопросов на отсечение неправильного кода, который неправильный потому, что у метода сигнатура другая (потому, сюрприз, надо много методов запомнить). В общем, нахрапом и здравым смыслом эту сертификацию можно взять только при очень удачном рандоме. По сути почти всё проверяет вашу память и внимательность при разборе кода задач.

Литературная подготовка включала в себя чтение Oracle Certified Professional Java SE 8 Programmer Exam 1Z0-809 — как сейчас понимаю, бестолковый и бесполезный текст, если вы уже работающий джавист и с API знакомы. Считаю, напрасно потратил время. По generics читал отличные Java Generics FAQs, в остальном Javadoc.
Также снова купил mock exams у Enthuware. 520+ вопросов, потому развлечение эдак на 16..18 часов. И снова подспорье крутое, но с нюансом: слишком много задач, не входящих в темы сертификации, субъективно ~25%. Зачем они включены — не понять. Важно другое — эти mock exams отлично подходят для выявления слабых знаний и накачки. Так и использовал, попутно старясь запомнить объяснения к сложным местам (спасибо автору, много ссылок на JLS и Javadoc)

Проходил 27 апреля в Softline. Сдал на 75% за полтора часа. Вроде и сдал, но красиво — это 90% и выше, а тут просто перешагнул планку, потому удовлетворённым себя не чувствую. С другой стороны… Чтобы красиво сдать, надо либо в спокойном режиме дней постоянно планомерно накачиваться, либо постоянно на практике использовать эти API, либо обладать фотографической памятью. У меня этого не было. Да и как-то задолбался уже больше двух месяцев ежедневно вколачивать в себя довольно скучные темы. Потому поставил точку и пошёл сдаваться.

30 дней на подготовку, в среднем полтора часа в сутки. 500 страниц учебника, около 700 тестовых задач, около 200 страниц дополнительного материала (Javadoc к JDK, Generics FAQ), почти 14000 рублей. Сертификация не понравилась. Если в 1Z0-808 были задорные моменты, то 1Z0-809 слишком механическая. Разве что при подготовке много дополнительного прочёл и забытого вспомнил.

Лучшие ошибки софта VI

В 1992 году случилось то, что будут называть London Ambulance Disaster. Светлым головам в Лондоне пришла мысль, что диспетчеры Скорой помощи слишком медленно работают, надо автоматизировать. Автоматизировали. Пустили в production систему, которая на момент ввода в строй НЕ была проверена под нагрузкой, а также содержала 81 известную ошибку. И вообще всё было плохо-плохо (детальный отчёт в PDF, а более человекочитаемая версия другого автора вот тут). Если кратко, почти сразу после запуска система почудачила, отправляя экипажи куда попало, звонки тоже смешались, наконец, из-за минорной баги всё упало. Два дня реакция Скорой была крайне запаздывающая, что привело к 46+ смертям.

Бекапы, бекапы… Лейквуд (Колорадо), 1990 год, 27 февраля. Вылетает единственный (!) жёсткий диск у единственного (!) компьютера, что управляет городскими светофорами. Ну, вы поняли.

А вот следствие как ошибки софта, так и человеческой: с 2011 года по 2017 год в Англии не отправили пациентам и врачам около 709К писем. Иначе говоря, шесть лет косячили с отправкой писем, содержащих в числе прочего информацию, отсутствие которой могло повредить здоровью 1700+ человек. Куда смотрели админы? Куда смотрели врачи? Куда смотрели пациенты? Отличный кейс для дискуссий на тему «мониторинга людьми».

У ошибок много следствий, после которых нельзя не задумываться о том, где заканчивается толерантность к «ну а чё, с каждым бывает, накосячил, да». Например, 4 февраля 2017 года на софт Florida Department of Children and Families накатили апдейт. И только 28 апреля заметили, что около 1500 обращений на Florida Abuse Hotline (горячая линия, на которую сообщают о насилии над детьми) не было обработано системой должным образом. В базу шло, а дальше нет. Потом, конечно, это стали поднимать из беклога, но такая долгая задержка следователям не сделала жизнь проще. С каждым бывает, да?

20 декабря 2017 года по всей России перестала работать часть кассовых аппаратов АО «Штрих-М», ООО «РР-Электро», ООО «Тринити» и ООО «НТЦ Измеритель». Масштаб для примера — в Алтайском крае вырубило около 20%, всего же по России около 80К касс. Всё было так грустно, что в кои веки власть пошла навстречу и ФНС оперативно разрешила магазинам отпускать товар и услуги без использования касс. Починкой занимались 2500 сервисных центров и 20000 инженеров. Потери бизнеса неведомы (примерно насчитали 2.5+ миллиарда рублей). Нагнал жути? А всё потому, что где-то в коде неправильно написали конвертацию даты: «при конвертации даты 20.12.2017 во внутренний формат устройства операция «печать чека» становилась циклической». При этом, как я понял, проблема возникла на стыке интеграции с софтом, который работал со «старым» форматом даты вида dd.mm.yy (при переходе на 2000-й год всему плохеет) вместо dd.mm.yyyy.

Федеральный корабль дураков

Накал идиотии таков, что хочу оставить для истории. На текущий момент в блокировке 16M+ адресов. Сверхкомпетентные кадры из Роскомпозора в азартной погоне за Дуровым очевиднейшим (при этом причина настолько прогнозируема ДО, что действия кажутся даже вот прям сознательными! хотя… не, чего это я, это ж федеральный орган) образом умудрились заблокировать (народ чинит там, где может) часть инфраструктуры следующего:

  • Viber
  • кассы Дикси (опровержение)
  • сервис доставки «Птичка»
  • Skyeng
  • Guild Wars 2
  • Vainglory
  • Guns of Boom
  • Cloudpayments
  • pCloud
  • NuGet
  • lifehacker.ru
  • GiveMe.ru
  • Gross.Wedding
  • Открытая наука
  • Microsoft (Microsoft Office 365, а также обновления Xbox и Windows)
  • Star Citizen
  • Splatoon 2
  • Tezis
  • Spotify
  • Альфа-Банк (часть банкоматов)
  • World of Warships Blitz
  • Total War: Arena
  • Taxamo
  • Ivideon
  • Fortnite
  • Playerunknown’s Battleground
  • Battle.net
  • Netflix
  • Nintendo Switch
  • Elite:Dangerous
  • DuckDuckGo
  • Twitch
  • PSN
  • не подтверждено: Steam, Uplay, Evernote

Надо ли говорить, что Telegram продолжает работу, а Дуров превращается в народного героя?

Источники: GT, В, МК, V, VC, ZM
Продолжу пополнять, конечно.

Категории RDBMS

Вариантов разделения RDBMS на категории много. Зайду с позиции практики и выбора базы на тыщу лет вперёд.
Сначала три постулата.
Во-первых, базы данных — это давно не только лишь SQL и «сделать пару запросов». Оно как внутри теперь напоминает на картинках город (погуглите [oracle 12c architecture diagram], красиво нарисовано), так и по обилию возможностей потрясает (слово сильное, но меня именно оно). В современном мире вы можете почти всю логику приложения сделать на стороне базы, снаружи оставив лишь тонкого клиента.
Во-вторых, при выходе за рамки простых SELECT вы теряете совместимость (возможность легко сменить одну базу на другую). Так же и в инфраструктуре — едва начинаете активно использовать средства репликации, мониторинга, бекапа и т.д., вы снова привязываетесь к определённой базе. Соответственно, едва выходите в production, вам с этим жить долго и счастливо.
В-третьих, если последние два года вы не следили за прогрессом в RDBMS, вы зря. Пересмотрите changelog’и, актуализируйте информацию в голове. До сих пор живы разработчики с мантрой «PostgreSQL не умеет в репликацию», это скучные разработчики, фу.
Так вот. Категорий тоже три.

Платформы. Вы большой и толстый энтерпрайз с большой нагрузкой, десятками схем, тысячами таблиц. Вам нужна RDBMS, которая всё это потянет, а также даст определённые гарантии по SLA и по живучести данных. И чтобы система безопасности была страшнее руководителя безопасников. И чтобы админы не стрелялись, ворочая этой махиной. И чтобы можно было данными оперировать с разных направлений (корпоративные порталы, бухгалтерия, админки, импорты/экспорты и т.д. — всё это отличающиеся по трудозатратам задачи). И вообще чтобы всё. Ой, и чтобы облака. И чтобы RDBMS as a service. И документации целый шкаф. И чтобы интегрировать можно было до бесконечности! И чтобы регулирующие и дестабилизирующие органы по своим ГОСТам принимали! И вон тот кусок поля под помидоры!!!
На этом рынке рулили три монстра: Oracle (Oracle Database), IBM (IBM DB2), Microsoft (MS SQL Server). С некоторых пор их двигает PostgreSQL, который выгодно отличается стоимостью поддержки, динамичнее развивается и вообще «бесплатен» при наличии энтерпрайзных возможностей.
Если угодно, это категория RDBMS уровня предприятий, где предприятия — заводы, банки, гос.учреждения и прочие масштабные ребята. Для эффективного использования требуется специально обученный персонал. Масштаб на конкретном примере: переход Я.Почты с Oracle на PostgreSQL — обратите внимание на объём данных, на RPS, на железо.

База как база. Собственно, то, с чем работает большинство разработчиков. Если у вас сайт как сайт, продукт как продукт, а то и просто надо какие-то данные где-то хранить, но от MongoDB слегка тошнит, да и честный ACID нужен, выбираете… правильно, MySQL (вместе с InnoDB, например). Справедливости ради, MySQL из штанишек вырос давным-давно. Крайне богатый SQL, нагрузку держит отлично, скорость работы вне претензий, стабильность тоже норм.
Почему не «платформа»? Давайте сразу: Oracle не будет выращивать конкурента своему платному продукту. Не будет никакого MySQL EBS, не будет MySQL Forms, умеющих работать с PM/SQL, которого тоже не будет. Вообще много чего не будет из энтерпрайза. Вы хотите хранить охрениарды данных и быстро работать с ними? Ок, вот MySQL. Вы хотите вокруг этих данных с плотной интеграцией разных частей выстраивать орбитальную станцию и продавать в аренду марсианам? Ну, если времени много и нервы титановые, у вас это получится (и получается, да). Но следующее поколение после вас покрутит пальцем у виска и ВСЁ ПЕРЕПИШЕТ.
Важно понять следующее: нет смысла сравнивать MySQL с другими в области хранения и получения данных. Он норм для этого, по иным бенчмаркам лупит ребят сверху. Проблема как его, так и в категории (в которой у MySQL нет конкурентов) начинается при выходе за границы этих потребностей. Это вот та точка, на которой постоянно буксуют джихады MySQL vs PostgreSQL. Вроде и по скорости равны. И SQL везде клёви. И так обе могут, и эдак. Да что ж за нафиг, почему одни после research’а выбирают одно, а другие другое? Да вот ровно потому и: при выборе стратегической RDBMS рассматриваются не только скорости и диалекты. И вот ровно тут MySQL так у границы топтаться и будет.
Категория RDBMS уровня небольших предприятий, одного продукта. Или огромного продукта для хранения данных без особой логической нагрузки (иными словами, половина приложения не на стороне базы в виде процедур и функций). Для эффективного использования… Тут тяжело. Все считают, что знают MySQL, простота LAMP в наших сердцах. По факту мало кто использует именно MySQL, лишь разворачивают быстренько, слегка тюнят, потом обстреливают простыми запросами. Им хватает. А так-то MySQL — сотни страниц документации и сотни features.

Базёнки. Маленькие и/или встраиваемые RDBMS. Тут веселее: SQLite, Firebird, Derby и т.д. Типичное применение — local storage в Google Chrome, туда SQLite воткнули.
Няшные тем, что кушают очень мало ресурса, но при этом вполне толковые. Понятно, что нагрузку на них не пустишь, ожидать серьёзную репликацию и failover тоже не стоит, но для своих целей всё давно уже хорошо заточено.
Категория… ну вот какая? Если вам требуется маленькое встроить или рядом поставить, но при этом чтобы не требовалось админство-админство. Пусть будет «категория RDBMS уровня модуля приложения». Квалификация персонала — встроить и забыть.

Вот как-то так. Деление условное, простое, но достаточное, чтобы включить размышлялку и подумать о том, как правильно выбирать RDBMS, на что повлияет выбор, на какие качества базы смотреть.
PS. Любопытно ещё следующее на фоне фанатских войн… Любая RDBMS что категории «платформа», что «база как база» — сложный насыщенный продукт. Споры разработчиков о том, что лучше — зачастую споры людей, которые понятия не имеют, какой уровень SQL поддерживается, при каких условиях какие lock’и и на чём, как конкретно работают виды репликации, какие особенности шардирования и т.п. Большинство из вас не использует MySQL или PostgreSQL. Вы используете условную RDBMS, в которой вам интересно малое подмножество SQL (ну откройте спецификацию языка и скажите, действительно ли вы его знаете), ну и сверху ещё несколько шняжек, с которыми у вас получилось работать. С остальным сталкивается эксплуатация (которая тоже не всегда может выделить из своих рядов специалиста), а также бойцы, которые пытаются иногда выйти за рамки «стандартного SQL». Но и среди них редко встретишь полноценного DBA, прошедшего полноценное [само]обучение по продукту (у которого 3500+ страниц документации, например). Потому споры эти бестолковы и смысла не имеют, только бы совочками помахать.

О сертификациях

К сертификациям в разработке отношение сложное. Как 15 лет назад мы с недоумением смотрели на коллегу, который сдал пару Java-экзаменов, так и сейчас в наших краях оно вроде как и бесполезно, да ещё и дорого, три экзамена — топовый смартфон, ага.
Что любопытно, на Западе и на Востоке всё диаметрально иначе. Если речь идёт о вендорных дипломах (Oracle, Microsoft, Cisco, Amazon и т.д.), статистически вы заметно повышаете свой доход. А уж админы и NOC’и без сертификаций… скажем, приветствуются далеко не везде. На деле у них чуть ли не на порядок (относительно разработки) всё это развитее, особенно если с Cisco работать.

Итак, вы простой советский разработчик в размышлениях «а нафига». Вот мои ответы мне на эти «нафига». Собирал и осмыслял много лет, пока не собрал критическую массу, после чего сдвинул жопу с тёплого стула. Внимайте.
Во-первых, мотивация выучить то, до чего иначе руки не дотягиваются. Девять из десяти разработчиков знают области разработки на уровне «знаю только то, что применяю в своей работе на ПупкинСофт Ltd». Мне это стыдно и скучно, но всё равно не хватает пинка, чтобы вернуться к азам. Провалил экзамен — выбросил в окно 7 ящиков шотландского эля — жалко, блин. Лучше выучу.
Во-вторых, в процессе подготовки узнаёшь много интересного и немало полезного. У вас не получится тупо зазубрить ответы на билеты, т.к. билеты не публикуются. Приходится зубрить темы целиком, что приводит к просветлению головы и автоматическому повышению квалификации. Заодно это хорошее лекарство от избыточной самоуверенности, спеси и зазнайства. До подготовки ты крутой и всё знаешь, а тут вдруг того не знаешь, этого, сего и ещё про вон ту конструкцию даже не догадывался. Поневоле задумаешься о том, сколько раз за годы на основе такого невежества озвучивал совершенно идиотские суждения.
В-третьих, лидам полезно самим пройти распространённые сертификации из их области, чтобы объективнее оценивать наличие сертификатов в резюме. Как минимум, сможете сократить или упростить собеседования, что на потоке уже хорошо.
В-четвёртых, весь мой опыт говорит следующее — вы никогда не угадаете, какая бумажка вам поможет в будущем, но совершенно точно ни одна позитивная бумажка о ваших достижениях не будет лишней (ну, помимо диплома о первом месте на поселковой олимпиаде по информатике). Выстрелить в вашу пользу может в совершенно случайный момент. Да даже тем, что у рекрутера глаз зацепился и ваше резюме легло на верх стопки — уже это может сдвинуть жизнь на 90 градусов.
В-пятых, сертификаты действительно показывают профессиональный уровень их владельца. Да, там много наивных вопросов. Да, задачи бывают идиотскими. Фигня в том, что многие разработчики не могут ответить на эти вопросы и не могут решить эти задачи. Люди, может, и хорошие, но на Python-собеседовании на 10 минут уходят в себя, не в силах вспомнить, есть ли в языке тернарный оператор. И если я увижу в резюме хотя бы entry level сертификат (обычно они про синтаксис), я буду знать — этот боец знает, где какой оператор.
В-шестых, однажды вы можете мигрировать. Я минут тридцать ради fact checking листал job-сайты США и всё так же вижу много вакансий, в которых так или иначе, но варианты следующего: «Must possess at minimum an Oracle Certified Associate Java SE x Programmer certification or must obtain an Oracle Certified Associate Java SE x Programmer certification within 120 days after hire». Да, обычно это крупные бюрократизированные конторы. Но вы уверены, что уже через год от переезда нанявший вас стартап не развалится и вы не будете лихорадочно искать любое место?
В-седьмых, сертификации и сертификаты — объективная часть мира разработки. Никого не волнует ваше мнение о том, нужны ли они, полезны ли они, что они показывают и т.п. Они есть. Через них прошли миллионы разработчиков. Они влияют на оклады, на контракты, на собеседования. Вы либо принимаете правила игры и хоть ознакомительно осваиваете этот угол ринга, либо бестолково бунтуете, отрицая, либо равнодушно игнорируете, пока не столкнётесь. Как по мне, мудрее ознакомиться до того, как возникнет нужда.
В-восьмых, наконец, это fun. Не, правда. Годный вариант отойти в сторону от рутины и вспомнить, что такое учебники, билеты, экзамены, волнение «сдал? завалил?» Мне понравилось. Теперь точно буду в год хоть по два сертификата получать, чтобы развлечься.

Итого… Ну, понятно, что я в основном вижу лишь плюсы. Правда, важно помнить главное: сертификация — она для вас, она в ваших интересах, она решает ваши задачи и проблемы. Вас не будут носить на руках на следующий же день от сдачи, не будут на собеседованиях чествовать красной дорожкой. Это стратегический вклад кирпичика в вашу стену специалиста. Без остальных кирпичиков (интеллект, дисциплина, множество знаний из разных областей, трудолюбие и т.д.) не стоит ничего.
PS. Подчеркну: речь не про Курсеры и Брейнбенчи, речь про те экзамены, которые вы сдаёте производителям софта / железа, получая сертификат соответствия знаний стандартам производителя.