bash.im ithappens.me zadolba.li

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

12557

Свидетель Битрикса

На этом сайте стало мемом обсуждение темы взаимоотношений айтишников с окружением в виде кошек, пива, кофе, бухгалтеров, уборщиц, детей и так далее, а теперь ещё и «Свидетелей Иеговы». Держите мой пятак.

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

На собеседование приходит соискатель, у которого из пакета небрежно торчат какие-то брошюры на нескольких иностранных языках. И так ясно, что полиглот, поэтому об этом спрашивать его не стали. О CMS кратко расспросили, поняли, что знает. Приняли.

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

Год успешной работы. Наконец догадались посмотреть повнимательнее. Брошюры на иностранных языках оказались от «Свидетелей Иеговы» — они постоянно раздают свои материалы у метро на нескольких языках. Знания иностранных языков у сотрудника не было совсем — он делал вид, что читает, но оно за год так ни разу и не понадобилось. CMS’ит он хорошо, а большего от него и не требуется.

Мы его оставили.

12483

Вебдев руками юных дев

Мне 12. Серьёзно.

Я создаю сайты. Статейники, по большей части. Они работают на самописных CMS (автор — я). Проекты собирают от 500 уников в сутки. HTML, CSS и PHP изучала самостоятельно, сейчас вот Ruby учу. В общем, в вопросах современных технологий я более продвинута, чем мои сверстники, которые «хакеры».

Я уже привыкла, что меня никто и нигде не воспринимает всерьёз, поэтому везде прикрываюсь выдуманной личностью.

Наш преподаватель по информатике — хороший человек. Он помогает мне в изучении Ruby, даёт дополнительные задания. Чаще всего шлю их ему по почте, но иногда тащу в школу флешку.

Захожу в кабинет. За столом сидит парень (на вид — класс девятый), который взглядом обезьяны уставился на экран монитора. Отдаю учителю флешку, смотрю на экран. Оказывается, парень проходит вёрстку, и ему дали простейшее (как мне кажется) задание — написать сайт-галерею на HTML + CSS. Картинки, само собой, нужно расположить в строчку. У него ничего не получается.

Подхожу. Объясняю, как это реализовать. Девятиклассник ошарашенно на меня глядит, а затем выдаёт:

— Что ты там понимать можешь, ты же ребёнок! Вот подрастёшь, тогда и будешь со своими советами лезть.

Я пожимаю плечами и отхожу. Учитель проверяет задание, я жду. Парень яростно тыкает в клавиши одним пальцем. Когда он отходит, я тихонько правлю код. Парень возвращается и сдаёт задание, гордо выпятив грудь.

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

12465

Принцип наименьшего удивления

Здравствуйте. Я фрилансер, программист. Делаю сайты. Работаю так уже 18 лет. Мне самому 36. Ровно половина жизни, да. Помню, как в 18 получил первый коммерческий заказ и летел на крыльях в офис заказчика. Но налажал. Обидно, хоть и говорят, что первый блин комом. С тех пор набрался опыта, стал сначала разбираться в технологиях, а затем понимать, что заказчика технологии не особо волнуют.

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

Может, и не написал бы, если бы один случай, как под копирку, не произошёл уже в третий раз.

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

На следующий день от менеджеров поступают указания, противоречащие результатам встречи. Ладно, выставляю очередной счёт и делаю, что сказано. Заказчик недоволен. Менеджеры тяжко вздыхают и молвят: «Да, тяжёлый клиент».

И вдруг проект неожиданно завершается, принимается и оплачивается. Даже несмотря на то, что работы из списка «Re: re: re: Re: Окончательный финальный №  69, версия 8 с дополнениями» ещё не завершены. На следующий день у меня звонит телефон. Кто говорит? Да тот самый заказчик:

— Вы работаете только со студией или можно с вами напрямую?

— Можно напрямую!

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

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

Так всё это я к чему? Давайте уже понимать, когда хорошо сделать оригинальный и нестандартный дизайн, поэкспериментировать в области UX, а когда стоит сделать рабочий инструмент для человека, который за это вам заплатил. Если хотите блеснуть оригинальностью, запустите свой стартап и на нём блещите. А если к вам пришёл человек с деньгами и просит сделать интернет-магазин, который будет продавать его товары, прислушайтесь и сделайте стандартный удобный вариант по принципу наименьшего удивления. И всем будет счастье.

12379

Уж полночь близится

Делала я свой первый сайт на Django. Ни Django, ни Python я ещё толком не знала, так что в учебниках и мануалах проводила вдесятеро больше времени, чем в IDE. Потихоньку-полегоньку сайт строился, проблемы возникали и решались, Гугл и документация — наши друзья.

На одной из страничек нужно мне было вывести список мероприятий в рамках проекта. Мероприятия добавлялись в админке, естественно; у каждого были параметр «дата и время проведения». Что характерно, в модели (и в базе) это один параметр типа datetime, а админка по умолчанию использует для него два поля — под дату и под время. На страничке же мне нужно было, чтобы был заголовок типа «Август 2014», а под ним — список мероприятий на этот месяц.

Для начала вывожу просто список всех событий, отсортированный по дате — всё работает. Курю маны, пишу группировки, чтобы события каждого месяца объединялись в один список. Навожу красоту, так, что имя каждого списка становится объектом datetime — так его можно будет потом красиво отформатировать в шаблоне — работает…

И тут я вижу странный баг.

Было у меня специально забито тестовое событие, которое уже прошло — от 1 июля 2014 (забивалось оно четвёртого). Казалось бы, заголовок над ним должен гласить «Июль 2014» — а на меня смотрел «Июнь». Проверяю базу — в базе июль. Проверяю группировку — всё верно, остальные месяцы правильные. Чешу репу, курю маны, ставлю отладочные выводы…

Доходит. В настройках проекта у меня было указано, что мы живём в России, более того — в Москве, и время у нас спешит на четыре часа по сравнению с UTC. Django умный и за временем следит сам; в админке же при вводе времени есть специальная кнопочка, которая подставляет в поле текущее время. Дату — первое июля — я ввела руками, а время поставила текущее: час ночи с копейками. В базу же записалось «правильные» время и дата — что-то около девяти вечера 30 июня. Django-то умный, он к датам положенные часы сам прибавляет, а вот функция группировки ничего про наше местоположение знать не знала.

Покурив маны, вытащила июль из июня.

Вывод: работать по ночам полезно для вашего кода!

12320

Жёлтое за железным

Ну да, мы понимаем. Нужно как-то сделать вид хотя бы, что антинародные инициативы Госдумы имеют широкую народную поддержку. Но, умоляю, не надо от имени веб-разработчиков писать, что от интернета нужен отдых и что «Чебурашка» станет отличным подарком. Разберитесь в вопросе, пожалуйста.

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

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

Есть готовые решения. Весьма малая часть из них пишется в России.

И есть русский монополист на рынке коммерческих CMS в России. Да, именно тот, у которого функциональность, в нормальных системах укладывающаяся в одну строку, размазана на 400 строк;

тот, у которого заявленная (и объявленная главным конкурентным преимуществом) интеграция с жёлтой программой работает только в том случае, если на стороне жёлтой программы вывернуться наизнанку;

тот самый, который до сих пор не верит в то, что есть кодировка UTF-8, а всё остальное — экзотика, и считает, что основная и главная кодировка — CP1251, а UTF-8 надо отдельно включать при установке, а реализовывать её поддержку нужно перегрузкой функций;

тот самый, у которого ООП, но весьма своеобразный, сплошь из статических методов;

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

Очевидно, что это добро накроет нас всех, если отгородиться от цивилизованного мира железным занавесом.

Хотят ли этого веб-разработчики? За всех не скажу, не знаю. Лично я не хочу, и все, кого я знаю, тоже не хотят.

12129

Наносвистелки и хайтек-блестелки

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

Вряд ли кто будет спорить, что карточка для метро на 20–60 поездок куда удобнее, чем целый мешок мелочи. Но какой смысл в карточках на одну-две поездки? Они абсолютно по всем параметрам проигрывают традиционным жетонам: занимают больше места, более уязвимы к физическим повреждениям, у них ограниченное время действия (кстати, совершенно непонятно, почему у карточек на одну поездку время действия меньше, чем у карт на десять; никаких технических причин сделать их такими же долговечными нет), они выбрасываются после одного раза, создавая горы мусора, стоят дороже (точнее, стоят жетон и карточка примерно одинаково, но жетон используется тысячи раз, пока не сотрётся или турист на сувенир не заберёт). У меня, как у технаря, сердце кровью обливается при виде такого варварства: высокотехнологичное изделие выбрасывается после первого использования, словно какой-нибудь пластиковый стаканчик! Чем не забивание гвоздей микроскопами? Почему нельзя было сделать, как в Питере, где жетоны и карточки прекрасно уживаются? Зато прогресс, блин!

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

Сверхъяркие синие светодиоды. Технологически их создание было гораздо сложнее, чем у зелёных или красных, поэтому они появились позже, и некоторое время считалось, что это круто. Многие производители начали лепить их куда ни попадя, например, в качестве индикаторов питания. Вот только совершенно непонятно, кому эта высокотехнологичность нужна, ведь дизайнеры и психологи давно знают, что самый спокойный цвет для человека — зелёный, именно зелёные светодиоды лучше всего смотрятся в качестве индикаторных (да и стоят дешевле). Нет, на системнике — вырвиглазно-яркий светодиод, который ночью освещает всю комнату мертвецким синим цветом, на роутере — четыре таких же. Последний писк моды — клавиатура, в которой синий индикатор NumLock ночью буквально выжигает глаза. Пришлось заклеить чёрным скотчем. Такой вот прогресс.

А в мире IT такое встречается вообще на каждом шагу.

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

Сайт надо непременно обвешать по самое не балуйся скриптами, всякими полупрозрачностями и анимацией, скрывающимися меню, а на фон ещё и картинку залепить на весь экран. В результате такое творение умудряется подтормаживать даже на i5 с четырьмя гигабайтами и каналом в 10 мегабит, при том, что полезной информации на странице — хорошо если 100 КБ. А на мобильнике этот сайт в лучшем случае просто тормозит страшно (не поверите, но далеко не везде 4G, кое-где даже 3G ловит с трудом), а в худшем им вообще невозможно пользоваться: всё расползается, половина функциональности не работает, причём критической. Попадался, например, сайт, где с мобильника невозможно было переключить страницу комментариев; был сайт, где нельзя залогиниться. Если мобильная версия есть, то урезана жесточайшим образом, иногда до полной бесполезности. Самое обидное, когда хороший сайт становится совершенно неюзабельным после апгрейда. Респект тем, кто хотя бы оставляет возможность вернуться к старому интерфейсу.

Люди, опомнитесь! Технический прогресс — не самоцель, а средство. Средство сделать жизнь людей лучше. И прежде чем прикрутить какую-нибудь модную нанофинтифлюшку (неважно, сенсорный экран или модную технологию на сайт), подумайте хорошенько: а точно ли пользователю от этого будет хорошо? Сомневаетесь? Тогда не нужно.

12090

А суть они в песок

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

Полгода сайт прекрасно работал, хотя и практически не обладал дизайном. А сейчас на сайте сделали апдейт.

Вместо старой, маленькой карты теперь новая, красивая карта города во весь экран.

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

При заполнении адреса сайт услужливо подсказывает похожие названия улиц, пролистывающийся список помогает выбрать нужную…

Только вот после того, как ты вбил все данные, сами маршруты не отображаются. Обновляй, не обновляй, в каком браузере ни пытайся — пункт А показывает, пункт Б показывает, а маршрутов нет.

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

12071

Модно, круто, медленно

AJAX, XML, DOM, генерация HTML на стороне клиента… Модно, круто, но хоть кто-то пробовал поработать с получившейся поделкой не на i5, а, скажем, на каком-то нетбуке с Атомом N450? Когда на генерацию странички уходит секунд пять — поверьте, это очень раздражает пользователя такой чудо-системы. Да и роботы такую красоту индексировать не умеют.

Те, кто постарше, могут вспомнить, что история идёт по кругу. Сначала была мода на Java-апплеты. Потом умами завладел Flash (тот самый, что сейчас считается вымирающим реликтом), на котором писали сайты целиком. Теперь очередной кумир в виде Ext JS и прочих подобных фреймворков появился. Поиграют немного — да и забросят. Просто потому, что рендерить шаблон на стороне сервера и проще, и производительнее, и нагляднее, и требования к клиенту ниже.

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

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

И маленький совет начальникам веб-студий (да и прочих фирм по разработке ПО): ставьте своим сотрудникам (а в особенности — бета-тестерам) минимально необходимые конфигурации компов. Это будет дополнительно стимулировать ваших программистов писать годный код, а не экспонаты в музей индуизма.

12062

Беда, коль пироги начнёт печи сапожник

Программисты пишут на разных языках, а разные специалисты занимаются разными вещами. Спасибо, кэп!

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

Наоборот, когда речь заходит о гаражных воротах, их обычно сваривают из металла, а на того, кто сколачивает их из досок, смотрят странно.

С удивлением взирают на человека, который сажает дерево с использованием роторного экскаватора. Нездоровое внимание привлекает тот, кто забивает сваи молотком. В конце концов, ещё светлой памяти Иван Андреевич писал: «Беда, коль пироги начнёт печи сапожник, а сапоги тачать пирожник».

Так, может, стоит, прежде чем делать некоторые вещи, заглянуть хотя бы в Гугл, посмотреть, «как сейчас носят», как принято реализовывать ту или иную функциональность? Может, и правда стоит перестать верстать таблицами — всё-таки вчерашний день? Может, наконец прекратить гонять туда-сюда по многострадальному интернету килобайты HTML, затаскивая дизайн в бизнес-логику и получая запредельную регрессионную опасность, и начать использовать шаблоны?

Я могу понять, когда подобная реализация встречается на сайте образца 2008 года или когда такие вещи пишут студенты, только недавно дорвавшиеся до интернет-технологий и изобретающие подчас замысловатейшие велосипеды. Когда-то и AJAX был интересной новинкой, а велосипедостроители грузили сгенерированный JavaScript в регулярно обновлявшиеся фреймы. Но, господа профессионалы, давайте будем профессионалами! Для 99% встающих перед нами задач кто-то когда-то уже нашёл решение, ставшее де-факто стандартом. Час, проведённый в Гугле на ранней стадии, иногда спасает недели на разработку и багфиксинг!