Знакомый уехал за границу, далеко и надолго, мы с женой приютили его собаку на ПМЖ. Пёс весёлый, игривый, но непослушный до ужаса. Возраст ещё позволял перевоспитать, поэтому начали немедля. В процессе воспитания выяснилось, что собака на самом деле послушная, только подход к ней нужен особый. Не спрашивайте, каким образом, но мы выяснили, что «сидеть» пёс не воспринимает, а «sudo сидеть» — исполняет охотно!
Жена уже начала подшучивать, что пёс у нас на линуксе, пока я не вспомнил, как однажды стал свидетелем наказания собаки: прошлый хозяин бегал за ней с ремнём с криком: «А ну иди сюда-а-а!» Видимо, хозяйское «сюда» прочно впечаталось в юный мозг как обозначение угрозы, в результате чего наше «sudo сидеть» пёс воспринимал как «сядь, пока ремня не получил».
Как согреться бедной одинокой студентке, если всевозможные обогреватели строго запрещены и жестоко караются, а отопления в связи с «економією енергоносіїв» фактически нет?
Берём ноутбук (в нашем случае — Харитона Петровича трёхлетней давности).
Запускаем Everest, мониторим температуру при различной нагрузке. Лицезреем «above 100» на чипе видеокарты, роняем челюсть.
Повторяем шаг 2. Температура незначительно, но всё же падает.
Запускаем Furmark.
Ждём (часа три — для комнаты, минут десять — под одеялом).
PROFIT!
Можно использовать потоковое видео (температура выше 80 не поднимается) либо тяжёлые игры. Минусы: к ноутбуку сползаются усатые твари, которым тоже холодно.
Можно, конечно, парня позвать с очевидной целью, но мы же не ищем лёгких путей!
Забавная штука — газета Metro. Прочитал в ней как-то анекдот о женщине, подыскивающей себе мужа по анкетам. Один из кандидатов подходил ну прямо по всем-всем параметрам. Но стоило ей узнать, что он играет в «танки», как она принялась читать анкету следующего.
А потом была статья на весь разворот о жилище будущего, в котором, в частности, будет так называемая геймерская. Совместное участие в играх в ней сплотит семью.
Игра-разделитель и игра-объединитель. Взаимоисключающие параграфы? Нет. Снимает не фотограф, снимает камера. И разделяет или объединяет не игра, а игрок.
В вашей малогабаритной квартире нет места для геймерской? Не беда. Начните с малого. В маркет за двухпользовательской AY-3-8500-подобной игрой. Хотя бы.
Полчаса назад — звонок. Неизвестный номер. Голос бабушки в районе 70–80 лет:
— Алло, вечер добрый! Извините, что так поздно, мне Света сказала, что вы поможете. (Какая Света? У меня много знакомых Свет, ну да ладно.) У меня так и так, то-то и то-то.
Ну, что по телефону, что через удалённое управление, но вроде бы всё настроил, починил, долго и муторно выслушивая причитания из разряда «Я ракетные двигатели проектировала, а с этой железкой справиться не могу» и по возможности молча старался всё исправить побыстрее.
Под конец, прощаясь, бабуля выдала фразу, после которой начался истерический смех:
— Спасибо вам огромное, Сергей! Я завтра вашей жене на работу занесу конфет и домашних пирожков. Пусть вам передаст, попробуете — понравится.
В общем, сижу смеюсь. Я Николай и уже три года как в разводе. Да и жену звали Анной, а не Светланой… Так что, уважаемый Сергей, с тебя 50% пирожков!
Прочитал тут про страдания одного программиста. Слёзы наворачиваются. Хочу в этот санаторий, там, где функция в 400 строк — предел безобразий. Видимо, у всех болевой порог разный, а у меня болевые рецепторы на заднице стёрлись давно. Итак, что у меня.
Есть программы на Фортране. Язык весёлый. Констант в нём нет, а параметры в программу передаются исключительно по ссылке. То есть вызов
call subr(1)
на самом деле передаёт в подпрограмму адрес переменной, в которой лежит единица. Значение переменной в подпрограмме можно изменить. Так я узнал, что в любой фортрановской программе есть как минимум четыре единицы (и четыре нуля, кстати), в общем случае не равные между собой. То, что
print *, 0
выдаст именно «0», не гарантируется.
Есть программы на Паскале. Все пользовательские типы там именуются по простой схеме: Т1, T2, T3, T4… T55. Что вы, конечно же, есть распечатанный документ, где эти типы подробно описаны, для чего и как, но его потеряли. А переменные экономили, поэтому в разные моменты времени переменная используется для вычисления и хранения совершенно различных по смыслу значений. Поэтому называют их А1, А2, А3. Это не обфускатор. Люди реально так писали.
И, наконец, любимый С++. Реальная программа, которая лет десять назад неплохо продавалась по всему миру. Там есть три функции. Первые две содержат 45 и 35 тысяч строк. Раньше это была одна функция, но Visual C++ отказался компилировать файл больше 65К строк, и автор разбил функцию на две. Третья функция поменьше — 20 тысяч. Практически все 20 тысяч строк запиханы в отрисовку окна. Инициализация программы, парсинг DXF-файла с картой Земли, расчёт всякой астрономической фигни и, собственно, отрисовка.
Есть ещё 16 файлов машинно-генерённого С++ по мегабайту каждый, которые иногда приходится править вручную.
Могу продолжить, но мне уже грустно. А вы над 300 строками плачете…
Помощи помощникам? Да что вы знаете про глюки, что вы знаете про боль и страдания? Кому приходилось поддерживать и разбирать чужой код, меня поймёт. Хотя и не знаю этого наверняка, но всеми библиотеками своей души пытаюсь на это надеяться.
Один класс (имя не отражает сущность — кого это волнует?) и сотня функций. Казалось бы, нормально. Нормально?! Ни хрена это не нормально, когда поля класса расположены случайным образом между функциями. Именование переменных, бизнес-правила? Да ну их в большой сочный болт! Метод, внутри которого переменные
t
,
p
,
x
, а некоторые и глобальные — вот что здесь норма.
Вы думаете, это всё? Да я молился, чтоб этом было «всем». Это творение подключалось к базе Аксесса. Банально через датасеты. Банально? Ну да, слишком банально. Один датагрид, пять таблиц, поэтому что? Правильно: надо пять датасетов! Имена… А что имена? Имя как имя: 50 символов, начинается латиницей, продолжается русским капсом (тысяча блудниц!) и заканчивается цифролатиницей. И их пять. Пять таких датасетов в одной форме. На один датагрид. А знаете, какой запрос в каждом из пяти датасетов? Глаза вытекают:
SELECT * FROM [dataTableName];
.
Про форматирование кода после предыдущего даже писать как-то мелочно.
Функция. Да-да, именно так: Функция. Особая примета: входной параметр —
y
, выходной —
x
. 150 строк. Шта? Ладно. Следующая. 230. Шта-а-а? А дальше скромная ФУНКЦИЯ. 320 строк. Мои глаза невозможно было представить, пока я не увидел следующую (правда, всю закомментированную однострочными комментариями) на 400 строк. Я не знаю, как про это говорить.
Похоже, я должен требовать ящик валерьянки в неделю как расходные материалы.
Начинал я свою службу на заводе, работал прогером. Отдел был не очень большой: пять-шесть разрабов, четыре механика и сисадмин. Находились мы все в соседнем здании от основного, но наш Великий и Ленивый Админ решил, что он будет сидеть в головном здании и всех местных юзверей заберёт к себе на обслуживание, а механики пущай бегают по складам. Но со временем он очень обленился и заявил: «Идите все лесом! Я админ и буду следить только за серверами, а мышки и клавы пусть меняют механики!» Так и получилось: бедные механики бегали по складам и по всей территории (а она, я вам скажу, была весьма внушительных размеров), а тётки из головного здания были очень капризные. То у них мышка не так двигается, то ей свет в мониторе не нравится.
Дык вот, так как мы сидели в разных кабинетах, то и телефоны у нас были разные, но механиков никогда не было на месте (трудились, бедные). И тогда все эти разъярённые тётки звонили нам, прогерам, и вечно жаловались, требовали, чтоб именно я пришёл и посмотрел, что у них не так. Порой доходило до абсурда.
— Алло, здравствуйте, а придите к нам, у нас свет не работает.
— Дык звоните электрикам, я здесь при чём?
— Ну-у-у… Компьютер же тоже не работает! Придите и почините!
— У нас нужно сделать перестановку, придите, передвиньте шкаф и стол.
— Эм, уважаемая, а почему вы звоните мне, а не грузчикам?
— Ну, у вас там много мальчишек работает, а грузчиков всего двое и они устают, бедненькие. Да и вообще! Нам нужно передвинуть стол, а на нем стоит кампутар, так что это ваша работа!
И вот мне надоело каждый раз на зов прийти и поменять картридж объяснять разницу между программистом и эникеем. Когда у меня горели сроки, а телефон разрывался, я поднял трубку, и случился такой диалог:
— Здрасте, у меня мышь не двигается, придите и посмотрите.
— Девушка, звоните механикам, мы программисты.
— У меня же мышка в программе не работает, так что почините.
— Я пишу программы и обслуживаю только те, которые я сам написал. Если же это не моя программа, то я не буду к вам идти, тем более если у вас не работает не программа, а мышь.
— А вам сложно, что ли?
— Девушка! Если у вас болит глаз, вы же не идёте к гинекологу и не говорите ему: «Посмотрите, пожалуйста, вы же врач!», а ждёте окулиста, даже если его нет.
Дама бросила трубку. Через двадцать минут ко мне пришёл начальник отдела. А мужик он из тех, кто понимает юмор, так что залетел он со смехом, но по поручению главного инженера (та девочка сразу побежала жаловаться начальству) сделал мне устный выговор за неумение общаться с персоналом. Попросил, чтоб я острил немного повежливее.
Дерево выросло и местами обросло киянками, как спелыми плодами. Достаточно слегка пнуть — и готовый молоток падает тебе в руки. В варианте же с Apple нередки случаи, когда они самопроизвольно превращаются в елду, и хорошо если в резиновую.
Вы говорите о решении задачи? Извольте.
В связи не помню с чем — в общем, по приказу Очень Главных Людей нужно было поставить планшет в количестве двух штук в холле для использования клиентами. Задача была поставлена предельно просто: на планшетах, кроме браузера, клиент ничего не запускает и может лазить только по сайту компании. Для экспериментов тут же были выданы два андроид-планшета, на которых в течение получаса (из которых 20 минут ушло на заведение гугловской учётки и базовую настройку аппаратов) я всё настроил. Пользователь до ввода пароля браузер даже закрыть не может, а перемещаться по нему может только в пределах нашего сайта. Тулза, к слову, совершенно бесплатная, легковесная и простая, как… молоток.
Однако не всё было так радужно, как хотелось бы: андроидовские планшеты кому-то не понравились, были забракованы и заменены на яблочные. Казалось бы, что может быть проще: встроенный родительский контроль позволит заблокировать всё, кроме того, что можно. И действительно, с этим проблем не возникло, а вот с ограничением запуска приложений возникла проблема. Нашли одно-единственное решение, которое требовало джейлбрейка, который мы сделать не могли по причине слишком свежего обновления. Возникло ощущение, что заказал молоток, а тебе подсунули в красивой строгой упаковке облепленное сертификатами соответствия молотку то самое резиновое изделие, да ещё и с моторчиком.
Не хочу утверждать, что Android круче iOS. Вроде бы и так понятно: нам нужно «ехать, а не шашечки». Просто бывают случаи, когда «включил — и работает, как устраивает», а бывает — «включил, настроил — работает так, как надо».
День выдался, что называется, ни к черту. С утра сильно ушиб ногу, возникли проблемы на работе, из-за скачка напряжения сгорел домашний комп, потом с девушкой разругались в пух и прах… В общем, взял я запас спирта и курева да сел топить грусть-печаль в укромном месте. Вот только забыл я, что район этот не зря считается гопоопасным…
— Слышь, ты, дай денег!
Медленно поднимаю слегка осоловелый взгляд на источник звука. Этого следовало ожидать — типичный HD-пацан на охоте. Чуть в стороне в нашу сторону посматривает «группа поддержки». Бежать бесполезно, вопить тоже…
— А на кой тебе? — язык, в отличие от мозга, среагировал почти моментально.
— Да купил, &^%, наушники и порвал их на $%&. А чё такое?
Действительно, на шее у вопрошающего висят новенькие Koss Porta Pro с оторванным от одного уха проводом.
— Ничё. Давай сюда, щас сделаем…
В полной прострации парень отдал покалеченные наушники. А дальше дело техники — ножик для зачистки, сигарета в роли паяльника… В общем, спустя пять минут наушники снова выдавали звук в полном объёме.
Нецензурно восхитившись, парень двинулся к товарищам. Спустя десять минут, когда я о нём и думать забыл, предо мной возникло приличное количество пива, и смутно знакомый голос сочувственно прогудел:
— Слышь, братуха… Ты, это, в порядке? Если чё — звони, мы поможем…
Пиво разошлось по рукам. Нестройный хор пропитых голосов матерно и от души желал мне всего и побольше. А над городом зажигались первые звёзды…
Есть у меня топорик, который принадлежал ещё моему деду. Самый обыкновенный хозяйственный топорик, которым и дерево срубить, и гвоздь забить, и доску обтесать. И вот хожу я с ним по лесам и фестивалям и работаю. Или предлагаю поработать им обладателям современных именитых топоров или попросту новодела. Не раз наблюдал смену выражения их лиц с недоумения и презрения моего малыша на лёгкое удивление после работы с ним, ибо и дрова он лучше рубил, и удобен так же был. А секрет лишь в том, что топор был правильно заточен.
Да, новые пластмассовые топоры хороши и легки, но сделаны так, что при поломке их можно только выбросить. Или заменить рукоять на деревянную, предварительно долго и упорно высверливая остатки пластика. И ещё шутка в том, что топор «из коробки» тоже требует заточки. Нет, дрова нарубит и дерево свалит, но, как показала практика, даже специально сточенный под ребро пятикопеечной монеты топор вполне неплохо колет дрова, но для нормальной работы его всё же надо заточить. И да, у топоров есть множество функций помимо рубки дров, и для всего есть своя форма топорища и лезвия.
А теперь вернёмся от железа кованого к железу паяному. Как было замечено несколькими днями ранее, разница между мощностями компьютеров в 2010-м и 2015-м не столь велика, как между 1995-м и 2000-м. При этом основные задачи, выполняемые на компьютерах в офисах, тоже не сильно поменялись: по большей части компьютеры выступают в роли продвинутых печатных машинок. Но при этом год от года, невзирая на увеличение мощности оборудования, программная часть опережает этот прирост мощности, функциональности и прочего, что тормозит наше ПО так же, как и в 95-м. А всё из-за того, что, как и каждый инструмент, программы требуют заточки, балансировки и ухода, а не превращения в яркую игрушку с дополнительными функциями, которые 80% времени не нужны и попросту занимают место. При этом железо становится неремонтопригодно, поскольку всё многообразие схем и дизайнов привело к тому, что уже нельзя выбросить вышедший из строя блок и заменить его на новый: многие новые блоки уже не совместимы со старыми, пусть и вышедшими пару лет назад. Этим блокам может попросту не хватить места в маленьком корпусе, а вздувшийся конденсатор будет из-за тех же размеров не так просто выпаять; если же вышло из строя что поменьше, то тут уже только к мастеру нести, который в 90% случаев скажет, что дешевле купить новый агрегат, чем менять эту копеечную схему.
Новое или старое — не имеет разницы, если это не сказывается на цене или эффективности работы. И проблема современного инструмента в том, что много внимания уделяется тому, чтобы ручка была красной, ибо топоры с красным топорищем лучше заметны в траве, чем топоры с зелёным. А то, что клинья вылетают и рассыпаются, лезвие закалено только по кромке — это всё мелочи, которые исправляются синей изолентой из соседнего отдела да видеоинструкцией с интернета, где показано, как прокалить топор на газовой горелке, но так делать нельзя, ибо потеряете гарантию на дорогое изделие. И не покупайте топоров у дяди Васи на базаре, который в СССР кузнецом был: у него топоры кованые и ручка деревянная пропитана морилкой, не то что наши с красной рукояткой! И помните: рамбутан на красной рукоятке говорит об элитности вашего топора.