bash.im ithappens.me zadolba.li

Программы

1147

Улучшаем интерфейс подручными средствами

Работаю начальником отдела автоматизации в госконторе: головная организация с серверами и куча филиалов, где сидят тётушки от 45 лет. Дошло дело до установки компов в филиалы. Закупили мониторы, компы со встроенным видео, принтеры, развезли, поставили, подключили, настроили... Всё работает, только с софтом не очень гладко — он самописный, создан в лохматых девяностых и с большущим трудом портирован на винду. Поскольку связь с филиалами не всегда доступна, на каждую машинку накидали кучи мануалов для самостоятельного изучения.

Проходит дня три-четыре без связи — телефонную линию порвало. Сначала получили мыло, а потом и звонок: «Монитор сломался, одинаковый цвет по-разному отображает». Сильно расстроившись, так как финансирование было урезано в связи с кризисом, находим в отделе старый монитор и едем в филиал.

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

1143

Живи играючи

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

Постучался я как-то ему в аську: «Слушай, есть новое дельце!» Друг заинтересовался и согласился подумать. Даю вводную: есть поле 5х5, в ячейках нужно разместить цифры от единицы до четвёрки При этом единичку можно ставить везде, двойку — только рядом с единицей, тройку так, чтобы рядом с ней были одновременно 1 и 2, а четвёрку в окружении 1, 2 и 3. Цифры нужно расставить так, чтобы общая сумма была максимальной.

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

Теперь друг взялся за дело всерьёз. Он менял строчку за строчкой, постепенно оптимизируя способы вычислений. Я не без его помощи находил ошибки, одновременно проверяя полученные результаты. Всё это было довольно занятно, и часа через два мы, наконец, с удовлетворением созерцали конечный результат — совершенство численных технологий. Минут через пять он спросил меня:

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

Хорошо, что дело происходило в аське. Друг еще полгода вспоминал мне об этом — час его работы стоит двадцать баксов...

1142

Десять строк хорошего кода заменяют сотню ленивых юзеров

В 2007 году я разрабатывал небольшую самописную ГИС с картами Москвы для мелкого завода. Бесплатных данных не было, и я кое-как за месяц расковырял одну систему с картами, успешно «спиратив» исходники. Немного позже потребовались геоданные для Московской области. В той программе их не было, зато нашлась другая в виде отсканированного атласа, на который были нанесены векторные метки. Сами данные хранились в каком-то невероятном формате; времени на разбор не было, система была нужна «здесь и сейчас».

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

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

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

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

1141

Ломать — не строить

Мои родители занимаются видеомонтажом в Adobe Premiere и Adobe After Effects. Контора, на которую они работают, подарила им лицензионный пакет этих программ. Все как положено — красивая коробка, серийный номер, защита и так далее. Всё было хорошо до тех пор, пока софт не полез обновляться в интернет и при запуске потребовал повторной активации.

Казалось бы, все просто: телефон для России указан, нужно только продиктовать серийный номер, код активации и получить код авторизации. Но мама у меня, хоть и продвинута в компьютерах, жутко консервативна и всего нового боится. Естественно, кроме лицензионного пакета от Adobe, всё остальное на компе было пиратским, поэтому папочка Crack была гораздо понятнее для нее, чем звонок в саппорт (да еще и в Москву!) Она бы, наверное, всё-таки позвонила, если бы не папа, который решил облегчить задачу — он нашел в интернете кейген и, не вняв моим предупреждениям, крякнул Premiere, после чего тот отказался запускаться вовсе.

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

1047

Не спрятаться, не скрыться

Только что мне звонил на мобильный какой-то программер из Германии и начал рассказывать на плохом-плохом русском, что нашёл древний пост на форуме GotDotNet, где я выкладывал один исходник на C#. Насколько я понял, парень сейчас пишет такую же штуку на Java и просит моей помощи.

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

Вот вам и анонимность в интернете! А парню я, конечно же, помогу.

1020

Не верьте данайцам, дары приносящим

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

«Дарили», конечно, не сам журнал. Обложка «Чипа», стоящего на витрине газетного ларька, гласила, что на прилагаемом к журналу диске DVD наличествует подарочный MS Office 2007. Ну, а что, сто тысяч экземпляров журнала — капля в море желающих иметь новейший легальный «офис» по цене 110 рублей. Раздача слонов в рекламных целях за символическую плату.

Статья в журнале, повествующая о новинке, не внесла ясности, умалчивая и о подарке, и о цене. Оставался последний рубеж на подходе к истине — прилагавшийся диск. Аннотация расставила всё по местам: «60-дневная пробная версия». Ясно: корпорация дяди Билла считает подарком и великой милостью саму возможность постоять рядом со своей поделкой.

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

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

Примета эпохи оголтелого маркетинга — деньги не пахнут, а продавец — молодец, ведь смог впарить гнилое суконце.

973

Чтоб два раза не ходить

Брат заканчивал подготовку к диплому. Осталось только написать презентацию в Microsoft PowerPoint, демонстрирующую работу программы расчёта САПР. Для наглядного примера попросил через QIP скинуть знакомого его вариант — знакомый долго ломался, не желая делится кровно выстраданным продуктом интеллектуального труда, но выслал архив на 4,5 МБ.

Кое-как приняв на маленькой скорости архив, брат распаковал его и обнаружил, что на ноуте у него стоит 2003 версия MS Office, а присланный файл сохранён для 2007. Покорячившись и так, и сяк, он решил попросить меня попробовать открыть образец — как назло, у меня «пауэрпойнта» не оказалось вовсе.

Брат опять стучит товарищу и просит сконвертировать презентацию в формат 2003 — заодно и размер должен был уменьшиться. Тот лёгких путей не искал и выслал пакет обеспечения совместимости MS Office (тот самый FileFormatConverters.exe), который занимал 27,5 МБ.

Вот такая у нас молодёжь пошла — продвинутая, но ленивая. Хорошо, хоть интернет теперь безлимитный...

971

Зелёный змий, истребляющий баги

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

С утра Костян был обнаружен за компом. Он сидел, держась за больную голову, и бубнил себе под нос одну фразу: «Как же я это написал?..»

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

945

Профессиональный синхронизатор БД

В 2002 году я работал автоматизатором в городском отделении пенсионного фонда. Где-то в апреле пришла из Москвы БД с данными пенсионеров-участников войны с графической оболочкой на Visual FoxPro. Задача: открыть в одном окне эту оболочку, в другом — нашу пенсионную базу и сверить данные по всем имеющимся пенсионерам: ФИО, адрес и ещё около тридцати пунктов.

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

Посмотрев на этот кошмар, я понял, что задача проста: надо лишь вытащить из нашей основной БД (благо, тоже написанной на FoxPro) необходимые данные по этим пенсионерам и поместить их в столичную базу. За пару часов пишу программку, дампящую из одной базы нужные поля и заливающие их в другую. Через двадцать минут, когда винчестер перестаёт шуршать, открываю московскую оболочку — всё отлично!

Отдаю работу начальству со словами: «Давайте остальным отделениям мой скрипт отправим, чего они зря мучаться будут?» В ответ получаю гневную тираду о том, чтобы и мыслей таких не было — ни в коем случае нельзя никому рассказывать о том, как у нас всё быстро получилось.

Потом я расспросил коллег из соседних отделений, как они справились с этой задачей. Все, кроме меня, стали строго следовать инструкциям Москвы и, потратив количество времени, прямо пропорциональное объёму БД, всё сделали вручную. В отделении с примерно нашим количеством пенсионеров работала пара айтишников: один смотрел в одну базу и читал записи вслух, другой сравнивал со второй базой и впечатывал отличия. Ушло у ребят на это две недели.