Истории с тегом: программизмы

Всего историй: 896

8433

Восемь лет с закрытыми глазами

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

Написал разработчику — тот стал напирать, что компилятор такой. Выяснил, какой компилятор, пробным путём нашёл, на каком моменте ему нужны права администратора. Оказалось, давно исправленная ошибка в стандартной библиотеке. Разработчик тот с удивлением сообщил, что об этом никогда не слышал.

Всё бы ничего, только переписка была в 2010 году, а ошибку исправили ещё в 2002-м. Новой версии нет до сих пор.

8400

Фотоны из фантомного фонарика

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

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

Через час дебага до меня дошло почитать мануал к телефону. Да, в LG P500 Optimus нет вспышки.

8396

Баго-временной континуум

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

Идёт планёрка в скайпе. По части задач, как выясняется, продюсер задержала предоставление графики. Но и они хороши: на другой задаче эстимейт 52 часа.

— Это мы точно не успеем, — сокрушается техдиректор аутсорсеров. — 52 часа — это вообще полторы недели.

— Почему полторы недели? — удивляется продюсер. — В сутках же 24 часа.

Дружный взрыв смеха всех, включая нас, представителей конторы. Продюсер понимает, что она что-то не то сказала, и начинает объяснять:

— Ну, у нас же на проекте пять программистов, с каждого по десять часов…

Мы ржали так, что пришлось потом перезванивать и извиняться.

8384

Текущая конфигурация

Разбирал протекающий бачок клозета. Почистил, собрал назад. Не течёт. Первая мысль: «А теперь — git commit».

8381

Пиксель в пиксель

Когда-то довелось принимать участие в работе над средней руки программой для одного дотошного американца. Все задачи-заказы приходили в виде PPT-презентаций. Подробнейших, со всеми отрисованными элементами. Пожалуй, самый приятный заказ, что касается интерфейса. Не надо было придумывать ничего — требовалось лишь добиться совпадения его картинок с тем, как ты расставил элементы, вплоть до «тут у вас лишняя чёрточка, а тут на два пикселя меньше». Даже иконки искать было не надо — банально вырезали из презентаций. Любите таких работников — из них получаются отменные заказчики!

Была у этого заказчика другая особенность. Каждое изменение, едва ли не каждый чих, шло отдельным заказом. При этом клиент абсолютно не представлял себе, как это делается, и стоимость одной кнопки, за которой надо было написать кучу кода, могла быть значительно меньше целого окна программы, которое делалось за пять минут (порядок цен назначал заказчик). Ну, и никогда мне не забыть ночного «сеанса связи», окончившегося небанальным: «Извините, у нас тут торнадо, мне надо идти». С заказчиком ничего не случилось, нет.

8371

Франкенштейн учится программировать

Началась эта история в разгар кризиса 2009 года. Работы в нашей микрофирмочке становилось все меньше с каждым днём. И тут, как в сказке, к нам постучалась некая биохимическая лаборатория с заказом на разработку софта для лабораторного комплекса, ссылаясь на наше название, в котором был намёк на кроссплатформенную разработку. Ну да, у нас было три программиста: один начинал с линуксов/C++, второй с Win/Java, а третий ещё на КПК со времён «палмов» софт писать умел. В общем, честно сказать им, что мы абсолютно не то, что им нужно, я сразу не рискнул, а через пару минут понял, что им, в сущности, уже всё равно, с кем пропадать.

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

Я попросил посмотреть на софт и понял коллег. Была одна старая машина под Win’98, на которой всё работало, и несколько машин, на которых эту разработку пытались запустить, но даже тотальное копирование жёсткого диска не помогало.

Через полдня изучения скопированного диска вырисовался диагноз. Обработка собрана из восьми опенсорсных и не очень пакетов разных лет и языков, написанных на Fortran IV, Java, Аda'95 и JDBC, работающих с обновляющимися через интернет научными базами данных самых разных форматов, для полного счастья склеенных редкой версией Perl, в которой, кстати и велась финальная часть обсчёта. Работа с БД велась через CPAN/ODBC.

Собираясь попрощаться, спросил, сколько же денег предлагают за такую работу. Переспросил. В общем, взялись.

Знакомый сисадмин собирал на корпоративных свалках компы, идентичные рабочему, а мы пытались понять, почему не работают нормально инсталлированные копии.

Не прошло и месяца, как ларчик открылся. Версии компиляторов и библиотек к пакетам были не просто разные, но и несовместимые, поэтому модули ставились только в строго определённой последовательности. При этом периодически приходилось менять переменные PATH для обеспечения правильной последовательности вызова разных версий компиляторов. Конечно, найти версию библиотек 1991 года выпуска было непросто, но мы справились.

А самый весёлый секрет состоял в том, что PATH иногда надо было корректировать прямо во время сборки, работая клавишей Pause. Кстати, make тоже надо было иметь трёх видов.

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

Вскоре мы уже приготовили первую версию софта, не содержащую ничего пиратского, потому что в следующем году обещали купить около 15 систем. В фирме уже десять человек — может, даже на одном языке всё перепишем когда-нибудь…

8358

$i,000,000

Дело было лет пятнадцать назад. Я ещё учился в школе, в гуманитарном классе. Компьютеры постепенно входили в нашу жизнь, но полностью её тогда не оккупировали, а занимали свободное время, как могли.

Так вот, решили снимать кино «Третья мировая». Пентагон, ракеты, все дела. Компьютерный класс в школе сошёл за штаб. По сценарию (даже он у нас был) была сцена компьютерной графики, где непродвинутый пользователь случайно залез на сайт Пентагона и натворил дел. Я тогда был далёк от программирования как такового, но среди товарищей слыл сведущим.

Написать простенькие HTML-странички труда со всякими интерфейсными излишествами не составило труда. Но как было эмулировать перевод денег? Естественно, хотелось чего-нибудь, как у больших дядей: консоль, много текста, мигающие цифры. Меня тогда интересовало, как организованы автозапуски дисков — как-то видел BAT-файлик, который умел что-то выводить в консоль. Одной команды ECHO мне хватило. Но вот беда: переводились-то миллионы долларов! Не станешь же руками писать тонны строк — даже копипаст не спасёт…

В тот день я первый раз в жизни сознательно использовал цикл в PHP. Да, он генерил код того батника. Оставалось только подобрать правильное число долларов, переводимое за раз. Режиссёр остался доволен, а я в итоге ушел в математику и computer science.

8347

Ракомстоятель I категории

Разбираю архивы своих исходников с 87 года. С каждым связаны какие-то воспоминания.

Вот 89 год. Волшебный язык CLIST. Фреймворк ISPF/PDF + CLIST + немножко PL/I = рабочее место бухгалтера по учёту машинного времени на ЕС-1066. Банальщина. Но с приколом. CLIST — язык без типов с целочисленной математикой. Если a = 2 и b = 2, то a + b = 4, а вот a and b = 22. Точность была нужна до второго знака.

Где наша не пропадала? И вот вам имитация деления столбиком путём добавления нулей к строке и последующим делением полученного числа. Это уже потом выборки из логов я переписал на PL/I — там было округление. Зато первоначальное ТЗ было закрыто за три недели. Конкурент за это время написал на ASM/360 модуль выборок и только-только дошёл до стадии отладки — даже не до deep alpha.

* * *

Вот 91-й. Рабочее место заместителя директора НИИ по науке. Интерфейс к базе научных работ. База лежит в СУБД ADABAS. Обработчик на PL/I. Интерфейс — всё тот же ISPF/PDF. Ну, и CLIST — как же без него? Обработчик ошибок диагностировал две ситуации. Ничего не нашли — «Х%ЙНАНЫ». Потеряли связь с базой — «П#$ДЕЦ». Каждая буква набиралась из звёздочек матрицей 10×16 и выдавалась на экран терминала 7927 со всеми доступными атрибутами: инверсно, с миганием и писком.

Сел замдиректора, д. т. н., профессор и вообще хороший человек за терминал, набрал данные для выборки, а ему — опа! Замдиректора в шоке. Техническим нутром он догадывается, что, возможно, облажался во входных данных, и набирает какую-то полную галиматью. Раза с десятого он получает и второе сообщение.

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

Отвертелся. Спасло то, что между звонком и явкой прошло время, явно недостаточное для правки программы. Даже вазелин не понадобился. Но премию дали в половинном размере — на всякий случай.

* * *

Вот 94-й. Крошечная базейка по учёту кадров и распределению отпусков. Даже тестовая база сохранилась: ФИО, должность, примечание. Примерно такая:

Иванов Иван Иванович — Директор — Получает мильён

Петров Пётр Петрович — Замдиректора — Главсамец

Васильев Дядя Вася — Дворник — Метёт себе и метёт

Сидоров Сидор Сидорович — Ракомстоятель I категории — Стоит себе и стоит

Базу эту я забыл занулить. Функции полного просмотра ТЗ не предусматривалось, только выборки. А где-то через месяц на работу приняли Сидорова С. С. — в общем, полного тёзку. Вбивает кадровица нового сотрудника, собирается нажать кнопку «Добавить» — а ему рубрикатор сразу должность подставляет и комментарий…

За замдиректора по АХО надолго закрепилось прозвище из базы.

8332

Как два гика «Футураму» смотрели

Сидели мы как-то с товарищем, готовились к научной конференции на неайтишную тематику. В перерывах между сёрфингом и прочей потерей времени решили посмотреть «Футураму». Естественно, выбор серии имел принципиальное значение. Мы решили довериться слепому случаю.

Пока нормальные люди уже смотрели бы мультфильм, мы вначале вместе запускали скрипты типа echo $((RANDOM % 7 + 1)) до совпадения результатов, чтобы определить, какой сезон смотрим, а потом долго пытались добиться совпадения номера серии (а их в этом сезоне было двадцать).

И что вы думаете, мы смотрим «Футураму»? Нет, мы пишем на IT happens.

8314

За мухой с гранатомётом

— Мне срочно нужен молоток забить гвоздь в стену.

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

Программисты-перфекционисты, охотящиеся за мухой с гранатомётом, узнали себя? Если мне нужно написать небольшой скрипт или quick&dirty-программу для мелкой локальной задачи в кратчайшие сроки, то не надо мне предлагать вместо велосипеда создавать вездеход-везделёт-вездеплав, у которого есть режим работы «велосипед». Во-первых, у меня на это нет времени (дедлайн на носу), во-вторых, мне не нужна универсальность и гибкость для программы-однодневки.

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

Закончу, пожалуй, цитатой из Антуана де Сент-Экзюпери: «Идеал — это не когда нечего добавить, а когда нечего убрать». Отечественный вариант: «Отличное — враг хорошего».