Neurons to bytes

Archive for the ‘программерское’ Category

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

02.25.2010 by Ouch! - 2 Comments
Posted in программерское

Прочёл статью Настройка кеширования в 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

02.16.2010 by Ouch! - 1 Comment
Posted in javascript

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

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

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

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

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

01.13.2010 by Ouch! - 5 Comments
Posted in javascript, программерское

Наткнулся на замечательный микрофреймворк 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

01.09.2010 by Ouch! - 1 Comment
Posted in javascript, программерское

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

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

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

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

HTML5 Tabs: a first touch

12.21.2009 by Ouch! - 3 Comments
Posted in вёрстка, программерское

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

Интересная штука этот Rhino, или мысли о серверной разработке на Javascript

12.18.2009 by Ouch! - 3 Comments
Posted in программерское

Давеча посмотрел на исходный код проекта Etherpad, который гугл недавно свернул. Долго искал внутри проекта что-то похожее на скрипты питона или чего либо еще модного, пока до меня не дошло: проект написан на Javascript. Достаточно было открыть любой файл с расширением js.

Как оказалось, проект написан на Rhino. Это такая имплементация javascript’а на Java. Хоть я в жизни ничего и никогда не писал на Java, но носорог меня определенно заинтересовал. Вообще, классная же идея, писать и на стороне сервера и на стороне клиента на одном языке, на Javascript?

По-моему махровому мнению - это круто. Я слышал краем глаза про такой проект, Jaxer, который позволяет использовать Javascript на стороне сервера, но не щупал его.

Нужно будет потом посмотреть, как там обстоят дела на предмет существования фреймворков для разработки на джаваскрипте на сервере. И вообще, какие есть препятствия для серверной разработки на JS. А то что-то не слышно про серверных разработчиков на этом языке.

Update:

Нашел классный проект Nodejs, это веб-сервер, использующий гугловский джаваскриптовый движок V8. Очень интересная разработка, попробую её собрать под nix и попробовать наваять какую-нибудь простую штуку. Наверное, получится пост.

How to work comfortably with layout blocks in Zend Framework

12.02.2009 by Ouch! - 0 Comment
Posted in программерское

During my research, I found a convenient way to work with html blocks on the site. Almost every site has a number of blocks that should be present on some pages and absent on others. So, you need a flexible tool for managing the blocks.

I will present my vision of how to manage the blocks under Zend Framework.
Read the rest of this entry »

Обновление кода к статье “Блоки в Zend Framework”

12.02.2009 by Ouch! - 0 Comment
Posted in программерское

Я обновил статью Блоки в Zend Framework. Финальная версия и добавил в код дополнение, позволяющие передавать параметры главного контроллера в блок.
Это означает, что когда вы находитесь на странице, к примеру, http://example.com/pages/view/777 (где controller - pages, action - view и id - 777), то идентификатор (777) передастся так же в контроллер блока, который вы загружаете на данной странице, где его можно получить стандартным способом: $this->_request->getParam(’id’).

Event bubbling в Javascript - что это такое?

11.27.2009 by Ouch! - 0 Comment
Posted in программерское

Мало кто знает, как работают события в Javascript. Сейчас же модно юзать фреймворки, вот люди и не задумываются, как оно там работает и зачастую, тратят очень много времени на простые вещи.

Я расскажу про такую широко известную в узких кругах фишку, как event bubbling. Что это вообще такое?

Когда мы кликаем по-какому либо элементу на странице, то событие поднимается по всем родительским узлам кликнутого элемента, пока не дойдет до узла document. Это и есть event bubbling.
Посмотрим наглядно как это работает, ведь лучше увидеть, чем сказать тысячу слов.

Есть HTML:

<div id="dialog">
    I'm a absolutely positioned dialog. So click me!
</div>

Есть CSS:

<style type="text/css">
#dialog {
    padding: 200px;
    position: absolute;
    top: 100px;
    left: 100px;
    border: 1px solid #000;
    background: #ddd;
}
</style>

И, самое главное, есть javascript (JQuery):

<script type="text/javascript">
$(document).ready(function() {
    $('#dialog').click(function(e) {
        alert('Clicked on dialog!');
    })

    $(document).click(function(e) {
        alert('Clicked on document!');
    })
});
</script>

Как видно по коду, у нас навешаны колбэки на клик по диалогу, а так же на клик по документу. Давайте теперь откроем рабочий пример и кликнем по диалогу. Что получилось? А получилось 2 алерта, алерт диалога и алерт документа. Почему так вышло, мы же кликнули только по диалогу? Причина этого именно в event bubbling’е.

Давайте теперь сделаем так, чтобы при клике по диалогу появлялся только алерт этого диалога. Все, что нужно сделать, это отменить event bubbling, чтобы он не поднимался вверх по DOM узлам. Сделать это можно просто добавив e.stopPropagation() в колбэк диалога. Все. Давайте посмотрим второй пример.

Вот так, вроде простая вещь - но знают о ней немногие. Ее знание сильно облегчает разработку на javascript. Как, например, без особых извращений сделать так, чтобы какой-либо элемент на странице скрывался при клике вне этого элемента? Только через event bubbling!

До скорого.

Developing pretty buttons with css best practices

11.16.2009 by Ouch! - 3 Comments
Posted in вёрстка

In this article I’ll show you how to make beautiful buttons to use these on your web pages using best practices. These buttons are:

  • Use only one picture for all states
  • Has a 3 states: the state of rest, when you hover the mouse and when clicked.
  • Having less of css code.
  • Can be easily embeded into any place of your web pages.
  • The text on the button is just text, not image.
  • Buttons can be of any width.

As a result, we have got these buttons:

preview

Read the rest of this entry »