логин: 
<< предыдущая заметкаследующая заметка >>
27 января 2011
Пост ненависти ко всем JavaScript-мудакам мира

Я ненавижу фреймворки. Фреймворки — уебищное изобретение, созданное для того, чтобы новички смогли побыстрее сваять себе домашнюю страничку с выплывающим окошечком. Не надо мне пиздеть, что фреймворки «облегчают разработку сайта и сокращают время». Вы занимаетесь говнокодерством, если вам нужно сократить время. Давайте я буду в свои книги вставлять по 40 страниц из Библии или Гомера и объяснять, что мне просто было лень возиться, когда уже есть хорошая отлаженная реализация нужного эпизода.

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

Но ведь и этот ебаный lightbox, хоть и занимает мег в дебильных скриптах, он тоже сам по себе работать не способен. Потому что его дебильные разработчики зачем-то использовали фреймворк prototype.js Который вообще непонятно зачем им был нужен, но они тащат за собой и его. Ну хуй с вами, кретины безрукие, тащите за собой хоть миллион фреймворков, которые помогут вам закрыть скобки или расставить пробелы или напечатать «hello world» или что там у вас никак своими руками не удается без «популярных» библиотек на сотни килобайт. Мне-то, казалось бы, какое дело?

Оказывается, дело есть. Пишем на JavaScript простенькую фразу: var massiv=['A','B']; Как вы думаете, что теперь содержит наш массив? Два элемента, буквы А и Б? Хуй там! Поскольку на странице рядом присутствовал некий фреймворк prototype.js на 200 кил, теперь любой массив содержит неслыханные килобайты говна. Вот теперь полное содержание нашего массива massiv:

[показать спрятанное]
toJSON=function () {

var results = [];

this.each(function (object) {var value = Object.toJSON(object);if (!Object.isUndefined(value)) {results.push(value);}});

return "[" + results.join(", ") + "]";
}
clone=function () {

return [].concat(this);
}
intersect=function (array) {

return this.uniq().findAll(function (item) {return array.detect(function (value) {return item === value;});});
}
uniq=function (sorted) {

return this.inject([], function (array, value, index) {if (0 == index || (sorted ? array.last() != value : !array.include(value))) {array.push(value);}return array;});
}
without=function () {

var values = $A(arguments);

return this.select(function (value) {return !values.include(value);});
}
flatten=function () {

return this.inject([], function (array, value) {return array.concat(Object.isArray(value) ? value.flatten() : [value]);});
}
compact=function () {

return this.select(function (value) {return value != null;});
}
last=function () {

return this[this.length — 1];
}
first=function () {

return this[0];
}
clear=function () {

this.length = 0;

return this;
}
_each=function forEach() {

[native code]
}
_reverse=function reverse() {

[native code]
}
entries=function () {

return this.map();
}
member=function (object) {

if (Object.isFunction(this.indexOf)) {

if (this.indexOf(object) != -1) {

return true;

}

}

var found = false;

this.each(function (value) {if (value == object) {found = true;throw $break;}});

return found;
}
select=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (iterator(value, index)) {results.push(value);}});

return results;
}
find=function (iterator, context) {

iterator = iterator.bind(context);

var result;

this.each(function (value, index) {if (iterator(value, index)) {result = value;throw $break;}});

return result;
}
inspect=function () {

return "[" + this.map(Object.inspect).join(", ") + "]";
}
size=function () {

return this.length;
}
zip=function () {

var iterator = Prototype.K, args = $A(arguments);

if (Object.isFunction(args.last())) {

iterator = args.pop();

}

var collections = [this].concat(args).map($A);

return this.map(function (value, index) {return iterator(collections.pluck(index));});
}
toArray=function () {

return [].concat(this);
}
sortBy=function (iterator, context) {

iterator = iterator.bind(context);

return this.map(function (value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function (left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck(«value»);
}
reject=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (!iterator(value, index)) {results.push(value);}});

return results;
}
pluck=function (property) {

var results = [];

this.each(function (value) {results.push(value[property]);});

return results;
}
partition=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var trues = [], falses = [];

this.each(function (value, index) {(iterator(value, index) ? trues : falses).push(value);});

return [trues, falses];
}
min=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result;

this.each(function (value, index) {value = iterator(value, index);if (result == null || value < result) {result = value;}});

return result;
}
max=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result;

this.each(function (value, index) {value = iterator(value, index);if (result == null || value >= result) {result = value;}});

return result;
}
invoke=function (method) {

var args = $A(arguments).slice(1);

return this.map(function (value) {return value[method].apply(value, args);});
}
inject=function (memo, iterator, context) {

iterator = iterator.bind(context);

this.each(function (value, index) {memo = iterator(memo, value, index);});

return memo;
}
inGroupsOf=function (number, fillWith) {

fillWith = Object.isUndefined(fillWith) ? null : fillWith;

return this.eachSlice(number, function (slice) {while (slice.length < number) {slice.push(fillWith);}return slice;});
}
include=function (object) {

if (Object.isFunction(this.indexOf)) {

if (this.indexOf(object) != -1) {

return true;

}

}

var found = false;

this.each(function (value) {if (value == object) {found = true;throw $break;}});

return found;
}
grep=function (filter, iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var results = [];

if (Object.isString(filter)) {

filter = new RegExp(filter);

}

this.each(function (value, index) {if (filter.match(value)) {results.push(iterator(value, index));}});

return results;
}
findAll=function (iterator, context) {

iterator = iterator.bind(context);

var results = [];

this.each(function (value, index) {if (iterator(value, index)) {results.push(value);}});

return results;
}
detect=function (iterator, context) {

iterator = iterator.bind(context);

var result;

this.each(function (value, index) {if (iterator(value, index)) {result = value;throw $break;}});

return result;
}
collect=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var results = [];

this.each(function (value, index) {results.push(iterator(value, index));});

return results;
}
any=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result = false;

this.each(function (value, index) {if ((result = !!iterator(value, index))) {throw $break;}});

return result;
}
all=function (iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var result = true;

this.each(function (value, index) {result = result && !!iterator(value, index);if (!result) {throw $break;}});

return result;
}
eachSlice=function (number, iterator, context) {

iterator = iterator ? iterator.bind(context) : Prototype.K;

var index = — number, slices = [], array = this.toArray();

while ((index += number) < array.length) {

slices.push(array.slice(index, index + number));

}

return slices.collect(iterator, context);
}
each=function (iterator, context) {

var index = 0;

iterator = iterator.bind(context);

try {

this._each(function (value) {iterator(value, index++);});

} catch (e) {

if (e != $break) {

throw e;

}

}

return this;
}
1=B
0=A



Что это за немыслимая хуйня?!! Почему наши буквы А и Б где-то в жопе, а массив забит под завязку запредельным количеством каких-то сраных говнофункций?! Это все сделал «присутствующий рядом» prototype.js. Разумеется, если вы начнете работать с элементами своего массива как с буквами (а вы ничего другого и не ждете — сами же создали массив с двумя буквами), то на первом же элементе-функции все полетит к ебеням. А спасибо надо сказать говнокодерам, которые для вывода несчастной фотки по центру экрана притащили в код кучу сраных чемоданов с говном, которое имеет наглость вторгаться теперь в любые процессы и срать веером.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Linux Ubuntu Firefox
 Москва
0
1
Угу... это все JS -- прототипно-ориентированный язык, позволяющий напихать всего чего угодно в самый базовый класс. Вот и пихают, удобно же ж.
Windows
 Киев
9
0
lesha (#437416)
Ну вообще-то это те основы JS, про которые мало кто задумывается. Например, о том что массивов в JS не существует. Есть только объекты. Все что есть - это объекты.
Кроме того это язык, основанный на прототипах. Т.е можно динамически расширить все объекты чем угодно - функциями или свойствами и они отобразатся во все порожденные из них. Не добавятся, а отобразятся по дереву (т.е будут только в одном месте, а не в каждом объекте своя копия).

Но massiv[1] и massiv[0] будут выдавать ровно те же значения как и раньше. Или надо for in ?

Цитата:
------------
Например пусть объект кролик "rabbit" наследует от объекта животное "animal".

Ссылка [[prototype]] работает так:

1. Любое запрошенное свойство ищется сначала в rabbit
2. Если свойство там не найдено, то оно ищется в rabbit.[[prototype]], т.е в animal

Благодаря поиску по прототипу получается, что все функции и переменные, которые были в animal, доступны и в rabbit.
------------
Windows
 Киев
1
0
lesha (#437416)
Ссылка на страницу, откуда цитата
http://javascript.ru/tutorial/object/inheritance

там есть поясняющие картинки
Windows Firefox
 Европа
2
0
lleo.me/[email protected]Лэн
По-хорошему надо при итерировании объекта вызывать hasOwnProperty, тогда всё будет в норме. Ну и да, for(var i=0; i _меньше_ massiv.length; i++) alert(massiv[i]); будет работать как раньше.
Linux Firefox
 Москва
1
1
А можно подробнее, что такое hasOwnProperty?

Что касается massiv.length - он хорошо работает только для массивов. Если же мы имеем хэш massiv={a:'A',b:'B'}, то здесь length начинает давать сбои при изменении числа элементов.

Нет ли какого-то способа очиститься от тлетворного влияния prototype.js прямо на уровне массивов?
Windows Firefox
 Европа
0
0
lleo.me/[email protected]Лэн
Например, такая демка:
http://pastie.org/1503442

Расширяем сперва стандартные Array и Object. Итерируемся обычным способом, видим тот мусор, что мы добавили. Проверяем hasOwnProperty (вернёт true, если свойство явно объявлено в объекте, а не в вышестоящем прототипе) и мусор исчезает.
Linux Firefox
 Москва
1
1
Скопирую-ка сюда:

Array.prototype.x = 5;
Object.prototype.y = 10;

var a = [5,6];
var b = {a:1,b:2};

document.write("Simple iteration: ");

for(var i in a) document.write("a["+i+"]="+a[i]+" ");
for(var i in b) document.write("b["+i+"]="+b[i]+" ");

document.write(" Using hasOwnProperty: ");

for(var i in a) if(a.hasOwnProperty(i)) document.write("a["+i+"]="+a[i]+" ");
for(var i in b) if(b.hasOwnProperty(i)) document.write("b["+i+"]="+b[i]+" ");
Linux Firefox
 Москва
1
1
Кстати, не проще ли делать if(typeof ... != ... ?
Windows Opera
 Харьков
19
3
Gorlum (#408302)
Фреймворки - способ не изобретать велосипед миллиард раз.

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

Вообще, для фреймворков закон Старджона никто не отменял.
Фреймворки - способ задействавать ресурсы небольшого вычислительного центра 90-х для сравнения пары байт неожиданным образом.
Linux Firefox
 Москва
5
4
Знаете, лозунг "нельзя изобретать велосипед" - он конечно классный (хотя тоже спорный), но я заметил, что почему-то его любят произносить чаще всех новички, уже считающие себя профессионалами.

На практике это приводит к тому, что когда подобному деятелю поручают смастерить сумку на колесиках, он сразу покупает 4 горных велосипеда и начинает их крепить скотчем к ящику из ИКЕИ. Получившийся продукт оказывается дико громоздким, разваливающимся на ходу и абсолютно неудобным в использовании. Зато есть повод для гордости: не стал изобретать велосипед, взял готовый.
Лозунг "нельзя изобретать велосипед" - не просто спорный. Если бы велосипед регулярно не изобретали он бы так и остался деревянным и без педалей, каким был изобретен в тысяча восемьсот каком-то там году.
Linux Firefox
 Москва
3
1
Вот совершенно согласен. Нынешние велосипеды почему-то не такие, что были в моем детстве. А те, что были в моем детстве, тоже совсем не такие, как в 19 веке - переднее колесо не в шесть раз больше заднего, и педали не на его оси крепились ;)
Windows Opera
 Харьков
0
0
Gorlum (#408302)
Передергиваете. Велосипед изобрели один раз. Все остальное - усовершенствование один раз придуманной конструкции. Или разусовершенствования, которые сначала казались усовершенствованиями. Или разные реализации. Само изобретение "велосипед" было сделано один раз (для простоты не будем рассматривать случаи "одновременных изобретений" и переоткрытий ранне сделанных, но забытых изобретений). Как только конструкция выходит за пределы парадигмы "велосипеда", она становится чем-то другим. Добавляем мотор - это уже не велосипед, а мопед. Убираем педали и цепь - это уже самокат. И так далее.
Linux Firefox
 Москва
2
2
Интересная логика. Выходит, если я построил двухэтажный шестиместный велосипед-тандем на восьми колесах в форме автобуса - это я занимаюсь ерундой и продолжаю изобретать велосипед. А вот если отломал педали и цепь - вау, я гений, я изобрел новое: самокат.
Windows Opera
 Харьков
6
0
Gorlum (#408302)
По-моему это не беда фреймворков, а беда новичков. Из пушки тоже можно стрелять по воробьям - а смысл?

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

Грубо говоря - есть один lleo, которые каждый раз ныряет в глубины тонкости обработки JS разными браузерами разных версий и в итоге выдает вылизанный и скоростной код. Можно ли кому-то другому пользоваться результатами его труда или каждому, желающему поднять блог надо писать блог с нуля? Если ответ будет "можно использовать труд lleo", то сразу возникает вопрос - почему нельзя использовать труд десятка таких lleo, которые написали фреймворк? Ситуации ведь абсолютно идентичные! Кому-то будет не нужно 90% кода и для него все рюшечки и завитки, которые составляют фишки движка будут "колесами от горного велосипеда". Значит ли это, что lleo написал гавно? Нет, это всего лишь значит, что для нужд данного конкретного пользователя подойдет более простой движок. Точно так же и с фреймворками.

Тут я нарочно опускаю вопрос фреймворков (и блогов), созданных с принципиальной ошибкой в архитектуре. Более того, применяя неправильный фреймворк для решения задач, на которые он не расчитан, можно легко получить оценку "фреймворк - гавно с ошибками в архитектуре и ДНК программистов".
Windows Firefox
0
0
Изобретение велосипеда - основа прогресса!

И если бы кто-то не пожелал в свое время еще раз изобрести счеты, только более быстрые, то наш спор был бы невозможен за отсутствием предмета спора.
Всеми руками подписываюсь под каждым словом. :-)
Но причем тут собственно JavaScript? Просто к слову пришлось? В общем виде описанный подход характерен практически для любого современного программного продукта. Изящным программным решением сегодня считается уничтожение мух атомными боеголовками.
Windows Firefox
4
1
Propir (#572815)
Леонид, у вас машина на 90% сделана по шаблону. А вы сорок страниц из Библии.
Windows Safari Chrome
1
2
япростоговно (#704582)
Леонид, у Вас вроде психологическое образование, а про перенос не помните.
Linux Safari Chrome
6
0
Кир (#421500)
„К несчастью, то ж бывает у людей:
Как ни полезна вещь,- цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.“ http://www.google.com.ua/search?aq=f&amp;sourceid=chrome[...] ©
Windows Safari Chrome
6
1
Тогда почему бы не отказаться от всех фреймворков? Вы ведь используете другие библиотеки для своих движков? Или, может, Вы написали все сами, начиная с машинных кодов? :)
Linux Firefox
 Москва
2
3
Я использую 1 (одну) библиотеку для своих движков - крошечную ajax-процедуру JsHttpRequest.js

Все остальное я делаю с нуля или полностью переписываю под свои задачи своими руками.
Linux Ubuntu Firefox
0
0
Adamos (#407407)
Для вас это естественно, поскольку ваш интерес - сделать то, чего раньше не было. Здесь фреймворки, навязывающие исхоженные пути, только мешают.
Но не будете же вы советовать программисту писать с нуля сайт, который практически ничем не отличается от сотни аналогичных сайтов? Да еще и заказчик ориентируется не на "яйца ручной работы", а на "дешевую штамповку" - по ценам, естественно, и по скорости, а не по претензиям. В этом случае выбор "использовать готовые решения или нет" в принципе неуместен.
Linux Firefox
 Москва
4
0
Но я не запрещаю никому пользоваться фреймворками (или вставлять свои книги по 40 страниц из Гомера или Библии). Просто я их ненавижу. Имею право?
Linux Ubuntu Firefox
2
0
Adamos (#407407)
Сравните свою тихую ненависть с лютой злобой того, кто думает о фреймворках то же самое, но вынужден их использовать каждый день...
"А Леша хорошо устроился - и пожрет, и будет выглядеть высокоморальным человеком!"
Mac Safari
14
1
bukov_net (tonsky)
В Джаваскрипте, действительно, много подводных камней. Но беда ли это создателей фреймворка, которые про них знают и работают с их учетом и с учетом широко принятых практик, или это проблема программиста, который на них впервые натолкнулся и теперь проклинает в своем незнании весь остальной мир?

То есть, мне понятна ваша точка зрения: я к вам не лезу, и вы меня не трогайте. Имеете право. Но имейте же смелость заявить: мой движок ни с чем не совместим, и клал я на ваше желание делать красиво. Ведь по факту это так. Вы просто явно это как одну из фич движка декларируйте, и в мире наступит покой.
Linux Firefox
 Москва
3
2
Я, между прочим, специально не занимал переменные типа $, чтобы движок был для кого-то при желании совместим с prototype и jquery. Но срать-то в обратку зачем?
Windows Firefox
 Европа
2
1
lleo.me/[email protected]Лэн
На тему расширения встроенных объектов prototype ругают далеко не первый год. Я думаю, потому он и уступил в популярности жоквери. Последняя таким не страдает. И, кстати, может легко сняться с $ с помощью метода noConflict, так что необязательно $ держать свободным :-)

Сам страшно не люблю новые зависимости в любом проекте, но подхожу к этому расчётливо: иногда выгода от новой библиотеки превышает минусы. Если же из килотонной библиотеки нужно реально 5% кода, то пусть она идёт лесом, сам напишу.
Linux Firefox
 Москва
1
1
Расскажите подробней, как это снять?
Windows Firefox
 Европа
0
0
lleo.me/[email protected]Лэн
Как освободить $ в жоквери:
http://p.tl/Xcvc
Linux Firefox
 Москва
1
2
Господи, это здесь вообще при чем?!
Linux Firefox
 Москва
0
1
Я думал, вы о protoptype...

Нет, имя $ я не собираюсь задействовать - пугает оно меня, если честно. Так что пусть тем, кто захочет встраивать в движок jQuery, жизнь будет проще.
чемоданы (prototype и jQu*ry) немного меняют саму "парадигму". Вместо привычной работы в стиле С, приходится работать с объектами и методами. для прохождения по массиву у нас есть, к примеру "our_array.each( callback )" - достаточно просто и понятно. Нельзя ненавидеть все фреймворки, часто они ускоряют процесс (чего стоил хотя-бы поиск объекта по пути а-ля CSS). Если выбрал фреймворк - играй по его правилам.
В хобби-проектах всё меня интересующее делаю с нуля, но там скорость разработки не важна, и приёмочное тестирование не запланировано на слудущую недел
Linux Firefox
 Москва
4
4
Если фреймфорки так всё ускоряют, почему же сайты, сделанные на них, такие медленные и неповоротливые?
Windows Safari Chrome
1
0
Обычно это связано либо с тем, что программист даже не пытается оптимизировать код (в этом случае неповоротливым будет и код на pure JS, хоть и не так сильно), либо с использованием ещё десятка плагинов и прочих библиотек (типа того же lightbox'а). В первом случае - это банальное неумение программировать, во втором - разумная плата за те навороты, которые хочет заказчик. Конечно, самое страшное, когда первое сочетается со вторым, но тут уж...

Если не верите, просто попробуйте открыть пустую страницу с одним jQu*ry, загружаемым через google cdn - инициализируется он очень быстро, и в кеше уже наверняка есть =).
Windows Firefox
 Европа
0
0
lleo.me/[email protected]Лэн
А в дебаггере пробовали по шагам проходить этот самый .each(callback)? :-) С обычным for in всё работает прекрасно, а тут вы сперва зайдёте в функцию фреймворка в другом файле (вам повезло, если фреймворк не сжат!), а оттуда уже на каждой итерации будете переходить в callback. Страшно бесит, надо сказать. Такие вещи как each язык должен делать сам.
Windows Safari Chrome
17
4
Лео, прости конечно. Но из тебя программист, как из дерьма пуля. Не может разработчик ПО (веб или любого другого) не понимать пользы и назначения фреймворков.
Linux Firefox
 Москва
5
18
Однако мне, в отличие от "профессионалов jquery" есть, что показать: то, что я делаю (в одиночку и на досуге), отлично работает, служит мне и людям долгие годы и нередко является примером для передираний и заимствований.

А вот что сделали вы в своей жизни, профессиональная пуля из недерьма? Киньте ссылку на ваши великие проекты.
Windows Opera
 Харьков
7
3
Gorlum (#408302)
Толсто троллите. "Сперва добейся".

Я извиняюсь, а судить о вкусе блюда можно только будучи профессиональным поваром с кучей мишленовских звезд - или все-таки достаточно его просто съесть? Вообще - судить о полезности чего-либо можно будучи только разработчиком этого чего-либо? Кстати, вы только что явно высказали взгляды, результатом которых являются те самые говнофреймворки и говноинтерфейсы. Ведь с полным осознанием собственной правоты (поскольку такие же взгляды демонстрирует хозяин журнала) сюда сейчас может прийти автор prototype и начать рассказывать, что ему, в отличии от lleo есть что показать: ферймворк, который отлично работает, служит ему и миллионам пользователей долгие годы и нередко является примером для передираний и заимствований. А вот что сделал lleo? Пусть он кинет ссылку на свои великие фреймворки. Ну или хотя бы на сравнимые по популярности проекты.
Windows Safari Chrome
9
0
Андрей (#423598)
"Если фреймфорки так всё ускоряют, почему же сайты, сделанные на них, такие медленные и неповоротливые?"
Эх, написал ответ, а ваш великолепный самописный фильтр подвис на слове j+Query (без знака +) и перестал как-нибудь реагировать. Замечательный пример, почему написанное Вами на досуге решение не такое уж и хорошее, как Вы утверждаете. А насчет быстродействия - может быть, Вы пользуетесь gmail? Там, наряду с другими фрейморками, используется и так нелюбимый Вами джейКвери. И быстродействие от этого не страдает, как ни удивительно :) Так что, дело не только и не столько в данном инструменте, а и в умении его применять.
Linux Firefox
 Москва
7
13
Бедняжка... :))) Фильтр и должен повисать на слове "jQuery" - я так его настроил год назад после очередного флейма. Это слово в полный рост имею право писать здесь только я. Сюрприз? ;)

Что касается gmail, вы будете потрясены, но я им не пользуюсь - он тоже достаточно неповоротлив. У меня свой email на ахе, который старше вашего Гугля года на 4, и он не тормозит и не подвисает.
Windows
8
1
[email protected]Леша (lesha)
Фреймворки бывают разные. Как и инструменты в жизни. Если кто-то молотком шуруп заколотит - не вина молотка (фреймворка) :)

Хорошие фреймворки позволяют включать/скачивать только то, что лично тебе надо. Т.е есть модули, плагины, подгрузка по требованию. Примерно как в этом движке "штука". Кстати, этот движек тоже в своем роде фреймворк - для модулей.

Самое главное что они дают - опыт, сохраненный в коде. Ни один человек не будет сам тестить свой скрипт в таком списке броузеров как у них:
* Firefox 2.0+
* Internet Explorer 6+
* Safari 3+
* Opera 9+
* Chrome 1+

Фреймворк ускоряет в первую очередь не работу программы. Он ускоряет разработку ПО. Да оно получается раздутое, но время программиста сейчас дороже железа. :)

Да и вообще зачем личное время тратить на обработку напильником, если в это время можно посмотреть кино, книгу почитать или еще чем полезным заняться.

Ну и сейчас авторы фреймворков все-таки думают что админ/програмер сайта понимает что делает. Т.е если он добавил фреймворк, то понимает к чему это приводит и как повлияет на остальное. Но.. очевидно это уже не так.
> Фреймворк ускоряет в первую очередь не работу программы.
> Он ускоряет разработку ПО. Да оно получается раздутое,
> но время программиста сейчас дороже железа. :)

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

> Ну и сейчас авторы фреймворков все-таки думают
> что админ/програмер сайта понимает что делает.

И очень зря - использование фреймворков - первый принак воли к безмыслию. :-)
Windows Opera
 Харьков
4
1
Gorlum (#408302)
Ну хоть стул - стул, на котором вы сидите, вы сами сделали?
«Ни один человек не будет сам тестить свой скрипт в таком списке броузеров...» — вы здесь дважды ошибаетесь. Я тестирую, плюс тестировать будут тестировщики в моей компании. А вот если в описании фреймворка написано, что он «протестирован» и «совместим» это имеет веса чуть менее чем нисколько. Убеждался несколько раз (это особенно хорошо видно на самом печальном браузере).
Допиливать имеющиеся фреймворки — долго и противно, но на стадии прототипирования они могут сильно ускорить процесс.
Windows Safari Chrome
11
0
lleo.me/[email protected]Антон
Леонид, товарищ Sith, конечно, излишне категоричен, но доля истины в его рассуждениях безусловно есть :)

Я не возьмусь рассуждать, какой из вас программист, хотя интерфейсник из вас, на мой вкус, достаточно посредственный, судя по интерфейсу блога, который достаточно очевиден, но требует тренированного зрения, некоторого привыкания, терпения к ужасному виду и оптимизма по поводу доброты внутри :)

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

Во-первых, есть задачи, которые требуют, чтобы было "красиво". То есть, "аяксненько", "прозрачненько", "анимированненько" и в таком духе "вебдванольненько". И частенько это получается неплохо по работоспособности, если быть готовым запускать это на "мощном и современном" компе с таким званием хотя бы 5-тилетней давности. И именно фреймворки делают разработку таких красивостей лёгкой и непринуждённой. Например, Яндекс jКвери использует вовсю. Да и многие другие известные ресурсы.

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

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

В-четвёртых, ни в коем случае, по-моему, не надо кичиться собственными достижениями на ниве программирования на JS без фреймворков, т.к. это на данный момент больше смахивает на неприятие нового, чем на желание оптимизировать :) Лично я по своей основной работе вынужден обходиться без них в большинстве случаев, т.к. декларируемые технические требования проекта, который я разрабатываю, начинаются с IE 5.01, а мой любимый jКвери поддерживает минимум IE 6 (будь этот IE тыщу раз неладен...). И я всё пишу "голым" JS-ом. И не вижу в этом никакой крутизны, т.к. зачастую получается негибко (например, иногда бывает, что поменял структура DOM-а - поменял JS) и громоздко по коду, а значит - нечитабельно, что для команды разработчиков весьма плохо. Это можно обходить, но тогда получается ещё более громоздко и в разы дольше. А с jКвери всё проще, быстрее, более гибко и более понятно для стороннего человека при прочтении.

Так что, Леонид, вы зря не любите фреймворки. Очевидно, вы просто не умеете их готовить :)
Linux Firefox
 Москва
3
8
Вряд ли человек, который не видит разницу между интерфейсом и дизайном интерфейса, имеет право рассуждать об этим вещах ;)
FreeBSD Safari
0
0
фреймворки, как в javascript, так и в остальных языках (в том числе компилируемых), горячо любимы нубами за "простоту", но на деле дейсвительно в 90% случаев негативные эмоции вызывают
Linux
0
0
turaru (#420758)
Лео, не сдерживайтесь пожалуйста, скажите прямо, как вы ДЕЙСТВИТЕЛЬНО относитесь к фреймворкам.
Linux Firefox
 Москва
5
3
Я просто не люблю попсу как класс: дешевое средство для удобного удовлетворения наиболее типичных потребностей самых широких слоев населения.

И не важно, в чем проявляется попса: в музыке, в технике или в программировании.
Windows Opera
 Харьков
4
3
Gorlum (#408302)
Лео, скажите, а зачем вы тогда поставили в квартиру кондиционер?! Это же "попса"! Вам надо было найти какую-нибудь уникальную систему охлаждения воздуха и использовать именно её!

Или как в анегдоте... Мнэ... Если цензурно: "Ем и плачу, ем и плачу..."
Windows Safari Chrome
4
0
lleo.me/[email protected]Антон
Дизайн интерфейса, Леонид, напрямую на интерфейс влияет. Например:
- ссылки "следующая/предыдущая заметка" мелким шрифтом затрудняют их понимание (привыкнуть быстро, найти с плохим зрением - не очень);
- на широком экране в большом разрешении длиннющие строчки основного текстового блока (да и комментариев) читать гораздо труднее, чем было бы, если б эта ширина была более-менее строго задана, скажем, в сантиметрах экрана хотя бы на ширину листа А4;
- микроскопическая ссылка "штука" над полем текста добавляемого комментария, возможно, и призвана быть не найденной, но если нет - она ещё больше ломает глаза, чем ссылки "предыдущая/следующая".

Можно ещё поискать и попридираться, но смысл, я думаю, понятен.

Я всё надеюсь, что вам как-нибудь придёт на досуге мысль сделать редизайн блога по избранным пожеланиям читателей :) Было бы интересно и полезно, ИМХО :)
Linux Firefox
 Москва
2
3
Вы ебанулись. Откройте *.css и напишите себе любой другой стиль, фон, кегль и т.п. Как это сделал, скажем, Тема Павлов. Какое это отношение имеет к программированию, движку и его возможностям? Рецензируем программный код по размеру фонтов на экране?

Дизайн - не мое призвание, я никогда не занимался дизайном и не собираюсь копаться в CSS - это прекрасно сделают другие люди, когда я подниму binoniq и разрешу пользовательское редактирование стилей. А я, возможно, позаимствую тот стиль, который мне больше понравится.
Windows Safari Chrome
7
0
lleo.me/[email protected]Антон
Тем не менее, несмотря на все доводы в пользу фреймворков, я могу понять страсть Лео к самостоятельному написанию - он же писатель! Это многое может объяснить! :) Если уж даже стихи в школе Лео писал для себя сам, то JS-код чей-то чужой брать - это же выше любых этических норм! И как только на JsHttpRequest-то Лео сам с собой согласился - ума не приложу...

:D
Linux Firefox
 Москва
2
1
Мне его показал Созидатель много лет назад, так и прижилось. Впрочем, я все равно собираюсь его переписать в будущем - он не совсем отвечает именно моим задачам, в нем много лишнего, а кое-чего не хватает.

Кроме того, я обычно использую не ajax, а majax - свою надстройку, которая работает не с данными, а с управляющими кодами. А для этих задач существующая библиотека далеко не идеальна.
Windows Safari Chrome
0
0
lleo.me/[email protected]Антон
> Вы ебанулись. Откройте *.css и напишите себе любой другой стиль, фон, кегль и т.п.

> ...когда я подниму binoniq и разрешу пользовательское редактирование стилей


А до этого момента блог в плюс-минус-нынешнем виде сколько уже просуществовал? Вот-вот. Долго :)

Я понял, что дизайн - не ваше призвание. Это видно :) Но ведь можно было бы давно попросить кого-нибудь квалифицированно помочь, например. Был бы у вас набор простых и совершенно базовых стилей, с которыми можно было бы уже самостоятельно творить почти всё, что угодно, и получалось бы более-менее симпатично. Потому что не хватает, в основном, именно их. А возлагать эту работу на пользователя - хорошо, но не все умеют, как это ни странно. И что ещё интереснее, не все и не всегда хотят :) Что-то симпатичное хорошо бы и по дефолту.

В общем, дизайн - дело личное. Раз я здесь, значит ничего катастрофического в нём уж точно нет, так ведь? :)

Однако фреймворки хаять так рьяно не стоит - они помогают в работе очень часто. Главное - правильное и своевременное применение. А оно зависит от приоритетов проекта. Если приоритет - быстродействие, то особо ими не разыграешься. Если - красота, то без них всё будет долго и мучительно
Linux Firefox
 Москва
3
1
CSS блога мне когда-то написал некто Basmach, с тех пор я туда почти не лазил.

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

Но моя задача - довести до ума движок, который позволит это делать, а не пытаться рвать задницу, чтобы самостоятельно нарисовать в своем блоге такие кнопочки, рамочки и рюшечки, которые я рисовать не умею в силу отсутствия дизайнерского таланта.
Windows Safari Chrome
0
1
япростоговно (#704582)
Снова упомяну колдунскую психологию. Леонид любит искать частные, а большинство программистов любят обобщать. И то и другое имеет свои плюсы и недостатки, но поскольку программистов (читай мужчин, любящих обобщать) значительно больше, то им неприятно разбираться в коде Леонида. Ну и напоследок ахахахАХАХХАхаха убейте меня!
Windows
1
0
[email protected]Леша (lesha)
Про попсу фраза прикольная. Только всегда было не понятно чем она отличается от просто удобных и всеми используемых вещей?

Вот FireFox - попса? При том что в России он обогнал по статистике использования всех остальных уже:
http://gs.statcounter.com/#browser_version-RU-monthly-200912[...]

Даже банальные лестницы в виде ступенек и лифты - попса?
Вот пример альтернативы -
Это тогда не попса?

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

Или тут дело в том что люди рекомендуют и хвалят? Не думаю что тот же молоток кто-то будет знакомым рекламировать - значит он не попса, хотя и очень популярен в быту :))
Linux Firefox
 Москва
2
5
Вы вероятно слышали, что понятие "попса" неразрывно связано с понятием "вкус"?

Но почему-то требуете, чтоб вам положили на стол строгий черно-белый алгоритм.
Windows Opera
 Харьков
2
0
Gorlum (#408302)
Да, естесвтенно. Попса - т.е. "нечто популярное" - это то, что понравилось многим. Молоток - попса. Наверное для забивания гвоздей вы используете микроскоп?
Windows Opera
1
0
Есть прикольная штука, называется JSLint - тулза по проверке качества кода. Так вот он ругается на проход по массиву без использования hasOwnProperty проверки.
Windows Opera
 Харьков
1
1
Gorlum (#408302)
Ответ на коммент Leonid Kaganov от 2011-01-27 20:49

А компьютеры. то! Компьютеры совсем другие! И экраны цветные, и не трубочные, а на богопротивных кристаллах! И процессоры не Z80. И вообще - компьютеры, занимающие меньше комнаты - уже и не компьютеры!

Или вы считаете, что замена деревянной рамы на металлическую, а металлической на углепластиковую равно как и замена ламп на транзисторы, а транзисторы - на микросхемы - это уже "изобретние заново"?
Почему собственно заново?
Изобретение - да, заново - нет.
Кто сказал что изобретение это единственный квант времени в который рождается что-то новое? Это возобновляемый процесс.
А в применении к фреймворкам - если бы каждый программсит был озабочен изобретением или, если угодно, совершенствованием существующих фреймворков, их использование сократилось бы на порядки. Ведь для того что-бы что-то изобретать заново нужно разобраться в уже изобретенном, а если эта работа сделана сразу станет очевидным что для реализации необходимых функций фреймворк избыточен и нет никакого разумного повода тащить к себе "кучу сраных чемоданов с говном" (C) Леонид Каганов.
Windows Opera
 Харьков
3
1
Gorlum (#408302)
Я продолжу мысль - количество написанных продуктов сократилось бы на два порядка. Потому что вместо того, что бы использовать готовые наработки, каждый программист занялся бы изобретением своего велосипеда.

У меня создается ощущение, что вы не пользовались нормальными фреймворками. Для пользования нормальным фреймворком нужно достаточно прочитать документацию и разобраться до уровня API фреймворка. Любой другой подход сразу вызывает вопрос: вот, у вас в заголовке поста Windows IE стоит. Я понимаю, что поскольку вы - не пустобрех, то перед тем, как использовать IE и тем более - Windows - вы прочитали весь исходный код обоих продуктов и полностью разобрались как они работают? Или вы все-таки пустобрех и цена всем вашим словам - меньше копейки? Или вдруг включилось двоемыслие и при использовании фреймворка "разбираться нада", а при использовании абсолютно любого другого продукта - "разбираться нинада"?
Windows IE сугубо вынужденная мера. Мне чаще приходится общаться с клиент-банком (который ничего иного не воспринимает) чем с блогом Леонида. Но это так, к слову. Однако то обстоятельство что вволю изучать исходники вышеупомянутых продуктов я не могу не означает что из-за этого я не стану изучать/модифицировать вообще никакие исходники.
Windows Opera
 Харьков
0
3
Gorlum (#408302)
Выбирайте - двоемыслие или пустозвонство. Вы ведь пользуетесь продуктом, исходники которого не изучили досконально.

Или может заберете свои слова насчет "разбираться в уже изобретенном для каждого чиха"?

Заранее разъясню логику, что бы не было вопросов. "Изобретение заново" подразумевает все-таки использование какого-то багажа или набора инструментов, изобретенных до вас. Иначе заново прийдется изобретать ВСЕ. Включая математику, письменность и речь. Или вам не приходит в голову, что вы в своей повседневной жизни пользуетесь миллионами "фреймверков", изобретенных до вас?

Кстати, мне непонятно, как "я буду/не буду модифицировать исходники" относится к "я не могу изучить исходники венды". Не можете - не пользуйтесь. Это ведь ваше кредо. "Тотальное изучение". Или - см. параграф 1.
Windows Firefox
0
1
Да-да, куча изобретенных до нас "фреймворков".

И да, я по умолчанию считаю, что человек, не изучивший фреймворк "русский язык" туп и непригоден к писательству.
А человек, не изучивший математику -- нифига не математик.

Вот только я не ожидаю, что писатель досконально разбирается в интегралах по объему. А Вы? См. предложение №1 Вашего комментария.
Windows Opera
 Харьков
0
2
Gorlum (#408302)
Неуважаемый, я что, затронул вашу больную мозоль? К чему вообще был ваш комментарий? Или вы - alladimm, инкогнито? Как ваш комментарий про писателя, который не умеет ничего, соотносится с использованием/неиспользованием готовых продуктов/фреймворков для создания нового? Или вы просто увидели знакомое слово "разобраться" и решили написать все, что думаете по этому поводу, даже не потрудившись вчитаться в контекст? Что ж, бывает.
Nokia-E90 Safari
 Москва
2
1
Leonid Kaganov
Дружище, иногда мне кажется, что введение ограничения в 3 комментария в сутки - разумная мера и здесь тоже. Ты слишком много шумишь.
Windows Opera
 Харьков
2
0
Gorlum (#408302)
Все, больше не буду, поскольку не вижу особого смысла.

Пойду лучше возьму с полки вашу книжку и почитаю.
Windows Firefox
5
0
Вообще, мне кажется, этот пост - хороший такой вброс. Более утонченный, чем у Темы (вы все 3,14расы), но тем не менее. Так и подмывает броситься с головой в оправдание фреймворков :) (не всех, правда)

Куда-то пропали кнопки ответа на нужный комментарий..
Стоит оценить комментарий, кнопка ответа появляетя.
Фитча это или баг - не знаю.
Windows Safari Chrome
3
0
Дмитрий (#428467)
че на него накинулись, давай назначение фреймовкаф объяснять. или типа чел написавший такой блог не понимает их назначение. вы еще азбуку здесь расскажите. ну нахлынули на человека эмоции, с кем не бывает. разве вы сами не хотели уебать какому нибудь программисту когда у вас там чего нибудь зависло.
Windows
0
0
lesha (#406942)
Как ни странно - не слышал :)
Спасибо по словам "вкус"+"попса" все замечательно гуглится. Даже разложенное в строгий алгоритм. ;)
Тьма - это не антисвет, а отсутствие света. Или как-то так. И не может быть у человека вкуса сразу во всем. Уж слишком много времени это требует.
Windows Firefox
7
0
Комменты не читал, возможно кто-то это уже сказал до меня.

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

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

Не хочется? Ну тогда не вякай про ненужность фреймворков.

ПыСы: быдлокодеров ненавижу, но пейсателей, обсирающих то, в чём не разбираются, тоже отнюдь не уважаю...
Windows Opera
 Харьков
4
2
Gorlum (#408302)
Ответ на комментарий Leonid Kaganov от 2011-01-28 03:33

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

У... как все запущено... Лео, вы же писатель и на мой взгляд и вкус - хороший писатель. Я не могу поверить, что вы не знаете о том, что аналогия призвана исключительн иллюстрировать мысль. Что расширять аналогии за проводящего - дело некрасивое. Тогда зачем ви троллите?

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

А насчет фреймворков у меня есть два комментария:
1. Я уверен, что вся операционная система и все ПО написано вами с нуля.
2. Я уверен. что весь компьютер, на котором вы работаете, собран вами с нуля. Начиная от добычи кремния и заканчивая свинчивением корпуса, включая всю цепочку нужных инструментов.

Иначе получается явное двоемыслие - использовать готовый продукт "фреймворк" - это моветон, а использовать готовый продукт "ОС" или "компьютер" - нормально. А мне не хочется думать, что вам свойственно двоемыслие.

Я так же, кстати, абсолютно уверен, что все молотки, пассатижи, паяльники, отвертки и прочие "фреймворки" ака инструменты у вас дома так же сделаны вашими руками с нуля - веть использовать готовые "фреймворки" это такое западло!
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай - все едино". © Аркадий и Борис Стругацкие
Windows Opera
 Харьков
1
1
Gorlum (#408302)
Вы можете пояснить смысл своего пассажа в применении к моему комментарию? Потому что имено в данном контексте этот самый смысл ускользает.
Linux Ubuntu
0
0
[email protected]Дмитрий (kastaneda)
Кстати, ты document.querySelector() видел?
Nokia-E90 Safari
 Москва
2
1
Leonid Kaganov
Что это?
Windows IE
4
1
340 (#402306)
надеюсь речь изначально шла только про технически несложный клиентский код на JS, который всегда легко скопипастить?

а то как представлю Леонида, переписывающего заново библиотеки работы с СУБД, изображениями, регулярными выражениями и прочими "поделками из ближайшей ИКЕИ" - так мы завершения проекта никогда не дождемся!

а хотелось бы.
Linux Ubuntu Firefox
2
2
Adamos (#407407)
Речь изначально шла про фреймворки.
Понятно, что рабочие библиотеки - это отвертки. Они выполняют свою задачу. В первую очередь - эффективно, во вторую - универсально (но не в ущерб). Переписать их - это еще уметь надо.
Фреймворки же - это швейцарские ножи. В первую очередь - универсально, во вторую - тормозно, потому что универсально.
При этом больше, чем двумя лезвиями, никто реально не пользуется, и те дико неудобны. Для небанальной и творческой работы просто-таки противопоказаны...
Windows Opera
 Харьков
0
1
Gorlum (#408302)
Еще бы увидеть, чем "фреймворк" отличается от "библиотеки"... От меня, если честно, это тонкое различие ускользает.
Linux Ubuntu Firefox
3
1
Adamos (#407407)
А я не об этом только что написал?
Библиотека - набор инструментов, каждый из которых оптимален, но выполняет одну задачу.
Фреймворк - абстракция, позволяющая вам не заморачиваться с инструментами библиотеки. Вы можете "просто" указать, что здесь должно быть сделано. В удобной для вас форме. То, чего стоит такая абстракция (особенно в языках, не оптимизирующих код до выполнения) и то, как она реализуется (в тех же языках) - и есть две из трех причин ненависти Леонида ;) Третья - как это используют кодеры 8(
Windows Firefox
0
2
Foster (#444409)
Мне показалось, или основная претензия Леонида в том, что включение фреймворка меняет логику работы?
То есть претензия не к идеологии библиотеки как таковой, а к идеологии фреймворка, как хуевой реализации идеологии библиотеки.

А кто начал разговор про изобретение велосипеда или собственную ОС - тупо не въехал в тему.
Windows Opera
 Харьков
0
1
Gorlum (#408302)
Если фреймворк разработан так, что меняет логику работы - кто виноват, что не прочитал инструкцию? Разработчик фреймворка или его пользователь?
Windows Firefox
2
1
Ну, для меня выражение 2+2=4 истинно всегда, и если включение какой-либо библиотеки сделает данное выражение ложным, ДАЖЕ если такое указано в описании библиотеки, то мои эмоции можно будет описать сопоставимо с эмоциями Леонида.

То есть на мой взгляд виноват разработчик библиотеки, а Леонид "попал", так как не от него зависит, использовать ее или нет. N'est-ce pas?
Windows Opera
 Харьков
0
1
Gorlum (#408302)
Э... А ничего, если это будет библиотека работы с разными системами счисления? Например, с троичной?

Может перед тем, как что-то использовать, нужно все-таки прочитать инструкцию?
Windows Firefox
0
1
Foster (#444409)
То есть имеем ДЕСЯТИЧНУЮ (по определению языка) константу в коде, добавляем библиотеку и voila, наша константа неожиданно превращается в ТРОИЧНУЮ?

Пусть такое будет сто тысяч пятьсот раз описано в документации, мое мнение не изменится - это говно.

А для переменных, как вы, надеюсь, понимаете, от смены системы счисления результат не изменяется. И 11(3) = 4(10) без каких либо дополнительных указаний.
Windows Safari Chrome
3
0
>Разумеется, если вы начнете работать с элементами своего массива как с буквами (а вы ничего другого и не ждете — сами же создали массив с двумя буквами), то на первом же элементе-функции все полетит к ебеням.

Леонид, я надеюсь, вы понимаете, что фреймворки всё-таки сделаны для того, чтобы облегчить вам как программисту жизнь. В данном случае, prototype добавляет множество полезных функций, среди которых и нужное вам перечисление массива. Эти функции, вместе с прочим, заметно ускоряют разработку сложного вычислительного кода, поскольку JS в этом мягко скажем неудобен.

Я подозреваю, что prototype умирает именно потому, что заметно тормознее jQ и навешивает много непонятного для начинающих пользоваться фреймворком мусора.

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

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

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

PS Что-то этот комментарий отправляется, однако при обновлении страницы не появляется. Это очередная бага движка?
Linux Firefox
 Москва
2
1
Леонид, я надеюсь, вы понимаете, что фреймворки всё-таки сделаны для того, чтобы облегчить вам как программисту жизнь.

Нет, не понимаю. Разумеется, они придуманы, чтобы облегчить жизнь. Но - жизнь среднего программиста, решающего типичные распространенные задачи.

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

Но при этом я знаю, что кому-то и Windows облегчает жизнь, и Дима Билан, и "Лада-Калина" в кредит.
Windows Safari Chrome
5
0
>Лично мне для моих задач фреймфорки не облегчают жизнь, а усложняют.

Леонид, при всём уважении к вам и уникальности вашего творчества, те задачи, которые вы решаете как программист, вполне типичны. Например, вам бы не помешало добавить для того же биноника аудио/видео html5+flash проигрыватель (важно для iPhone/iPad), или удобную галерею с листанием, или человеческий ajax-постинг комментариев (в смысле с обновлением при постинге и нормальном позиционировании нового комментария), или минималистичный wysiwyg-редактор с учётом местных особенностей. Всё это с соответствующими плагинами к Jq (или даже без них) делается за один длинный вечер, без особого увеличения загружаемого кода.

Кроме того, если быть честными, JsHttpRequest ничем не лучше ajax части фанатично нелюбимого вами jQ (а с учётом возможностей последнего, в разы хуже).

>Но при этом я знаю, что кому-то и Windows облегчает жизнь, и Дима Билан, и "Лада-Калина" в кредит.

Вы не поверите, но Windows и правда облегчает жизнь желающим без шаманства подключить дома любой МФУ/usb-модем/вай-фай модуль, желающим работать в конкретных программах, желающим запускать конкретную игру... Да что там, даже для простейшего foobar2000 не найти аналога по удобности, качеству и возможностям в *nix.

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

Да, это всё попса (включая фреймворки), но плоха она не сама по себе, а в контексте использования идиотами, или просто не по назначению. Даже вы пользуетесь всё тем же JsHttpRequest, дабы самому не изобретать велосипед, а потратить время на разработку с пользой.

Давайте всё-таки не переходить на демагогию. Рано или поздно вы всё равно начнёте пользоваться действительно удобными для вас фреймворками - в этом смысле прогресс неизбежен (тем более, что php сам по себе появился как "фреймворк" (вернее, шаблонизатор) на perl'е).
Windows Safari Chrome
0
1
zencd
"Мудаки с кучей сраных чемоданов" - это базовая, официальная фича JS, и о ней нужно знать/помнить так же как и синтаксисе языка. От большинства проблем JS можно спастись самодисциплиной и выработанным стилем программирования.
Windows Safari Chrome
1
1
Леонид ведёт речь о трудности поддержки такого кода, при условии добавления тех самых чемоданов, без подробного изучения их документации. Кроме того, рассуждает об идиотах, которые для удобства 10 строчек ставят громоздкие чемоданы, меняющие логику js-кода. От этого не спастись ни дисциплиной, ни стилем программирования.
Windows IE
0
0
clipper (#445142)
Пишу сюда, т.к. в дневнике все поотключалось. Вот такая техническая недоработка:


Mac Safari
0
1
dmitriid
По сути «лучей ненависти» в сторону расширения массива.

for in для массивов использовать не рекомендуется. И вообще, конструкцию for in надо уметь использовать. В частности, необходимо использовать propertyIsEnumerable() или hasOwnProperty(), потом что for in пробегается не только по свойствам объекта, но и по прототипу объекта. Апрототип объекта особенно в случае с массивами может быть расширен для улучшения/увеличения функциональности.

https://developer.mozilla.org/en/JavaScript/Reference/Statem[...]
Nokia-E90 Safari
 Москва
0
2
Leonid Kaganov
Вам не кажется, что диктовать программисту, какое ему нужно "расширение функциональности" (не зная задачи и структуры его массива) - это идиотизм?
Windows Safari Chrome
0
0
Вы видели многочисленные шутки про программный код в зависимости от опыта их автора? К сожалению, подобные советы как раз приводят к тому ужасному нагромождению кода, которое там обычно подразумевается под авторством Enterprise Programmer.
Windows
 Киев
0
0
lesha (#437416)
В общем весь негатив не от фреймворков и лишнего, а от того что автор одного фреймфорка использует другой заставляя всех пользоваться им таким образом.

Почитал сайт того самого фреймворка - они очень извиняются что не могут спрятать то, что добавили от глаз for in тем же способом как спрятано arr.length и arr.prototype.

И описывают другие способы работы с массивами, ссылаясь также на стандарты.
Linux Firefox
 Москва
0
0
Хорошо хоть, что извиняются. Хоть капля совести осталась.
Windows Safari Chrome
0
0
Не, jОuery - неплохая либа
Windows Safari Chrome
0
0
Офф - почему-то я не получаю ответы на свои комментарии на мыло.

всего комментариев: 105

<< предыдущая заметка следующая заметка >>