LINUX.ORG.RU
ФорумTalks

Почему web так убог?

 , ,


1

2

Собственно давно задавался этим вопросом. Я сам последнее время работаю с вэбом и почти каждый день спрашиваю себя - почему здесь всё настолько криво. Почему спросил сейчас? Вот сижу и пишу стопяцотый велосипед который сделает удобным вывод форм на страничку избавив от всего этого хлама типа select, textarea, checkbox(value) и прочего сказочного поноса. Конечно пишу на пыхе потому что целевой фреймворк, как и подавляющее большинство, на пыхе. И тут вот такая тема - Python или PHP, или вообще Pascal?

Невольно задаешься вопросом, почему все эти люди которые создали всякие html, php, css и прочие js (возможно к последнему притензии мои и зря), смогли вывести это в мэйнстрим? Почему мэйнстримом де-факто стали настолько убогие и кривые стандарты и технологии?

P.S.
Мнения тех, кто считает что все нормально и не видит глобального ада, не очень интересно. Интересно именно чем думали создатели этого.

★★★★★
Ответ на: комментарий от Xellos

А держать в памяти результат «компиляции» клиент не может?

может, но на клиенте ты этим не управляешь или нужно в http встроить средства для управения препроцессором/компилятором браузера и настройками кеша?

TDrive ★★★★★
()
Ответ на: комментарий от Suntechnic

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

А ты про вариант с одним чекбоксом... Ну и че ты на сервере не сможешь определить что пользователь не выбрал этот чекбокс?

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Тем более что всё равно проходиться по списку значений для проверки на валидность/необходимость.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

А, вспомнил. Для кук устанавливается время жизни. И всё вроде.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

Последний раз я устанавливал время кэша... уже не помню когда и зачем.

Хрен с ним с кешем. Вот представь сделают в css переменные, циклы, еще что нибудь. Что получится на практике? В сафари они будут работать с багами, в ИЕ через жопу по свойму, часть программистов будет генерить css на сервере потому, что всеравно чегото не хватает, часть на клиенте средствами css, а все быдлокодеры будут лепить в перемешку. Нет уж, на**й такие инновации.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Это неконструктивный подход. «Давайте ничего не будем делать потому что можно испортить». Используем же мы стили несмотря на несколько различную их поддержку в браузерах.
И чего ты привязался к циклам. Переменные, неймспейсы - и всё, пожалуй, не нужны никакие циклы, даже условия пожалуй не нужны. Просто это костыль, когда я обязан писать .focused {color: red} .selected {color: red}, и у меня нет никакого способа сказать что цвет focused это то же, что цвет selected. Особенно если focused мой, а selected чужой. А компилировать это на сервере в единый бандл, как мне тут предлагали - костыль и есть. Отягощённый стокгольмским синдромом.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

А компилировать это на сервере в единый бандл, как мне тут предлагали - костыль и есть.

Не вижу в этом ничего костыльного.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Ну я грешен, у меня случаются сгенерированные вставки <script> :)
Наверное это плохо, надо json-ом получать с сервера нужные структуры и правильно их обрабатывать...

Xellos ★★★★★
()
Ответ на: комментарий от TDrive

«Отягощённый стокгольмским синдромом»

Xellos ★★★★★
()

Согласен. Но ведь ничего лучше нет. И никто не собирается предложить более оптимальное решение.

lucentcode ★★★★★
()
Ответ на: комментарий от Xellos

«Давайте ничего не будем делать потому что можно испортить».

Давайте ничего не будем делать потому что уже есть удобные средства для этого.

TDrive ★★★★★
()
Ответ на: комментарий от Suntechnic

А в случае изменений автозамена?

less/sass

Они используются для ввода данных значит должны быть единой сущностью

Селёдка и апельсины используются в качестве пищи, значит, должны быть единой сущностью?

Сегодня у меня тут input text, а завтра textarea

Только что были select и textarea.

KRoN73 ★★★★★
()
Ответ на: комментарий от Xellos

Ну я грешен, у меня случаются сгенерированные вставки <script> :)

Вставки <script> это html. А вот когда сам js код генерируют c помошью пхп потому что в js нету инклудов или чтобы передать переменные из пхп в js, причем выглядет все это как полная каша и нехватает только какой нибудь картинки составленной отступами из кода...

TDrive ★★★★★
()
Ответ на: комментарий от Suntechnic

Нукась, нукась, какой конкретно программное решение я тут поругал?

Из контекста вырывать фразу нехорошо. Я говорил о ненависти в целом, в т.ч. к технологиям. А таким у тебя тут весь топик пронизан.

Но расскажи давай как мне не пользоваться HTML в вэбе.

Зачем ты в Web полез, если так его ненавидишь (в виде и HTML, и CSS)?

Сдаётся мне, что причина тут не в Web'е.

KRoN73 ★★★★★
()
Ответ на: комментарий от funeralismatic

но HTML и CSS ты таки зря грязью поливаешь. ты просто не умеешь их готовить

Ну почему, полить их таки можно. Вот взять, например, простое желание иметь возможность создать layout™ для сайта, «веб приложения» или что там. И что нам даёт CSS? А нихрена не даёт. Либо таблицы*, либо флоаты ололо, либо inline-block**, либо флексбокс***, либо абсолютное позиционирование†. Так когда оно заработает то? Иксперты создали кучу лисапедов и ни один нормально не работает. Grid/template layout'ы, глядишь, через декаду допишут и, быть может, даже реализуют. Тогда и вернёмся к разговору %)

* таблицы в таблицах в таблицах это то ещё веселье, а уж само поведение таблиц вообще то ещё ололо.

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

*** и тоже фигня, в том числе и с поддержкой.

† просто говно.

Deleted
()
Ответ на: комментарий от KRoN73

Селёдка и апельсины используются в качестве пищи, значит, должны быть единой сущностью?

Ну... в некотором смысле да :)

Xellos ★★★★★
()
Ответ на: комментарий от TDrive

Ну давай расскажи как по другому добавить метки на карту... в JSON вторым запросом забрать? И кому нужен этот огород?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Смогу конечно, но почему бы также не определять на сервере что поле было оставлено пустым?

Если не передалось что on значит off.

TDrive ★★★★★
()
Ответ на: комментарий от Xellos

Ок. Может тогда вообще откажемся от генерации на сервере? Отправим клиенту шаблон и все данные будем уже вхерачивать в него js'ом, а забирать он будет все это в JSONе отдельными запросами. Ну и что, что сайт еле шевелится на 4 котлах с 16Гб оперативы. Это ведь не проблема. Зато у нас все правильно.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

селектор .classname*{}

Извращенец. Also, *[class^='classname'] хочешь ты. Либо, если у тебя значения, разделённые '-', *[class|='classname']. Просто подстрока *[class*='classname'].

Deleted
()
Ответ на: комментарий от Xellos

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

Вот с этим, как раз, фигня. Как только я начал делать (условно) третью по счёту форму, я сразу разделил логику описания полей объекта, для которого создаётся форма и генераторы элементов форм. С тех пор прошло уже лет 10, я иногда в шпаргалку подглядываю, когда приходится, таки, в каком-то стороннем продукте с формой ковыряться. Потому что в своих больше такой низкоуровневой работой не страдаю. Надо поменять input text на textarea? Я меняю в модели тип свойства объекта и во всех использующих его формах изменение произойдёт автоматически. Поменялся свободный ввод на выбор фиксированного значения? Я указываю соответствующий тип свойства в модели и дополнительно указывают класс, из которого брать список элементов. Опаньки, во всех админках уже стоит select. Список стал слишком большой, в 1000 элементов, долго грузится и выбирать неудобно? Иду в Гугл, ищу варианты плагинов к jQuery с поиском по мере набора, пишу класс, генерирующий такой виджет в рамках фреймворка и снова просто меняю тип свойства в модели, уже на использование нового нестандартного виджета в форме админки.

Программист должен быть ленив. Если что-то начинает утомлять или раздражать — значит что-то он делает не так. В том числе, может быть, не своим делом занимается.

KRoN73 ★★★★★
()
Ответ на: комментарий от funeralismatic

#define работает, милейший. Костыли, написанные через задницу, тоже работают. Либо ты пишешь только hello world'ы :)

Deleted
()
Ответ на: комментарий от Suntechnic

Ну давай расскажи как по другому добавить метки на карту... в JSON вторым запросом забрать? И кому нужен этот огород?

Тем кто потом будет читать твой код. К тому же карты как правило динамические и аякса там и так хватает.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Если не передалось что on значит off.

Очевидно я так и делаю. Но почему это же ты не предлагаешь с text например?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Ну и что, что сайт еле шевелится на 4 котлах с 16Гб оперативы. Это ведь не проблема. Зато у нас все правильно.

Скорость работы сайта важна но возможность его поддержки и развития важна не меньше.

TDrive ★★★★★
()
Ответ на: комментарий от thesis

В твоем костыле, кмк, самое ценное это свойство 'required', которое неплохо было бы вынести в хтмл, но не вынесли, гады.

А ты попробуй, лол. Уже оно там есть и работает. <input type='text' required='required'/>, например. Ну или просто required, если у тебя просто HTML, без XML'а.

Deleted
()
Ответ на: комментарий от Suntechnic

Да elsif по хорошему и в пэхе не нужен - для этих целей есть swith.

Ага, «if по-хорошему не нужен, для этих целей есть while».

elseif и switch — это семантически разные конструкции, и хотя switch можно сделать на elseif (но не elseif на switch в общем случае), логики их применения разная.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Надо поменять input text на textarea? Я меняю в модели тип свойства объекта и во всех использующих его формах изменение произойдёт автоматически.

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

$tOpen = '<input type="'.$arDes['type'].'"'.$tAttrs.' name="'.$name.'"';
        $tValue = ' value="'.$arDes['value'].'"';
        $tClose = '/>';
        switch ($arDes['type']) {
            case 'checkbox':
                if ($arDes['state'] == 'on'
                        || $arDes['value'] == 'on') {
                    $checked = ' checked';
                } else {
                    $checked = '';
                }
                $result = $tOpen.$checked.$required.$tClose;
                break;
            case 'radio':
                if ($arDes['state'] == 'on') {
                    $value = ' checked';
                } else {
                    $value = '';
                }
            case 'hidden':
            case 'text':
            case 'password':
            case 'email':
            case 'tel':
            case 'number':
            case 'url':
            case 'date':
            case 'datetime':
            case 'datetime-local':
            case 'time':
            case 'week':
            case 'button':
            case 'reset':
            case 'submit':
                $result = $tOpen.$tValue.$checked.$required.$tClose;
                break;
            case 'select':
                $tOpen = '<select'.$tAttrs.' name="'.$name.'"'.$required.'>';
                $tOptions = '';
                $tClose = '</select>';
                foreach ($arDes['options'] as $val=>$label) {
                    if ($val == $arDes['value']) {
                        $tOptions.= '<option value="'.$val.'" selected>'.$label.'</option>';
                    } else {
                        $tOptions.= '<option value="'.$val.'">'.$label.'</option>';
                    }
                }
                $result = $tOpen.$tOptions.$tClose;
                break;
            case 'textarea':
                $tOpen = '<textarea'.$tAttrs.' name="'.$name.'"'.$required.'>';
                $tClose = '</textarea>';
                $result = $tOpen.$arDes['value'].$tClose;
                break;
			case 'file':
				$result = $tOpen.$checked.$required.$tClose;
                break;
        }
Я вижу что это говно, но не знаю как его улучшить.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Очевидно я так и делаю. Но почему это же ты не предлагаешь с text например?

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

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Даже сейчас некоторые умудряются генерировать код js на пхп.

Я генерирую. Например, чтобы передать в JS переменные с сервера :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Deleted

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

Ну тут только две серьзеных затыки - выравнивание по вертикали и отступы между инлайнами в строке. Если бы был способ легко схлопнуть отступы в 0 и какое-нибудь свойство типа vertical-align в css все бы было нормально.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Посмотри в сторону jsrender - может он тебя спасёт? Меня год назад сильно спас.

Xellos ★★★★★
()
Ответ на: комментарий от thesis

Кстати, сноски будут. В CSS4 что ли. Что касается колонтитулов, вроде бы они только для печати есть. А работают ли где это уже и не знаю.

Deleted
()
Ответ на: комментарий от Xellos

Ну я грешен, у меня случаются сгенерированные вставки <script> :)

У меня — весьма активно. Если я указываю в модели использование нестандартных полей в формах (тот же select2 для поиска по мере ввода, теги всякие и т.п.), то я не должен заботиться ещё и о том, какие там JS подключать. Этим фреймворк занимается, «machines should work; people should think».

Соответственно, каждый компонент фреймворка может засунуть в параметры рендерера всякие JS-on-ready и шаблонизатор засунет их в конец шаблона перед выдачей результата.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Надо поменять input text на textarea? Я меняю в модели тип свойства объекта и во всех использующих его формах изменение произойдёт автоматически

Ну да.

Программист должен быть ленив

Это перл-программист должен быть ленив. А php-программист должен быть трудолюбив!

Xellos ★★★★★
()
Ответ на: комментарий от TDrive

А вот когда сам js код генерируют c помошью пхп потому что в js нету инклудов

Есть же :) Можно тупо через write('<script...'), можно через jQuery :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Xellos

Ну вообще-то приличные люди так и делают :)

Это замечательно. И я видел кучу вещей так сделанных. Удручает только то, что некоторые приличные люди уж очень плохо в этом всем разбираются. Был к примеру такой магазин Юлмарт... потом им приличные люди так переделали сайт - для меня теперь этого магазина нет. Хотя на вконтактик не жалуюсь. Нет.

Suntechnic ★★★★★
() автор топика

избавив от всего этого хлама типа select, textarea, checkbox(value) и прочего сказочного поноса

Что за бред я читаю?

vurdalak ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.