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

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

9065

Проще говоря, плюс один

Знаменитая задача: как переставить два числа, не используя третье? Канонически решается так:

A = A + B

B = A − B

A = A − B

Однако ещё быстрее можно так:

A = A xor B

B = A xor B

A = A xor B

Или так:

push А

push B

pop А

pop B

Но я бы писал, использую третью переменную:

tmp = А

A = В

B = tmp

Да-да, пару тактов разбазарю. И, например, вместо INC А напишу А = А + 1. И не потому, что не знаю такие финты, а потому, что любой осёл поймёт, что тут написано. Глаз не зацепится, мозг будет сосредоточен на задаче, а не на способе её достичь.

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

9024

Однофамилец

В конторе почта ходит одновременно через Exchange, стоящий за бугром, и через Google Apps. Возникла необходимость написать скрипт для автонастройки Outlook, дабы сильно упростить работу (юзеров больше 600).

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

Спустя часов пять поиска багов в 200 строках кода я наконец обратил внимание на заголовок окна. Он радостно сообщал: «Меня зовут outlook.exe».

9021

Апчх@#

Не очень большая компания, выпускающая не очень востребованные программы. Компания разбросана по нескольким городам и странам: программисты-разработчики в одном месте, альфа-тестеры в другом, бета-тестеры в третьем, документаторы в четвёртом, маркетоиды в пятом. Доступ к исходникам только у программистов. Закрывать баги имеют право только тестеры.

Начальник отдела QA за рюмкой кофе жалуется одному из главных разработчиков на другого из главных разработчиков. Гений, незаменимый, но очень не любит пользоватся Багзиллой. Занесённые на его программы баги (включая критические) могут висеть по два года в статусе unconfirmed. Баги, заносимые им самим, сложно понять. Часто там написано что-то вроде «Fix this» и приаттачен бэктрейс после крэша. Новые фичи добавляет, не утруждаясь их документированием. Спрашивать его тяжело: в скайп не выходит, на почту отвечает раз в две недели и очень выборочно. Иногда в ответ на вопрос даёт два года как устаревшие диздоки. Раз он такой занятой, стоило бы часть его обязанностей — общение с тестерами и документирование новых фич — передать кому-то ещё, разгрузить его, чтобы не мешать ему совершенствовать программу. Но эти предложения он тоже игнорирует.

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

9012

Кракозябры, милые, уходите!

В девяностых я подхалтуривал написанием курсовых по Паскалю. Однажды подвернулся неплохой заказ. О цене договорились, встретились, получил задание — довольно простое по моим меркам, но, со слов студентки, «невыполнимое».

Всё сделал, отдал, получил гонорар. Через пару дней звонок: при запуске программы вместо букв лезут кракозябры! Пришлось успокоить и пообещать исправленный вариант. Как я потом понял, на их машинах не было русификатора. Недолго думая, выдрал из rk.com русские буковки (они на второй или третьей странице видеопамяти) и в программу вставил довольно большой статический массив с растром букв и небольшой код, который грузит этот массив напрямую в видеопамять.

До сих пор не знаю, как эта студентка объясняла преподу, откуда она знает, как загрузить русские шрифты в VGA-карту.

8999

Рай в шалаше без премий и отгулов

Я старый программист и не знаю слов любви. Я ничего не понимаю в этой жизни, но всё-таки…

Доводилось ли вам испытывать интеллектуальный оргазм только лишь от одного предчувствия решения той или иной задачи, ощущать аж до дрожи в коленках жгучее желание думать? Это круче самой сильной любовной горячки: ты улыбаешься миру, а мир улыбается тебе. Ты настолько счастлив, что чувствуешь всем своим телом, каждой своей клеточкой тепло и красоту, как будто ты на мгновение оказался в раю и увидел самого Господа Бога и царствие Его. Нет, это даже круче.

Доводилось ли вам находить такое место? И неважно, какая зарплата; может быть, надо работать за еду и сверхурочно, но ты будешь решать эти задачи, получая неземное удовольствие. Ты будешь стремиться на работу, как к самой любимой, самой желанной, самой страстной женщине. Ты будешь думать о ней, размышлять о ней, все твои цели и мысли будут подчинены только ей.

Вы скажете: «Это безумие». Что же, возможно, вы и правы, но я сегодня был в таком месте. И я весь истёк только от одного вида тестового задания. Оно было настолько вкусным и всепоглощающим… Я даже забыл рассказать свою стандартную историю работы, «сказки» о реализованных проектах и начал заикаться, как нецелованный девственник перед первым в своей жизни свиданием. Я забыл задать страшные и провокационные вопросы об условиях труда, зарплате, соцпакете и всём таком прочем. Мне даже страшно представить, что же за боевые задачи они решают. Это бред, но я хочу туда. Хочу немедленно и настойчиво.

Быть может, я нашёл её, работу своей мечты?

8995

Безответственность с открытым кодом

С вами снова сисадмин из районной больницы. У меня на обслуживании есть «устаревшая» программа — АРМ врача. Написанная таким же врачом. Для врачей. Надо ли объяснять, что врачам в ней всё нравится? Работает быстро, осваивается за пять минут (хорошо, за день-два). Функциональность, с точки зрения врача, просто шикарная: тут и сводка главврачу, и обмен стационара с поликлиникой, и возможность всё исправить на лету.

Пытаются внедрить супер-пупер-КМИС. Она тормозит, сложна в освоении, а чтобы добавить страховую компанию, нужно моё вмешательство. Зачем? Зачем она нужна врачу? Да не нужна вовсе. Но нужна пациенту, чтобы записаться на приём через интернет. Нужна регистратуре, чтобы видеть расписание врачей в областной поликлинике и записать пациента на удобное время. Нужна статистикам, чтобы облегчить подсчёт вылеченных больных и выставить счета на оплату страховым компаниям, из денег которых и платят врачу. Она позволяет разделить доступ врачей к историям болезней, чтобы офтальмолог не видел, кто там посещал дерматовенеролога. Для сисадмина достаточно поставить галочку — и при следующей репликации хирург сможет обмениваться информацией с рентгенологом. Вот и принимается решение: «В целях дальнейшего развития системы электронного документооборота…» А врачу — новые проблемы на старости лет (не так у нас много молодых).

Вот и скажите, кто тут прав? Вроде как у каждого своя правда получается. Сверху результата требуют, а результат легко просматривается через эту же КМИС — кто, сколько, когда… И вот едешь устанавливать систему в участковую больницу. А там, как на грех, врач-энтузиаст (только не своего дела) начинает доказывать, что линукс — это круто, IE — отстой, что нам надо развивать СПО и открытые стандарты. И начинается капание на мозги и мне, и главврачу, находится какой-то там аналог…

Мало, чтобы врач взял на себя обязанность по обслуживанию своей крохотной участковой больницы. Вы возьмите на себя ещё и ответственность — я вам отдам половину своей ставки. Но нет, почему-то ответственность брать не хочется.

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

8946

Мог и догадаться

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

Как-то препод посадила нас за компьютеры и приказала набрать в Паскале текст программы, написанный на доске.

— Дженни В., программа не компилируется, у вас в коде ошибка.

(Возмущённо.) Быть такого не может! Набирайте правильно.

— Да всё правильно набрали, посмотрите.

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

— Это просто у вас Паскаль кривой!

Так что не надо ругать преподавателей. Они никогда не допускают ошибок — всему виной «кривые» языки программирования.

8944

Реальность 1.1, дополненная и улучшенная

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

— Этот ваш гр#$@ный мир… Да он, если хошь знать, весь у меня в исходниках, нах, с рождества самого валяется! Да я, нах, вот только трезвый дома буду — скачаю рульный компилятор и…

Дальше, извините, совершенно неразборчиво. И, кажется, совсем о чём-то другом… А я вот до сих пор почему-то под впечатлением: интересно, чёрт возьми, я правильно понял, о чём там шла речь?

8912

IT-штрафбат

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

Намедни тут подошли провентилировать вопрос: не возьму ли я на время в свою группу программера, который проштрафился где-то в соседнем отделе? Идея IT-штрафбата сначала мне понравилась, а потом я загрустил. Я-то в чём виноват? А сижу третий год…

8896

Будьте как дома

Разрабатывая очередной сайт (юзая CGIC, кто плавал — знает), разумеется, не хочется делать это в консоли. А в Notepad++ тоже не покомпилируешь на удалённом сервере. Захожу PuTTY на сервер, подключаю блокнот к FTP, правлю, Alt+Tab, gcc project.c, Enter. Проверяю — нету изменений. Что не так? Закешировалось? Чищу кеш в браузере, кеш на прокси. До сих пор ничего нет. Начинаю верить в мистику, но…

Есть у меня два подконтрольных сервера с одинаковой системой и почти одинаковой настройкой. Один — домашний, выполняющий роль тестовой площадки, второй — продакшн, на котором висит некоторое количество моих проектов. Для удобства контроля над ними пароли от аккаунтов одинаковые. Более того, одинаковы и SSH-ключи для доступа. Крон автоматически выкачивает с домашнего сервера файлы на продакшн прямо в папку профиля — этакий бэкап. Так что подмену я заметил только когда посмотрел, к какому серверу подключился. Редактировал я файл на продакшне, а компилировать пытался на домашнем, который об изменениях не знал и знать не хотел.