• Разгоняем CSS-селекторы. Часть 2: транзитивность

      После статьи «Разгоняем CSS-селекторы: стоит ли?» было предложено рассмотреть несколько дополнительных случаев, учитывающих транзитивность селекторов (например, насколько быстрее a c, чем a b c, или наоборот). Данное исследование посвящено как раз разбору таких случаев.

      Методика



      Методика и уменьшение погрешности подробно рассматривались в первой статье, на них сильно много останавливаться не буду. Скажу лишь, что при наращивании количества классов и идентификаторов Opera стала значительно медленнее (раза в 3) отображать код (при этом общий его объем увеличился примерно в 1,5-2 раза). Скорее всего, в следующую статью войдет исследование влияния количества классов/идентификаторов/размера кода на общую производительность браузера.

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

      читать дальше на webo.in →
    • CSRF на vkontakte.ru

        Обнаружил забавную атаку на сайт vkontakte.ru.
        При переходе на сайт tvoydohod.com, если вы в этот же момент авторизованы на вконтакте, отработает следующий джаваскрипт:
        <script>
        function doit() {
          var html;
          html = '<img src=http://vkontakte.ru/profileEdit.php?page=contacts&subm=1&website=http://tvoydohod.com>';
          window.frames["frm"].document.body.innerHTML = html;
        }
        </script>
        <iframe name="frm" onload="doit()" width="0" height="0"></iframe>
        

        Как видно, будет запрошена картинка с адресом vkontakte.ru/profileEdit.php?page=contacts&subm=1&website=http://tvoydohod.com, броузер сделает запрос по этому УРЛу, и на анкете в vkontakte ваше поле «Веб-сайт» станет равным tvoydohod.com.
        Затем в вашем профайле, ваш друг, который вам доверяет кликнет на этот линк, и изменит профайл себе… И т д.

        Этот вид атак называется Cross Site Request Forgery. В вики описаны все противоядия и куча полезной инфы.

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

        Отписал в тех-поддержку, где столкнулся с «Это не баг!», «Не кликайте по подозрительным ссылкам!» и прочим. Надеюсь пользователей они ценят и поправят.
        А вам было интересно узнать о таком простом «вирусе», который живет целиком в соц-сети =)
      • Высокопроизводительные AJAX-приложения

        • Перевод
        Примечание: ниже перевод презентации «High Performance Ajax Applications», подготовленной ведущим специалистом из Yahoo (а теперь уже из Apple) Julien Lecomte. В ней автор освещает некоторые аспекты оптимизации как JavaScript-приложений, так и веб-сайтов вообще. В целом, советов много, и почти все, действительно, по делу. Однако, встречается и откровенная реклама Yahoo :) Мои комментарии далее курсивом.

        Часть 1. Разработка для высокой производительности



        Планируем и проектируем для высокой производительности



        • Ориентируемся на производительность с самого первого дня
        • Тесно работаем с дизайнерами и менеджерами продукта
        • Понимаем рациональность дизайна
        • Объясняем компромиссы между дизайном и производительностью
        • Предлагаем альтернативы и показываем, что еще возможно (на уровне прототипа)
        • Пробуем силы в реализации нетривиального дизайна (нельзя сразу говорит «нет»)
        • Помогаем упростить дизайн и взаимодействие с пользователем (добиваемся компромисса)


        читать дальше на webo.in →
      • Лечение JavaScript-зависимости

          Проблема (хотя и не для всех): в текущей реализации Хабра ссылку (ответить) в комментариях невозможно открыть в новом окне. Достигается этот эффект так:

          <a href="javascript:saw(703108);">ответить</a>

          Но есть более универсальное средство, подсмотренное в livejournal:

          <a onclick="javascript:return saw(703108);" href="***.html?replyto=703108#703108">ответить</a>

          [+] удобство комментирования (DHTML) остаётся, при этом…
          [+] cсылки не теряют своих привычных свойств (зависящих от браузера, кстати)
          [+] устраняется зависимость от JavaScript
          [-] надо что-то менять :)

          UPD от 11 марта: FWIMC, меня интересуют только мыши сохранение обычных свойств ссылок; пюризмом реализации не интересуюсь.
        • Css и Safari

            Столкнулся с проблемой, что в safari(3.0.4) очень странно отображается страница, которая адекватная во всех остальных браузерах.
            После нескольких часов танцев с бубнами c restorer определили, что safari не воспринимает первый стиль в css-файле после указания кодировки.
            Поэтому создали специальный класс, который идёт после указания кодировки.

            @charset «utf-8»;
            .i-love-steve-jobs { /* yep */ }


            Зы ничего подобного в интернет не нашёл, возможно это только мои глюки?
          • Чёрточки: только ли тире, минус и дефис?

              Однажды вечером я почувствовал, что пришло время расширить 97‐ й параграф «Ководства» Артемия Лебедева.

              На клавиатуре одна чёрточка, она обычно правее нуля и повыше букв «З» и «Х». Неосведомлённые люди называют её попеременно то дефисом, то минусом, то тире. Лебедев объясняет нам, что это четыре (учитывая две разновидности тире) различных символа. На самом деле их как минимум девять, и об этом я и расскажу вам сейчас.

              Читать дальше →
            • Как загружается Linux

              • Tutorial
              Update: Статья и скрипты были обновлены в марте 2013 (прошло 5 лет, старые скрипты не сильно отличаются от текущих, но всё-таки лучше изучать актуальный код, а логика загрузки системы за эти годы немного изменилась — иначе работает udev, появились новые синтетические fs вроде devtmpfs, /var/run переехал в /run, etc.).

              Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (/etc/inittab, /etc/rc*, /etc/init.d/*, ...) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, ...). Надо отметить серьёзные размеры и сложность этих скриптов — чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы.

              Когда меня окончательно достал RedHat (2001 год), я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет!
              Читать дальше →
            • 10 ошибок в дизайне иконок



                Вот есть Якоб Нильсен, который пишет ежегодные обзоры ошибок в юзабилити. С ним спорят или наоборот: все что он скажет, принимают за правило. Я решил провести такой же анализ в деле рисования иконок. Предлагаю вашему вниманию популярный обзор: 10 ошибок в дизайне иконок
              • offsetHeight или нечаянный спуск лавины reflow

                  В заметке Владимира Токмакова, утверждается:
                  HTML-элемент в документе может быть скрыт с помощью JavaScript или CSS-свойства display. Логику, заложенную в CSS, воспроизводить в JavaScript сложно и не нужно. Проще запросить offsetHeight объекта (если 0 = элемент скрыт).

                  Проще-то оно, конечно, проще, вот только какой ценой?

                  Читать дальше →
                • Документация по Django в одном файле

                    Один хороший человек взял и скомпилировал всю документацию из
                    www.djangoproject.com/documentation
                    в виде одного CHM-файла. Честь ему и слава!

                    Уже пользуюсь больше месяца, удобно.

                    Скачать можно отсюда:
                    charupload.wordpress.com/2007/12/02/django-documentation-chm
                    (1,3Мб)
                  • Neonray: десктоп, иди со мной!

                      Все, кто опасался, что Neonray.ru окажется спам-базой, к счастью ошиблись. С 15-го февраля сервис раздаёт инвайты на регистрацию и ознакомление с предварительной версией.
                      Зарегистрировавшись, можно скачать клиента (да-да, для работы с Neonray нужно установить программу-клиент) под Windows, с помощью которой можно попасть на свой онлайновый рабочий стол.
                      На что же это похоже?
                    • Разгоняем CSS-селекторы: стоит ли?

                        Виталию Харисову посвящается

                        После перевода заметки «Оптимизируем CSS-производительность» и справедливых замечаний Виталия vithar, я решил поставить серию экспериментов по скорости работы CSS-селекторов внутреннего движка браузеров. Результаты получились весьма забавными, а местами, наверное, даже интересными.

                        Методика. Размер файлов



                        Естественно, что скорость работы одиночного CSS-правила весьма высока, и даже десятки и сотни их не должны заметно замедлить работу браузеров. Поэтому нужно ставить эксперимент по работе с несколькими тысячами правил, иначе точность результатов будет весьма невысока. Использовать JavaScript для генерации HTML/CSS-кода не представляется разумным, ибо тогда придется учитывать еще и скорость работы JS-движка в браузерах, в итоге, эксперимент будет недостаточно чистым.

                        В конце концов, было решено сгенерить статичные файлы (порядка 300Кб), которые будут содержать достаточное число различных CSS-селекторов. Это самое «достаточное» число подбиралось по нескольким параметрам, в том числе: размер файла (гонять несколько Мб через браузер и интернет совсем не хотелось) и скорость работы HTML/CSS-кода в браузерах (она должна быть достаточно низкой, чтобы файлы в несколько сотен Кб уже заметно тормозили при открытии).

                        читать дальше на webo.in →
                      • Борьба с DDOS и DOS на уровне nginx

                          FreeBSD, сетевая Intel fxp, порт 100Мбит, polling, http accept-filter
                          в sysctl:

                          sysctl kern.maxfiles=90000
                          sysctl kern.maxfilesperproc=80000
                          sysctl net.inet.tcp.blackhole=2
                          sysctl net.inet.udp.blackhole=1
                          sysctl kern.polling.burst_max=1000
                          sysctl kern.polling.each_burst=50
                          sysctl kern.ipc.somaxconn=32768
                          sysctl net.inet.tcp.msl=3000
                          sysctl net.inet.tcp.maxtcptw=40960
                          sysctl net.inet.tcp.nolocaltimewait=1
                          sysctl net.inet.ip.portrange.first=1024
                          sysctl net.inet.ip.portrange.last=65535
                          sysctl net.inet.ip.portrange.randomized=0

                          Читать дальше →
                        • The ФППП starts here

                            ФППП

                            Здравствуй, дорогой друг!

                            Чувствуешь приближение весны? Я вот тоже чувствую. Если взглянуть на календарь, можно случайно обнаружить, что до конца зимы осталось всего-ничего. Как мы можем пропустить такое событие?!

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

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

                            Читать дальше →
                          • Персональный OpenID сервер на Perl

                              Решил наконец-то поднять у себя персональный OpenID сервер (ну да, я параноик, не хочу чтобы кто-то ещё собирал информацию на каких сайтах я бываю). Причём хотелось чтобы он был написан на Perl. Поискал в сети — нету! Более того, невероятно, но на CPAN только два модуля для OpenID, один жутко раздутый и явно недописанный, а второй вроде бы неплохой (Net::OpenID::Server Фитцпатрика), но документации и примеров для него практически нет. :(

                              В общем, за 6 часов написал свой сервер: OpenIDsrv. Может пригодится другим параноикам или в качестве дополнения к документации на Net::OpenID::Server.
                              Читать дальше →
                            • Коробочное преимущество

                                Откровенно говоря, этот пост — комментарий к опусу Дениса Болтикова «Преимущества коробочной CMS перед студийной». Как правило, подобные темы я обхожу стороной, так как холивар — не то мероприятие, на которое я готов тратить своё время. Однако перечисленные Денисом преимущества повергли меня в шоковое состояние и заставили думать, что ему просто очень нужно пролобировать «коробку» на своём новом месте работы.

                                Копипастю преимущества, которые перечислил Денис:
                                • Лучшее качество кода коробочной CMS. Для фирмы-разработчика эта CMS является основным продуктом. На ее разработку, оптимизацию, тестирование потрачено значительно больше человеко-часов чем у любой студии.Работоспособность коробочной CMS доказано на сотнях и тысячах созданных сайтах.Легкая расширяемость сайта. Большинство необходимых модулей уже создано. Надо интернет-магазин — подключаем, настраиваем, работает. Надо форум или раздел обратной связи — подключаем, настраиваем, работает.API для разработчиков. При его наличии грамотный программист легко нарастит нужную функциональность.Открытая документация. Есть документация пользователя, документация разработчика, документация по API для создания своих модулей. В большинстве студийных CMS этого нет или есть, но, как у топовых веб-студий за отдельную, довольно большую плату.Техническая поддержка, которая всегда готова помочь решить вашу проблему.Большое сообщество разработчиков. Найти специалиста, который доработает сайт на коробочной CMS значительно проще и быстрее, чем желающего копаться в чужом, и, как уже отмечалось, недокументированном движке. Написать с нуля и правда проще.
                                Осторожно! Возможен холивар
                              • «Opera User event» в Екатеринбурге

                                  Opera Logo

                                  ВАЖНОЕ ОБНОВЛЕНИЕ!

                                  Встреча пройдёт в субботу, 1 марта, в ресторане «Сандэй», Малышева 36, в 17:00. Зарезервирован отдельный зал.

                                  Всем привет!

                                  Спешу сообщить о знаменательном событии: в Екатеринбурге пройдёт награждение победителя конкурса от Opera Software за Хабрахабр виджет!

                                  В связи с этим в ближайшую субботу (1 марта) намечено небольшое мероприятие для пользователей Opera (да и не только их). На повестке дня два вопроса:
                                  1. Поздравление Кирилла Путинцева с победой в конкурсе виджетов и получением соответствующего приза;
                                  2. Разговор о браузере Opera, о текущих мероприятиях для пользователей и о будущих планах.
                                  Читать дальше →