Neurons to bytes

Кэширование и сжатие файлов в apache2

Прочёл статью Настройка кеширования в Apache. Хотелось бы дополнить её, но только для Apache2. Первый апач рассматривать не буду, он устарел, а всегда нужно стремиться к новому :)

Итак, как правильно заметил автор, по-умолчанию в Apache кэширование и сжатие отключено. Чтобы их включить, нужно подключить в Apache нужные модули. Это модули mod_deflate, mod_expires и mod_headers.

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

# Добавляем mime-тип и кодировку
AddType 'text/css; charset=utf-8'  .css
AddType 'text/javascript; charset=utf-8'   .js
AddType 'image/x-icon; charset=utf-8' .ico
AddType 'text/html; charset=utf-8' .html .shtml
AddType 'text/xml; charset=utf-8'  .xml

# добавление сжатия файлов
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/xml image/x-icon text/css text/javascript

    # обработка "кривых" броузеров
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch Konqueror no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

<IfModule mod_headers.c>
    Header append Vary User-Agent

    # разрешение кеширования файлов на стороне клиента
    <FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$>
        Header append Cache-Control private
    </FilesMatch>
</IfModule>

# включение заголовка Expires для всех файлов сроком на месяц
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"

    # выключение Expires для HTML-файлов и PHP-скриптов
    <FilesMatch .*\.(shtml|html|phtml|php)$>
        ExpiresActive Off
    </FilesMatch>
</IfModule>

# Выдача заголовка ETag (core feature)
FileETag MTime Size

Положите эти настройки в корневой .htaccess на вашем сайте и подключите модули, указанные в начале статьи. Всё должно работать.

Вот готовый архив с модулями для windows-инсталляции Apache2. Линуксойды же справятся сами, использовав утилиту en2mod :)

Javascript в nginx

Игорь Сысоев, создатель веб-сервера nginx, написал заметку об идее встраивания javascript в nginx, наподобие того, как встроен perl.

Но, как рассказывает Игорь, пока нет возможности правильно встроить V8 в nginx из-за особенностей реализации.
Я вот что-то не могу понять, как тогда появилась такая вещь, как nodejs, которая, при всем при этом, держит огромную кучу запросов (я где-то видел тесты, не помню у кого)?

Или он просто плохо смотрел (в чем я не уверен)?

Короче, буду рад, если мне кто-нибудь разъяснит, чем так кардинально отличается nginx от nodejs, что в nginx пока нельзя корректно встроить v8?

Чорне молне

Посмотрел тут дома. Как говорится, “не доставило”, хорошо хоть в кин не гонял. Есть слезоточивые сюжеты, но в каком супергероическом фильме их нет?
Понравилась фраза с киноговноком:

Сегодня вот спасает дам от сосулек, а завтра подлетит к кремлевским окнам и покажет президенту голую жопу. Будет очень стыдно.

Это единственное, связанное с чорне молне, что мне понравилось. Нет, конечно, не единственное, еще всякие намёки на лепру понравились.

В конце марта 2010 г. в Санкт-Петербурге пройдет первая в России конференция по Zend Framework (Регаемся, ребяты!)

На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка!

На данный момент уже открыта предварительная регистрация на конференцию! Для решения ряда вопросов организаторам очень важно сейчас понять приблизительное количество человек, которые смогут посетить конференцию или каким-то иным образом принять участие в ней.

Каждый предстоящий доклад возможно обсудить на форуме ZF-сообщества. Ваше мнение очень важно для авторов!

Планируемые доклады

Жизненный цикл предложений (proposals) в проекте Zend Framework

Александр Веремьев (Zend Technologies, Zend Framework Core команда)

Zend_Search_Lucene в деталях

Александр Веремьев (Zend Technologies, Zend Framework Core команда)

Zend Framework и производительность

Александр Махомет (создатель сообщества ZendFramework.ru)

Zend Framework и MVC, «толстая» модель

Александр Стешенко (Norada Corporation, PHP-разработчик)


ФотоСтрана.ru: Прототипирование с использованием ZF (история боевого применения Zend Framework в highload-проекте)

Леонид Жаворонков (ФотоСтрана.ru, тимлид)

Использование очередей сообщений в повседневных проектах

Денис Баклыков (Обновление, веб-разработчик)

Zend Framework и Doctrine

Степан Танасийчук (руководитель веб-студии stfalcon.com)

Zend Framework и мультиязычность

Степан Танасийчук (руководитель веб-студии stfalcon.com)

История проекта e-Штаб

Анатолий Ларин (e-Легион, веб-программист)

Что нового несет нам Zend Framework 2.0?

Надежда Блинова (Wizartech, веб-программист), Георгий Туревич (Wizartech, ведущий веб-программист)

Интеграция Zend Framework c Javascript-фрэймворками jQuery и Dojo Toolkit

Георгий Туревич (Wizartech, ведущий веб-программист)

Смело обсуждайте доклады и регистрируйтесь!

За последними новостями можно следить здесь:
RSS-канал: feeds.feedburner.com/zfconf
Twitter: @zfconf
Группа Вконтакте: vkontakte.ru/club14951507

К участию также приглашаются информационные и финансовые спонсоры.

Встроенные переводы сообщений валидаторов в Zend Framework

В новом Zend Framework 1.10 появились переводы для встроенных валидаторов! Ура!
Теперь не нужно переводить самому, как, например, делал я когда-то. Теперь можно тупо:

$language = 'ru';
$translator = new Zend_Translate(
    'array',
    '/resources/languages',
    $language,
    array('scan' => Zend_Locale::LOCALE_DIRECTORY)
);

Zend_Validate_Abstract::setDefaultTranslator($translator);

И всё - радуемся.

Информация из оригинального поста Томаса Вейднера, разработчика i18n в ZF.

UPD: мы с ребятами с zendframework.ru (спасибо им) перевели сообщения валидаторов на русский язык. Ожидается, что наш перевод появится в ZF 1.10.2 (выйдет 23 февраля 2010). Так же, ожидается перевод на украинский язык.

Микрофреймворк fab для nodejs

Наткнулся на замечательный микрофреймворк fab, который позволяет легко создавать простые серверные приложения на языке javascript, для веб-сервера nodejs.

Fab очень похож на ruby-фреймворк Sinatra, который является довольно популярной штукой в среде ruby-девелоперов, так как позволяет сделать легкое приложение, без использования тяжеловесов, таких, как Rails.

Например, так выглядит простейшее приложение в Sinatra:

require 'rubygems'
require 'sinatra'
get '/' do
  'Hello world!'
end

А вот так выглядит точно такое же приложение в fab:

fab = require( "./fab" ).fab;

( fab )
  ( "/", function(){ return 'Hello world!' })
.deploy();

Многословнее, но всё равно круто, да? Единственное там пока нету разделения запросов по REQUEST_METHOD, первой нужнейшей штуки для удобной реализации REST-сервиса.

Фреймворки для nodejs

logo
Я просто оставлю это здесь. Список фреймворков для nodejs, которые я нашёл:

  • Намётки и размышления одного дядюшки Бена, который пытается создать свой фреймворк на nodejs. Смешно, он обозвал Дэвида Хэйнемайера Хэнсона тупицей, это повеселило :) Готового кода я там так пока и не нашел. А вот страничка проекта.
  • Simplex - здесь есть интересные куски кода, стоит посмотреть. Хотя это так - не фреймворк, а просто эксперимент, созданный за пару вечеров.
  • Raccoon - эта штука уже посерьёзней остальных. Буду её исследовать.
  • Вот еще один фреймворк, nerve
  • В комментариях Kuroki Kaze подсказывает, что есть еще JSAN. опенсурсовая библиотека javascript, но честно говоря, не слишком много я полезного там увидел.
  • Список проектов на github, посвященных nodejs

Если кто знает еще фреймворки для nodejs, буду признателен за ссылки в комментах.

Вообще, мне кажется, серверное программирование на js штука весьма перспективная. Не хватает только мощного фреймворка, по типу Zend или пакетов CPAN, как в Perl, или Gems, как в Ruby. Но это вопрос времени и я думаю, на эту тему стоит написать отдельный пост.

Про интернационализацию и локализацию

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

Почему? Например, я могу находиться в Испании, и зайду на мультиязычный сайт из под локализованного на баскский язык браузера (я Баск), а страничка всё равно отобразится на Испанском языке, хотя я хотел именно баскский, который, к тому же, вообще не связан ни с одной известной языковой семьёй и по-испански я просто бы ничего не понял. Такое может случиться, если язык пользователя определяется по IP.

Итак, чтобы правильно определить язык пользователя, мы можем посмотреть только на HTTP_ACCEPT_LANGUAGE, кроме него мы можем узнать язык пользователя только если он сам его укажет. Read more

HTML5 Tabs: a first touch

HTML5 have a new, very convenient element section which is used to separate content. I tried to implement tabs using this element, because the standard solution on unordered lists (UL) or definition lists (DL) is not semantic, because the tab is not associated with his content area. Finally, one evening I did the first version, “quick and dirty”, but I tried.

So, let’s see the result: HTML5 tabs demo

These tabs have some drawbacks (fixed content area height and some others), so I accept suggestions for improvement (professionals will understand what I mean, when they’re look the sample code).

Updated at 24 dec 2009

HTML5 Tabs: Первая проба

В HTML5 есть очень удобные семантичные элементы section, которые используются для разделения контента.
Я попробовал реализовать с их помощью табы, так как стандартное решение на списках UL не является семантичным. В итоге, за вечер был сделан первый вариант, что называется “быстро и грязно”, но я старался.

Итак, смотрим демо: HTML5 tabs demo

Принимаю предложения по улучшению, так как табы имеют некоторые недостатки (профессионалы поймут о чем я, когда посмотрят код примера).