bash.im ithappens.me zadolba.li

Веб-разработка

4932

Подайте сюда чистый канал

Пятница. Полшестого пополудни. Магазин спускает на сервис ноутбук: розовенький Dell. Душа чует неладное. Просят накатать ось по-быстрому, до шести вечера. Ладно, берём флешку с «семёркой», за восемь минут ставим — а потом начинается квест.

Идём Эксплорером на сайт Dell за драйверами — он отважно предлагает качать тамошним даунлоуд-менеджером: оно, мол, оптимальнее. Ладно, качаем. Бравый менеджер говорит, что у нас, оказывается, нету интернета. Логично: мы через прокси работаем.

Качаем Файрфокс: канал широкий, всё тянется быстро. Подкидываем ссылку — наблюдаем ту же картину. Грустно.

Тянем Оперу. Она честно начинает пытаться что-то делать, в самый ответственный момент пишет, что не может соединиться с FTP-сервером Dell, но отдаёт директ-линк на искомый драйвер, который мы тотчас же скармливаем Огнелису.

Ребята из техподдержки Dell, если вы читаете это, вы знаете, что делать с разработчиками даунлоуд-менеджера.

4902

Не плачь, малыш, возьми пустышку

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

Тут меня осенила идея. Глупая, безумная — но терять уже нечего. Дали мы системе все файлы, которые она просила, но пустые. Шестнадцать файлов подряд. Заработало! Проект сдали, деньги получили, но осадок остался: кому-то потом это всё после нас ковырять.

4891

Ночь отвергателей рекламы

Проект сдавать с утра. Ночь бессонная. Ищу, почему же сайт отображается в Опере как надо, в Файрфоксе — тоже, а в Сафари неправильно. Ощущение такое, как будто CSS-файл просто не подгружается, и стили не применяются. И так подойду, и эдак — всё должно работать, но не хочет.

Уже под утро от отчаяния переименовываю файл advertising.css в a.css, и сайт раскрашивается должным образом. Только в этот момент я вспоминаю о блокировщике рекламы. @#$!

4811

Показательная порка цифровых мародёров

Пожалуй, мало кто из относящих себя к 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 КБ памяти и приставили суровых советских Учителей-Программистов с плёткой, приговаривающих: «Много памяти не бывает! И процессорного времени — тоже!»

4809

К шапочному разбору

Есть у меня знакомый, который занимается 1С. Недавно к нему пришла довольно крупная производственная компания, которая решила устроить для своих дилеров приём заказов через сайт. Знакомый взял широко известную в узких кругах CMS, которая славна интеграцией с жёлтой программой, развернул сайт, натянул дизайн, создал каталог, в паре с айтишниками компании настроил и отладил загрузку заказов с сайта в тестовую базу. Всё работает, не фонит и переливается — можно запускать. Перенесли все настройки в рабочую базу. Менеджеры счастливы, руководство радо, дилеры довольны.

Проходит какое-то время, и моему знакомому звонит айтишник компании: «Заказы теряются: на сайте заказ виден, в 1С не появляется». В течение пары недель знакомый много раз просматривает код и со стороны сайта, и со стороны 1С, правит несколько подозрительных мест — не помогает. Знакомый обвешивает весь код логами. В логе сайта видно, как формируются аккуратные XML со всеми заказами. В логе 1С видно, что приходит только часть XML-ников. Где они могут теряться по дороге? 1C их получает банальным HTTP-запросом. Связь стабильная, прокси не при делах. Мистика. Тут моему знакомому что-то ударяет в мозжечок:

— Ребят, а тестовая база у нас работает?
— Ага, мы в ней начисление зарплаты тестируем, — гордо отвечают айтишники.
— А загрузка с сайта в ней как настроена?
— А как оставили после отладки, так и настроена: автоматическая, по расписанию.

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

4794

Проходите, не задерживайтесь

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

Это главный сайт компании.

4768

Не заводится? Поехали, потом заведешь!

Порылся в новостях, прочитал, что на основании общего теста скорости загрузки страниц Микрософт объявила IE8 «самым быстрым» (в тесте участвовали еще два браузера — Хром и Файрфокс; баги, ошибки и прочее не учитывалось вообще). Уже на этом этапе я был, мягко говоря, напуган. Робкая надежда на адекватное поведение Internet Explorer 8 начала гаснуть еще до его установки.

Сегодня — погасла совсем: после переписывания куска кода выяснилось, каким образом MS добилась революционного скачка в производительности.

Яваскрипт выполняется точно в момент его прочтения браузером, и не важно, когда он там должен выполняться (кроме setTimeout). Соответственно, код на событие load (который проверяет, загружена ли страница, и если да — выполняет основной код) выполняется параллельно с загрузкой страницы, до onload. И выдает ошибку. И останавливает загрузку сайта.

Это, друзья мои, финиш.

4733

Изящная градиентная подсветка

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

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

4687

Оптимальный расклад

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

— А где работаешь-то?

Объяснять экономисту со стажем, что такое SEO, я не решился.

— Я компьютерщик.
— О, как раз то, что нам нужно! Пойдём на кафедру, у нас один из компьютеров барахлит.

Лезть в чужие ПК неохота. Зачем им админы штатные нужны?

— Эм, я не совсем компьютерщик, я скорее программист.
— Да? Слушай, может, ты тогда поможешь моему сыну с информатикой в школе? Что-то он совсем не понимает, только в игры на компьютере дуется.

Дядя, не нервируй меня!

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

%$#! Может, я просто пойду по своим делам? Бесплатно делать что угодно мне совсем не хочется.

— Я опять выразился не совсем точно. Я сайты не делаю, а продвигаю их, чтобы приходили посетители.

Всё, думаю, выкрутился! Смотрю на препода глазами кота из «Шрека». Но не тут-то было:

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

Эх, значит, судьба такая: без работы не уйти.