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

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

13379

Один на всех и все на одного

Серверная — склад — база эникейщиков. Входит сотрудник.

— Здрасте, у нас там проблема. Я там пишу всем макросы на визуальном басике. У некоторых не работают. Гляньте.

Никто в «визуальном» не разбирается, но храбро идём к проблемным машинам. Беглый осмотр ничего подозрительного не выявил. Сравнение настроек также не показало отклонений. Рапортуем: настройки стандартные, запретов нет, проблема под капотом макросов. «Клиент» приходит снова:

— Проблема не в макросах: у других-то работает!

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

Все идём к админу: вот, так и так.

— Ошибку гуглили?

— Нет, не моё это дело, я только пишу.

— Ясно. Наши сотрудники провели осмотр и ничего не обнаружили. Проблема в макросе.

— Нет же, у других работает. Пусть ваши мальчики загуглят и исправят.

— Отладка VBS вне их рабочих обязанностей.

— И что мы будем делать?

— Предлагаю так: один из них, который захочет, найдёт документацию, выучит VBS, загуглит ошибку и исправит её. А вы тем временем пишете «по собственному желанию», потому что одного специалиста по макросам нам будет достаточно.

Никто так и не уволился. Зато обогатился знаниями об отличиях 32 и 64-битных систем и стандартных путей разных версий Офиса.

13338

Икебана из костылей

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

А вот вторая мысль была реалистичнее: строили всегда как умели и как хотели, а до наших дней дошло то, что дошло. И тут осенило. А как надо строить, чтоб на века? Вот пирамида. Устойчивей некуда. Её можно было и целиком из песочка насыпать. Или навалить тёплой и мягкой субстанции в тех же габаритах. И ничего — стояло бы совсем как живое. Вот Парфенон — крыша на подпорках, политкорректно именуемых колоннами. Нотр-Дам тоже весь в подпорках и костылях, именуемых контрфорсами. Мда. А вот модульные универсальные решения типа хрущоб разваливаются на глазах.

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

13333

Самопроизвольное индоизвержение

А я теперь официально признаюсь быдлокодером.

Дело в том, что мне приспичило написать обёртку на Go для сишного API Eggdrop. Всё было хорошо до тех пор, пока я не попытался реализовать подобие Tcl-функции bind для C-функций. Полдня я потратил на исследование исходников, так как всемогущий поисковик мне не помог, но не нашёл ничего, кроме функций добавления и бинда Tcl-функций. В результате у меня получился такой механизм: генерируется имя вида eapi:bind_xxx, затем под этим именем добавляется привязываемая функция, затем получившаяся Tcl-функция привязывается как обычно. Возвращаемым значением этого монстра является номер бинда (то самое xxx в названии функции).

Простите меня, оно само.

13305

Руки на высоте плеч

Найдено в коде одного проекта. В stdafx.h:

#ifndef handsOutOfShoulders 
  #define handsOutOfAss 
#endif

Далее, в about:

#ifdef handsOutOfShoulders 
  /* нормальные реквизиты фирмы */
#else
  #ifdef handsOutOfAss 
    message = std::wstring(L"У нас появился долборукий
    дятел, разваливший сборку, и я не отвечаю
    за работоспособность программы");
  #else
    message = std::wstring(L"БЛ&$Ь!!! ПОКАЖИТЕ МНЕ,
    КАК ОНО РАБОТАЕТ!!!");
  #endif
#endif
13293

Ночь полубессознательных абстракций

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

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

— А-а-а, вайфай-точка падает!

И падают эти бандуры в воду! Волн почти не было, а агрегаты не утонули, держались на плаву.

Потом проснулся, думал, как их вернуть назад, размышлял ещё о чем-то важном и снова уснул. На этот раз сон был пуще прежнего: я бежал по какому-то очень тёмному тоннелю. Было холодно и страшно. И вдруг мимо меня проносятся какие-то сферообразные голубовато-белые объекты. Я добегаю до двери, в которую очень трудно было пролезть, но я смог. Некоторые сферы смогли пролететь, некоторые застолбились у проёма. Двери захлопнулись. И тут пролетевшая сфера говорит вполне человеческим и каким-то мудрым и знающим голосом: «Ну вот, опять половину пакетов растеряли!»


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

13288

Не годится им в коде водиться

Жил да был себе бородатый программер. Всё его устраивало в этой жизни — заказы есть, что ещё нужно? Кстати, программер тот не курил и не пил — у нас же сказка о хорошем и мудром программере, верно?

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

— Не щёлкай меня резинкой от трусов, о мудрый программер, выполню тебе взамен два желания!

Наш программер подумал-подумал, да и говорит:

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

— А не жирно ли, о мудрый программер?

Наш бородатый программер натягивает резинку от трусов…

— Сделано, о мудрый программер!

И тут наш мудрый программер без размышлений щёлкнул резинкой от трусов золотую багу, ибо не годится им в коде водиться.

13260

Работать над деплоем травы

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

Тут уже руки начинают трястись. «Изверги! — ору на весь офис. — Вы сколько травы мне в кофе подсыпали?»

А изверги смеются. Показывают страничку с баг-репортом. Подтверждённым моим же коллегой из моей же конторы…

Мама, в каникулы мы едем на Джамейку…

13234

Тлензадание

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

Мне оно выдало что-то из области научных исследований, аналитики, экономики, преподавания и как неподходящую — профессию программиста. Поскольку на тот момент я уже давно занимался созданием программ на заказ, посмеялся над очередным глупым тестом.

Через пару лет довелось поработать в коллективе «настоящих программистов». И тут я понял разницу: я-то как работаю? Выясняю потребности заказчика, что он хочет, что он придумал, обсуждаю, предлагаю варианты и потом уже делаю, максимально просто, чтобы не напрягаться. Иногда — с индийским кодом, но чтобы задача решалась.

А тут — «дайте детальное ТЗ». Заказчик в ступоре: он хочет кнопку «Сделать хорошо!» и не очень понимает, как именно это сделать, поэтому на вопрос «детальное ТЗ» он начинает выдумывать отсебятину в меру своей фантазии. Рисуется увиденный где-то интерфейс, всё это сопровождается комментариями «ну, вот как-то примерно так», а потом программисты честно по ТЗ лепят ему это самое «как-нибудь», не забыв аккуратно оформить исходники и воткнуть пару пасхалок, понятных только им самим. Программисты хорошие, но… ТЗ соответствует? Да. Задачу решает? Ну, какое ТЗ, так и решает.

Я бы сейчас про это не вспомнил, если бы не одна из историй на этом сайте, про настройки фильтра и три пола: мужской, женский и детский. Ну чего же тут непонятного? Какой-то товар у заказчика может иметь набор свойств вроде веса и размера, при этом предназначен для мужчин, женщин и детей. К примеру — велосипеды, они как раз могут иметь размер и быть рассчитаны на мужчин, женщин и детей.

А вот настоящему программисту это непонятно и смешно: дурацкое ТЗ какое-то!

Да, тест прав: я не программист.

13168

Под сенью графа

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

Лет десять назад потребовалось написать приблуду для апдейтов. Поскольку код и данные были кучеряво завязаны в нашем софте, а программистов всего три, я решил проблему просто. Разворачивал старую и новую версию софта в соседних директориях, потом делал бинарный diff. Полученные патчи зиповались вместе с минимальными скриптами, которые на стороне юзера обеспечивали апгрейд продукта. Естественно, такой кумулятивный патч мог апгрейдить только конкретный номер билда, на это и была введена специальная проверка. Всё чинно-благородно, даже работает. Поднять версию продукта весом в несколько гигов можно было патчем в 30 мегабайт…

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

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

Граф занимал всю стену. Я стоял с открытым ртом. Думай о последствиях…

13162

Гоблин не пройдёт

Заметил историю на Баше, которая мне показалось странной:

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

А в моей вселенной всегда есть гоблин, который запустит скрипт от предыдущей версии в релизе следующей. Причём для другой платформы. И будет биться в истерике, что он всё сделал по инструкции, которую перед прочтением съел.

Как так можно проектировать систему обновления, чтобы была возможность запустить скрипт от предыдущей версии на более новой? И, в общем-то, я понял, почему такая возможность появляется.

Был у нас как-то один проджект-менеджер, который мнил себя разработчиком. Впрочем, и менеджером он был таким же, как разработчиком. Именно он почему-то рекомендовал заказчику сделать «дёшево и быстро» без обсуждения с командой разработчиков. К сожалению, заказчик его услышал. Даже дальнейшие предупреждения тимлида были проигнорированы, а, скорее всего, просто замяты проджект-менеджером.

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

С того момента минуло немало времени, я получил много экспы и уровней, и именно поэтому сейчас ни один гоблин не пройдёт!