Будни быдлокодера
abstract class A {
private $data;
abstract public function doSomething();
public function doSomethingElse() {
$this->data = 1;
}
}
class B extends A {
public function doSomething() {
// Happy debugging, motherhackers!
$this->data = 2;
}
}
В C++
за такое морду бьют аналогичный код не скомпилируется. В PHP не будет даже предупреждения или notice`а. Полдня отладки. НЕНАВИСТЬ!
Сейчас нет времени искать это на bugs.php.net, освобожусь — поищу и отправлю репорт, если я первый. Хотя сильно сомневаюсь, неопытные программисты часто делают такие ошибки. Кто-то должен был наткнуться.
Май. 11, 2009 // 13:55 | Комментарии (0)
Кажется, я поправил много всякого в Интерре
Я хотел было уже закопать этот движок, но так вышло, что я не смог найти для собственного движка приличного парсера вики, и даже не смог «подружить" HTMLPurifier с Markdown, и в результате решил, что стоит попробовать «допилить" парсер из Интерры.
Там он, в свою очередь взят из уже давно дохлой
WackoWiki, и сам парсер, что удивительно, без проблем пережёвывает юникод. Проблемы с юникодом обнаружились у двух библиотек, typografica и paragrafica, занимающихся «облагораживаенем» текста : неразрывные пробелы вставляют, где надо, лишние пробелы убирают, заменяют кавычки на «лапки» или «ёлочки», и т.д.
Так вот, ненатуралы, которые писали эти библиотеки, думали, что кроме CP1251 кодировок нет, и в качестве временных маркеров использовали коды \200, \201, \202, и т.д.
И ещё слишком много шаманства с
addslashes()/
stripslashes() и
magic_quotes в самой Интерре.
Из-за этого в юникоде портились мои посты и мои комментарии. Комментарии «простых смертых" не портились, потому что пропускались через SafeHTML вместо вики-парсера со спецэффектами.
А этот пост написан в первую очередь чтобы проверить, как парсер работает, и только потом – чтобы поназывать всех ненатуралами.
test, типа.
Янв. 26, 2009 // 13:26 | Комментарии (4)
Переехал, или Interra - УГ
Вместе с rock.ru решил перенести на новый сервер и свой блог. Жаль только, что перенос слегка затянулся, и пока я был занят, закончился старый хостинг. Но теперь я снова с вами. Точнее, снова пишу сюда своё словоблудие.
Кроме самого переезда я решил перевести блог на юникод, всё-таки год уже 2008, сколько можно быть привязанным к жуткой windows-1251? Так вот: Interra - УГ. В куче файлов жёстко прописана кодировка, а заставить работать „встроенный“ транслит и парсер wiki так и не удалось. Там всё тоже завязано на конкретную кодировку. И не развязывается.
Придётся ускорить написание заброшенного было собственного движка для блога. С блекджеком и юникодом и не прибитого гвоздями к cp1251, благо скоро у меня будет чуть больше свободного времени, потому что мы наконец-то нашли человека, которому сможем отдать часть работы по техподдержке. Уже на второй день работы он здорово меня разгрузил, несмотря даже на то, что половину дня мы объясняли и показывали ему разные вещи. И вообще, кажется, толковый малый.
Ноя. 29, 2008 // 21:31 | Комментарии (6)
Новый блог
Я немного устал от Интерры. Она, конечно, по-своему хорошая и быстрая, но... Этих «но» несколько:
- Внутри не то чтобы чёрт ногу сломит, но разбираться в этом коде, чтобы дописать что-то, тоскливо и лениво.
- Красивость ссылок (ЧПУ, ага) организована кучей RewriteRule в .htaccess, и они во-первых, не всегда работают как надо, а во-вторых, не очень хорошо переносятся, например, на nginx. Точнее, переноситься-то они переносятся, но то, что не работало с Apache, работать от этого всё равно не начнёт, а понять, почему так, становится ещё сложнее.
- Smarty. Ненавижу. Не хочу ни обсуждать это, ни спорить об этом. Не переношу на дух эту штуку. Без особых поводов. Аллергия, видимо.
- MySQL. Скоро мы поставим в стойку очередной сервер, на этот раз для VPS, и я туда перееду с FirstVDS.ru, на котором мне, конечно, нравится, но всё-таки глючно. А переехав, я хочу избавиться от MySQL на своём сервере, и держать там только PostgreSQL. Из принципиальных соображений и опыта для. Конечно, добавить поддержку слонов в Интерру несложно, но с учётом предыдущих трёх пунктов, это – лишний повод.
- Не-ООП :-) Это уже совсем религия, хотя я никогда не был и не буду адептом ООП. Хочется просто.
- И ещё я уже довольно давно обещал на одном форуме выложить небольшой туториал о том, как сделать простейший блог на PHP за один час. С этого и начну, а потом буду доводить до ума. Тут-то ООП и окажется очень кстати.
Итак. Это всё будет на PHP с использованием фрейморка Kohana, как разработке которого ваш покорный слуга некогда приложил руку (кое-какие фиксы в драйвере PostgreSQL) и собирается прикладывать в дальше (доводить до ума всё тот же драйвер и библиотеку Image). Данные будут храниться в PostgreSQL, но для доступа к данным будет использоваться ORM, так что можно будет без изменения кода использовать хоть MySQL, хоть SQLite, хоть чёрта лысого.
Ещё я надеюсь, что удастся вытащить из Интерры, не поломав, типографику и парсер wiki-разметки. Очень уж клёвые штуки.
Исходники некоторых модулей будут доступны для скачивания всем. Например, интерфейс к myphoto.nnov.ru: в качестве демонстрации работы с его API (который тоже надо будет дописать и «прилизать»).
Пожелаем мне удачи.
Апр. 20, 820 // 12:19 | Комментарии (12)
Небольшой хак для Wordpress 1.5.2, обрезающий ссылки на соседние посты до определённой длинны
В основном для Пепсимиста (извини за такую задержку, но в тот вечер по разным причинам руки не дошли, а потом, как всегда, времени не хватало), но может и ещё кого-нибудь заинтересует.
Wordpress – штука, конечно, хорошая, но когда автор склонен к сочинительству длинных заголовков, сслыки на предыдущий и последующий посты не всегда выглядят красиво, разваливаясь на несколько строк и пытаясь сдвинуть друг друга вниз. Ограничивать ширину дивов и получать две многострочных ссылки рядом – лучше, но всё равно некрасиво как-то.
Вот, что сделал я (сам Wordpress не пользуюсь, но поковырял его немного в поисках хорошего движка для многопользовательского блога и ради удовольствия).
Функции previous_post_link(..) и next_post_link(..) определены в файле wp-includes/templates-functions-links.php. Их и будем править, но чуть позже. Сначала добавим в конец wp-includes/templates-functions-general.php такую вот функцию:
function limit_string($string, $len)
{
if(strlen($string) <= $len) return $string;
$words = str_word_count($string, 2);
$pos=0;
foreach($words as $indx)
if($indx<$len) $pos=$indx;
if($pos == 0) $string = substr($string, 0, $len);
else $string = substr($string,0,$pos);
return rtrim($string, '!@#$^&*(;".,/?- ')."...";
}
Она сначала пытается разбить строку на слова, и обрезать её до
$len символов «красиво», то есть не разрывая слова. Если не получается (а такое будет только если заголовок – одно длинное слово или что-нибудь вроде «очень-очень-...-очень длинный пост») – режет как получится.
Остаётся только чуть-чуть подправить фукнции, о которых я упоминал выше. Находим в каждой из них строки
$link = str_replace('%title', $title, $link);
и исправляем их на
$link = limit_string(str_replace('%title', $title, $link), 30);
.
Наслаждайтесь. Значение 30 я подобрал эмпирически для дефолтной инсталляции Wordpress.
Update: Убрал из последней строки функции процент и закрывающую скобку.
Апр. 20, 3600 // 11:43 | Комментарии (0)