Дорогие коллеги, желаю вам всего хорошего. Помните, что наша работа — в мелочах и общении. Именно отношение к этим двум вещам и определяет нашу ценность как специалистов. Всех благ и профессиональных успехов.
#4811: Показательная порка цифровых мародёров
12:00 29.11.2010, IT happens
Пожалуй, мало кто из относящих себя к IT не слышал о PHP. Лёгкость в освоении и способность прощать некритические ошибки сыграла с этим языком (или интерпретатором, как хотите) злую шутку: теперь все, кто смог написать «Hello World», могут гордо именовать себя Программистами, хотя и до кодеров им далеко. Вот и у нас в конторе есть такие экземпляры, обслуживающие корпоративный сайт-портал и несколько внутренних БД с веб-мордами. Итак, «вредные советы».
Локальная среда разработки Apache + MySQL + PHP для тестирования скриптов — излишество. Открываем файл прямо на FTP, редактируем, сохраняем. Если в код закралась ошибка, её будет видно. Всем и сразу. Подумаешь, несчастье: «HTTP 500» или «call to undefined function» посреди рабочего процесса у двадцати человек одновременно.
Базы данных и таблицы в них создаются в очень интересных комбинациях кодировок: MySQL запущен в Latin1, БД — в UTF-8, в которой таблица в CP1251, в которой поля в UTF-8 (как?!) хранят тексты опять же в CP1251. При этом взывающий к данным скрипт содержит ряд конструкций по конвертированию из одной кодировки в другую. Воркэраунд, блин.
Ах да, ложка мёда: отдельного юзера для пятка внутренних баз всё же завели... без пароля. Мы же изнутри к базе подключаемся! Если у вас входная дверь закрыта, то сейф можно не запирать, ага.
Входная дверь, то бишь авторизация на корпоративном сайте-портале (который одним портом смотрит в интернет) — отдельная песня. Пользователь авторизуется на контроллере домена, при этом ни имя, ни пароль не проходят ни «очистку», ни, на худой конец, проверку на длину. Ну да, уязвимость, но ведь никто ж не догадается! Регулярные выражения? Вы сейчас с кем разговаривали?
Если вдруг вам понадобится логин авторизовавшегося пользователя перевести в человекопонятное ФИО, то запрашивайте у контроллера домена подробную информацию сразу обо всех пользователях, включая все атрибуты. Подумаешь, надо распарсить массив на мегабайт-другой, — сервер не обеднеет! То, что у пользователей меняются атрибуты примерно каждое никогда, а количество изменяется от силы раз в месяц, навело бы на мысль о кешировании готового массива, но тут ведь думать надо. Но есть же сервер с гигом памяти — вот он пусть и думает, у него мозгов больше.
Разбирая вышеописанный массив, можно не заботиться о том, что индексом служит переменная, которая может быть NULL. Был бы C или какой другой язык — «access violation» или «index out of bound» гарантирован, но PHP это прощает, хотя и генерирует ошибку типа E_NOTICE: мол, обратите внимание. Отключаем показ ошибок — делов-то!
Человека, посвятившего программированию (в том числе на PHP) полтора десятка лет и рвавшего ягодицы ради доведения кода и вёрстки до стандартов, всё это заставляет просыпаться в холодном поту и идти за валерьянкой. После этого снится, что всех этих цифровых мародёров, разграбляющих системные ресурсы, посадили за «Поиск 8086» с 64 КБ памяти и приставили суровых советских Учителей-Программистов с плёткой, приговаривающих: «Много памяти не бывает! И процессорного времени — тоже!»
#4812: Скан с улыбкой
12:00 29.11.2010, IT happens
Потребовалось реализовать через нашу программу сканирование документов для их последующей отправки в архив. По требованиям заказчиков сделали одну большую кнопку «Сканировать».
После сдачи проекта поступило обращение в наш адрес. С удивлением вместо скана мы обнаружили фотографию красивой девушки: оказалось, не приняли во внимание наличие на рабочих местах операторов веб-камер. Все холостые программисты дружно рванулись уточнять контакты девушки для организации помощи. Но служба поддержки нас жестоко обломила, заявив, что все тамошние сотрудники уже выстроились в очередь помогать девушке подносить к глазку камеры документы.
#4813: Тяжело в учении, тяжело в бою
14:00 29.11.2010, IT happens
Учусь на четвёртом курсе на инженера-программиста по автоматизации производственных процессов. Учебный курс включает в себя некую программу для разработки аппаратных решений под названием Genie, о которой и пойдёт речь.
В моё задание входило написание программы с парой кнопок и датчиков для симуляции производственного процесса. В ходе написания я сталкивался с настолько чудесными багами и глюками, что описывать их словами было бы очень сложно, поэтому покажу на примерах.
* * *
Переменные могут состоять либо из одной буквы, либо из одной буквы и цифры. «ts» или «t00» — ошибка синтаксиса.
* * *
Есть вот такие строки кода:
Выполняются они по факту в такой последовательности: