Что же такое постмодернизм?
«Что за постмодернизм такой?», — спрашивают в комментариях. Для тех, кто слышал, но не знает, советую очень хорошую книжку «для чайников»: Вадим Руднев. «Словарь культуры XX века». Интересно написана. Все базовые понятия культуры 20 века потятно разжеваны. Must-read для поднятия общего уровня. lib.ru/CULTURE/RUDNEW/
В частности,в главе про постмодернизм есть, конечно же, замечательная цитата из замечательного Эко, в которой максимально доходчиво объясняется на пальцах один из основных принципов постмодернизма. Кстати, лучше этот кусочек (если я не ошибаюсь, то это пояснительная записка к «Имени Розы») найти и прочитать целиком.
Да-да, именно оно — «Заметки на полях к „Имени Розы“». lib.ru/UMBEKO/ekopolo.txt
Вот там очень хорошо про постмодернизм. А самое «Имя Розы» не читайте, лучше начните с «Маятника Фуко» — вот это действительно вещь! lib.ru/UMBEKO/
Если хотите тонко поприкалываться, то «Внутренние рецензии» почитайте, они коротенькие. lib.ru/UMBEKO/umbeko.txt
Вот, собственно, и все.
Простое кэширование страниц
Простое кэширование страниц. Для чайников. На PHP.
Кэширование — замечательная вещь. Часто (теперь — почти всегда) страницы на сайтах генерятся динамически. Это теперь модно. Однако же — в реальности — почти всегда страница собирается заново гораздо чаще, чем она изменяется. Грубо говоря, мы опубликовали новый документ, и при каждом обращении к нему он заново считывается, скажем, из базы данных, заново прогоняется через шаблон и прочее и прочее. Мы снова и снова делаем одну и ту же работу.
А можно просто один раз сделать, а потом сохранить результат этой работы. И при каждом запросе выдавать готовый результат, а не делать все заново. Это и есть кэширование.
Оно позволяет, снизить нагрузку на сервер и на базу данных. Непонимание принципов работы кэша иногда приводит к забавным курьезам.
Единственная проблема — это устаревание кэша. Допустим, что данные на странице изменились, а кэш страницы — еще нет, и пользователю будет выдаваться старая версия страницы. Способы борьбы:
1. Выставлять более-менее приемлимое время устаревания кэша. Например, через 10 минут страница устаревает и кэш генерится заново. Минусы: возможна ситуация, когда пользователю 9 минут будет показываться старая страница.
2. Кнопка «очистить кэш». В некоторых системах вообще нет кнопки «очистить кэш», вместо нее есть кнопка «перегенерить сайт целиком». Нажимаем на эту кнопку — и весь сайт генерится в статичные файлы, то есть, фактически, в кэш. Минусы: стрельба по воробьям из пушки. Мы поменяли одну страницу, а перегенерить приходится весь сайт.
3. «Умная» очистка кэша. Очищается только кэш той страницы, которую мы изменили. Минус: часто изменение одной страницы затрагивает и несколько других. Главное — понять, каких именно и очистить кэш у них тоже.
Лично у меня реализованы все три метода.
А теперь — в двух словах, как сделать себе кэш. Чудесные функции PHP — ob_start и иже с ней позволяют не выводить страницу в браузер, а, например, сохранить ее в переменную. Про это я уже писал.
Это вставляем в начале страницы:
$modif=time()-@filemtime ("cache/$crc");
if ($modif<600) ob_start ();$url=$GLOBALS['REQUEST_URI'];
$crc=md5($url);
{
include ("cache/$crc");
exit();
}
Как это работает:
Берем адрес страницы, вычисляем из него md5. Это будет использоваться, как идентификатор страницы. Например, для УРЛа technology/php/caching md5 будет всегда одим и тем же. Этим мы и воспользуемся.
Файлы кэша будут лежать в директории cache. Смотрим, сколько секунд (filemtime) исполнилось файлу с кэшэм данной страницы. Если он не очень старый (меньше 600 секунд) и вообще есть — выводим его (include).
Если нет — то включаем ob_start и продолжаем дальше.
Это вставляем в конец страницы:
$fp = @fopen ("cache/$crc", "w");$cache = ob_get_contents();
ob_end_clean ();
echo $cache;
@fwrite ($fp, $cache);
@fclose ($fp);
Как это работает:
Считываем содержимое буфера (ob_get_contents). Получаем в переменной $cache то, что должно было выводится в браузер. Выводим в бразуер, раз должно (echo).
Записываем содержимое буфера ($cache) в директорию cache в файл $crc.
Все. Теперь при следующем обращении к странице с этим адресом скрипт (смотрите первую часть) будет смотреть, есть ли соответствующий файл в кэше и если он еще не устарел — просто выводить его и прекращать обрабатывать страницу (exit).
Примерно так оно и работает. Таким образом, страница выводится из кэша где-то за 0.001-0.004 секунды. Выигрыш процессорного времени налицо.
Разумеется, я описал только общий принцип, у меня сделано несколько по-другому.
О СУКах и проч.
Влад Головач недописал материал о СУКах (CMS) и выложил только вступление. blog.exmachina.ru/archives/000707.html Как всегда — много правильных вещей, в частности то, что «даже кухарка может управлять CMS» — порочная идея.
У меня у самого много мыслей по поводу CMS. Очень много. Нужно сесть и написать. Вообще, накопилось штук пять тем, которые хочется тщательно, во все дырки, описать на «Спектаторе». В том числе и темы «Спектатор против Регистра», или «Блоги vs „Сайты со статьями“», «Проектирование системы vs „выращивание“ системы» и прочее.
Update. Влад выложил еще и свои 10 тезисов о СУКах, например «Идеальная база данных для большинства СУКов — обычная файловая система (вы не забыли, надеюсь, что файловая система это тоже бататаза?). Во-первых, она не ограничивает пользователя в средствах редактирования, во-вторых, она обладает минимумом техподробностей». blog.exmachina.ru/archives/000708.html
Из тезисов становится понятно, о каких СУКах он говорит: работающих на стороне клиента и создающих преимущественно статические файлы. Не могу сказать, что он не прав, на spectator.ru до сих пор стоит подобная система, по сути дела-то. Он описал очень хороший тип СУК, хотя я навскидку могу сказать, где этот тип не будет так хорош. Впрочем, Влад написал же «Нет идеального СУКа. Нет же у нас идеальной верстальной системы. Под разные цели и разных пользователей нужны разные системы». В комментариях у него уже то-то отметился на тему «секретарше леночке, конечно, можно попробовать рассказать, как на фтп лить и ставить ссылки...а смысл ? все равно все испохабит...», — так вот, это глупость. Во-первых, ничего не мешает сделать так, чтобы на ftp оно лезло само и ссылки ставились удобным для секретарши способом, а во-вторых, каждый должен заниматься своим делом: глупые секретарши нужны для того, чтобы хуй у начальника сосать, а всем остальным достаточно потратить пару часов на обучение. Ибо работать с CMS должен человек обученный хотя бы минимальным навыкам.
PS. Эх, надо свой текст про CMS писать.
Life in the Liberty City
В игрушках мне очень нравится ненавязчивый юмор. В GTA III его полно. Для тех, кто не в курсе, GTA — игра про угонщика машин. Со всей аттрибутикой: взрывы, погони, мафия, полиция, радио. Радио — особый шик: оно занимает целый компакт-диск, при этом в игре около десятка радиостанций, переключаться по которым можно колесиком мышки.
Так вот, в GTA нашпиговано много ненавязчивого черного юмора. Ну, например, миссия: заминировать машину, пока чувак жрет в кафе. Когда он поел и выходит, камера показывает его машину и ненавязчиво так вывеску заведения со слоганом: «Eat till you explode». Соответственно, чувак садится в машину и взрывается. Очень много стеба по радио. Так, например, реклама компьютерной игры про обезъянку Pogo. Сначала перечисляются фичи игры, а потом миссии, начиная со спасения из лаборатории («This nasty scientiests deserved to die»), ну «...и, наконец, главная миссия — помоги Pogo стать Президентом Соединенных Штатов».
В рекламе даже адрес сайта дается — Pogo the Monkey dot com.
Ну или, например, как-то на радио в «общательную» программу звонит некий чувак с проблемой «My mom does not think I am real man». Фишка в том, что этот чувак — Томми, один из мафиозных шишек.
Update. В комментариях — ссылка на тексты из радио.
Lazlow: «Alright let’s go over here. Hello caller, you’re on Chatterbox.»
Toni: «Yeah? Is that Lazlow?»
Lazlow: «Yes it is. Who is this?»
Toni: «My name ain’t important! It’s real un-important, okay?!»
Lazlow: «Er...no not really, I mean this is a radio show, people usually tell us their name.»
Toni: «My name I is real un-important! If you wanna keep on being a wise-guy, you’ll find out just how un-important....like...un-important I just got shot in the head un-important! Do I make myself clear?!?»
Lazlow: «Err..yes...wh..why are you calling in today?»
Toni: «Because I need some advice. And I ain’t doing any of that shrink shit!»
Lazlow: «Er..i..if you swear again, we’re gonna have to cut you off, this is a family show.»
Toni: «Sorry sorry, sorry...I’m..I’m..I’m just a little unhappy, a bit agitated. Real angry. It’s my ma! She don’t think I’m a real man. Can you imagine that? I mean, I do a mans job an all, but, she treats me like a little boy! All I get is ’your pa’ this and ’your pa’ that and ’you ain’t a real man Toni’ and it’s driving me freakin’ nuts!!»
Lazlow: «Well, Toni...»
Toni: «Toni!? How’d you know my name was Toni?? You tracing this call? Cos if you are, you’re gonna get real intimately acquainted with...what your brains look like! My name ain’t Toni....okay!?!»
Lazlow: «Err...okay.»
Toni: «But my ma, she keeps going ’Toni Toni, be a real man, stand up for yourself, don’t take no shit!’ But all I do is to be a good son, and I want her to show that she cares for me! Show that...she loves me! And you know...say I was a good kid! But...it seems like nothing’s ever good enough for her, you know what I mean? What do I do?»
Lazlow: «Well Ton...I mean sir...you know in life we have a lot of obligations, and we just have to kinda...face up to them...and right now, I’m obligated to play some commercial announcements. We’ll be back right after this!»
