Covex
+1
Вот моя реализация: habrahabr.ru/blogs/javascript/40909/ =)
Covex
0
У нас в НН есть ещё один мост через Оку. Там пробка всегда =)
Этот мост не отмечен на карте, соответственно, и пробка тоже не отображается.
Covex
0
Уже года 2 (а может и больше) пользую Jabra BT320s в связке с наушниками Sony MDR-NX2: гарнитура цепляется на шнурок на шею от наушников, а сами наушники ни за что не зацепляются. Очень удобно.

// А цепочка, кстати, не от тамогочи, а от пробки в ванную =))
Covex
0
нарисовать карты районов для всей России осилит не каждый
Они все уже нарисованы и храняться в wikimapia. Можно подключить слой от WikiMapia в Google Earth и сохранять полигоны в kml-файлы.

Я такое безобразие делал для сервиса частных объявлений о недвижимости. Способ, может быть и не совсем прямой, но для Нижнего его таки можно осилить =)
Covex
+1
Обращение к переменной $_smarty_tpl->getVariable('thing')->value['color'] явно медленнее, чем $this->_tpl_vars['color']
Covex
–2
В третьей версии смарти всё, что не касается инклюдов медленнее чем во второй.
Надо было придумать пример без дерева — чтобы статья более разоблачительной казалась =)
Covex
0
// блин, текст статьи поменялся =) коммент отменяется
Covex
+1
А если до вывода поставить ob_start(); а после вывода — ob_end_clean(); то результаты будут совсем другими =)

php test-xslt.php
— total: 29.31005859375
php test-smarty.php
— total: 713.7099609375
php test-php.php
— total: 18.787841796875

Фактически получается, что в твоих тестах XSLT борется с функцией _smarty_include класса Smarty (если что — я не в курсе часто ли она используется на практике)

ЗЫЖ Смарти — зло! =)
Covex
0
> всегда с интересом брал на себя работу менджмента
Согласен. Это интересно!
Но всё упирается в рамки. Ваши термины «художник» и «таджик» — это описание границ возможного поведения: «Художник» делает что хочет, а «Таджик» то, что ему говорят. «Менеджер среднего звена» — это «СуперТаджик», он отличается от обычного тем, что он начальник. И всё )
Covex
0
Личный опыт.
Сейчас я уверен, что мне лучше либо работать «на дядю» на должности «художника» либо работать на себя. Но уж никак не быть «начальником под управлением дяди».
(сейчас я уже давно не «начальник» =)
Covex
+1
> Став начальником, это чувство остается.
Став начальником художник перестаёт быть художником ) А чувство может притупиться до нуля.
Covex
+3
> не имею технической возможности протестировать на *nix
Виртуальная машина спасёт отца русской демократии )
Covex
0
Оно сначала всё грузит, а потом — показывает + у меня FF тормозит (на некоторых таких сайтах, например, на твоём =)
Covex
0
Мне была важна скорость и возможность масштабирования. «Возможность масштабирования» в данном случае заключается в том, что этот запрос можно пускать как внутри PHP, так и через web-сервер.
В данный момент всё, само собой, работает на одном сервере и подзапросы через web-сервер сейчас — это зло (а проблему десятков серверов я планирую решать потом =)
Covex
0
Не. Я видимо не правильно объяснил.
Данные вообще как угодно могут храниться — хоть в MySQL, хоть не в MySQL =) От туда они сначала приходят в некий «промежуточный формат», который легко преобразуется в XML (DOMDocument). А он уже, в свою очередь, используется только для XSLT-трансформаций и передачи результата клиенту.
Covex
0
Ну тяжесть апача становится понятна, когда не хватает MaxClients, ну а если он успевает обработать все запросы, то и париться не стоит.

Всё остальное — дело привычки, конечно.
Covex
0
Если честно — не вижу никаких проблем использовать идеологию для множества небольших проектов. «Чем быстрее работает — тем лучше» — это критерий правильности выбора технологии.
Covex
–1
Данные не храняться в файлах, а сериализуются в XML.

> ты приходишь в ателье забрать свой костюм
Ателье не сможет физически обработать «миллион» клиентов, поэтому бизнес-модель должна быть другая.
Covex
0
Но вот при таком подходе обращения к кэшу происходят уже в тяжёлом app.-server (типа апача), а этого хочется избежать.
Covex
0
Про удаление кэша я ничего не писал. «Данные устаревают — кэш должен быть изменён» — так должно работать =)
Covex
0
> Тогда это все теория. Но толку от этого не так много.
Статья так и называется «прототип системы» =)
Covex
0
> Система еще не допроектирована
Ну я то думал, что она допроектирована до степени «готовность проверить на реальной задаче номер 1». И перерабатывать всё равно придётся, но думаю, что незначительно.
Covex
0
> К сожалению, вы не сказали, что именно разрабатываете
Мой косяк =)
Covex
0
> Это уже тонкости реализации… его будем кешировать по user_id… У каждого блока свое время жизни
Таких «вспомогательных» блоков не должно быть. И как раз из-за необходимости отключать кэш.
Вообще — я не планировал делать социальную сеть на своей системе =)

> Можно чуть подробнее? А если я зайду с другого компа
Вы просто нашли (немонетизируемую =) задачу, которую сложно решить, используя идею статьи.
Подробнее без конкретики не получится, наверное (но я знаю, что это вполне реально сделать)
Covex
0
Я не верю в XSLT на клиенте (я знаю, что возможно, но мне не нравится как оно работает)
Covex
0
Внеочередной-фреймвёрк-ради-корыстных-целей сложно анонсировать — он либо уже продан, либо коммерческая тайна!
Covex
0
Кэшировать узкие места и делать заплатки — это не интересно… К тому же — баян.

Целевая аудитория с доступным memcached уже не такая уж и большая =(
> используют велосипеды собственного изготовления и в сторонних каркасах не нуждаются
Факт. Значит бизнес модель будет построена по другому…
Covex
0
> блочного кеширования
наверное, «блочным» кэширование нельзя называть: запрос браузера и запрос за блоком — это одно и то же.

> здесь сразу две проблемы
счётчика «просмотров» не будет вообще — этим должна заниматься совсем другая система (LI.RU, awstats и пр.)
счётчик «не просмотренных коментариев как на хабре» будет реализован на клиенте через клиентскую БД
вобщем, все юзерозависимые задачи должны быть пересмотрены.
Covex
0
> Уверен, что нужно решать конкретную, стоящую перед вами здесь и сейчас задачу.
Согласен только в принципе. Но в условиях, когда задачи нет, это не работает потому что скучно =)

> разрабатывайте сами сервисы
С этим то как раз и проблема =( Есть идеи КАК сделать, но вообще нет (и никогда не было) идей ЧТО сделать…
Covex
0
Мне всё же кажется, что это — костыль =) Фактически после установки придётся больше времени тратить на борьбу с багами при портировании на Win32, чем с их настойкой (не говоря уже о расширении возможностей nginx).
ЗЫЖ Я оба дистрибутива ставил. Один из них не захотел работать, а второй тормозил систему (я не помню точно).
Covex
0
Это всё так. Но программист контроллеров программирует на PHP и ему удобнее работать в переменными, чем в DOM-ом. Вобщем этот «велосипед» был создан только на предположении, что «так удобнее» (я допускаю, что могу ошибаться =)
Covex
0
Вы всё правильно говорите (на полном серьёзе =)
Только вот я не пытаюсь найти модуль nginx и испольовать memcached — я пытаюсь заложить принципы работы с подобным ПО: сейчас всё работает на апаче, а кэширование можно реализовать хоть на файлах.

> Я считаю, что вопрос кеширования должен решать значительно позже.
Мы много раз пытались придумать как бы всё закэшировать. Часто получалось ещё хуже, чем было =) Так что, это «позже» уже настало.
Covex
0
> а не задолбаешься писать тысячу раз
Если задолбаюсь — сделаю удобную конструкцию =) В любом случае, сейчас массив/хэш легко преобразуется в нужный формат.

> какой смысл реализовывать засыпание дома в пхп-код, если проще и быстрее засыпать в xml?
ну это чтобы не было желания просыпаться их действительного xml (со всяческими namespace и прочими прибамбасами) — чтобы потом не было «потерь данных при преобразовании».

> почему ты не выносишь его в аттрибут
ну для одного контроллера главной страницы это не нужно =) на реальных задачах будет понятно куда засунуть этот URI
Covex
0
> Зачем здесь Apache?
С Линуксом я всегда общался через админа-переводчика, так что особой разницы между proxy_pass и fastcgi_pass для себя я не делал. Потестировать на «реальных объёмах» работу пыха без апача у меня врятли получится — так что первое время будет Apache (а потом посмотрим =)

> Поставьте себе виртуальную машину с Linux
Для построения и запуска модели наличие апача и отсутствие линукса не мешало. Но вот для запуска «готовой системы» это будет необходимо. Так что — да. Придётся поставить и разобраться в линуксе =)

> Простите, может я проглядел в тексте, а что за модуль nginx вам требуется?
Модуль должен читать заголовки, расшифровывать куки, формировать ключ memcached, искать инфу в memcached. Если инфа есть, то посылать HTTP-заголовки и тело ответа, если нет — модуль должен работать как ngx_http_proxy_module. Вобщем, алгоритм работы модуля теоретически формализуем, но пока не практически реализуем =)
Covex
0
А ещё этот код — не рабочий =( С [{}{}] он работает неверно. Вот новый, рекурсивный:
  1. var check = (function(close) {
  2.  var bracket = { }, ch, end;
  3.  for (i in close)
  4.   bracket[close[i]] = (function(i) {
  5.    return function(pos) {
  6.     if (ch[pos+1] == i)
  7.      return pos+2;
  8.     else if (bracket[ch[end = pos+1]])
  9.      while (end = bracket[ch[end]](end))
  10.       if (ch[end] == i)
  11.        return end + 1;
  12.     throw { };
  13.    }
  14.   })(i);
  15.  
  16.  return function(str) {
  17.   try {
  18.    var pos = 0;
  19.    while (pos < str.length)
  20.     pos = bracket[(ch = str)[pos]](pos);
  21.    return true;
  22.   }
  23.   catch (e) {
  24.    return false;
  25.   }
  26.  };
  27. })({ ')':'(', '>':'<', '}':'{', ']':'[' });
  28.  
  29. alert(check("[<>{}]")); // true
  30. alert(check("")); // true
  31. alert(check("[[[]]][][[]][()]{}[]")); // true
  32. alert(check("[[[)]]][][[]][()]{}[]")); // false
  33. alert(check("]")); // false
* This source code was highlighted with Source Code Highlighter.
Covex
0
А ещё мой вариант быстрее в 4 раза.
Covex
0
Понятный алгоритм со стэком уже 1602 выложил =)
Covex
0
JavaScript:
var check = (function(close) {
 var open = { };
 for (i in close)
  open[close[i]] = i;

 return function(str) {
  var first=0, begin = 0, end = 1, len = str.length;
  while (first < len) {
   if (close[str[end]] == str[begin]) {
    if (begin == first)
     begin = first = ++end;
    else
     begin--;
   }
   else if (open[str[end]])
    begin++;
   else
    return false;
   end++;
  }
  return true;
 };
})({ ')':'(', '>':'<', '}':'{', ']':'[' });

alert(check("[[[]]][][[]][()]{}[]")); // true
alert(check("[[[)]]][][[]][()]{}[]")); // false

* This source code was highlighted with Source Code Highlighter.
Без стэка =)
Covex
0
На конференции UserExpiriense 2007 Maria Stone рассказывала о том как менялся внешний вид блока «Возможно вы имели ввиду», и об эффекте от каждого изменения: количество кликов на уточнённую фразу увеличивалось каждый раз то ли в 2 раза, то ли на порядок.

Было бы интересно узнать эффект от и этого улучшения =)
Covex
0
Это труЪ, если шифровать только UserID.