Выпендрёжный «плиточно-вебдванольный» дизайн с выплывающими вырвиглазными менюшками, рассчитанный исключительно на планшет, где картинки напрочь перекрывают контент (на сайте, извините, Analog Devices, не зайчиков-шнуфелей!) — это одно. Это то, что называется «вон из профессии». Когда сайт автомасштабируется под 640×480, старую мобилу, планшет и вайдскрин, меняя местами элементы дизайна — это совершенно другое.
Когда телефоны и планшеты принципиально не имеют аппаратной клавиатуры и приложения не могут работать без мультитача — это одно. Когда гаджет может иметь откидную QWERTY или, скажем, резистивный stylus-only экран для тех, кто любит в дороге рисовать — это совсем другое.
Когда операционная система для настольных ПК копирует интерфейс наладонников, которые имеют совершенно другую эргономику, их по-другому держат и используют, у них совершенно иное разрешение и размеры экрана, и получается в результате угробище Франкенштейна — это одно. Когда приложения с наладонников легко портируются на настольный ПК, а длинные нажатия заменяются на правые щелчки — это совсем другое.
Почему же вы всё время разрабатываете и производите одно и то же, хотя в своих мечтах и мыслях представляете это себе совершенно другим?
Устроился в небольшую компанию программистом. Компания предоставляет некоторые услуги своим клиентам. Но предоставляет крайне фигово: больше полусотни пользователей не держит.
Начинаю разбираться, что почём. Первым делом настораживает, что сессия длится один пакет. Следующий пакет так же должен быть с авторизационными данными.
— Ну, у нас же реализована архитектура «запрос — ответ»! Нам же не надо держать TCP-сессию! — говорит программист с 25-летним стажем.
— Гм, — говорю я и лезу в код сервера.
Лучше бы я этого не видел.
На каждый входящий пакет создаётся поток-обработчик, который умирает сразу же после того, как отсылает пакет обратно. И, естественно, убирает за собой все данные о клиенте. Что характерно, поток-получатель парсит HTTP-заголовок.
Начинаю переписывать код. Сперва создаю пул потоков-обработчиков, но очень быстро утыкаюсь в ситуацию, когда у меня 100500 потоков на 24-ядерной системе. В общем, ситуацию это спасает, но не намного.
Далее избавляюсь от авторизации: клиенту передаётся его сессионный ID, и уже дальше работаем с ним.
Потом избавляюсь от пула потоков, создав очередь запросов, из которой могут брать любые рабочие потоки.
Потом делаю ещё одну страшную вещь: переношу очередь запросов как можно ближе к получению пакетов, до парсинга HTTP-заголовка. Результат — восьмиядерный рабочий комп выдерживает стрессовую нагрузку до 100 тысяч пакетов в секунду.
На следующую неделю компания закрывается: в связи с кризисом отвалились три крупных клиента, и бюджета на программистов не хватает.
Испытываете трудности при отдачи контента порциями? Дискомфорт, говорите? Поделюсь своим опытом раздачи терабайтов обновлений к игровым клиентам. Не знаю, как это у «танчиков», но принцип одинаков везде.
Вот вы зарелизили игру. Первый вопрос: как выкладывать? Одним большим куском или в развёрнутом виде? Тут вопросов не возникает — конечно же, большим куском, раскидать его по серверам поближе к клиентам, на площадки с доступом к основным магистралам. А вот небольшие патчи? Выкладывать сразу или творить кумулятивные обновления? Всего-то из изменений — брутального орка кто-то из локализаторов обозвал «МойЗайчик». Первая мысль была именно такая: давайте сбацаем торрент, и пущай клиенты с клиентов обновляются, меньше нагрузки на сервера, ведь при более-менее массовом апдейте нагрузка может подскочить на порядок, никаких «теньге» (10 Gigabit Ethernet) не хватит. Сделали. Водрузили Transmission на сервера — мол, обновляйтесь. Ой, что это? Почему скорость такая маленькая? А что это клиенты предпочитают качать с центра, а не с других клиентов? А неблагодарные клиенты, скачав обнову, тут же вырубают обновлятор, чтобы играть не мешал, из-за чего начинают выигрывать HTTP-пиры. Вот это и есть традиционные грабельки: гладко было на бумаге, да забыли про овраги…
Так и живём. Имеем кучу nginx, которые раздают или с общего стораджа, или по свистку синхронизируются сами. А найти сервер, который вдруг не поддерживает докачку, надо сильно постараться. Или на коленке самому написать. Nginx в том числе и для этого был создан, чтобы, не сильно потребляя ресурсы, мог отдавать кучу мелких файлов очень большому числу клиентов.
А теперь представьте, когда вы такое количество файлов обновили только наполовину. Да, проверяем целостность клиента, проверяем тысячи хешей, перекачиваем старые файлы. В результате какая-нибудь «ферма» убивает батарею недобука, когда хозяин сидит в «Макдональдсе» и пытается обновляться там. А ему ещё и каждые полчаса линк отключают: мол, переавторизоваться бы …
Счастья, чтобы никто обиженный не ушёл, не существует. Может, с приходом планшетов всё изменится?
Если кто-то ещё помнит историю вычислительной техники — начиналось всё с многообразия архитектур и процессоров. Пусть компьютеров было мало в штуках, зато они были очень разными. Ни о какой ОС речи ещё не было, всё было уникально и по-своему.
Потом сформировались несколько типов компьютеров, появились ОС для них. Операционные системы уже начали становиться неким стандартом, позволяя программистам не так сильно завязываться на особенности реализации конкретной машины.
С расцветом персоналок многообразие архитектур ещё более сузилось, а количество разнообразных операционных систем продолжало неуклонно уменьшаться.
Дальше — больше: давно пропали процессоры Alpha, несмотря на свою уже тогда имевшуюся 64-битность, исчезли процессоры Motorola, бывшие когда-то сердцем компьютеров Apple, передовой для своего времени PowerPC сейчас можно встретить разве что в некоторых моделях бытовой техники, и даже некогда топовое железо от Sun доживает последние дни.
Сколько было различных вариантов UNIX? Где легендарный NextStep? Куда пропал BeOS, обещавший перевернуть представления о компьютерах? Даже QNX, лидер на рынке встраиваемых систем, сейчас вряд ли попадётся вам на глаза.
И вот наши дни: из всего богатства вариантов, из всего зоопарка систем сейчас мы имеем в наличии потомков линеек процессоров х86 и ARM, а из ОС — Linux, OS X и Windows. Другие пока ещё есть, но…
Причина этого вовсе не в происках злобных маркетологов, а в том, что потребители (в данном случае — разработчики, программисты, пользователи) стараются получить как можно больше, затратив минимальные усилия.
Зачем вкладывать деньги в сверхмощные сервера с десятками ядер, когда можно накупить стандартных дешёвых х86 и решить ту же самую задачу, хоть и немного иначе?
Зачем разрабатывать свой уникальный процессор с уникальными системами команд, когда можно взять копеечный штампованный ARM, который к тому же постоянно совершенствуется?
Зачем тратить время и силы на какую-то особую ОС, если тот же Linux прекрасно работает и на x86, и на ARM, что позволяет устанавливать его хоть в дата-центр, хоть в утюг с автоподогревом?
Наоборот, это маркетологам надо сказать спасибо, что до сих пор существуют OS X (хотя от неё до Linux рукой подать) и Windows (вопрос принципов и амбиций известной компании). Если бы не их усилия — люди бы пошли по пути наименьшего сопротивления, сокращая свои издержки за счёт унификации оборудования и софта.
Зачастую проще допилить готовое решение под свои нужды, чем городить что-то уникальное и полностью своё. А вы про «обмылки» говорите…
Смотрю фильм на DVD. Хакер взламывает то ли сеть, то ли базу данных, и у него запрашивают пароль доступа. Хакер потирает руки и произносит «Сейчас…»
Тут у меня звонит телефон. Ставлю DVD-плеер на паузу и иду отвечать. После долгого разговора иду на кухню, ищу, чем бы перекусить, попутно мою давно залежавшуюся в мойке грязную посуду…
Короче, вернулся в зал не скоро. Ага, думаю, надо фильм досмотреть. Беру пульт, снимаю с паузы. С экрана телевизора исчезает скринсейвер DVD-плеера, а вместо него на синем фоне белыми буквами, как в Norton Commander, запрос:
<code>Please enter the access code: _
</code>
На минуту крепко задумался, что за код от меня требует DVD-плеер, даже на пульте что-то набирать пытался, пока не понял, что первое нажатие кнопки «Play» убирает скринсейвер, а второе продолжает воспроизведение.
День выдался, что называется, ни к черту. С утра сильно ушиб ногу, возникли проблемы на работе, из-за скачка напряжения сгорел домашний комп, потом с девушкой разругались в пух и прах… В общем, взял я запас спирта и курева да сел топить грусть-печаль в укромном месте. Вот только забыл я, что район этот не зря считается гопоопасным…
— Слышь, ты, дай денег!
Медленно поднимаю слегка осоловелый взгляд на источник звука. Этого следовало ожидать — типичный HD-пацан на охоте. Чуть в стороне в нашу сторону посматривает «группа поддержки». Бежать бесполезно, вопить тоже…
— А на кой тебе? — язык, в отличие от мозга, среагировал почти моментально.
— Да купил, &^%, наушники и порвал их на $%&. А чё такое?
Действительно, на шее у вопрошающего висят новенькие Koss Porta Pro с оторванным от одного уха проводом.
— Ничё. Давай сюда, щас сделаем…
В полной прострации парень отдал покалеченные наушники. А дальше дело техники — ножик для зачистки, сигарета в роли паяльника… В общем, спустя пять минут наушники снова выдавали звук в полном объёме.
Нецензурно восхитившись, парень двинулся к товарищам. Спустя десять минут, когда я о нём и думать забыл, предо мной возникло приличное количество пива, и смутно знакомый голос сочувственно прогудел:
— Слышь, братуха… Ты, это, в порядке? Если чё — звони, мы поможем…
Пиво разошлось по рукам. Нестройный хор пропитых голосов матерно и от души желал мне всего и побольше. А над городом зажигались первые звёзды…
Есть у меня топорик, который принадлежал ещё моему деду. Самый обыкновенный хозяйственный топорик, которым и дерево срубить, и гвоздь забить, и доску обтесать. И вот хожу я с ним по лесам и фестивалям и работаю. Или предлагаю поработать им обладателям современных именитых топоров или попросту новодела. Не раз наблюдал смену выражения их лиц с недоумения и презрения моего малыша на лёгкое удивление после работы с ним, ибо и дрова он лучше рубил, и удобен так же был. А секрет лишь в том, что топор был правильно заточен.
Да, новые пластмассовые топоры хороши и легки, но сделаны так, что при поломке их можно только выбросить. Или заменить рукоять на деревянную, предварительно долго и упорно высверливая остатки пластика. И ещё шутка в том, что топор «из коробки» тоже требует заточки. Нет, дрова нарубит и дерево свалит, но, как показала практика, даже специально сточенный под ребро пятикопеечной монеты топор вполне неплохо колет дрова, но для нормальной работы его всё же надо заточить. И да, у топоров есть множество функций помимо рубки дров, и для всего есть своя форма топорища и лезвия.
А теперь вернёмся от железа кованого к железу паяному. Как было замечено несколькими днями ранее, разница между мощностями компьютеров в 2010-м и 2015-м не столь велика, как между 1995-м и 2000-м. При этом основные задачи, выполняемые на компьютерах в офисах, тоже не сильно поменялись: по большей части компьютеры выступают в роли продвинутых печатных машинок. Но при этом год от года, невзирая на увеличение мощности оборудования, программная часть опережает этот прирост мощности, функциональности и прочего, что тормозит наше ПО так же, как и в 95-м. А всё из-за того, что, как и каждый инструмент, программы требуют заточки, балансировки и ухода, а не превращения в яркую игрушку с дополнительными функциями, которые 80% времени не нужны и попросту занимают место. При этом железо становится неремонтопригодно, поскольку всё многообразие схем и дизайнов привело к тому, что уже нельзя выбросить вышедший из строя блок и заменить его на новый: многие новые блоки уже не совместимы со старыми, пусть и вышедшими пару лет назад. Этим блокам может попросту не хватить места в маленьком корпусе, а вздувшийся конденсатор будет из-за тех же размеров не так просто выпаять; если же вышло из строя что поменьше, то тут уже только к мастеру нести, который в 90% случаев скажет, что дешевле купить новый агрегат, чем менять эту копеечную схему.
Новое или старое — не имеет разницы, если это не сказывается на цене или эффективности работы. И проблема современного инструмента в том, что много внимания уделяется тому, чтобы ручка была красной, ибо топоры с красным топорищем лучше заметны в траве, чем топоры с зелёным. А то, что клинья вылетают и рассыпаются, лезвие закалено только по кромке — это всё мелочи, которые исправляются синей изолентой из соседнего отдела да видеоинструкцией с интернета, где показано, как прокалить топор на газовой горелке, но так делать нельзя, ибо потеряете гарантию на дорогое изделие. И не покупайте топоров у дяди Васи на базаре, который в СССР кузнецом был: у него топоры кованые и ручка деревянная пропитана морилкой, не то что наши с красной рукояткой! И помните: рамбутан на красной рукоятке говорит об элитности вашего топора.
Ты только не обижайся, но я тебе один умный вещь скажу. Твой машина… Блин!
Я во многом консервативен, но экранную клавиатуру всё же поддержу. Говорите, на ней трудно быстро и безошибочно набирать длинные тексты? А вы пробовали? Физическая «клава» привыкшему к ручке тоже поначалу кажется неудобной, как, впрочем, и наоборот. Но стоит натренироваться — и кажется, что ничего удобнее нет. С экранной клавиатурой добиться такого результата тоже возможно, главное — захотеть.
А когда натренируешься, по-настоящему ощутишь главное достоинство ёмкостного экрана — нулевое усилие нажатия. С усталостью после набора довольно увесистого текста, в общем, почти попрощаетесь. Автозамену, кстати, лучше выключить: иногда она так заменит, что смеховой шок обеспечен. Лучше внимательно смотреть, что набираете. Этот навык тоже придёт, как и навык попадания по нужной клавише почти всегда с первого раза даже на маленьком экране. Более того, вы научитесь при работе на маленьком экране уставать меньше, потому что перемещать пальцы потребуется на меньшие расстояния. Именно так был набран этот текст (модераторы, гляньте, пожалуйста, нигде не промахнулся?), но это — не мой рекорд. Рекорд я установил четыре дня назад, набрав в «королевском мягком» аж 20 страниц 11-м шрифтом и устав меньше, чем если бы набирал на физических клавишах. Времени заняло ненамного больше (потренируюсь ещё — будет занимать даже меньше), при том, что на обычной клавиатуре я умею строчить довольно резво, зато всё проделано лёжа, а значит, меньше устали не только пальцы, но и спина. Текст был, кстати, научно-прикладным, так что из правила «лопата отупляет» иногда бывают исключения.
А как повлияет на ваш интеллект квадрокоптер для селфи, зависит только от вас. Если купите — не повлияет вообще никак, так же, как покупка штанов или батона. А если сами напишете для него математику (а это — стабилизация не только полёта, но и изображения) с нуля, независимо, в одиночку и желательно хотя бы частично на асме — к полёту на Марс можете себя считать готовым по крайней мере морально.
Как я погляжу, человеку проще накатать простыню, какие все разработчики плохие, чем просто поглядеть настройки программы. К примеру, та самая белорусская игра со своим инсталлятором успешно использует торрент для скачивания обновлений — достаточно поставить галочку в настройках, и прогресс скачивания не откатится. За деталями — к принципу работы торрент-сетей.
А менеджеры закачек давно уже поддерживают докачку по частям. Вопрос только в том, что зачастую её не поддерживает сервер, отдающий контент.
К тому же есть понятие непрерывности и атомарности операции. Никто не гарантирует, что установка патча или монтаж ролика будут правильно завершены в том случае, если дядя Вася, решив, что он мегаэлектрик, выбил вам пробки, а у вас «на паузе». Что делать в этом случае? Данные потеряли? Потеряли. Какой файл заменяли последним, есть информация? Нет. Правильнее снова запустить процесс, дабы получить гарантированный результат, а не пытаться выяснять, где побились блоки.
Кстати, наглядный пример: попробуйте в уборной поставить процесс на паузу. Можно ведь? Можно, хоть и сложно. Вот только некомфортно и возникает чувство несовершенства и недоделанности.
Не ищите злых козней разработчиков там, где их нет.