9905

Физическая манифестация тонких материй

Это случилось давно, когда бухгалтера были доверчивыми.

Звонят из бухгалтерии: «У нас компьютер пищит и не реагирует на клавиатуру». Прихожу, осматриваю больного. Делаю серьёзное лицо и, зная любовь бухов к эзотерике, говорю:

— Тут нужно ауру чистить.

С покерфейсом делаю пассы над клавиатурой и незаметно спихиваю локтем папку, придавившую пару клавиш. Писк прекращается, бухгалтера в шоке.

9904

Невидимая колбаса на завтрак

Опять скатываемчя к холиварам — какая ОС (платформа, язык программирования) круче. Появились тёртые-перетёртые сравнения ОС с девушками, домами, собаками и автомобилями. Это невообразимо скучно. Столь же скучно наблюдать, как дилетанты спорят о качествах тех же самых ОС. Ну, раз пьянку нельзя остановить, её надо возглавить. Любители яблочной оси, пристегнитесь.

Вышла Windows 95. Вони было выше крыши: никакая, мол, не операционка, а дешёвая графическая оболочка вокруг DOS. «Немонолитная» операционная система, оттого и кривая. Холивар — далее везде со всеми остановками.

И вдруг выходит Mac OS X. Извините за аналогии с W95, но на опенсорсное ядро натянута подобранная на помойке и слегка подкрашенная графическая оболочка от дохлого NextStep. Причём подобранная вместе с языком программирования, поскольку на другой язык переползти кишка тонка оказалась.

Язык этот (Objective-C) представляет собой зелёную тоску программиста-сишника прошлого тысячелетия по SmallTalk. Программировать «кошерные» графические приложения можно только на нём. В языке одновременно присутствуют три (!) стратегии сборки мусора, которые замысловато взаимодействуют между собой. От версии к версии программный интерфейс к графической оболочке рихтуется так, что приходится заводить новую сборку под каждую новую цифру после «10».

Макось не виснет? Ага, щас. Объясню почему. В Objective-C обращение к пустому объекту ошибкой не является. Вы пришли в магазин колбасы купить, а её нет — пустой объект. Нормуль — берём это ничто, идём домой и старательно щёлкаем зубами — типа, едим. Никакой ошибки нет — нормальная ситуация. Надеюсь, доступно изложил. Три сборщика мусора подрались и случайно (по программерской ошибке) затёрли какой-нить объект. Пользователь нажимает кнопки — реакция не та или вообще никакой. Потыкается — да и перезапустит программу. Зато падения нет.

Давеча так и случилось: подвис док, та самая полупрозрачная хрень с иконами запущенных программ, обычно живущая внизу экрана. Новые иконы не кажет — соответственно, работать и отлаживаться нельзя, поскольку моя программа запускается перетаскиванием документа на икону приложения. Решил перезапустить. Мышка елозит, кнопки «Quit», «Force Quit» и прочие прекрасно нажимаются, однако результата никакого — колбасы нет, зато щёлкаем зубами.

Перезагрузиться тоже не удаётся — пункт меню «Reboot» нажимается, но ничего не выгружается. Кнопка не давится. Вырубил мак из розетки. Зато потом освоился — через сеть и SSH перегружать с соседнего компа. На всякий случай всем рекомендую: учите bash и SSH-консоль!

9903

Машина — дура, админ — молодец

Когда в 1979 году я начала учиться в универе на факультете ВМК основам программирования (кстати, в те времена чисто женская специальность была), у нас ходила присказка: «Машина — дура: ей что скажешь, то она и делает».

Судя по большинству постов, теперь народу об этом не говорят.

9902

Фольга — не только для бутылок

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

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

Странное дело: при нажатии на любую кнопку та срабатывала раза три, а то и все четыре подряд. Кое-как дозвонился домой, набирая номер резкими, отрывочными нажатиями. Решив почистить плату и кнопочную резину, разобрал трубку и впал в ступор.

Судя по всему, телефон однажды уже бывал в ремонте. В этот момент я окончательно убедился, что нашу страну не победить. На каждую кнопку был аккуратно приклеен квадратный кусочек сигаретной фольги.

9901

Опять начинаешь, шакал?

В те времена, когда я ещё пользовался дайлапом и называл его тырнетом, была у меня одна учётка, до которой дозвониться можно было только раза с восьмидесятого. Я вбил в любимый MuxaSoft Dialer несколько номеров и настроил его на постоянный дозвон. Пару недель нужная мне информация практически круглосуточно закачивалась. Разрывы, конечно, происходили частенько, но модем коннектился в автоматическом режиме.

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

9900

Девятиступенчатая система защиты

Пригласили меня в нашу службу безопасности — у их начальника не работала почта внутрикорпоративная. Заводят в кабинет, сажают за комп. С одной стороны начальник СБ стоит, с другой охранник вооружённый. Запуская машину, никуда стараюсь не смотреть: не туда глянешь — не расстреляют, наверное, но премию точно отрежут.

Винда просит пароль. Спрашиваю у начальника СБ:

— Какой пароль?

И тут мне это сверхсекретное чудище с армейским прошлым (безопасник без него не бывает) молвит человеческим голосом:

— От 1 до 9, вон бумажка на мониторе приклеена.

9897

All systems go

Простудился. Вечером писал софт с юнит-тестами, потом ворочался от бессонницы. Наутро, не открывая глаз, получаю первые мысли:

Нос не заложен — тест пройден.

Голова не болит — тест пройден.

Не холодно — тест пройден.

Температуры нет — тест пройден.

Суставы не болят — тест пройден.

Активация…

9896

Свежемороженая админятина

Попросили как-то раз на одной бирже настроить VPN, чтоб торгаши из дома могли коннектится в систему и торговать. Админ тамошний заведует софтом для торгов, а вот с Керио не дружит. Ну ладно, где наша не пропадала?

Захожу в жалкое подобие серверной. Комнатуха два на два метра и пять высотой, на железной двери электронный кодовый замок с обеих сторон, а под потолком кондиционер дует на полную. На столе стоит «башенка», мониторчик 15" и клава.

Стою, молочу по клаве — и каким-то странным образом дверь закрывается.

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

Через полчаса понимаю, что куртку в гардеробную сдал я зря, а коленки уже трясутся. Колочу в дверь — бесполезно, никаких ответных реакций.

Вспоминаю: в соседнем помещении для торгов на стене висит плазма, подключённая к компу. Обмёрзшими руками нахожу диск с Радмином, через консольку умудряюсь закинуть сервер на ту машинку. Ура, коннект есть! Открываю Блокнот и пишу большими буквами:

ВЫПУСТИТЕ МЕНЯ

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

9895

Под тёплым виндовым крылышком

Я пишу программы. Раньше по большей части это были десктопные приложения, сейчас в основном занимаюсь облачными решениями и вебом.

С десктопными мороки было больше. Несмотря на обилие документации, требовалось знать некоторые особенности известной многим библиотеки классов: в определённых ситуациях программа начинала вести себя не так, как планировалось, и требовался отладчик для выяснения причин. Причины, как правило, были в многоуровневом наследовании классов, но это отдельный привет апологетам ООП, да и вообще не о том сейчас речь. Плюс к тому — проблема с версиями библиотек: иной раз выверенная программа внезапно начинала глючить после установки какого-нибудь пакета, заменившего парочку системных файлов.

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

Ну и о чём эта история, скажете вы? Обычное дело, программистские будни. Просто я не начинаю с первых строк акцентировать внимание на том, что глючная библиотека — это MFC от MS, что у встроенного редактора ресурсов Visual Studio был неприятный баг с подвисанием при определённом сочетании условий, что теперь мне легко и комфортно работается в опенсорсе, где я фактически забыл о существовании дебаггеров за ненадобностью, что вынос пользовательских приложений в облако позволяет существенно сократить издержки на поддержание зоопарка ПК со всеми их вирусами-антивирусами и проч. Тем не менее, всё именно так.

Почему-то в последнее время всё чаще попадаются истории, построенные по совсем другому шаблону: «Как я попробовал опенсорс, как это ужасно-сложно-неудобно, лучше пользоваться Виндоус, если у вас есть жена и дети». То у них Андроид хуже Винфона, то у них симлинки в линуксе падают, то ещё какая напасть — но непременно надо подчеркнуть, что причиной всему — опенсорс, а тут жена и дети, поэтому надо пользоваться Виндоус. Это такая информационная война или просто нашествие криворуких ламеров?

9894

Ноль по наследству

Технический вуз. Первое знакомство с ассемблером. Задание на лабораторную работу: написать прогу, которая демонстрирует работу конструкции if-then-else. Собственно, с клавиатуры вводится число, и если оно не равно 10, то преобразуется по одной формуле, а если да — то по другой: x = 5x − 45.

Программу написал быстро. Проверка на неравенство прошла нормально. Остаётся проверить при х = 10, и можно со спокойной душою сдавать, тем более что преподаватель обещал поощрить двух самых быстрых кодеров.

Ввожу «10». Программа быстренько прыгает по регистрам, по флажкам и в конце бодро выдаёт мне результат: «50». Я, конечно, почти ничего против не имею, но ответ должен быть ровно в десять раз меньше. Следующие несколько минут проходят в подробном изучении синтаксиса ассемблера: лекцию ведь я бессовестно проспал. Однако даже после этого программа непреклонна — «50», и всё.

Люди понемногу начинают сдавать свои программы. Некоторые собираются возле меня, и мы вместе начинаем искать ошибки. Проверяется свыше десятка альтернативных вариантов, но ответ при этом не меняется. Самое обидное, что в аккумуляторном регистре, содержание которого в итоге и выводится на экран, хранится заветное «05», но увидеть пятёрку на экране почему-то не судьба.

Только когда пара уже почти заканчивалась, я, как это обычно бывает, внезапно понял, в чём дело. Проверяя условие, которое работало нормально, я вводил, например, «3», и получал ответ, скажем, «49». А здесь я вводил «10» в начале первой строки консоли, программа мне выводила «5» там же. Соответственно, нолик от введённой мной десятки благополучно переезжал в новое число — об очистке экрана или переносе на новую строку никто ведь не подумал…

Мало написать программу, которая может решить вашу задачу. Нужно ещё понять, что она выводит вам в ответ.