bash.im ithappens.me zadolba.li

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

12885

Совершенно верно

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

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

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

Я допустил оплошность. Разница между двумя идеально «пройденными» тестами составила пару секунд, после чего, как я узнал на выпускном, за мной велась удалённая слежка.

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

12713

Внедряй, но проверяй

Солнце в бутылке, говорите? Ну-ну…

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

Во-вторых, в нашем климате зимой идёт снег. Небольшой его слой на крыше — и привет «солнцу», от простого затемнения до выпадения бутылки вниз из-за весовой нагрузки.

Всё это знаете что мне напоминает? Новичок узнал новую-новую технологию — и давай её повсеместно внедрять.

Вышла новая версия ОС? Надо поставить её везде. А потом начинаются пляски с бубнами: как её убедить не тормозить на старом железе и заставить заработать тот софт, что на этом компе используется для основной рабочей деятельности.

Вышел новый фреймворк? А давайте его запилим в наш сайтик! Это же круто — быть на острие технологий. А то что, для этого сайтика вполне хватит обычного статического HTML с CGI на голом PHP — это неважно. Главное — чтобы мы были на острие прогресса. Клиенты начинают жаловаться: «А чего у нас страничка с тремя кнопками и одним выпадающим списком тормозит?»

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

Ладно бы маркетолог — ему за это платят. Но технарь, заболевший «New New Stimorol»… Такому хочется взять и настучать томиком Кнута или Кагана по голове.


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

12704

Солнце в бутылке

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

Но эти постройки одноэтажные, поэтому крыша днём освещена. Гениальнейший девайс под названием solar bottle bulb устанавливается быстрее окна, стоит дешевле, ярко освещает помещение, когда светит солнце. Такой вот упрощённый наколенный вариант более сложных конструкций — skylight и light tube. Кстати, в электрифицированной местности бутылочную лампу тоже есть где внедрять — если лень, например, тащить проводку в хозблок. Ну, в наших условиях придётся солёную воду применить, чтобы зимой не замерзала. Да и в туристической палатке такой светильник не помешает. А ещё ему не страшны мальчишки с мячом.

Выводы:

  1. Окна — долго, дорого, для их установки не всегда достаточно ресурсов, их могут разбить.

  2. Кто ими не избалован, у того наиболее безболезненно проходит внедрение LAMP.

12649

Деды воевали, мы не отстаём

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

Разработка начиналась около 15 лет назад на средстве разработки, столь популярном тогда на территории экс-СССР, названном в честь древнегреческого города. Тогда это был передовой край IT — визуальное средство позволяло быстро и качественно рисовать пользовательский интерфейс. А архитектура этого средства позволяла дорабатывать стандартные компоненты и классы, разрабатывать свои собственные или использовать сторонние, что повышало качество и привлекательность создаваемого программного продукта.

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

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

И вот развитие веб-технологий позволяет нарисовать интерфейс, неотличимый от нативного, а средства разработки позволяют нарисовать его комфортно. Вот только браузер с открытой почтой, новостным сайтом и этой страничкой ест оперативы столько же, сколько сервер приложений с полутысячей активных пользователей, и в пять раз больше клиента, в котором загружен список под сотню тысяч записей (раз клиент хочет себя мучить такими списками, то проще сделать, чем спорить).

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

К чему это я? Да все к тому же баяну, повторяемому тут на каждой странице: холивар вечен и повторяется на каждом витке развития технологий. А каждой технологии своё место и своё применение.

12646

Эмуляторы программистов

Смотрю я на диалог «старых» ООП-разработчиков и новых «хипстеров» насчёт отрисовки на стороне клиента и вспоминаю конец девяностых — начало нулевых. Я тогда фрилансил, и новомодные задачи типа отрисовки всей странички на клиенте, передав лишь данные, были в порядке вещей. Данные передавались через невидимый фрейм. Задачи были простые и понятные: те же новостные ленты, магазины, форумы, аукционы и прочая дребедень. Всё это отлично работало на средненьком железе того времени. Потом появилось следующее поколение разработчиков — ну, вы понимаете, максимальный упор на ООП, SQL, медленные интерпретаторы, — и внезапно оказалось, что те же самые задачи уже решаются целыми коллективами за втрое большее время и требуют многократно больших вычислительных мощностей.

Думаете, на этом ситуация прекратила ухудшаться? Ха! Появился сперва XML, удачно сочетающий тормознутость текстового формата с нечитаемостью машинного, и вместе с ним мода на передачу любых данных с помощью XML. Можно ли сделать ещё хуже? Можно! На сцену вышел XSLT, и всё стало ещё в три раза медленнее и в пять раз забагованнее (ибо валидация). У меня перед глазами был пример, как команда из пяти разработчиков полтора года ваяла самый обычный форум. При этом у них всё время кипела работа, они героически боролись с легионами багов, они переписывали кучу кода из-за «новых требований, несовместимых с архитектурой». Разобраться в этом кошмаре после них не смог никто.

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

12625

Декольте-девелопмент

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

На момент моего прихода картина была такой:

  • три менеджера обзванивают потенциальных клиентов;

  • один дизайнер рисует внешний вид;

  • я, как внешний вид утверждён, делаю шкурку к Джумле или Вордпрессу;

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

Для менеджеров в своё время были написаны инструкции: что входит в стандартные услуги и что не входит. Для всех стандартных услуг чётко прописаны цены и сроки. Стоит ли упоминать о том, что менеджеры в инструкции даже не заглядывали и самым частым ответом было: «Я сейчас дам трубку специалисту, он вам расскажет»?

Другие изречения менеджеров, хоть и встречались реже, тоже достойны внимания:

— Нет, мы не делаем интернет-странички. Только сайты, интернет-магазины и корпоративные сайты.

— Конечно, в стоимость входит интеграция с 1С. (На самом деле её нет в стандартной поставке.)

— Да, вы можете сами нарисовать дизайн, а я дам вам скидку на стоимость дизайна. (А повышать цену на возросшую трудоёмкость вёрстки?)

— Да, конечно, за две недели будет. (Только эти две недели где-то после Нового года, когда закончим предыдущее.)

Со временем ад рос и ширился. Менеджеры спихивали с себя всю работу, которую только можно спихнуть:

  • переписку с клиентами: «Ой, они спрашивают про дополнительную функциональность, я там ничего не понимаю». На самом деле ответы на вопросы есть в инструкции и функциональность вовсе не дополнительная;

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

  • ответы на тендеры: «А вы можете им ответить, а то я не знаю, того ли они хотят?»

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

Особо отличилась тут девочка с декольте +5 к убеждению. Оно слабо действовало на нас, но безотказно на владельца. Очень быстро она стала старшим менеджером, потом начальником отдела менеджмента (количество людей не изменилось). Когда владельцы поехали в отпуск, её на два месяца сделали исполняющей обязанности директора.

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

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

12620

REST in peace

Я из тех новомодных хипстеров, что разбрасываются словами «инверсия управления», REST, «клиентская шаблонизация», MVVM и прочие Events Observer и Shadow DOM. Мы знаем и применяем эти страшные слова не потому, что хотим погнуть пальцы перед другими кодерами и инвесторами. Инвесторам зачастую вообще всё равно, на чём будет написан продукт, хоть на С++, а от слова «облако» у многих уже начинается нервный тик.

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

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

Мне же на Ангуляре достаточно создать шаблон (или директиву) и инжектировать в контроллер ещё один сервис, потому что API для управления данных для этого маленького виджета выпадающего списка уже есть, ибо нужный список используется уже во многих местах системы. Час на разработку, час на создание автотестов — и новая нужная пользователям функция готова.

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

Всем добра!

12613

HTML везде у дел

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

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

Я работаю в сфере веб-разработки больше 10 лет, и за всё это время был лишь один случай, когда по объективным причинам понадобилась надстройка (JS + некоторое не особо сильное колдунство на серверной стороне) для того, чтобы клиент и сервер перекидывались данными только в виде JSON после загрузки первой страницы, где передавался HTML. Причина — флеш-плеер, который должен воспроизводить музыку без заиканий.

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

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

Когда-то начальство спросило, возможно ли интегрировать нашу платёжную систему в Smart TV. Вбил в Гугл новое для меня слово, почитал доки и с уверенностью сказал, что технических преград нет. Желаю подобной уверенности и вам, коллеги.

12585

Дерьмо — оно и есть дерьмо

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

Но ничего, ведь у меня же есть онлайн-кошелёк! И там много-много денег, которые я смогу перекинуть на телефон, чтобы сделать один звонок. Но живу я в глухомани, сижу с Йотовского модема, который плохо ловит покрытие и не может прогрузить все эти тонны перегруженного Яваскрипта.

Кто-то скажет: сам виноват, ты нищеброд, живёшь далеко. Ищи другие способы. Но мне, знаете ли, пофигу. Дерьмо — оно и есть дерьмо само по себе, каким бы я ни был неподготовленным и «безответственным».

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

У почты Google есть опция перехода на «простой HTML». Прекрасная просто опция: нажал — и можно читать письма, можно писать письма, можно отправлять их в спам. Сделайте же хотя бы это!

Мне до лампочки ваш «минималистический стиль» с хипстерской графикой. До фени то, что у вас сейчас модно делать всё на этом JS какими-нибудь хитрыми фреймворками, замещая правильный <a href="…"> какими-нибудь document.open. Обезьян, которые делали фронтенд этого неработающего хлама, нужно гнать вон из профессии. Дилетанты!

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

Задолбали некомпетентные «разработчики»!