Search
Write a publication
Pull to refresh
116
0
Send message
Вот-вот, «не в ущерб». Похожая ситуация: из IPv6 убрали контрольную сумму за ненадобностью. IP, более низкий уровень, уже считает контрольную сумму пакета, и незачем считать её дважды. Так и тут, зачем принуждать пользователей использовать SSL, если эта задача уже решена на более низком уровне?

И вообще, HTTP — протокол 7 уровня OSI, а SSL — 6-го (если я ничего не путаю). За каким чёртом HTTP должен знать, о том, какой более низкий слой его обеспечивает? Это что, чтобы сделать GET / HTTP/2.0 на localhost, мне нужно будет SSL поднимать?

Безусловно, IP используется не только для HTTP, но ведь и использовать IPSec для всех-вообще соединений никто не требует.
Ближайшее будущее, повсеместно наступил IPv6. Любое оборудование, поддерживающее IPv6, должно (ранее «MUST», сейчас «SHOULD») поддерживать IPSec для шифрования на сетевом уровне.
Поверх этого работает HTTP/2.0, и у него обязательно включен SSL, который используется для шифрования на уровне представления.

Вопрос: зачем столько шифрования, и когда вебостроители будущего договорятся, наконец, друг с другом?
Необязательные аргументы в середине списка всё-таки не самая удобная вещь. Как по мне, гораздо удобнее передавать опциональные параметры в виде хеша (объекта):

Foo.prototype.useWithBar(barInstance, options) {
  if (options) {
    var baz = options.baz;
    var quux = options.quux;
  }
  /* ... */
}

Достаточно наглядно и не нужно помнить, что четвертый аргумент можно передать третьим, но при этом нужно в качестве второго указать второй, третий, либо null.
(см. также thecodelesscode.com/case/104)

Опять же, в ES Harmony это будет выглядеть намного опрятней:

Foo.prototype.useWithBar(barInstance, {baz, quux}) {
  /* ... */
};
Я ни в коем случае не говорю, что Ваш код или подход плохой или неправильный, просто как вариант:
Можно это дело оформить как graceful degradation:
var protohack = (function() {
	function Clone(properties) {
		for (var propName in properties){
			this[propName] = properties[propName];
		}
	}

	if ({__proto__: Clone.prototype} instanceof Clone) {
		return new Function('o', 'return o;'); // No-op, от глобального скопа
	}

	return function(o) {
		if (!o || !o.__proto__ || typeof o.__proto__ !== 'object') {
			return o; // В объекте не перекрывается __proto__, или это вообще не объект. Возвращаем обратно как есть
		}
		Clone.prototype = o.__proto__;
		delete o.__proto__;
		return new Clone(o); // Возвращаем новый объект с нужным [[prototype]]
	}
})();


Тогда вызов
var donald = protohack({name: "Donald", __proto__: talkingDuck$});
вернет одно и тоже и в ES5 и в дремучем ES3.
Почему бы тогда сразу не задавать __proto__?

var donald = {name: "Donald", __proto__: talkingDuck$};
Ух ты! Лапа на лого теперь растет не из шеи.
Может, окажется полезным. В SVG есть vector-effect="non-scaling-stroke", если он выставлен, то толщина stroke (и stroke-dasharray) не зависит от масштаба.

Демо: www.w3.org/TR/SVGTiny12/examples/non-scaling-stroke.svg
Ух ты, действительно! Сейчас подправлю, спасибо.
(удалено, не туда ответил)
Ага, для меня это как раз и является целью.
Это же прямо-таки описание формата JNG.

Кстати, отличная идея, 1ney! В PNG разделение цвета и альфы на разные изображения действительно может дать свои плюсы. PNG вообще по этому поводу часто критикуют.

Демо

86 128 б


71 919 б


6 764 б

Все изображения оптимизированы с одинаковыми настройками. Автор: Mythique-Design.

Ага. Я верю, наступит тот день, когда векторные картинки будут делать через svg, колонки при помощи grid layout, а выравнивание — флексбоксом. Ну а пока будущее не наступило… эх!
Цвет в заинлайненных svg меняется очень легко, css-свойством fill. Тень делается через filter effects.

Более того, некоторые элементы можно выносить в <defs> (что-то вроде библиотеки в флеше), а потом фигуру любой сложности использовать при помощи <use> в нужном месте с перекрытыми по необходимости атрибутами и css.

Единственная, но очень важная, проблема — эту «библиотеку» можно только инлайнить в каждую страницу, т.е., подключить её не получится. Впрочем, <iframe seamless> теоретически может помочь, но даже если и так, это костыль, а не решение.

Вкратце: имхо, SVG — очень клёвая идея с недостаточно продуманной имплементацией.
Хочется в ответ процитировать Дмитрия Барановского:
Using icon fonts is like using tables for layout: temporary workaround due to immaturity of technology.
You want vector icons? Try SVG.
Интересно, зачем нужна (и откуда взялась) такая точность в числе 537 731? В оригинальном сообщении указано просто «more than 500,000».
JavaScript и JScript как-то не очень честно на два языка разделять. Тем более, что на странице JScript в википедии, куда ведет ссылка, приведена цитата Крокфорда:
They are just different names for the same language, and the reason the names are different was to get around trademark issues.
Ну как тут не вспомнить Дика Фейнмана.
Ник подошёл, и она познакомила нас. «Мэрилин говорит, что ты — профессиональный игрок».

— Правильно.

— Мне бы очень хотелось знать, как можно зарабатывать на жизнь азартными играми, ведь за столом шансы равны 0,493.

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

— Хм! А когда шансы вообще бывают в твою пользу? — скептически спросил я.

— На самом деле это довольно просто, — сказал он. — Я стою у стола, когда какой нибудь парень говорит: «Сейчас выпадет девятка! Сейчас просто обязана выпасть девятка!» Парень возбуждён; он думает, что выпадет девятка и хочет заключить пари. Я хорошо знаю все шансы выпадения всех чисел, поэтому я говорю ему: «Ставлю четыре к трём, что выпадет не девятка», — и, в конце концов, выигрываю. Я не ставлю деньги на стол; вместо этого я заключаю пари с теми, кто стоит у стола и верит в предрассудки — в счастливые числа.
Уточнения хорошие. Да, согласен, разница между scope chain и proto chain есть. Но не такая уж она прям и принципиальная.

А насчет [[global]] — незачем новичков пугать лишний раз. Я надеюсь, что разработчики расширений для браузеров или скриптов на node уже знают js достаточно хорошо, и им мой коммент вообще без надобности.

Главное, имхо, уточнениями не запутать все окончательно, а то ещё выйдет, что и «операция присваивания значения свойству никогда не изменит значение свойства, найденного в прототипе» — не совем-то и правда.
Скрытый текст
var o = Object.create(function(){
	var stashedProtoval;
	return Object.create({}, {protoval:{
		get: function(){ return stashedProtoval; },
		set: function(v){ stashedProtoval = v; },
		configurable: true,
		enumerable: true
	}});
}());

o.protoval; // undefined
o.protoval = 42;
o.protoval; // 42
o.hasOwnProperty('protoval'); // false
Аналогично. Когда я узнал, что scope — это всего-навсего объект, а переменные «внутри» него — это его свойства, оказалось, что в прототипах и в скопах используется по сути один и тот же механизм, делегация.

object → [[proto]] → [[proto]] → [[proto]] → null
[[scope]] → [[scope]] → [[scope]] → window → null

А «магическая» конструкция with() всего-то навсего добавляет в эту цепь произвольный объект. И тогда js стал для меня из непредсказуемой штуки красивым и изящным языком.
Файрфокс я пропустил, виноват, там такого ограничения действительно нет. Может быть, пока что нет, а может быть, и не собираются делать. Ну, и есть, разумеется, браузеры, навроде IE6, которые старше, чем WHATWG, и ни про какие 4 мс не слышали.

У Ильи Кантора есть страничка, где это поведение разбирается гораздо подробнее и в тестах.

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

Information

Rating
8,629-th
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity