Истории с тегом: индийский код

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

5757

Кроссплатформенный геморрой

Довелось мне купить Zii EGG. Всё в девайсе было хорошо, да только старая прошивка мне не нравилась.

Казалось бы, что может быть проще? Сходил на официальный сайт, скачал программу (благо и виндовые, и линуксовые версии есть) и запустил. Ха! Начнём с того, что последняя свежая версия пахнет гнилью — 04.08.2010. А та, что за 23.10.2010 — это так, старьё, которое, видимо, в качестве дани истории решили приложить.

Литр кофе выпит — разобрался. Скачал всё. Пошёл второй литр. Линуксовая версия сразу отказалась ставиться — нужна какая-то библиотека. Оказалось, что пакет плохо написан, и моя верная Убунту не даст дураку чудить. Не беда: ковыряемся, ищем ошибку, исправляем, ставим. Они не понимают «д», «да», «y» как подтверждение лицензии, даже «yes» не подходит — им только «Yes» подавай. Ладно, вроде осилил, но хренушки: девайс всё так же не виден.

Пробуем «оконную» версию. Просит бибилиотеку. Точнее, не просит — просто вылетает, а что просит, это я уже потом из манов узнал. Хорошо, идём на сайт, качаем библиотеку. Библиотека — только для линукса, который, если верить манам, в этой библиотеке вообще не нуждается. Сдаюсь, думаю.

Третий литр кофе налит в чашечки и греется в ожидании расправы. Библиотека поставлена, программа-апдейтер от «окон» замочена в Wine — и понеслась! Софтина запустилась, девайс нашла, предложила обновить, скачала файлы и вылетела с ошибкой: «У вас подключено более одного Android-девайса».

Тут-то я и сдался. Буду ждать новых версий и расскажу о том, что накурят индусы.

5706

В глубоком табе

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

Сдаю в бумажном виде госы.

— И где же у вас здесь протокол SMTP?

— Вот это всё — реализация. Вот список команд, вот список кодов ответов…

— Так, где создаётся сокет?

Тыкаю пальцем: server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

— Та-а-ак! Но у вас же здесь TCP!

— Правильно. SMTP — протокол слоя приложения. А при создании сокета указывается транспортный.

— А как тогда отличить, что ваша программа работает про протоколу SMTP? Где это написано?

— По структуре заголовка пакета — никак. По порту разве что.

Показываю на строчку: addr.sin_port = htons(IPPORT_SMTP);

— О! Так вот эта константа. Но она должна быть в протоколе.

— Нет, она должна быть здесь. Даже по имени константы видно, что в протокол она не лезет. Давайте покажу на практике, попробуем подставить эту константу туда и запустить — получим INVALID_SOCKET.

— Так! Что ты тут со мной споришь? В книге было написано, что должен быть IPPORT_SMTP, и прилагались рабочие примеры!

— Покажите, пожалуйста.

— Нету, книга в библиотеке.

— Тогда давайте сейчас покажу на практике, — поворачиваюсь к ближайшей машине, — что моя программа работает. Заодно попробуем туда подставить этот IPPORT…

— Так, иди переделывай.

Позже дома проверил — действительно, сокет не создаётся, если подставить туда любую константу портов. Повторная попытка доказать это провалилась. Пришлось в глубоком табе писать: #define IPPROTO_SMTP IPPROTO_TCP.

5664

Как икс на душу положит

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

Одно из заданий: с клавиатуры вводятся коэффициенты квадратного уравнения, программа находит решения (или отсутствие таковых. Элементарщина. Проверяю работы, дохожу до Диминых кодов и медленно выпадаю в осадок:

Program Example;

var a, b, c, x, d: integer;

y: real;

begin

Randomize;

После этого слова проверять не стал — cразу двойку влепил. Cтрашно за будущее IT.

5592

Гифка на гиг

Понадобился как-то автоматический распознаватель текста для перевода DjVu в DOC. Погуглил, нашёл бесплатный конвертер. Запускаю. Программа поскрипела и отрапортовала о готовности. Открываю документ и делаю большие глаза: этот хитросделанный «распознаватель» скопировал в файл страницы DjVu в виде изображений, а распознавать текст и не подумал. Страниц оказалось почему-то всего пять штук. Минуты три я любовался на это творение, потом закрыл документ — и едва не свалился со стула. Cозданный файл весил более 500 МБ. Как можно было заставить программу придать одному монохромному изображению вес под 100 МБ — загадка для меня до сих пор.

Хочется передать автору этого чудо-конвертера пламенный привет и поинтересоваться: чего ж всего пять страниц обрабатывается? Как было бы круто заиметь себе, скажем, мануал по ассемблеру гигабайтов эдак на десять! Я не пожалел бы дискового пространства, чтобы увидеть глаза тех, кому покажут такой мануал. А программа эта у меня так и лежит в отдельной папочке в качестве яркого образца программерской криворукости.

5498

Цифра в боксе, плюс в уме

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

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

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

Ой! Пользователь нажал кнопку! Так, счётчик у нас ноль, смотрим нулевой символ… Ага, единичка. Ничего делать не буду, но счётчик плюсану. Ай! Опять кнопку нажали. Ладно, надо свои ватты отрабатывать. Счётчик — единица, и под номером один у нас… ага, плюсик. Мы его из текстбокса убираем. Вай, что это — опять событие Change! Я же и то не закончил! Ладно, справлюсь, у меня оперативки много. Что, опять проверять текстбокс? Ладно. Счётчик — единица. Что? Да нету здесь символа с таким номером! Идите вы все…

5495

Простите мой индийский

Был посажен писать программку на ABAP/4. Как программист я себя не позиционировал. С языком знаком был на уровне «прочитал пару чужих кодов». Опрос коллег показал: подобного ничего не делали. Вариант обточить чужое не катил.

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

Первая программа. За индийский код не бить.

Гуру, отнеситесь с пониманием.

Начинающие, если путей, кроме индуизма, не видите, признайтесь сразу.

В том же месяце я занялся йогой. Это как-то связано?

5460

Не знаю пароль, но вижу ориентир

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

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

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

Рассчитанные значения выводились в таблицу на форме, при этом ячейки прямо на ходу раскрашивались в зависимости от того, в какую из двух частей матрицы они попали. Думаете, красоты ради раскрашивались? Вот и я так думал, пока в конце не увидел это:

a := Canvas.Pixels[n-10,k-10];

if TColor(a) = clRed then begin otvet := … end else otvet := …

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

Я понимаю, человек был далёк от программирования и писал только чтобы сдать лабу, но такого «изобретательного» подхода, признаться, ранее я не встречал никогда.

5459

Динамично донельзя

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

$ find ./ -type f -exec sed -i 's/, (925)5xx-xx-x3//g' {} \;

Почему разработчик не может просто описать один шаблон и подключить его везде, где нужно? Сайт работает на MODx, однако его странички — обычные PHP-файлы, разбросанные по подкаталогам. Зачем нужна CMS вообще в таком случае? Неясно. При этом в базе данных 40 таблиц.

Прекраснее же всего раздел «Портфолио». В скрипте raboti.php около сотни строк следующего вида:



образец №30





образец №31





образец №32

5428

Весь багаж цивилизации

Отыграв партию в Civilization V, я ушёл на работу, не выключая компьютер и не завершая игру. Вернувшись, я обнаружил полуживое окно «Цивилки» и кончившееся место на диске C:, что меня несколько смутило: под него выделено 50 ГБ, видео и игрушки живут в другом месте. Попытки освободить место не увенчались успехом: выкроенные 7 ГБ исчезли буквально за семь секунд.

Гугл, режим отображения скрытых и системных файлов и скрупулёзное исследование папок нашли виновника. Последний автосейв «Цивилки» весил 27 ГБ. Первая мысль: «На видео записать игру — и то меньше бы весила!»

5418

Одним глазком посмотреть

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

— во всех условных операторах пропущены фигурные скобки;

— соединения не обнулялись, а повисали после запроса к базе;

— функцией для извлечения колонок извлекались строки.

После «просмотра одним глазком» скрипт заработал как положено и в четыре раза быстрее.