• На Facebook уже 10 000 серверов

      Инфраструктура крупнейшей социальной сети продолжает расти в геометрической прогрессии. На днях технический директор Facebook на конференции по MySQL огласил (видео) свежие данные: оказывается, на проект сейчас работает уже 10 000 серверов, в том числе 1 900 серверов MySQL, а обслуживают их всего два администратора баз данных.

      В отличие от Google, Yahoo и Microsoft, компания Facebook не строит свои собственные дата-центры, а арендует чужие новостройки по мере необходимости. Совсем недавно к числу арендуемых добавились два новых дата-центра: в Вирджинии (октябрь 2007) и Калифорнии (февраль 2008).

      Теперь становится понятно, почему IBM позиционирует новые серверы iDataPlex специально для Веб 2.0, ведь на них действительно есть спрос со стороны тех же Facebook, Yahoo, Microsoft и Amazon.

      Технический директор также рассказал, что Facebook по-прежнему активно использует систему кэширования Memcached для оптимизации работы динамических веб-приложений. На сегодняшний день это самый крупный проект в мире на базе Memcached (805 серверов).

    • Sphinx??

        Думаю многим из вас приходилось когда-либо сталкиваться с прикручиванием поиска, на сайте. Вот и мне по работе, пришлось этим заняться.

        В поисках поискового движка, так понял, лидирующие места занимают Lucene и Sphinx.

        Но требования следующие (норма):
        • Стабильная работа с русским языком
        • Морфология («гитара» <-> «гитары» <-> «гитар»)
        • Быстродействие
        • Возможность индексировать PG, MySQL и файлы (.html)
        • PHP-API, установка на любом *nix дистрибутиве (FreeBSD, Ubuntu Server)


        Выпал случай, поставил Sphinx, настроил (вроде как О_о), проиндексировал базу с каталогом товаров. (включена stemm_enru морфология).

        Сортировка по релевантности, жму: «гитара fender», и из БД в первую очередь же он мне выводит струны для гитары фендер, потом уже сами гитары, а должно быть наоборот. Не понимаю, в чем дело, и что за Weight и как их настраивать.

        Читал мануал на сайте разработчика, но всё там как то слишком сложно описано, либо я лох)

        В общем, уважаемые, помогите пожалуйста разобраться.
      • Верстка без float'ов

        • Translation
        Существует много разных способов css разметки. Некоторые базируются на абсолютном позиционировании, другие используют float'ы. Первый метод плохо поддерживает «резиновость» макета, тогда как второй это неплохой способ разметки.

        Но, как и многие мощные инструменты, float'ы имеют свои изъяны. Для начала, верстка на основе float'ов не такая простая к пониманию, а также float'ы есть источником многих багов (в основном в ИЕ), что делает их не идеальным вариантом в погоне за кроссбраузерностью.

        Итак, речь далее пойдет о
        семантически корректном методе верстки
      • Презентации стартапов перед публикой.

          Хочу обратить внимание на очень интересный тренд интересное направление в презентациях стартапов.

          Мы не говорим о презентациях перед инвестором, мы будем говорить о разных конкурсах проектов.

          За последние три года мне удалось побывать на 13 конкурсах и иметь обратную связь фидбеки от еще 12. И вот какое интересное направление в развитии какой тренд я заметил.
          Три года назад в 2005 году в большинстве случаев преобладал доминировал формат 20 (минут на доклад) +10(на вопросы из зала) или 20+5. Еще тогда было заметно, что серии из нескольких презентаций (4-8) очень тяжело давались судьям, тем более судьи именитые и те, кому данный проект не нравился, откровенно не слушали и были недовольны убийством времени. И меня начали посещать мысли о том, что неплохо было бы это дело превратить в 15+15. 15 мнут должно хватить, а 15 минут слушать вопрос-ответ все равно интереснее.
          Читать дальше →
        • Социальные сети, перспективы развития и способы монетизации. Часть 2

            Вторая часть моего доклада на конференции UA WEB про социальные сети. Тема части: перспективы развития социальных сетей.

            Для пропустивших, советую сначала прочитать первую часть
            Читать дальше →
          • Борьба с фрагментацией PHP кешеров

              Я надеюсь, что нормальные люди уже прониклись необходимостью кешировать вывод данных на своих сайтах, либо кэшировать промежуточные результаты работы с базой данных, либо просто кешировать opcode скриптов для их более быстрого выполнения.
              И что разработчики предоставляют нам для этого дела?
              Читать дальше →
            • Profiling PHP Applications With xdebug

              • Translation
              Добро пожаловать в третью статью о xdebug. Уже сейчас вы должны были попробовать xdebug, если нет, сделайте это сегодня ;-).
              В первой статье рассказывалось о том, как установить и настроить xdebug, описывались некоторые простейшие возможности, такие как улучшение вывода функции var_dump() или вывод трассировки стека вызовов при получении сообщения об ошибке. Во второй части мы рассмотрели такую возможность xdebug как трассировку. Трассировка содержит все вызовы функций и методов в программе, время запуска, опционально размер памяти, передаваемые и возвращаемые параметры. Лог трассировки может помочь вам понять пути выполнения сложной программы. Вместо того чтобы вставлять отладочный код внутрь программы, вы включаете или выключаете трассировку в тем места где нужно, а потом используете утилиты подобные grep или собственно написанные приложения на PHP для анализа лог файла.
              Читать дальше →
            • Tracing PHP Applications with xdebug

              • Translation
              Добро пожаловать во вторую серию нашего повествования про xdebug. Установка xdebug и его базовые возможности были рассмотрены в первой серии. В данной статье мы рассмотрим трассировку программы.
              Предыдущая серия цикла Introducing xdebug
              Читать дальше →
            • Introducing xdebug

              • Translation
              Эта статья первая из серии статей, описывающих xdebug, свободной библиотеки для разработчиков PHP. xdebug – это расширение для PHP, написанное Derick Rethans, одним из разработчиков языка PHP. В данной статье описывается как установить xdebug и рассказывается о его базовых возможностях. В последующих частях мы детальнее взглянем на главные возможности xdebug, а именно трассировку, профайлинг, отладку кода.
              Читать дальше →
            • Как сделать RSS иконку любого цвета, используя одну картинку

                Как сделать RSS иконку любого цвета, используя одну картинку
                В этой статье я расскажу вам как сделать RSS иконку любого цвета, используя всего одну картинку.

                Идея заключается в том, чтобы использовать -элемент, фоном которого будет картинка в формате .png, а цвет фона элемента будет цветом нашей иконки. Мы возьмем именно png изображение, чтобы воспользоваться свойством сохранения прозрачности этого формата.
                Читать дальше →
              • data URI

                  Пару лет назад я занимался проблемой data URL в Internet Explorer, добился определённых результатов, но то, что получилось, использовать было невозможно. Data URL (иногда его ещё называют «протокол data:») — возможность вставлять ресурсы (графику, CSS, JavaScript и так далее) в HTML код.


                  Подробнее о data URL можно узнать из свежей статьи на «Хабре» «Картинки в теле страницы с помощью data:URL». Хотелось только её дополнить двумя замечаниями: IE8b1 поддерживает data URL длиной не более 32Кб, в современных версиях других браузеров ограничений увидеть не удалось, Safari/Opera/FF показали изображения размером около 700Кб.


                  Теперь амбула.


                  Вчера ночью мне пришла в голову идея как можно попытаться корректно совместить data URL и включение картинок через протокол mhtml. То, что у меня не получилось два года назад, получилось сейчас.


                  Результат — готовый код на PHP из двух функций. Первую функцию («bolk_data_uri_header») нужно вызвать в самом начале перед выводом любого вашего кода, вторую («bolk_data_uri») собственно для включения картинки в код.


                  Надеюсь на примерах всё понятно:
                  bolk_data_uri_header();
                  bolk_data_uri('myjpeg.jpg');
                  bolk_data_uri('ourpng.png', 'border: 2px dotted red');
                  


                  Код самой библиотеки:
                  function bolk_data_uri_header() 
                  { 
                      echo "<!--\n" 
                          ."Content-Type: multipart/related; boundary=\"=_NextPart_01C6A9B1.539AB070\"\n\n" 
                          ."--=_NextPart_01C6A9B1.539AB070\n" 
                          ."Content-Transfer-Encoding: base64\n" 
                          ."Content-Type: text/html\n" 
                          ."-->\n\n"; 
                  
                  } 
                  
                  function bolk_data_uri($file, $style = '') 
                  { 
                      if (!( file_exists($file) && ($data = @getimagesize($file)) )) return false; 
                  
                      $name = uniqid('', true); 
                  
                      if ($style <> '') $style = ' style="'.htmlspecialchars($style).'"'; 
                      $mime = strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') ? " type='{$data['mime']}" : '';
                  
                      echo "<!--\n" 
                          ."--=_NextPart_01C6A9B1.539AB070\n" 
                          ."Content-Location: {$name}\n" 
                          ."Content-Transfer-Encoding: base64\n" 
                          ."Content-Type: {$data['mime']}; -->\n" 
                          ."<object data='data:{$data['mime']};base64,\n\n"; 
                  
                      echo base64_encode(file_get_contents($file)); 
                  
                      echo "' {$data[3]}{$style}{$mime}'><img " 
                          ."src='mhtml:http://{$_SERVER['HTTP_HOST']}"
                          ."{$_SERVER['REQUEST_URI']}!{$name}' {$data[3]}{$style} /></object>\n\n" 
                          ."<!--\n" 
                          ."--=_NextPart_01C6A9B1.539AB070-->"; 
                  
                      return true; 
                  }
                  



                  Секрет в совмещении данных, чтобы IE, обратившись к странице по протоколу mhtml нашёл нужный кусор, «спрятанный» внутри тега, а остальные браузеры увидели бы картинку через data URL.


                  Код тестировался под Opera 9.50b, FF 2.0.0.13, Safari 3.1 и IE6. Предложения и результаты испытаний — прошу в комментарии.


                  Оригинал записи опубликован в моём блоге.
                • Простое меню с проявляющимися изображениями

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


                    И оживляем всё это при помощи CSS:
                    Python
                    Python
                    Читать дальше →
                  • 40 советов по оптимизации вашего PHP-кода

                      Всем доброго времени суток.

                      Перевод заметки "40 Tips for optimizing your php code". Автор — Reinhold Weber.

                      1. Если метод может быть статическим, объявляйте его статическим.
                      2. echo быстрее, чем print.
                      3. Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк.
                      4. Устанавливайте максимальное количество проходов ваших циклов for до цикла, а не во время его выполнения.
                      5. Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы.
                      6. Остерегайтесь магических методов, таких как __set, __get, __autoload.
                      7. require_once дорого обходится.
                      8. Указывайте полные пути в конструкциях include/require, меньше времени будет тратится на поиск файла.
                      9. Если вам необходимо определить время, когда скрипт был запущен, используйте $_SERVER[’REQUEST_TIME’] вместо time().
                      10. Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений.

                      Читать дальше →
                    • Делаем свой webfile

                        Отчего-то всегда хотел сделать свой сервис для загрузки файлов. Всевозможные slil/zalil не устраивали своей скоростью. ifolder — обилием рекламы. Пользовался не очень популярным (от этого он ни чуть хуже не становился) сервисом up.spbland.ru. Но это как-то не правильно. И тут я решил написать свой сервис. Не буду вдаваться в подробности и рутину, только концепция.
                        Читать дальше →
                      • Yahoo: высокопроизводительные Веб-страницы. Часть 2

                        • Translation
                        Примечание: ниже перевод свежей презентации от Yahoo! «High Performance Web Pages» с новыми советами по оптимизации. Yahoo известна своими статьями на тему оптимизации клиентской части и является мировым лидером в этой области. Однако, с уходом Julien Lecomte (ведущего специалиста отдела оптимизации, автора YUI Compressor) в Apple ситуация может измениться. Посмотрим.

                        Мои комментарии далее курсивом. Я постарался, по возможности, расставить ссылки на упоминаемые в презентации инструменты и связанные статьи.

                        Этот медлительный веб



                        • Мы используем Интернет для решения наших повседневных задач
                        • Мы все хотим испытывать при этом комфорт
                        • Мы не выносим медленные страницы (хотя есть варианты)
                        • На 500 мс медленнее = 20% уменьшение трафика (Google)
                        • На 100 мс медленнее = 1% уменьшение продаж (Amazon)


                        Разговор на сегодня



                        • Как улучшить производительность веб-страниц
                        • Фокус на клиентской части
                        • 14 отличных советов для быстрых страниц
                        • … и еще 20!


                        читать дальше на webo.in →