Кстати в блоголёте все отлично с кодом и апи, ато, чо писал якобы эксперт при пристальном внимании выяснилось, что все его замечания полное фуфло, и у эксперта явно просматривается отсутствие опыта, а лишь хорошое знание статей... Каждому свое - у кого то отлично работающий движок, а у кого то рассуждения на тему движков
А блоголёт как раз и есть почти голый html, плюс еще на этапе проектирования делался оптимизированным ддля малого потребления памяти и времени. Только вот он имеет все функции и фичи что и wp, а по некоторым фичам wp еще ой как далеко (например open_id, foaf, встроенный антиспам, управление виджетами...). Беда wp как раз в плагинах - wp устроен таким образом, что абсолютно все установленные плагины загружаются при любом обращении к странице, да и вообще wordpress загружает большинство модулей вне зависимости от того, будут ли они вообще использоваться. Блоголёт устроен по иному - загружаются только те модули, которые только используются - ни одного лишнего, в том числе это касается и плагинов. Также следует признать, что большинство плагинов wordpress бесполезны, либо давно должны были бы быть включены в ядро, например подписка по E-Mail на комменты. Что ксается новых версий - я скчиваю и просматриваю регулярно изменения wordpress, и поэтому гя знаю о чем говорю, ну например баг с письмами они правили пару лет точно (темы в письмах были кривыми). С каждой новойверсией wp растут трбования к хостингу - их движок с каждым разом становится все более монструозным...
Об неудачной установке - см readmeru.txt в котором есть замечание про установку на денвер последних версий
Блоголёт работает не на одном же файле в самом деле, перед каждым изменением создается резервная копия файла: практически хранится еще и резервная копия сайта, перед каждым обновлением создается бекап. 10 гиг -- один сайт, это точно не блоголёт (как впрочем и не wordpress) однозначно. Ниша блоголёта это все же не супер мега сайты, а то чем занимаются большинство - личные блоги, гс, сателиты и прочее. Все же для больших проектов требуется индивидуальный подход. Я не против бд - они нужны там, где нужны и не являются панацеей.
Так отчего же не хранят результат в бд, раз оно лучше?
Про файлы: если так все плохо с файлами, то отчего же многие фреймворки кешируют результаты запросов к бд в файлы на диске?
Почитал статью про синглетоны -ничего интересного и в сущности
function &instance() {
return Singleton::instance(__CLASS__);
}
что то мало отличается от моей, и совсем не отвечает на вопрос
$classname = 'some_class';
$instance = ???
По ходу дела ты так и не понял, в чем причина такого кода.
и зачем мне давать ссылку на include если вопрос идет о
$s = '<?php DoSomthing() ; ?>'; ..//вообще $s это целиком html страница с php вставками
eval('?>' . $s);
каким боком здесь касается include остается загадкой, или имярек предлагает вначале сохранить строку в файл, а потом инклюдить?
Я безусловно понимаю, что имею дело с центром вселенной, но все же мое предложение про пост на сайте блоголёта предназначено исключительно про работу блоголёта, тогда так как у нас спор идет про php.
gettext не подходит из за необходимости обязательного наличия софта третьих сторон - компилятор и редактор, но в конце концов я кажется уже придумал простое решение без eval
blogolet добавил 11.07.2009 в 18:24
Добавлю про синглетоны - только не надо советовать еще и в каждый класс добавлять специфическийкод в конструктор: мое решение это всего пару одинаковых строк для любого класса, без обременительного копипаста
Своим собственным, гордится правда им сейчас не могу (более года не обновлял, есть проблемы на многоядерных процах), скачать можно гу меня здесь:
http://blogclient.ru/
blogolet добавил 10.07.2009 в 20:50
HraKK: хочу ответить на твое ревью, так как по некоторым положениям ты не прав (про ob_start уже писал),
Далее смотри например:
$classname = 'MySomeClass';
$instance = $classname::Instance(); //не позволительная конструкция для php
$instance = GetInstance($classname); //единственный возможный вариант, так как
$instance = new $classname(); // возвратит новый экземпляр класса,
/*а чтобы возвратил существующий надо иметь либо статическую переменную, приэтом ее надо объявлять каждый раз в в ккаждом классе, а иначе если будет создан экземпляр родительского класса, то и значение статической переменной уже будет присвоено. Решение через статические переменные излишни будут дублировать код, и таким образом мое решение */
public static function &Instance() {
return GetInstance(__class__);
является практически единственным приемлемым.
далее:
@filemtime Ошибки надо обрабатывать и предупреждать, а не глушить. Тоже самое как с global - дальше уже можно
функция одновеременно делает две вещи: проверяет наличие файла и получает ремя, без @ не обойтись, либо разбивать на две функции, при этом для file_exists все равно надо ставить @ так как настройки предупреждений могут вывести сообщение об отсутствии файла (по мне это странное поведение функции, но оно было замечено).
все же перед строкой
include($CacheFileName);
стоит строка
if (($time = @filemtime ($CacheFileName)) && (($time + $Options->CacheExpired) >= time() )) {
и как я уже писал выше, функция filetime проверяет наличие файла.
eval('?>'. $s);
собствено исполняется сгенирированная страница, перед сохранением в кеш, откуда она будет include - подскажи иное решение? Полностью согласен, что eval вредная.
@unlink($paths['cache'] . $filename);
в кеше может и не быть удаляемого файла и делать @file_exists - уже писал об этом выше, здесь получается третье замечание на одну тему.
далее про eval, где его много в одном месте "Я не знаю, как этот код комментировать без матов, поэтому опущу." Увы это наблюдается в админке, где используется следующая модель: внешний ресурс html шаблонов - один для всех языков, и собственно строки из языка, и также локальные переменные внедренные в html, eval смешивает эти три сущности. Возможно это не лучший вариант, но после смены модели локализации пришлось по быстрому перелопачивать всю админку проставляя всюду eval - это явилосьследствием слабой проработки на этапе планирования локализаций. Я более чем убежден, что нужно разделять данные, код и ресурсы, и считаю просто недопустимыми конструкции вида
tag<?php echo get_some_value($param); ?>endtag
Собствено простого решения для локализаций у меня нет - известные мне более чем русурсоемки, либо кто может показать изящное решение?
Далее "У вас все классы используются как обвертка над функциями, 99% методов класса паблик. Это говорит о том что вы совершенно не владеете основами объектного программирования.
Паблик методов должно быть ~2-3 в среднем а то и меньше в классе. А у вас их 10-15."
Абсолютно не согласен - меня даже изррядно удивило такое мнение о колве методов с конконкретной видимостью, что на мой взгляд по меньшей мере глупо - задача диктует интерфейсы и публичные методы, а не требование к их числу. Но должен заметить, что некоторые методы приходится объявлять публичными, так как они являются обработчиками событий и должны быть доступными извне.
Ну и еще хотелось бы ответить про то, что я считаю или не считаю, но пожалуй тут получился флеймообразующий топик с весьма едкими обвинениями.
blogolet добавил 10.07.2009 в 21:37
Я написал ответы на некоторые вопросы по блоголёту у себя:
http://blogolet.ru/otvety-na-voprosy/
пожалуйста, оставляйте там свои вопросы - мне так будет проще следить за тем, что уже написал, а то на форуме мне сложно отследить все вопросы, и на часть из них вероятно я не ответил, или ответил не полностью.
Что касается теста нагрузки на мой сервер - побойтись бога: 100 конкуррентных запросов мой ьболее чем скромный vds повесят сразу, у меня не выделенный сервер - пока все мои текущие потребности решает этот vds, плюс я даю бесплатно хостинг у себя нескольким проектам (не моим). Блоголёт здесь ни причем.
HraKK: прошу прощения, за свой резкий выпад в пред сообщении, и большое спасибо за ревью - учту и исправлю, просто весь топик приходится сражаться и под вечер я уже готов был крыть всех матом, ладно бы еще по делу как у тебя, а то просто так писали... Все же php для меня не родной и вторичный язык (дельфи первый) b приходилось ложится в прокрустово ложе ограниченний php (нет строгой тпизации, нет виртуальных методов, непонимание некоторых механизмов управления памятью в php) наложили отпечаток. Я не претендую на особый статус моего кода, но есть все же чем гордится - модель событий, попытался это как бы портировать из дельфи в php исключительно для своего удобства (это после хуков в wp). Да, безусловно, код нуждается в в вылизавании - главное сейчас работает, и работает вполне удовлетворительно.
blogolet добавил 10.07.2009 в 16:22
RКстати по поводу включенного ob_start - это пришлось вклчить по следующим причинам: у меня вывод идет в одном месте и если не включить ob_start скрипт не отваливался додо закрытия сокета, например у меня на мобильнике страница открываллас 4 сек, и скрипт соответствено показывал 4 сек вполнения на сервере, после добавления ob_start скрипт вываливает все в буфер и отваливается, не дожидаясь закрытия сокета клиентом. Может быть это особености настройки моего сервера, но я описываю реальную ситуацию на конкретно моем сервере, так что с этим все ок.
Чтобы плагин нормально обрабатывал картинки, необходимо чтобы посты создавались или редактировались (если редактировать, то обязательно измени текст, добавь хотя бы пробел), тогда плагин добавляеет атрибут lightbox к тегу img, либо самостоятельно вручную добавить этот атрибут.
Для переноса вначале надо установить блоголёт, только потом запускать скрипт переноса. Там естьНебольшая инструкция по переносу.
HraKK: подозреваю, что несмотря на комьюнити, вы слабо понимаете ооп, и для вас нормально и привычно писать обычные функции - вот и продолжайте их писать, прежде чем писать всякую чушь
Как я понимаю работу плагина, он будет обрабатывать новые либо отредактированные посты, в которых вставлена картинка (тег img). Если есть сложности с просым html и загрузкой картинок, то настоятельно рекомендую восползоваться любым блогклиентом, например бесплатным Live Writer от Microsoft, в котором автоматизировано в том числе и загрузка карттинок и их добавление в пост. АдАдреса xmlrpc серверров для блогклиетов:
/rpc.xml
/xmlrpc.php
понимает многие апи, в том числе и wordpress.