SYStem EXclusive

Я тут пешу - чего же боле…

Архив за месяц September, 2007

Flash intro feat. .htaccess

Wednesday, September 19, 2007

Тривиальная задача - поставить на сайт flash intro. Я знаю, что они всем надоели до чёртиков и ничего, кроме раздражения не вызывают, однако некоторым клиентам - нравится. Вообще они имеют право на существование, если сделаны без нездорового фанатизма (и интро и клиенты:)).

Итак - пусть индексная страница index.php. Как это обычно делают? В лучшем случае рисуют страницу intro.php и в .htaccess пишут DirectoryIndex intro.php, при этом все внутренние ссылки, указывающие на корень / приходится менять на /index.php. Худшие случаи я тут не рассматриваю.

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

Идея, собственно, вот в чём - не трогаем код, не переименовываем файлы и не меняем DirectoryIndex.
Трогаем только .htaccess :)

  RewriteCond %{HTTP_REFERER} !yourdomain.com
RewriteCond %{REQUEST_URI} !intro.php$
RewriteCond %{REQUEST_URI} ^[/]?$
RewriteRule ^(.*)$ /intro.php [R,L]
# остальные преобразования, если необходимы

Теперь - подробнее

Если HTTP_REFERER - не ваш домен
RewriteCond %{HTTP_REFERER} !yourdomain.com


Это условие нужно для того, чтобы редирект на intro не зациклило
RewriteCond %{REQUEST_URI} !intro.php$


Срабатывает только если запрошена индексная страница. Без этого правила пользователь, зашедший по внешней ссылке с поисковика, - будет отправлен на intro - нам это не нравится.
RewriteCond %{REQUEST_URI} ^[/]?$


Все условия соблюдены - стоп-машина, редирект.
RewriteRule ^(.*)$ /intro.php [R,L]

Это - работает!
А теперь вопрос на засыпку - насколько дружелюбно такое преобразование к поисковым ботам?

Opera 9.5 для разработчиков

Monday, September 17, 2007

http://www.habrahabr.ru/blog/opera/25343.html

Ну достали, блин. Каждый одеяло на себя тянет. Большое разработчицкое спасибо Опере за то, что они навтыкали новых фич, которые будут использоваться непонятно кем и непонятно для кого. С нетерпением жду появления  CMS с надписью “Оптимизировано для Opera 9.5+”

Nested sets

Friday, September 14, 2007

Сегодня я расскажу вам сказку про nested sets.

Что такое nested sets, почему они nested и где их можно эффективно применять?

Nested sets (вложеные множества) - один из способов организации деревьев, которые являются частным случаем организованных структур данных.
*ух, мощно начал, прямо как по бумажке*

В этом способе организации деревьев есть большой недостаток - сложность сортировки при выборке. Но есть и большой плюс - то, что сама структура хранит последовательность узлов, ну навроде как в XML.  Такой подход очень удобно и убедительно использовать в организации структуры сайтов, ибо когда я вижу всяческие sort_order в базе - мне хочется плакать вместе с разработчиком, который это придумал. Ещё один большой плюс - возможность получить любую часть дерева одним запросом. Правда запросы при этом становятся большими и очень большими. Впрочем, я не вижу в этом проблему - ведь можно написать библиотеку (а сколько их уже написано!) и пользоваться ею, сколько душеньке угодно.

Nested sets обычно пугает новичков своими SQL-запросами и объяснениями, которые ещё больше запутывают
Попробую дать своё объяснение, на мой взгляд, более простое. Прежде всего начнём с названия - вложеные множества - кто они такие и куда вложены? Если подумать чуть-чуть, то становится очевидно, что множество узлов вложено в другой узел, а не ссылаются на parent, как в другом известном (даже, по-моему, чересчур) способе организации деревьев.

Устройство nested sets почему-то принято разъяснять так, как это сделано в этом документе. Не буду тут расписывать про правые и левые индексы - все в сад
ns1.gif

На мой взгляд - малоинформативная картинка.
А теперь покурим хороших шишек и попробуем представить себя парсером, который разбирает вложеные друг в друга узлы. А раз мы всё-таки - парсер, то разбираем строку, а не какие-то кубики с линиями, верно? И когда мы записываем структуру, нарисованную на верхней картинке, в строку - сразу становится всё ясно и понятно!

ns2.gif
Наглядно видно, что должно происходить с индексами при операциях с узлами. Готов хоть сейчас сесть писать класс. Перо мне и бумагу!

nnCron - в бой идут одни старики

Tuesday, September 4, 2007

Вчера задумался, почему я, имея самую простую клавиатуру за 200 р., должен чувствовать себя ущербным по отношению к обладателям мультимедиа-клавиатур за тысячи рублей, утыканых со всех сторон дополнительными кнопками. Хочу назначать на любые клавиши любые приложения и всё тут. Для начала хотелось бы запускать музыку, видео, почту и браузер.

В жизни всегда есть место для творчества - на сцене появляется nnCron. Что это такое? Если сказать, что это планировщик или твикер - это будет верно, но не до конца. nnCron - это швейцарский нож для управления ресурсами вашего компьютера. При своём мало-размере возможности его впечатляют. Лучше об этом почитать на сайте производителя.

Минимум, что он умеет - это запускать приложения по времени (sheduller), при этом синтаксис команд совместим с Unix crontab. Максимум - это встроеный скриптовый язык. При этом не обязательно для добавления задачи писать макрос, у nnCron есть и GUI, через который можно управлять заданиями в привычной для многих форме. По мне, так все остальные твикеры и шедуллеры - идут строем в ресайкл бин.

А теперь - слайды :)

Назначаю горячую клавишу <Ctrl+F12> на запуск The Bat

#( Bat-start
AsLoggedUser
WatchHotKey: “^{F12}”
Action:
StartIn: “C:\Program Files\The Bat!”
ShowNormal NormalPriority
START-APP: C:\Program Files\The Bat!\thebat.exe
)#

Назначаю горячую клавишу <Ctrl+F11> на запуск Mozilla Firefox
Тут немного интереснее - если Firefox уже запущен, то nnCron не будет запускать копию, а сделает окно Firefox активным.

#( Firefox-start
AsLoggedUser
WatchHotKey: “^{F11}”
Action:
PROC-EXIST: “firefox.exe”
IF
WIN-ACTIVATE: “/.*firefox/i”
ELSE
StartIn: “C:\Program Files\Mozilla Firefox”
ShowNormal NormalPriority
START-APP: C:\Program Files\Mozilla Firefox\firefox.exe
THEN
)#

Поработал - отдохни.

Назначаю хоткеи <Ctrl+F10> на воспроизведение DVD (используется Mplayer) и <Ctrl+F9> - на воспроизведение mp3 (Winamp).
При запуске Winamp, неплохо было бы, чтобы он сразу стартовал проигрывание трека, я надеялся нагуглить какие-нибудь параметры командной строки для оного, но нашёл это - плагин AutoPlay. Всяко неплохо, даже ещё интереснее. И наконец, чтобы уж до конца довести идею “once-click”, - при запуске DVD будем убивать Winamp, зачем - обьяснять не буду.


#( Mplayer-DVD-autoplay
AsLoggedUser
WatchHotKey: “^{F10}”
Action:
StartIn: “C:\mplayer”
ShowNormal HighPriority
KILL: “mplayer.exe”
KILL: “winamp.exe”
START-APP: C:\mplayer\mplayer.exe dvd://0 -dvd-device e: -fs
)#


#( Winamp-start
AsLoggedUser
WatchHotKey: “^{F9}”
Action:
StartIn: “C:\Program Files\Winamp”
ShowNormal NormalPriority
KILL: “winamp.exe”
START-APP: C:\Program Files\Winamp\winamp.exe
)#

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

nncron-keyboard.JPG