In english Хотелка Об авторе

Будни быдлокодера


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 (который тоже надо будет дописать и «прилизать»).

Пожелаем мне удачи.

Фев. 22, 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: Убрал из последней строки функции процент и закрывающую скобку.

Фев. 22, 3600 // 11:43 | Комментарии (0)