Жена показала прекрасный текст в журнале пользователя r2r на «@дневниках» о том «как чувствует себя „сова“ в мире, где работают с 8:30». Если ещё не читали, прочитайте. Если вы, к тому же, ещё и «жаворонок», читайте обязательно!
Я именно так себя и чувствую, когда приходится вставать рано. Я — «сова». Нет, это нельзя исправить. Девять лет школы, четыре года техникума, пять лет в университете и везде приходилось приходить рано. Как я не старался, но я спал на уроках и первых парах, ничего с этим поделать нельзя. По статистике 15% людей — яркие «жаворонки» и «совы», нас не переделать.
Ехал сегодня в метро, от нечего делать разглядывал пассажиров (забыл новую книгу загузить в телефон), случайно обратил внимание на дедушку, у него под полурасстёгнутом пальто, виднелась олимпийка. Помните такую? Как новая, а ведь ей лет 20.
Я много лет, с самого детства не слышал этого слова, не вспоминал, но стоило увидеть характерного василькового цвета «олимпийскую» кофту с молнией на горле, и оно мгновенно пришло на ум. Я сейчас поискал в «Яндексе», оказывается олимпийки до сих пор продаются (например «Адидас» их выпускает), но у меня язык не поворачивается их так называть. По воспоминаниям детства, олимпийка — только советская и только синяя. Я не помню кто её носил, кажется папа, а может я сам, а может все.
В блоге Microsoft, посвящённом их браузеру появилась статья об Internet Explorer 9. То, что есть сейчас уже очень неплохо — IE9 по скорости (если верить данным Microsoft) лишь чуть-чуть отстаёт от FF 3.6 и всего в два раза медленнее Chrome 4 (учитывая насколько он шустрый, это совсем неплохо).
Internet Explorer 9.0 проходит тест селекторов CSS3 с результатом 574 из 578 (IE8 — 330/578), тест ACID3 — 32% (IE8 — 20%), поддерживает border-radius (несмотря на более ранние заявления Microsoft, что CSS3 ещё пока слишком сырой, чтобы что-то из него реализовывать, кроме селекторов) и это только начало — ведь это даже ещё не альфа-версия!
Не могу поверить, что этот движок и есть «Газель» о которой говорили ранее, ведь «Газель» имела большие проблемы с производительностью, да и в статье из блога о безопасности и изоляции вкладок (основные фишки «Газели») ни слова.
P.S. Кстати, если покопаться, то можно найти как выглядит user-agent нового браузера: «Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/4.0)», IP, откуда заходили этим браузером, принадлежит городу Редмонд (в нём работает около 30 тысяч сотрудников Microsoft).
Движок, как видим, всё ещё называется «Trident», хотя номер смущает — 4.0, как мы знаем, версия, которая входит в IE8.
Благодаря Паше Катурову и магазину «33 dodo» (кстати, жена, посмотри какие там наклейки в свою квартиру, сегодня будем смотреть и плакать вместе) теперь у меня на столе летают весёлые оранжевые самолётики.
В качестве вялых воскресных препирательств, на «Хабре» как-то неожиданно вылезла мнимая проблема Flash — что загрузив ролик, можно попытаться получить доступ к cookie сайта или сделать какие-то другие интересные недобрые вещи.
Между тем, правил для защиты от таких «уязвимостей» всего два: выдавать при обращении к заливаемым пользователем Flash заголовки для скачивания (а то и вообще отдавать все пользовательские ролики с другого домена, порта или протокола) и указывать правильные параметры для проигрываемых роликов, залитых пользователем. Последнее — нехитрая наука, таких параметров всего три: allowScriptAccess, allowNetworking и allowFullScreen.
Их назначение легко расшифровывается по названию.
Параметр allowScriptAccess (введен во Flash 6.0.40.0) управляет доступом к JavaScript/DOM браузера и имеет три возможных значения: «always», «sameDomain» и «never». Пояснения, на мой взгляд, требует только значение «sameDomain». Если выбрано это значение, то доступ предоставляется только скриптам, которые загружены с того же домена, что и страница, куда они подключены.
Следующий параметр, allowNetworking (работает, начиная с Flash 9.0) разрешает или запрещает обращение Flash к собственным сетевым функциям и сетевым функциям браузера. Имеет значения «all», «internal» (запрещает использование сетевых функций браузера) и «none».
Параметр «allowFullScreen» (Flash 9 и выше) принимает два возможных значения — «false» (выставлено по умолчанию) или «true», которые (соотвественно) запрещают или разрешают использование полноэкранного режима.
Очевидно, что наиболее безопасные параметры — allowScriptAccess="never", allowNetworking="none" и allowFullScreen="false":
Очень жаль, но значение «never» для параметра для параметра «allowScriptAccess» сейчас является deprecated, так же как и использование параметра allowNetworking, когда страница, на которой подключен ролик и сам ролик загружаются с одного и того же домена.
Насколько я понимаю, это связано с тем, что фирма Adobe, текущий владелец технологии Flash, не хочет брать на себя ответственно за утечку критичных данных через Flash-ролики. Вместо использования этих значений параметров рекомендуется загружать Flash-ролики с другого домена и не допускать того, чтобы критичные данные и ролики были доступны с одного домена.
Посмотрел Firefox 3.6 beta 2, что сподвигло меня на очередную попытку пересесть на этот браузер с «Оперы»: скорость работы уже приблизилась к комфортной. Пересесть на Firefox хочется, прежде всего, из-за Firebug. Dragonfly в «Опере» — чудовищное глючное поделие, пользоваться которым некомфортно. Это совсем не похоже на ПО компании «Опера».
Неделю попользовался Firefox, не осилил. Нехватает тысячи мелочей, некоторые из которых не правятся плагинами. Например, почему при нажатии кнопки «Назад» в браузере, Firefox не показывает документ в том месте, где я остановил чтение? Мне что, на каждый чих закладку открывать?
Таких мелочей — очень много, слишком много, чтобы я мог спокойно пользоваться браузером. Приводить их полный список смысла нет, если даже многие их них правятся плагинами, я не готов тратить своё время, чтобы точить браузер под себя. И потом, чем больше плагинов, тем он больше тормозит.
Придётся, как и раньше, жить в двух программах. Это, кстати, моя вторая попытка переползти на Firefox.
Читал тут по диагонали стандарт ECMAScript и подумалось мне, что сэмулировать локальные переменные (да, я осознаю, что это свойства объекта) можно вот так:
var a = 10;
with ( { a : 20 }) {
alert(a);
}
alert(a);
Ожидаемый результат: сначала код выведет «20», потом — «10». Я ещё не задумывался над тем насколько это практично и изящно, просто придумалось.
Кстати, обратите внимание, что следующий код выведет «30», «30», «10», «30»:
var a = 10, b = 10;
with ({a:20}) {
var a = 30, b = 30;
alert(a);
alert(b);
}
alert(a);
alert(b);
Добавлено 10 ноября 10:55: в комментариях почему-то подумали, что я не знаю о лексических замыканиях. Знаю, конечно.
Вадим Макишвили описал несколько примеров применения rgba в Internet Explorer. Примеры очень и очень полезны, и я скопирую их (без картинок, за ними идите в исходный пост) к себе:
Сегодня, благодаря этому новому знанию, я понял как решить две труднорешаемые задачи. Издавна, чтобы сделать фон блока полупрозрачным, мы вынуждены были использовать или png-24 картинку в фоне или opacity-свойство.
Но в случае с png-24, для ИЕ6 нужно писать AlphaImageLoader фильтр, который катастрофически замедляет рендеринг страницы. А в случае с opacity приходилось придумывать трюки, чтобы дети блока не бледнели от родительского opacity.
А теперь проблему opacity можно забыть, как страшный сон: .block { background: #rgba } * html .block { filter:progid:DXImageTransform.Microsoft.gradient (startColorstr=#99000000, endColorstr=#99000000); }
В начальной и конечной позиции один и тот же RGB (000000) и добавляю перед ним одно и то же значение Alpha (99)
Значение Alpha указывается в 16-тиричной системе, где 00 – полностью прозрачный, а ff – непрозрачный пиксел
Я протестировал скорость рендеринга страницы, на которой выливается 300 элементов с gradient-фильтром — он не замедляет рендеринг и это сильно радует.
Но этот случай описывает ситуацию, когда нужно сделать однотонный полупрозрачный цвет, как например в модальных диалогах, когда вся остальная страница затемняется.
Иногда использовать png-24 всё-таки необходимо, как например в случае, когда нужно обрезать длинную неразрывную строку, уводя ее градиентом в непрозрачность.
В этом случае можно использовать второй способ. .block { background: url(image.png) } * html .block { filter:progid:DXImageTransform.Microsoft.gradient (startColorstr=#00ffffff, endColorstr=#ffffffff, GradientType=1); }
GradientType принимает значение 1, если градиент рисуется слева-направо; и 0, если градиент сверху-вниз.
Точка с запятой — один байт, перевод строки — один байт. Мне тут подумал, что лучше бы компрессоры JS выкидывали при сжатии не переводы строки, а точки с запятой (там где это возможно, конечно, например, пустой return в некоторых случаях нельзя завершить только переводом строки).
Тогда читаемость кода почти не снижалась бы (об обфускатарах я сейчас не говорю) и можно было бы легко понять где произошла ошибка, пропущенная в production (такое случается).
Бобук рассказывает про количество людей, имеющих отношение к появлению Chrome:
Итого, представь себе что 10 миллионов долларов в акциях размазывается между разработчиками проекта. Такие небольшие проекты как Chrome в гугле затрагивают очень небольшую группу, скажем всего 500-600 человек разработчиков, 50-100 дизайнеров, 200-300 маркетологов, под сотню админов, сотня менеджеров. Итого на нос получается в пике 10 тысяч на лицо. Теперь подумай, что такое в Калифорнии 10 тысяч долларов _В АКЦИЯХ_, т.е. после реализации акций и уплаты налогов — у тебя на руках 5 тыщ долларов.
В ответ на вопрос откуда информация и по поводу численности:
Про команду разработки? Есть некотрые инсайдеры. Не, вообще команда разработки там примерно в 3 раза меньше, но есть же масса людей, которые учавствуют в проекте «парттайм», а доля будет такая же, как и у тех кто работал только над ним.
После недавней фразы Брина «мы ведем исследования небольшими группами по 200-300 человек», я уже ничему не удивляюсь.
Почти тысяча человек даже в самом минимальном случае!
Некоторое время назад мне хотелось выяснить, сколько съедает памяти программа на Python и чем эта память занята. Тогда я не смог быстро найти решение и обошёлся без него, а вчера, совершенно случайно, наткнулся на целых два.
Приведу их у себя полностью, чтобы потом можно было быстро найти.
Следующий код (используется модуль Heapy):
from guppy import hpy
h = hpy()
print h.heap()
выведет вот такую, достаточно информативную, табличку:
Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 35144 27 2140412 26 2140412 26 str
1 38397 29 1309020 16 3449432 42 tuple
2 530 0 739856 9 4189288 50 dict (no owner)
Другое решение — использовать Dowser, его интересная особенность — можно наблюдать за работающим кодом через веб-браузер.