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

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

4939

Индус: пробная версия

Разбираем исходники программной системы для делопроизводства: надо перевести на русский и подправить кое-где логику под местные реалии. Не будем удаляться в частности, но код натурально индийский.

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

4933

Все умны как на подбор

Лет эдак шесть назад попросил меня друг заскочить «по компьютерному делу». Итак, ситуация: завтра у знакомой зачёт в вузе по какому-то зубодробительному предмету. Зачёт сдаётся на программе-тестере. После прохождения теста вылазит окошко: «Правильных ответов: xx%». Программу девушка умудрилась спереть. Сдать «легально» шансов почти нет. Времени три часа.

Идея первая: а как хранятся вопросы? А хранятся они в зашифрованной БД. Вскрыть такое на тот момент возможности у меня не было, равно как и знаний.

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

Идея третья: скриптик для подмены значения в окне. Не помню, почему не взлетело.

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

Как вы уже догадались, строка «Правильных ответов: 75%» аккуратно перекрывала настоящее значение. После девушки зачёт на той машине успело «сдать» ещё два человека; потом зачёт прекратили, и консилиум сел разбираться, в чём дело. Думаю, разбирались долго, но зачёт уже стоял.

4930

Остановите у переезда

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

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

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

— Вот за два дёрга туда-сюда позиция X плюс-минус пять сантиметров есть всегда, а точно X получается, только если повезёт, или после десятка включений мотора.

— Ты, балбес, в техзадание заглядывал? Оно и видно, что только заглядывал. Ты где там видел запрос на точность в ноль сантиметров? Это ж транспортники, они же «тележкой» тепловоз называют. Чтобы подать хоппер под погрузку, точность нужна всего до метра!

4896

Легенда о двойной уникальности

Пишу скрипт на PHP. Почему-то на сервере не работает array_unique() — не удаляет дубликаты из массива. Локально — да, на сервере — не до конца. Курю мануалы, форумы — не помогает. В каком-то безысходном порыве решаю вставить в код второй array_unique(). Чудо: дубликаты удалены! Смотрю на конструкцию:

$arr = array_unique($arr);

$arr = array_unique($arr);

...и добавляю комментарий:

// कोड में टिप्पणी — यह है कि उसने क्या कहा डिबगिंग के दौरान प्रोग्रामर

Ну, чтобы легенда не умирала.

4883

Кришна с нами

И вы удивляетесь, что индийский код работает? Не надо. Причина проста: они его благословляют.

void h(ne) {return ra/rn};

//-----------------------

//Pray all your gods to

//make this work and

//be careful with

//debugging

//Abdul Rahman Krishnaswami

//------------------------

Если Кришна с нами, то и успех будет всегда. Меняем бубны на чётки — и в бой!

4876

Пространственно-глюко-временной континуум

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

4867

Тык, кандидат эмпирических наук

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

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

4865

Битвы за биты

Дело было в бородатом 97-м году. В школе на информатике у нас стояли древние даже по тем временам БК-10010. Решили меня как грамотного физматовца направить на олимпиаду по программированию. Так как времена были суровые, и игрушки мы не на дискетках приносили, а играли в то, что сами написали, навыки скорописи, 2D-графики в уме и анализа побитового сдвига были у меня развиты на ура.

Уже не помню суть задач, но на ныне неуважаемом Бейсике и ещё менее уважаемых машинных кодах (48 КБ оперативы всё-таки) я сделал комплексную оболочку с табличным выводом решений по всем трём задачам. Решение подразумевало и обработку идиотского ввода, и перехват ошибок. Преподы, понятное дело, были в шоке и изумлении, но первое место отдали парню, который притащился с сотым «пнём» и сваял всё на Вижл-бейсике.

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

4828

Три пути к восемьдесят пятому уровню

Очень часто попадаются истории: «Аха-ха, я сделал так-то!», а через несколько страниц: «Муаха-ха, ты не шаришь, умные люди за тебя всё придумали. Проще сделать вот так». Есть подключить воображение, то все эти холивары можно представить в очень интересном виде.

Допустим, у админа есть задача установить некий сервер. Перенесёмся в мир фэнтези: объявлена награда за убийство дракона.

Первым откликается рыцарь: немного туповатый, но довольно хитрый малый, который предпочитает действовать силой, но если что, обращается к другим за помощью. После непродолжительных раздумий он отправляется в местный магазинчик, где ему продают меч «+1 к убийству драконов» c кратким описанием: «Если попасть этим мечом между 45-й по горизонтали и 78-й по вертикали чешуйками, то дракон умрёт». После нескольких попыток найти 45-ю и 78-ю чешуйку воин либо падает смертью храбрых, либо таки попадает. Ну, или покупает другой меч на +2, и история повторяется с самого начала.

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

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

Так вот, если результат всё равно достигнут, может быть, воины не будут хвалиться своими способами убийства дракона (которые не совсем их), маги перестанут учить паладинов сложным заклинаниям, а паладины в свою очередь перестанут обзывать пути других ересью и разводить костры?

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

4821

Соседолокация

Не удаётся скачать программу с Ovi Store, говорите? А представьте, каково разработчикам!

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

Подключаемся, скидываем пару песен, заходим в плеер, пытаемся обновить медиатеку. Не тут-то было: оказывается, если девайс подключён к компу, пункт «Обновить» из плеера исчезает. Нужен бубен. После похода в мазазин за оным предметом в голову пришла гениальная идея: скинуть по Bluetooth и сохранить. Но как это сделать, если аппарат в Финляндии? А вот как: включаем Wi-Fi, смотрим, какие сети доступны, подключаемся к другим девайсам, ищем, на котором доступны те же, чтобы убедиться, что они расположены рядом. Скидываем файл на второй девайс, находим по Bluetooth наш аппарат, передаём файл, добавляем в медиатеку, запускаем воспроизведение. PROFIT!