Сумрачный блог Кирилла Панфилова

2010: I II III IV V VI VII VIII IX X XI XII

2009: I II III IV V VI VII VIII IX X XI XII

2008: I II III IV V VI VII VIII IX X XI XII

Графический редактор...

...написанный на JavaScript:

http://mrdoob.com/lab/javascript/harmony/

Можно выбирать стиль и в конце сохранять произведение искусства.

Старые журналы

Замечательный проект: journal-club.ru — тут можно скачать в PDF старые журналы (Весёлые картинки, Вокруг света, Горизонты техники для детей, За рулем, Здоровье, Крестьянка, Крокодил, Наука и жизнь, Огонек, Пионер, Работница, Ровесник, Рыбоводство и рыболовство, Советское фото, Трамвай, Юность, Юный техник и другие).

Албанский веб-дизайн

Я считаю, что все сайты нужно делать настолько же юзабельными и привлекательными, как Albanian World.

C другой стороны, ресурс очень полезный, лингвисту грех пройти мимо.

Финальный релиз Shinobi

Сегодня, 7 марта 2010, была дописана финальная версия фреймворка Shinobi с CMS и возможностями блога. Это версия 1.0.0.0 — почему такая сложная нумерация, напишу позже.

Помимо тестов и багфиксинга, добавились:

— URL для загрузки случайной страницы;

— возможность загружать содержимое страницы вне основного шаблона (удобно для Ajax);

— встроенная документация.

Продолжение «Нум-хета»

Новые главы повести «Мост над рекой Нум-Хет» теперь будут публиковаться на другом сервере:

art.erlang.com.ru/num-xet.html.

Там уже опубликована 13-я глава.

Новости по Shinobi

Выход в свет окончательного релиза блог-движка Shinobi немного откладывается, потому что в нём добавилось много мелких и не очень мелких возможностей. Стоит просто перечислить их:

— дополнен функционал меню: теперь в него можно помещать и внешние адреса, они будут самостоятельно открываться в новом окне и не будут обрабатываться по правилам движка;

— с помощью одной текстовой метки в любое место вёрстки или даже просто текстовой страницы можно вставить последнюю запись из блога. Это удобно, если блог — не главная страница сайта. С помощью другой метки — три последние записи;

— с помощью ещё одной метки (шорткода) — форму авторизации;

— появились интерцепторы: теперь можно перехватить события на одном из десяти этапов обработки содержания и вёрстки и сделать с ними что-то ещё до вывода на экран или до последующей обработки;

— исправление: теперь не нужно бояться, что вы напишете два одинаковых альтернативных адреса к записям блога. Если данный альтернативный адрес уже есть, то к указанному вами добавится случайное число во избежание повтора;

— комментарии можно не только добавлять, редактировать, удалять или запрещать совсем. Теперь можно в любой момент закрыть дискуссию: существующие комментарии будут видны, но нового уже не добавишь;

— особая функциональность для скачивания файлов: какое бы ни было расширение у файла, если поместить его в определённую папку и указать адрес определённого формата, то файл будет не открыт, а предложен для скачивания. Кроме того, в авторизованном состоянии можно скачивать все php-файлы из файлового менеджера;

— исправления по работе с системными метками движка;

— запрет передачи данных с другого хоста; вопросы безопасности (улучшенная обработка пользовательских данных);

— в текстовом редакторе я отказался от самостоятельного увеличения высоты текстового поля: появились кнопки увеличения и уменьшения высоты — так гораздо удобнее;

— в меню добавлена функциональность переключения языков в неавторизованном состоянии;

— сообщения об отсутствующих страницах теперь можно опционально получать на ваш электронный адрес (на том языке, который выбран в системе);

— если вы создадите собственную страницу ошибки, то она будет загружаться вместо системного сообщения. При этом страница может быть не только статической, но и динамической: большой простор для фантазии;

— переписана языковая подсистема; благодаря этому движок работает ещё быстрее;

— файл CSS в шаблоне указывается с суффиксом, основанным на дате последней модификации, в связи с чем можно не заботиться о кэшировании стилей;

— улучшения в административном интерфейсе;

— названия файлов страниц можно переименовывать;

— файл robots.txt создаётся и редактируется самостоятельно;

— улучшена файловая система.

Весит ядерный файл 72 Кб.

Мост над рекой Нум-хет. Глава двенадцатая

« оглавление


Наливая чай, Таус пролил кипяток на стол. Совсем немного, но мокрыми остались ручка чашки, скатерть и полотенце. Хорошо, что книжка лежала поодаль.

Таус, стараясь не ругаться вслух, медленно сел за стол, повозил по прозрачной луже полотенцем и кинул его на место. Промахнулся, полотенце упало на пол и увлекло за собой две пачки с салфетками. | полный текст

Trails of Indochina

Изображение

Вьетнамская девушка-дизайнер Xuân Phấn нарисовала очень красивый сайт про Индокитай: www.trailsofindochina.com.

Особенно стоит обратить внимание на фотоальбом.

Соединение с базой данных на PHP

Иногда удобно просто брать откуда-то код, который используешь постоянно, зная, что он точно корректен и не подведёт. Такая типичная для проекта вещь, как соединение с базой данных, требует чуть большего кода, чем две строчки.

В конфигурационном файле или в начале скрипта пишем (понятное дело, внутри маркеров PHP):

$db_server = 'сервер баз данных (обычно localhost)';
$db_user = 'пользователь/администратор';
$db_password = 'пароль';
$db_name = 'имя базы';

Затем используем следующий код:

$connected = @mysql_connect($db_server, $db_user, $db_password);
if($connected) {
	$select_db = mysql_select_db($db_name);
	if(!$select_db) die('No DB connection');
	}
else {
	die('No DB connection');
	}

Смысл его в следующем: если нет соединения с базой данных, то дальнейшие сценарии не будут выполняться, а на экран будет выведено сообщение «No DB connection». Ошибки в браузер тоже не будут выводиться.

Сценарий можно модифицировать, вместо сообщений о недоступности базы генерируя переменные с определёнными значениями; в дальнейшем эти переменные можно использовать в условных операторах. Дело в том, что оператор die() вообще закрывает обработку сценариев, и может получиться, что после сообщения об ошибке часть вёрстки страницы просто не загрузится. В случае же с использованием переменных можно гибко управлять кодом. Вот пример:

$isSetError = ''; // не должно быть 'ERR'
$isSetDb = ''; // должно быть 'OK'
$connected = @mysql_connect($db_server, $db_user, $db_password);
if($connected) {
	$select_db = mysql_select_db($db_name);
	if(!$select_db) $isSetError = 'ERR';
	else $isSetDb = 'OK';
	}
else {
	$isSetError = 'ERR';
	}

Далее код можно использовать:

if($isSetError == 'ERR') {
	echo 'Всё плохо. База умерла.';
	}
else {
	// Выполняем код страницы;
	}

Мои книги

Изображение

В 2008 году вышла моя книга о веб-дизайне и веб-разработке «По ту сторону веб-страницы» (она на фото авторства Lafayette). В 2009 году вышло её переиздание под названием «Создание веб-сайта от замысла до реализации» — оба в московском издательстве «ДМК Пресс».

В будущем я планирую выпустить книгу по вёрстке сайтов, книгу по растровой графике, учебник одного из любимых языков по своей методике и одну (или не одну) художественную книгу с красивыми иллюстрациями.

Любовные письма

Открытие в марте.

А пока можно просто зарегистрироваться:

www.amour-lettres.com.

Мост над рекой Нум-хет. Глава одиннадцатая

« оглавление


Запотевшие окна, запах риса, теплая кухня и кипящий чайник. Дощатый пол, едва слышное тиканье часов, на столе две книжки, и обе раскрыты примерно на середине.

Юмилла выключила огонь под чайником на плите и залила ароматный белый чай в маленьком чайнике для заваривания. На поверхности остался плавать кремово-белый цветок. Девушка закрыла чайник и накрыла его сверху широким полотенцем. Потом сбросила пушистые тапочки, забралась с ногами на стул и стала ждать, пока сварится рис. На столе в особой тарелочке лежали греттингентские колбаски: их лучше было тоже поварить и есть горячими. Горчица, соевый соус, немного зелени, кувшин с прохладной водой.

Девушка протянула руку и стала рисовать на стекле узоры. | полный текст

Завершающие этапы разработки Shinobi

Из того, что осталось сделать по Shinobi,— корректная работа CMS на вложенных директориях (если вы решите установить блог не в корень сайта), завершение документации и перевод её на английский язык, а также инсталлятор (можно обойтись и без него, но с ним приятнее).

В последнее время сделано вот что:

1. Появилась правка вёрстки записи в блоге. То есть теперь вы сможете определять, нужны ли вам ссылки на даты и темы, куда поместить файлы, приложенные к посту, сделаете свои обёртки к фрагментам кода записи и т.п.

2. Фрагменты вёрстки можно редактировать не при помощи правки XML-подобного файла (хотя и в нём тоже можно), а при помощи обычного интерфейса, где вы в нужное поименованное окно вводите нужную информацию.

Ну и, конечно, несколько мелких улучшений и поправок, которые не заслуживают отдельного упоминания.

Фотоработы Mongibello

Изображение
Изображение

Светлана Mongibello создаёт необычные произведения из фотографий, пишет книги, ведёт свой сайт и обитает на Фликре.

Shinobi: мелкие улучшения

Во-первых, записи и страницы можно создавать и редактировать не щелчком мышкой по кнопке на экране, а сочетанием Ctrl+Enter — многим это кажется удобным.

Во-вторых, ссылки «Следующая страница» и «Предыдущая страница» запрещены для индексирования поисковиками.

В-третьих, можно выбирать, куда пользователя будет перенаправлять после входа на сайт: на создание новой записи, как раньше, или на главную страницу.

В-четвёртых, улучшена ситуация с редактированием пароля: после редактирования его просто надо подтвердить.

В-пятых — особенно приятно — можно создавать меню, которое будет видеть только администратор сайта после входа. Допустим, вы создали несколько скрытых страниц, но вам не очень удобно каждый раз идти в меню «Страницы», искать там нужные и открывать их: гораздо удобнее иметь прямой доступ к ним. Теперь, если вы добавите отдельную секцию в «Настройке структуры» (кстати, этот раздел будет переработан), в обычном меню перед ссылкой «Выход» появятся пункты вашего меню, и они будут видны только вам.

Обычное меню, видимое всем пользователям, в Shinobi стало возможным создавать ещё несколько сборок назад: о том, как это работает изнутри, можно почитать на официальном сайте проекта «Shinobium».

Trochę polskiego

Zdecydowałem, że czasami będę pisać tutaj po polsku, żeby nie zapomnieć słowa. To jest praktyka dobra, ja tak myślę.

Wczoraj dowiedziałem się, że sportsmenka rosyjska, która ledwie nie straciła nogę, teraz będzie w porządku — nic strasznego nie stało. Trzy miesiące ona i lekarzy szli do tego. Jestem rad. Dowiedziałem się też, że jej noga będzie sparaliżowana, to jest bardzo źle, оczywiście...

Пособие по бизнесу

На вечеринке ты видишь симпатичного парня. Ты подходишь к нему и говоришь: «Со мной классно в постели».

- Это прямой маркетинг


Ты пришла на вечеринку с друзьями и видишь симпатичного парня. Один из твоих друзей подходит к нему и говорит: «С ней классно в постели».

- Это реклама | полный текст

Рукодельная лавка Марьи-Искусительницы

Вышла в свет новая работа на фреймворке Shinobi:

«Рукодельная лавка Марьи-Искусительницы»

по адресу www.mariais.com — добро пожаловать.

Можно не только любоваться, но и делать заказы.

Spartus 0.2.7

Сегодня сделал сборку 0.2.7 PHP/MySQL-фреймворка Spartus. Разработка продвигается медленнее, чем хотелось бы, в силу объективных причин.

Обновления:

1. Файлы меню и Tiles (включаемые фрагменты) вынесены в особую директорию, т.к. до этого они лежали в одной директории с динамическими страницами, что было чревато их загрузкой по прямому URL (они дают пустой вывод, т.е. с точки зрения безопасности это не критично, но неприятно: злоумышленник может понять, что файл существует). Теперь в conf.php появилась константа PARTS, в которой хранится директория с фрагментами.

2. Сделана загрузка библиотек на уровне ядра. В conf.php хранится массив $getlibs, в котором хранятся соответствия страниц (без расширений) и имён файлов загружаемых библиотек, хранящихся в PARTS (тоже без расширений, можно указывать несколько через запятую):

$getlibs = array(
	'*' => 'lib2',
	'blog' => 'blog, list',
	'page404' => 'mails'
	);

Перед загрузкой страницы (неважно, статической или динамической), если есть соответствие в массиве, будут подгружены необходимые библиотеки. Звёздочка вместо имени страницы говорит о том, что библиотека будет запрашиваться для всех страниц: это позволяет расширять функциональность фреймворка собственными библиотеками.

3. Расширен состав библиотек.

4. Изменения в названиях констант, дополнительная директория для шаблонов вёрстки.

5. Более подробные комментарии в ядре.

В планах кэш, многоязычность, интерцепторы и ещё библиотеки и готовые страницы.

Я здесь!

Временное пристанище вот на этом сервере:

http://here.erlang.com.ru/

1 февраля обрёл сайт социального проекта «Я здесь!»

Сайт, понятное дело, на Shinobi.

Мост над рекой Нум-хет. Глава десятая

« оглавление


Таус зачитал вслух:

— Рецепт этого блюда я увидела в журнале «Волшебная поварёшка» и поразилась простоте приготовления, а результат получился просто потрясающий: нежное тесто и сочные сосиски...

Он в сердцах бросил журнал на стол и сказал:

— Я считаю, что надо запретить слово «сочный» рядом со словом «сосиски».

Юмилла подумала и ответила:

— Мне больше нравятся сочные сардельки. Они сочнее и больше. | полный текст

Каталог Space Cat

Сегодня состоялся релиз сайта «Каталог Space Cat» Насти Хорошиловой.

Технические подробности: сайт построен на движке Shinobi и использованием плагина «Cat» для электронных каталогов, дизайн тоже мой.

Расписание на II семестр 2009/2010 уч. года

С 9 февраля: вторник, 17.20 и 18.45, 310 ауд., II курс мех.-мат., веб-дизайнеры, растровая комп. графика.

Создание уменьшенной копии изображения

Например, вы программируете на PHP загрузку изображений в фотоальбом и хотите, чтобы на лету создавались уменьшенные копии загружаемых картинок, складывались в ту же папку, но имели отличительный признак.

function generatePreview($inFolder, $fromFile, 
		$makeWidth=150, $pref="_", 
		$quality="100") {
	if($fromFile!=false) {
		$src=imagecreatefromjpeg($inFolder.$fromFile);
		$props = getImageSize($inFolder.$fromFile);
		$propsw = $props[0];
		$propsh = $props[1];
		$propskoeff = $propsw/$makeWidth;
		$propshnew = round($propsh/$propskoeff);
		$dst=imagecreatetruecolor($makeWidth,$propshnew); 
		imagecopyresampled($dst, $src,
	0, 0, 0, 0, ImageSX($dst), ImageSY($dst), 
	ImageSX($src), ImageSY($src));
		imagejpeg($dst,$inFolder.$pref.$fromFile,$quality);
		}
	}

В качестве обязательных параметров следует передать директорию, в которой хранятся изображения, и имя исходного файла (предполагается, что он уже загружен). Далее необязательные параметры, в которых уже есть значения по умолчанию: ширина уменьшенного файла, префикс (военная хитрость: префикс может содержать в себе имя директории для уменьшенных копий, только не забудьте её создать) и качество (по умолчанию наилучшее).

Функция вызывается в нужном месте, допустим, так (при $uploaded — имени загруженного файла):

generatePreview('/images/', $uploaded, 120, 'small_');

Создание уникального имени файла

Допустим, вы решили написать скрипт на PHP, где по мере необходимости к записям или страницам прикрепляются файлы. Пользователь выбирает файл и отправляет его с записью, но может так получиться, что файл с таким именем уже существует в указанной директории. На помощь придёт такая функция:

function specifyName($inf, $where) {
	if($inf['name']==false) {
		$new = 'untitled';
		}
	else {
		$parts = $inf['name'];
		$part1 = substr($parts,0,strrpos($parts,'.'));
		$part2 = substr($parts,strrpos($parts,'.'));
		$new = $part1.$part2;
		while(file_exists($where.'/'.$new)) {
			$new = $part1.'-'.rand(1,999).$part2;
			}
		}
	return $new;
	}

Таким образом, если вы получили данные о файле (например, $filedata = $_FILES['image'];) и знаете, куда будет сохранён файл, то можно вызвать функцию для генерации уникального имени файла:

if(@$_FILES['image']['name']!=false) {
	$filedata = $_FILES['image'];
	$newname = specifyName($filedata, 'images');
	copy($filedata['tmp_name'],'images/'.$newname);
	}

Смысл функции простой: она разбивает имя принимаемого файла на имя и расширение, а если такой файл уже существует, вставляет между ними дефис и случайное число от 1 до 999.

Странное

Заметил (уже много раз), что стоит мне вспомнить про какого-то человека, как на следующий день он тут же даёт о себе знать. Мы можем, допустим, месяц не общаться, и вспоминать человека нет никакой причины, но вот приходит он в голову, а спустя какое-то время сам выходит на связь. Это не зависит от расстояния.

Кроме того, про меня резко вспомнили несколько человек, с которыми не общался вообще несколько лет; это вызывает смешанные эмоции.

Мост над рекой Нум-хет. Глава девятая

« оглавление


Небо покрылось сизым неравномерным налётом и готово было уже треснуть по швам и высыпать весь накопившийся снег на землю, но тут Юмилла отвернулась от окна и снова попыталась сосредоточиться на лекции. Обычно ей очень нравилась история медицинских учений, но сегодня она едва заставила себя прийти на урок. Мысли расплывались по сумрачным окнам, морозными узорами уползали куда-то за леса и реки, простирались далеко за границы Эминара, но никак не хотели сконцентрироваться на сравнении практик йоги Хараппской цивилизации и поздних индских наслоений, отражённых в книгах Вед. | полный текст

Мост над рекой Нум-хет. Глава восьмая

« оглавление


— Маринованные миноги, например,— произнесла Юнитта.— Консоме с трюфелями. Пахлава.

Юмилла приоткрыла один глаз.

— Или, к примеру, почки соте. Лобстеры. Куриные крылышки в гранатах,— воодушевлённый примером, сообщил Таус.— Устрицы в лимонном соке.

Юмилла слегка поморщилась, но открыла второй глаз.

Холодильник мерно урчал, создавая иллюзию почти домашнего уюта. За окном ныла метель, но в сторожке было жарко натоплено, и вполне понятно, почему после трёх часов пешего пути девушка, прилёгшая отдохнуть на лавке, незаметно для себя уснула, накрытая курткой Тауса. | полный текст

Решение локализации сайтов

Для интернационализации интерфейса сайтов часто применяют вызов термина по ключу. Допустим, в Java-фреймворке Struts можно написать <s:text value="text.message">, и в словаре нужного языка будет взято значение по ключу text.message, например, «Сообщение», если словарь для русского языка, или »Mitteilung« в случае с немецким — на страницу будет выведен один из терминов в зависимости от языка системы.

Но этот подход не очень экономный. Есть подход (аналог его используется в Shinobi), который позволяет экономить целый словарь. Дело в том, что ключи можно записывать просто на английском языке, заключая в какие-нибудь последовательности, например, [%New message%], а в словаре этим ключам давать соответствия, например

New message = Новое сообщение.

Если выбран английский язык, то термин просто очищается от [%...%], а если русский, то все последовательности [%...%] заменяются на переводы. Т.о. для нелокализованного сайта вообще не нужен словарь.

Берите.инфо

Несколько подзаброшенный проект (как оказалось, он живой, люди им пользуются, хотя мало):


Берите.инфо


Сайт бесплатных объявлений. Не требуется регистрация, просто добавляем объявления и ищем те, что уже есть. Основан на фреймворке Drum Bun.

Hei!

Jeg er glad for å se deg!, Mongibello! Hvordan har du det?

Требуется продолжить смысловой ряд

Ворожея, колдунья, фея, знахарка, волшебница, кудесница, медея, чародейка, чернокнижница, чудотворница... Кто ещё? можно из разных стран и культур.

Можно ли заниматься всем сразу?

Приведу пример. Чтобы делать дизайн для сайтов, мне нужно владеть графическими программами. Однако просто технического владения недостаточно: мне требуются знания композиции, перспективы, знание стилей. Соответственно, необходимо развиваться и в этих направлениях. Но просто нарисовать дизайн недостаточно: даже если я только дизайнер, я обязан знать, как сайт будет свёрстан, чтобы не допустить ляпов типа фигурной врезки изображения неправильной формы в текст (на вебе такое пока невозможно). | полный текст

НГ

Ну вот, на тихой улице пуская клубы дыма

Или пара — людьми, случайно найденными у подъездов,

Задумчиво смотрит в беззвёздное небо зима,

Льдом от снега тепло отрезав.


Лица месяцев, промелькнувших в гонке вагонов года,

Едва помнятся — почти морозный красный октябрь, ласковый май,

Июль, почти обнажённая в ливневом платье; сентябрь, погода...

Мыслей, затягиваясь морозом, провожает она взглядом стаи.


Полупраздничные и предсалатовые магазинов осады,

Децибелов добавят пробки и даже петарды, не чтущие уголовный кодекс.

Полуночные дежурные продавцы, ноль три, пить не хочется — надо;

И вздохнут телевизоры президентскими голосами: ну что ж, с Новым годом!


07.01.2010

Шинобиум

Наконец-то сайт www.shinobium.com обрёл подобающий ему дизайн. Скоро состоится релиз Shinobi — самого быстрого и маленького движка для блогов с возможностями полноценной CMS.

С Новым годом!

Happy New Year! Feliz año nuevo! Bonne année! Laimīgu Jauno gadu! Честита нова година! Buon anno! Gott nytt år! С Новым годом! Gëzuar vitin e ri! !عام سعيد Yeni iliniz mubarek! Urte berri on! З новым годам! Яңа йыл белән! З новим роком! Manigong bagong taon! Šťastný nový rok! Head uut aastat! Onnellista uutta vuotta! გილოცავთ ახალ წელს! !שנה טובה Selamat tahun baru! Ath bhliain faoi mhaise! Feliz Ano Novo! 新年おめでとう! Laimingų Naujųjų Metų! Boldog új évet! Kia hari te tau hou! Un an nou fericit! Срећна нова година! Prosit Neujahr! Mwaka mzuri! สวัสดีปีใหม! Chúc Mừng Nǎm Mới! Выль арен!

Shinobi 0.8.5

Очередное обновление бета-версии Shinobi.

Внедрена поддержка альтернативных адресов для записей в блоге. Теперь можно оставлять /post-2009-12-25.rhtml, а можно для каждого поста придумывать свой URL, например, /shinobi-update.rhtml. Поправлены некоторые вещи, оптимизирована работа со страницами.

Выяснил, что без кэша фреймворк работает так же быстро, как с кэшем, соответственно, необходимость в нём отпала.

Пахнет Новым годом

Наконец-то им запахло. Недалеко от работы ёлочный базар. Аромат неповторимый: хвойная смола, свежие иголки, ёлок море, и пахнет просто потрясающе.

Жаль, что запах нельзя сфотографировать.

SEO в Shinobi

Движок (фреймворк-CMS) Shinobi обновился до версии 0.8. Изменения:

1. Небольшие исправления в результатах работы JavaScript-редакторов.

2. Страницу теперь можно отредактировать не только из меню «Страницы», но и с текущей страницы — при администраторском заходе внизу появляется кнопка «Редактировать».

3. Лёгкие изменения в словаре.

4. Для профессионалов в SEO добавлены поля «Ключевые слова» и «Описание» для всех записей и страниц (которые перезаписывают META-тэги и являются более приоритетными перед теми, что указаны в настройках). Если их оставлять пустыми, то в соответствующие тэги будут помещены значения из настроек. В плагинах и на прочих динамических страницах можно просто задать новые значения переменным $metakw и $metadscr.

В начале следующего года будет открыт сайт, посвящённый Shinobi.

Картинка

Изображение

Анимэшная картинка, но как классно тело прорисовано.

Перехват событий при перестройке DOM

Проблема JavaScript и JavaScript-фреймворков в том, что они не перехватывают события, связанные с элементами, которые были добавлены в объектную модель документа динамически, при помощи того же JavaScript’а. То есть вот есть функция, которая ловит клик на определённом классе элементов, и всё работает. Но тут мы добавляем ещё элемент с таким классом, и на него обработчик события уже не распространяется, что грустно. В jQuery 1.3 уже появилась функция live(), которая похожа на bind() и исправляет ситуацию для некоторых обработчиков, например, click(), но не для всех, что тоже грустно, во-первых. А во-вторых, разработчикам какого-нибудь хорошего JavaScript-фреймворка должна прийти идея (и воплотиться, понятное дело) о том, что обработчики события должны перезагружаться после каждого обновления дерева элементов, чтобы кодирование было более прозрачным, а не приходилось заново вызывать обработчики, вешая их как коллбэки.

Усложнение

Смотришь на код популярных фреймворков и думаешь строчкой из «Наутилуса»: «Зачем делать сложным то, что проще простого?»

В некоторых случаях, чтобы поправить какую-то мелочь на странице, приходится редактировать 4 или 5 файлов. На мой взгляд, при построении даже сложных систем нужно соблюдать принцип, когда вёрстка не зависит от программных особенностей приложения, и какие-то блоки можно переместить без искажения функциональности. Следует избегать повторения участков кода, прямой зависимости вёрстки от программной логики и наоборот: если связи ослаблены, то изменение кода становится более гибким. Особенно сильно страдают от этого Struts и все PHP-фреймворки с принципом MVC: выдержанная идеология ставится на одну чашу весов, а тяжеловесность фреймворка и скорость разработки — на другую.

Спор о том, что лучше: ООП/MVC-фреймворк с большим количеством файлов или гибкий легковесный фреймворк на принципах процедурного кода — настолько же идеологичны, как и споры о том, что лучше: изобретательная вёрстка или валидная вёрстка.

О важности аккуратного кода

«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».


Steven C. McConnell — программист и автор книг по разработке ПО

About Shinobi

Here will be the description of Shinobi blog engine: see a special page.

Now it works as a beta; updates coming soon.

I am to decide now if it has to be free downloadable with restrictions for commercial use, or commercial only (I don’t want set too high price for it). Anyway, soon we will be pleased to open an official website for Shinobi.

Shinobi и файлы

Изначально фреймворк Shinobi не использует баз данных, а работает с текстовыми файлами. Это не значит, что БД нельзя использовать для каких-то задач в плагинах. Но файловая концепция предполагает логическое продолжение.

Во-первых, особое внимание уделено удобному файловому менеджеру. Сейчас он не умеет только переименовывать файлы и не использует драг-н-дроп (можно ещё сделать встроенное редактирование текстовых файлов, но необходимость пока обдумывается), остальное в нём есть: вы можете аккуратно раскладывать файлы по папкам и вообще использовать эту часть блога как приятное файлохранилище. В базовый пакет поставки входит папка files, которую и стоит использовать для этого.

Во-вторых, к записям в блоге можно прикладывать файлы любого формата. Начиная с версии 0.7.5, на которой сейчас работает этот блог,— любое количество файлов. До прошлой субверсии было загадочное для меня самого ограничение: к посту можно было приложить только один файл, а при редактировании, если приложить другой файл, удаляется первый. Это наследие системы iLyte, и очевидно, раньше ограничение было обосновано. Сейчас же изначально к посту можно приложить один файл, а при каждом редактировании добавлять до бесконечности (до окончательной публикации запись можно сделать закрытой) и удалять ненужные. Все приложенные картинки располагаются до текста записи, а файлы остальных форматов — после текста. При добавлении файлов к записям они сохраняют оригинальные имена, только кириллица заменяется на латиницу, обрабатываются некорректные символы, а если файл с таким именем уже существует, то название будет немного модифицировано: например, перед расширением добавится единица.

Обновление Shinobi

Фреймворк и движок блога Shinobi обновился до версии 0.7. В нём исправлено или улучшено много мелочей, касающихся вёрстки, смены шаблонов; теперь движок умеет рассылать уведомления о дискуссиях тем, кто оставил свой электронный адрес в комментариях — не только при новых комментариях, но и при добавлении ответов администратора сайта; вероятно, последнее стоит сделать опциональным. Улучшены стили оформления по умолчанию. Шиноби ждут новые улучшения.

Адреса страниц в блоге

Кроме красивого кода и красивого дизайна хочется сделать красивые URL (адреса страниц). И если с обычным «страничным» сайтом всё понятно, то с блогом всегда возникают вопросы. Кому-то достаточно обычной строки запроса вроде ?p=456, кто-то приводит её в порядок средствами .htaccess и делает из неё псевдостатическую страницу: p465, или note/465, или p465.htm.

Очень часто URL формируется из даты + номера записи, как на этом блоге: post-2009-11-13.rhtml, что удобно. Многие любят, чтобы из заголовка «Какой прекрасный день» автоматически создавался адрес страницы kakoj-prekrasnyj-den.htm, что вызывает сомнение: вроде по адресу легче идентифицировать страницу, когда перебираешь адреса в строке браузера, но выглядит не слишком симпатично, особенно если заголовок длинный.

Оптимальное решение, на мой взгляд, такое: при добавлении записи давать пользователю возможность ввести альтернативный адрес страницы. Например, к записи с упомянутым заголовком я бы приделал URL wonderful-day.htm. Если же ничего не введено, то адрес остаётся стандартный, собранный из даты.

Скоро эта возможность появится в Shinobi.

Узнаваемость фреймворков

Понятное дело, что CMS и фреймворки чаще всего оставляют свои следы на облике сайта или приложения. Например, характерные /node/ в адресах страниц на Drupal, типичные адреса с префиксом wp- у Wordpress, окончания .do и .action у адресов на Struts. Узнаваемые полосы прокрутки на флэш-сайтах, сделанных во Flex. Удобен фреймворк тогда, когда он гибок. Это и вопрос безопасности (сложнее взломать сайт, когда неясно, на чём он сделан), и вопрос универсальности: хорошо, когда я могу вычистить все следы фреймворка, оставив только то, что мне нужно. Вообще же, использовать типовые решения — значит, лениться.

Типографы

Улучшенный и дополненный Типограф Студии Лебедева вводит кучу лишних символов, работает только в серверном варианте и не исправляет очевидные ошибки и опечатки, например, пробел перед закрывающей скобкой, пробел после открывающей и т.п.

Мой же Devanagari всё делает корректно и в режиме реального времени ещё с 2007 года (последняя версия датируется 9 сентября 2008).

Заполнители

В CSS, к сожалению, отсутствуют заполнители, присутствующие в полиграфической вёрстке. Допустим, нам нужно следующее:



Ширина текста может быть произвольной, а точки должны заполнять пространство до конца страницы.

Очевидно напрашивающееся решение: сделать блок DIV с фоновыми точками, внутри него положить SPAN с фоновым цветом. Но если точки крупные, та, что слева, может быть некрасиво обрезана. С однопиксельными точками такое решение пригодно.

В случае с большими точками-заполнителями можно поступить следующим образом. | полный текст

Shinobi 0.6

В текущей версии фреймворка решены все проблемы, существовавшие до этого: и мелкие, и серьёзные, проистекавшие от недостаточного тестирования. Например, некорректно сохранялись пользовательские шаблоны вёрстки. Это решено двумя строчками кода. Сам фреймворк стал немного легче: постепенно вычищаются все избыточные данные.

В скрытую часть — использование динамических страниц — добавлена поддержка параметров для страниц на уровне ядра. К примеру, для передачи целого ряда параметров плагину — электронному магазину потребуется формировать адреса типа /shop/get/books/73264/, причём разделители в таких URL можно настраивать путём редактирования reset-файла.

В планах ряд языковых файлов и несколько плагинов: фотогалереи, форум, электронная коммерция, система управления персоналом и т.п.

Мост над рекой Нум-хет. Глава седьмая

« оглавление


Учитель древних языков Сартао быстрым шагом вошёл в аудиторию. Он чаще всего опаздывал на несколько минут, приходя пешком с занятий из Западного Лицея, но студенты ему охотно прощали это: любили и всегда внимательно слушали. Он никогда не заставлял учить бесконечные таблицы спряжений, но непостижимым образом делал так, что неправильные глаголы запоминались сами собой.

— Все без исключения ваши несчастья,— говорил Сартао,— проистекают от того, что вы воспринимаете языки как мёртвый склад таблиц и правил. На вечер вы как горькую пилюлю принимаете супплетивные формы личных местоимений. С утра в автобусе вы судорожно пытаетесь выучить конструкцию с двойным дательным падежом. Перед занятием вы мучаете себя тем, что переводите недопереведённый текст. Так жить нельзя. | полный текст

Мост над рекой Нум-хет. Глава шестая

« оглавление


Совершенно невозможно представить себе другое место, чтобы незнакомая девушка ласково дотрагивалась пальцами до шеи, лба и ушей, приветливо разговаривала бы, ходила бы вокруг, глядя только на тебя и аккуратно причёсывала. Таус сидел в парикмахерской, облачённый в белое, и старался не заснуть. Мягкие прикосновения, мерное жужжание машинки, стрекотание ножниц мастерицы и её соседки, бормотание диктора по радио, тёплый свет и солнечная погода за окном — всё, решительно всё было направлено на то, чтобы расслабить и усыпить. | полный текст

Португальские буквы

В португальском языке есть буквы, которые сложно вводить с клавиатуры, если не включена португальская раскладка. С помощью альт-комбинаций цифровой клавиатуры можно вводить их:


À (Alt+0192)

Á (Alt+0193)

 (Alt+0194)

à (Alt+0195)

Ç (Alt+0199)

É (Alt+0201)

Ê (Alt+0202)

Í (Alt+0205)

Ó (Alt+0211)

Ô (Alt+0212)

Õ (Alt+0213)

Ú (Alt+0218)

à (Alt+0224)

á (Alt+0225)

â (Alt+0226)

ã (Alt+0227)

ç (Alt+0231)

é (Alt+0233)

ê (Alt+0234)

í (Alt+0237)

ó (Alt+0243)

ô (Alt+0244)

õ (Alt+0245)

ú (Alt+0250)

Lucas Hirata

Изображение

Lucas Hirata — бразильский визуальный дизайнер. Графика, логотипы, полиграфия. Сайт: www.lucashirata.com.br

Вёрстка навигационного меню

При вёрстке меню на сайте, будь оно вертикальным, горизонтальным или любым другим, следует помнить несколько вещей:

1. Каждый пункт меню должен иметь как минимум два состояния: просто ссылка и активный пункт меню, не являющийся ссылкой и активизирующийся, когда пользователь находится на странице, куда эта ссылка вела. Ссылка не должна вести сама на себя: для этого есть F5. В идеале должно быть и третье состояние (под наведённой мышью), но оно может по стилистике совпадать со вторым или быть похожим на него.

2. Удобно и сейчас принято верстать меню с помощью ненумерованных списков UL — практика показывает, что в этом случае меню достаточно гибкое, а применение списка семантически оправдано.

3. Желательно, чтобы каждый пункт меню (если оно построено на списках, то пусть это будет элемент LI) имел свой ID — в этом случае мы достигаем большой гибкости и можем сверстать меню как угодно, хоть по диагонали; можем стилями убрать весь текст и вместо него поставить иконки. ID’ы можно формировать серверными скриптами динамически на основе URL’ов.

4. Приятно, если первый пункт меню имеет класс вроде first, а последний — например, last. В этом случае мы можем не обращаться к идентификаторам, но сверстать красивое меню с закруглёнными углами.

Мост над рекой Нум-хет. Глава пятая

« оглавление


— Меня зовут Люминиция,— сказала первая девушка.

— А меня Архелия,— сообщила вторая.

— Меня Радосвета,— улыбнулась третья.

— А меня Франческа,— развела руками четвёртая.

Таус почесал затылок. Он немного освоился и уже не так смущался при виде четырёх девушек в полупрозрачных одеяниях и с ужасающе светящейся зеленоватым кожей. Правда, ноги всё равно немного тряслись. Имена русалок тоже немного привели его в замешательство. Он тут же половину забыл, а половину перепутал, но утешал себя тем, что любой на его месте поступил бы так же: забыл и перепутал бы. | полный текст

Фотоработы Lafayette


Lafayette, или Ксения Христенко, обитает тут: www.flickr.com/de_lafayette.

Ищет моделей для очередного проекта | полный текст

Мост над рекой Нум-хет. Глава четвёртая

« оглавление


— Завтра подъём полшестого утра,— сообщил папа, пустив кольцо дыма в потолок и изысканно отставив трубку в сторону.

— Ты сумасшедший, папочка. У меня завтра работа в первую смену,— доброжелательно отозвалась Юмилла и мило улыбнулась отцу. | полный текст

Кодзи Якусё

Изображение

Якусё Кодзи (役所 広司, настоящее имя Хисимото Кодзи, 橋本 広司, род. 1 января 1956), замечательный японский актёр: «Вавилон», «Исцеление», «Мемуары гейши» и десятки других фильмов.

Мэйса Куроки

Изображение

Куроки Мэйса (黒木メイサ) — японская модель и актриса, сыгравшая одну из главных ролей в фильме «Последний пропущенный звонок» (着信アリ Final). Родилась 28 мая 1988 г., снимается в художественных фильмах и телесериалах. Японка на три четверти: отец имеет панамские корни.

Triste

Когда свежий ветер поднимет жёлтые листья и опустит на твоё лицо прядь волос, когда в туманном хороводе ветров и мыслей твоей руки случайно коснётся другая рука — словно призрак лета коснётся своими губами — ты ощутишь тепло кофеен и вспышку радости в сердце, и на губах что-то невысказанное, а в глазах улыбка — слышишь ли ты мысли того, кто коснулся твоей руки? Он думает о том же, но прячет тёплые мысли за маской осени. Капли дождя помогают вам разойтись навсегда...

Парсер текста в Shinobi

Поскольку вчера я дописал парсер текстов и разметки во фреймворке Shinobi, можно рассказать о нём тут.

Для ввода текстов в записях и на страницах не используется визуальный редактор типа FCKEditor или NicEdit, как в старых проектах — только небольшая панель, располагающаяся рядом с textarea и содержащая кнопки для быстрой вставки тэгов и знаков:

Язык панели зависит от языка, выбранного в настройках. Скрипт для этой панели написан на javascript-фреймворке Erumpu.

Для ввода текста не требуется использовать тэги абзацев или переноса строк — они расставляются автоматически. Но если в посте они уже присутствуют, то расставляться не будут. Рядом с тэгами таблиц и PRE разметка тоже не расставляется.

Особо бережно парсер текста относится к демонстрации программного кода: если он находит текст, заключённый в тэги CODE, то внутри него не ставит никакой разметки, а если код многострочный, то сам окружает его тэгами PRE для сохранения форматирования.

Но даже это не всё. Вместо тэга переноса строки парсер текста в Шиноби разбивает абзацы... на абзацы. Есть ли что-либо подобное в других движках блогов, не работающих с визуальными редакторами?

Да, и меню теперь грамотно формируется при помощи стилизованных немаркированных список UL, а не на абзацах, как было раньше.

Куда целовать любимую

Изображение

Справочник. Чувствуется, правда, что субъективный.

Шиноби: продолжение работы

Вчера решил сделать фреймворк Shinobi ещё чуть более гибким и добавил две вещи. Во-первых, файлом reset.php можно теперь управлять из системы администрирования — менять шаблон и глубокие настройки системы. Во-вторых, страницы, как и посты, теперь можно делать скрытыми, то есть видимыми только залогиненному пользователю. Если страница скрыта, то обычному пользователю будет выдаваться сообщение об ошибке.

Это не финал. Фреймворк ждут ещё как минимум два улучшения, документация, лицензия и, наконец, релиз. Сейчас система существует в версии 0.2.5.

* * *

Когда небеса обнимут тебя,

Даруя силы сделать всё на свете,

Не затопчи цветы под ногами.

Toxicity by System of a Down

Toxicity by System of a Down исполняют Jennyfer Lynn, Christine Wu (электроскрипки) и Meytal Kohen (ударные).




Скачать ролик в FLV
YouTube

Estudando o português

Um blog (contração do termo “Web log”), também chamado de blogue em Portugal, é um site cuja estrutura permite a atualização rápida a partir de acréscimos dos chamados artigos, ou "posts". Estes são, em geral, organizados de forma cronológica inversa, tendo como foco a temática proposta do blog, podendo ser escritos por um número variável de pessoas, de acordo com a política do blog.

Muitos blogs fornecem comentários ou notícias sobre um assunto em particular; outros funcionam mais como diários online. Um blog típico combina texto, imagens e links para outros blogs, páginas da web e mídias relacionadas a seu tema. A capacidade de leitores deixarem comentários de forma a interagir com o autor e outros leitores é uma parte importante de muitos blogs.

pt.wikipedia.org/wiki/Blog

Упражнение по JavaScript

Задача такая: проверять некое поле на повторяющиеся символы. Т.е. выводить предупреждение, если какие-то символы, введённые пользователем, уже есть в данном поле. Поле назовём id="passw", тэг с предупреждением снабдим id="alertbox" и напишем код проверки на JavaScript.

В двух словах: он берёт строку, анализирует каждый символ циклом. Затем этим символом разбиваем строку на массив: если длина массива равна 2 элементам, то повторений символов нет; если больше — значит, есть (значит, символ встретился как минимум 2 раза). | полный текст

Сонория

На коричневом столе пятно солнца, четыре лесных орешка, раскрытая записная книжка, чуть пыльная тень от занавески и тишина. Дом погружается в утро, как в тёплую воду, пропитанную бликами улыбчивого солнца.

Если закрыть глаза и окунуться в теплое течение звуков, можно попробовать их на вкус: шелест шёлкового халата, босые шаги, тихое звяканье чашечки с водой, утренняя струна занавесок, впускающих в сонную комнату всплеск солнца, — наконец, раскрывается окно, и нежно-будоражащий кавардак звуков, умиротворяющий утренний гул пробирается в каждый уголок и заставляет кошку открыть один глаз и чуть шевельнуть ухом, а кувшин с водой засиять жемчугом.

Шелест листвы смягчает гудронный звук шин, а свежие голоса птиц — как поцелуи солнца на морской воде.

Português

Eu endendo, para que eu tenho o Twitter. Para que estudar a língua portuguesa (na variante do Brasil).

Португальский язык в Бразилии: www.lingvoblog.com/j-note113

Тайра Бэнкс призналась, что любит обнажаться

Изображение

Одна из самых популярных фотомоделей США Тайра Бэнкс (Tyra Banks), несколько лет служившая придворным «ангелом» марки нижнего белья Victoria's Secret, призналась на днях в интервью CNN, что любит быть обнаженной.

Ныне звездная телеведущая собственного шоу и конкурса молодых моделей «America’s Next Top Model», некогда обвиненная в излишнем весе на фотографии в купальнике, опубликованной на обложке журнала Sports Illustrated, утверждает, что лишние килограммы никогда не оказывали влияния на ее чувство гордости за собственное тело.

В эфире вечернего шоу Ларри Кинга (Larry King) Тайра не на шутку разоткровенничалась с ведущим и рассказала ему о том, что часто проводит домашние вечера обнаженной, поскольку только наедине со своим телом ощущает настоящий комфорт.

«Возможно, это лишняя информация, но я действительно классно себя чувствую без одежды, — заявила Тайра, шокировав консервативную аудиторию новостного телеканала. – Я нахожусь в абсолютной гармонии со своим телом и не нуждаюсь ни в каких диетах».


Источник: www.fashiontime.ru/news/11950.html

Тянущаяся вёрстка с фиксированными колонками

Часто возникает необходимость сверстать страницу тянущейся, на блоках, но с одной или двумя колонками фиксированной ширины. Вот две статьи, которые описывают решения:

http://flack.ru/2008/02/01/semantic-coding-howto-4/ — использование отрицательных отступов.

http://www.ageent.ru/verstca/65--div.html — сразу три способа.

Расписание занятий на текущий семестр

Вторник

17.20 Растровая графика, II курс, ауд. 308

18.40 Дисц. по выбору, V курс, ауд. 205


Среда

17.20 Растровая графика, II курс, ауд. 310

Мост над рекой Нум-хет. Глава третья

« оглавление


На девушке, которая сидела на переднем сиденье, была лёгкая куртка цвета зелёного чая. Таус знал, что эти куртки в традиционном стиле называются «сурани»: широкие рукава, едва заметная кисть на вороте и вышитый рисунок на левой лопатке. | полный текст

Японский электронный словарь

www.warodai.ru — лучший японско-русский и русско-японский электронный (онлайновый) словарь.

Создан в 2008 году на основе следующего бумажного издания:

С. В. Неверов, К. А. Попов, Н. А. Сыромятников, Н. И. Фельдман, М. С. Цын, В. М. Константинов. Большой японско-русский словарь / Под редакцией академика Н. И. Конрада

Словарь содержит около 95 000 статей. Общее число японских лексем — около 120 000, русских значений — около 150 000.

Бонус: ru.wikipedia.org/wiki/Японский_язык

Наследование и прототипы при вёрстке

Есть, допустим, несколько похожих элементов на странице. В CSS назначается класс-прототип, общий для них всех. Там описываются свойства по умолчанию для таких элементов: допустим, для разных кнопок. Фон, основные размеры и цвета, интерлиньяж и проч. Очевидно, что кнопки будут всё-таки разные: для различающихся кнопок описываем только стили, которые отличаются от прототипа: или перекрывают его свойства, или добавляют новые. Потом для кнопки достаточно написать сразу два класса:

class="button-proto button-large"

К кнопке применятся и стили прототипа, и стили особого класса. Другая кнопка будет иметь следующий второй класс:

class="button-proto button-small"

Она будет отличаться от первой только размерами. Чем это удобно?

Например, заказчик говорит: «А давайте синий цвет на кнопках заменим красным!» | полный текст

Организация CSS-кода

Чем чище CSS-код, тем проще с ним работать самому и тем, кто будет заниматься поддержкой сайта. Для себя я сформулировал следующие правила.

Все правила для одного селектора стоит располагать в следующем порядке:

— позиция, положение на странице, флоатинг, клиринг

— отступы снаружи

— тип (блочный, линейный)

— внешние свойства: ширина, высота

— оформление: границы, фон, прозрачность

— отступы внутри

— выравнивание текста и прочие абзацные свойства текста, в т.ч. интерлиньяж

— оформление текста (цвет, кегль, гарнитура, подчёркивание, насыщенность, курсив и проч.)

— тип курсора

— другие свойства

Т.е. двигаемся снаружи внутрь: это делает организацию кода логичной. Некоторые верстальщики используют алфавитное расположение правил внутри селектора, но это кажется несколько искусственным.

Порядок селекторов соответствует их порядку в HTML-документе, чтобы было проще искать. Вложенные селекторы должны находиться рядом с родительскими.

Комментарии к стилям должны быть на одном языке, в одном стиле. Нужно следить, чтобы кодировка CSS-файла совпадала с кодировкой HTML-документа, чтобы не возникало проблем в IE.

Дуглас Альвес

Изображение

Вот тут — gazeta.lv/story/11200.html — есть интересная подборка работ «Смешанная техника Дугласа Альвеса».

Мост над рекой Нум-хет. Глава вторая

« оглавление


Девушка достала тяжёлый том и присела на перекладине, держа во второй руке гроздь рябины. Устроилась поудобнее и раскрыла его на коленях. Лестница была ветхая и слишком уж длинная, в раскрытую дверцу чердака задувал ветер и летели мелкие капли дождя, и колени мёрзли, но любопытство, конечно, было сильнее. А рябину просто жалко было выкинуть: ягоды были крепкие и почти красные, очень красивые. | полный текст

Antonella Arismendi

Изображение

Antonella Arismendi — замечательная аргентинская фотохудожница.

Одна её серия Nerds чего стоит.

Стиль — ориентация на некоторые гламур и искусственность, но при этом фото остаются живыми и необычными.

Обновление Shinobi до версии 0.2

Сегодня бета-версия блог-движка Sinobi приобрела номер версии 0.2, поскольку было сделано кардинальное изменение.

Теперь блог (или сайт) на основе Shinobi можно ставить не только в корневую директорию сервера, но и в любую другую. В конфигурационном файле reset.php понадобится одна строчка, но соответствующие изменения нужно будет внести в .htaccess и в пути внутри стилевого файла. Пути к самому стилевому файлу, RSS, Favicon и адреса ссылок изменятся авторматически. Об этом будет написано позже в документации.

Таким образом, на один сервер можно поставить сразу несколько экземпляров Shinobi: один в качестве основного, второй в качестве блога или дополнительного блога, третий — если необходим специфический раздел на сайте, и т.п.

哿时刻

Изображение

哿时刻是很少。我要瞅哿时刻早已,但它很少。风捎杏花瓣和作雪在四月早晨。婵姑娘行走赤足在昀堤岸。烟花暖光吻天。

我昂头和一切终了。和早已画在心。

Мост над рекой Нум-хет. Глава первая

« оглавление


Свежим сентябрьским утром на мосту над рекой Нум-хет появилась девушка в развевающемся широком белом шарфе, длинной цветной рубашке, белых шароварах и открытых туфлях «рин», которые носили только модные студентки Эминарской высшей школы. Было совсем рано, и на берегах реки не было почти никого. Только Хадоке, который на днях уже разменял седьмой десяток, чинил свой старый велосипед, сидя в красной листве прямо на земле. Он верил, что велосипед приносил ему счастье, поэтому бережно хранил его.

Девушка лёгким движением закинула длинный шарф за спину, вдохнула полной грудью прохладный воздух и улыбнулась своим мыслям. | полный текст

* * *

Чашка горячего шоколада

Осенним утром

Рядом со светлым окном

И ваши стихи

Тихим голосом

Резюме на английском

Потребовалось по работе, решил тут оставить:

Summary — резюме на английском языке. Личные сведения, контакты, блоги, сайты, разработки, книги, портфолио, инструменты и прочие ссылки, по которым можно судить о моей профессиональной деятельности. Будет дополняться и исправляться по мере выхода новых работ.

Читая японские стихи

Они совсем короткие. Их нельзя читать в большом количестве, их нельзя читать при шуме или на плохой бумаге. Нужно, чтобы обстановка или индивидуальные особенности восприятия позволяли оказаться внутри текста, увидеть его и почувствовать на вкус. Чтобы вокруг ничего не было, а остались эти три или пять строчек, в которых заключены такие порывы ветра и потоки воды — всего в нескольких слогах. | полный текст

Автоувеличение textarea

Как сделать так, чтобы при наборе текста при переполнении textarea высота этого поля автоматически увеличивалась? Вот таким Javascript’ом, например:

// Назначаем псевдоним-функцию:
_ = function(id) {
  return document.getElementById(id);
  }
// На загрузку документа ставим событие:
window.onload = function() {
 txtid = 'ID textarea';
  // по щелчку
  _(txtid).onkeyup = function() {
   // если высота скролла больше высоты textarea
   if(_(txtid).scrollHeight >= _(txtid).offsetHeight) {
    // увеличиваем высоту textarea
    _(txtid).style.height = _(txtid).scrollHeight+20;
    }
   }
  }

Вы без труда сможете улучшить этот код, сделав так, чтобы идентификатор поля не был жёстко прописан в коде, а передавался в функцию.

Продолжение Шиноби

Совершенно незаметно Shinobi превратился в полноценный PHP-фреймворк:

1. можно свободно переопределять дефолтные настройки путей и константы, не затрагивая ядерного файла,

2. основной HTML-шаблон тоже можно поменять в файле reset.php,

3. в код можно включать произвольное количество так называемых Tile (по аналогии с Tiles в Struts) — метки, которые заменяются на динамически формируемые файлы,

4. уточнены и немного переписаны некоторые фрагменты кода, связанные с основной функциональностью, дополнен словарь.

Все эти изменения заняли 1 килобайт кода: теперь ядерный файл весит около 54 килобайтов, хотя к релизу вес уменьшится за счёт удаления комментариев и увеличения компактности вёрстки кода.

Теперь Shinobi — блог-ориентированный фреймворк, из которого можно сделать веб-приложение любой сложности за счёт уже включённых библиотек кода и возможности легко наращивать функциональность. | полный текст

Цитрусовое

В прозрачном пакете нёс восемь лимонов. Забавно было смотреть, как у людей то сводит скулы, то появляется неопределённая улыбка.


Обнаружил новую моду: осенняя женская обувь с открытым подъёмом стопы. Видел такие балетки с небольшими голенищами и обычные сапожки, но с такой деталью.

Мелочь

Вчера девушка на кассе мне первый раз в жизни дала сдачу правильным образом: сначала отдала мелочь, а когда я уложил монеты в портмоне, отдала банкноты и чек. Обычно отдают всё вместе, что очень неудобно, когда в руках ещё что-то есть.


Сегодня кондуктор в автобусе сделал вид, что я дал ему мелочь неправильно, а когда я ему дал монету покрупнее, отдал мне всю жёлтую мелочь, с которой не хотел возиться. Наивная хитрость, на которую не хочется сердиться.

Цыганский язык

Мне нравится звучание цыганского языка. Опубликовал о нём заметку на Лингвоблоге.

Мэ на ракирава романэс пока ещё, мэ сом гаджё, мэ камам романи чиб и чяй :-)

Четверостишие

Хлопнешь ладонью по гладкой воде

На миг сон полудня подняв из ила

И снова вокруг пелена в тишине

И лишь стрекоза в отдалении застыла

После свидания

По корешкам терпеливых книг проводишь пальцем,

Вздыхаешь чуть слышно в вечереющее окно.

Скользит по плечам свет, проплывающий вслед ткани,

Провожающей в сладковатую заводь снов.


Белеет домашняя рубашка мягкая, лёжа в кресле,

Звёзды на небе складываются в смешные картинки.

По коленкам и правой щеке гуляет свет лунный, бестелесный,

А в прихожей задумчивой темнеют осенние ботинки.


Где-то выводят жалобно песни ночные кошки.

Мастерски прямо под окнами фьюжн сверчки играют.

Губы во сне нерешительно имя читают ласковым шёпотом,

Горячая от беспокойных снов простыня в твоих пальцах тает.


Так до рассвета часы озабоченно и протикают,

Глядя со столика, на цыпочках из-за тетрадей выглядывая.

А в вазе цветы его, уже сонные, взглянут тихо,

В улыбке тёплой лепестки свои на ночь складывая.



27.09.2009

Shinobi

Шиноби — одно из названий ниндзя. Движок блога был так назван в связи с тем, что он работает в самых неприхотливых условиях, очень нетребовательный, легковесный и манёвренный, позволяет мимикрировать под разные языки и движки и превращаться из блога в статический сайт: воин-невидимка.

«Шинобу» (忍ぶ) — японский глагол, который обозначает не только «скрываться, таиться», но и «терпеть, испытывать лишения» — ассоциация со спецификой движка блога Shinobi, который является рекордсменом по нетребовательности и мимикрии. Существительное от этого глагола (忍び, «шиноби») является одним из вариантов слова «ниндзя», также записывающегося как 忍者.

От этого слова также образуется словосочетание 忍び足 («шиноби-аши», или, в более мягком чтении, «синоби-аси») — «бесшумные, лёгкие шаги» — именно так работает этот движок блога: быстро, легко и прозрачно.

Но есть ещё глагол-омоним «шинобу» (偲ぶ), который означает «предаваться воспоминаниям», что, в общем-то, тоже отвечает задачам блогов.

Новый движок блога

Официальный ресурс проекта: www.shinobium.com.


С сегодняшнего дня этот блог работает не на iLyte, который был приятным и легковесным, но всё же непродуманным с точки зрения кода и во многом ограниченным, а на новом движке Shinobi, закрытая бета-версия которого вышла 24 сентября 2009 года. Внешне сайт изменился незначительно: боковая колонка теперь есть на всех страницах, комментарии на привычном для других блогов месте, добавилась навигация по страницам блога, переделана навигация по датам и темам, и изменены ещё несколько мелочей. | полный текст

Кириллические домены

Задача стояла следующая: припарковать несколько доменов к сайту. Среди них встретились и кириллические домены, например, залог-риэлт.su. В настройках системы парковки доменов кириллические символы не поддерживались, и спустя некоторое время после поисков решения проблемы я узнал про так называемый «пуникод» (Punycode). На самом деле кириллических и иных доменов нет вообще: это всего лишь маски для имён доменов, состоящих из латиницы, цифр и дефисов. Например, домен залог-риэлт.su — это на самом деле домен xn----7sbjoipduuw3j.su. Если открыть этот адрес в Опере или другом современном браузере, то символы корректно преобразуются в кириллицу. Чтобы припарковать домен корректно, нужно знать соответствие кириллического написания и пуникода (адрес в пуникоде всегда начинается с xn--); автоматически сформировать название домена в пуникоде можно тут.

Расширения у веб-страниц

У популярных языков веб-программирования и фреймворков есть особенность: свои расширения у файлов или на конце URL.

Например, .php, .php3, .phtml (язык PHP), .pl и .cgi (язык Perl), .asp (ASP), .aspx (ASP.NET), .jsp (Java/JSP), .cfm (Cold Fusion) и другие.

Некоторые фреймворки используют собственные расширения. Например, .do (Struts 1 на Java) и .action (Struts 2) служат для того, чтобы фреймворк понимал, что имеет дело именно с динамически генерируемыми страницами. Расширение .wbp использует для веб-страниц программный продукт Webbuilder от Actis Systems.

Часто веб-программисты меняют типичное расширение на .htm (в целях SEO) или вообще оставляют слэш, чтобы адрес выглядел чисто.

А некоторые фреймворки, как Spartus или готовящийся к выходу новый движок блога, позволяют вообще устанавливать произвольные расширения. Например, я встречал расширения .jhtml, .zhtml, .xpd и другие.

Если вы замечали ещё какие-то специфические расширения, напишите в комментарии.

Немного о Spartus

Сделал во фреймворке Spartus хитрую вещь.

Статические страницы (точнее, их содержательная часть) хранятся в папке "pages", а динамически формируемые — в папке "codes". А админка — редактор страниц — читает всё, что находит в папке "pages", и отдаёт пользователю на редактирование. Но иногда требуется, чтобы в динамических страницах была какая-то текстовая часть, которую пользователь тоже смог бы редактировать. Поступаем просто: в папках "pages" и "codes" создаём по файлу с одинаковым названием. Тот файл, что в кодах, читает другой файл (что в "pages") как строку и включает в нужном месте (вместе с заголовком, который тоже отображается на странице и в title), а остальной контент генерирует динамически. А пользователь, заходя в админку, видит страницу с тем же названием, редактирует её как обычный текст, тем самым изменяя дозволенную часть на динамической странице. Но фреймворк спроектирован так, что при загрузке приоритетна динамическая страница, даже если есть одноимённая статическая. У пользователя видимость, что он редактирует динамическую страницу. У программиста спокойно на душе.

Навсегда

Тоскливее нет ничего,

Чем холодное «навсегда».

Оно пахнет осенним утром,

Когда собраны вещи

И машина уже у окна.


Торопливо недопитый чай,

Неприбранный стол,

Отодвинутые стулья,

Одинокий плюшевый медведь.

Мокрые листья перед порогом.


И какие-то растерянные

И немного пустые глаза,

В них отражаются круги на воде

От капель дождя

И звучит ивовая тишина.


Птицы говорят друг с другом

На гортанном наречии,

Не замечая грустной суеты у порога,

И летят по своим делам

Дальше. Небо серое.


И заднее стекло блестит

Не то от дождя, не то

От просыпающегося солнца,

Хмурого за пеленой серого дня.

Шум мотора больше не слышен.



12.09.2009

* * *

Пьяных фонарей за дождливым окном хоровод...

Белые рубашки занавесок продрогших.

Сквозь прищур окна рассеянная улица глядит

В тёмную квартиру на букет цветов засохших.


Прости меня, уставшего, что вечно молчалив,

Что хмурю брови, слушая, как гром терзает крыши,

Как скрипка льющейся воды мелодию забыла.

Далёких поездов колёса дышат, дышат...


С балкона тёмные потоки впалых щёк зонтов

Как безуспешные попытки моря берег полюбить.

Нестройно плещутся, колышатся, целуются, толкаются.

Тускло-бриллиантовая вниз вода с карниза нитью...



10.09.2009

Textarea в виде печатных полей

Иногда возникает необходимость имитировать печатные поля для заполнения текстом в несколько рядов, как в бланках. При этом нужно, чтобы при достижении конца поля курсор автоматически переходил на следующую строку. Вариант с несколькими input и скриптами слишком громоздкий. Можно использовать поле textarea, разукрасив его с помощью картинки:



и стилей:


textarea.fields-emulate {
	line-height:25px;
	border:0;
	width:375px;
	height:73px;
	background:#fff URL(/files/kartinki/textarea.png);
	overflow:hidden;
	font-size:9pt;
	}

Получится поле в три строки, которое будет вести себя так, как нужно:


Spartus: задачи

Spartus — очень легковесный фреймворк.

Во-первых, ядерный файл с основной функциональностью сейчас (версия 0.2.6) весит 5,5 Кб. Вместе с другими двумя необходимыми файлами ядро системы весит 7,5 Кб.

Во-вторых, деплоймент (развёртка) самой системы отнимает всего пять минут: достаточно взять все файлы, положить в файл шаблона новую вёрстку и поправить пути в стилевых таблицах, а также внести нужные настройки в конфигурационный файл. Остальное — это уже контент, страницы, дополнительная функциональность, время разработки которой всегда вычисляется индивидуально.

Есть несколько задач, которые увеличат объём ядра системы:

1. Работа с кэшем. Пока не решено, будут ли кэшироваться целые страницы или фрагменты. По идее, в некоторых случаях кэш должен создаваться на лету.

2. Работа с многоязычным контентом. Во-первых, выбор и переключение языка интерфейса. Во-вторых, указание системе на то, откуда брать контент при выбранном языке.

Чтобы не замусоривать конфигурационный файл настройками, которые не будут использоваться в каждом деплойменте системы, нужно часть настроек (констант) выносить в те фрагменты кода, где они используются.

Требуется выделить для используемых фрагментов программного кода отдельную директорию, где многократно используемые коды будут собраны и упорядочены по именам файлов. Что-то типа _lib. А там с помощью префиксов создавать коды: admin.files.php, admin.pages.php, all.files.php, blog.main.php и т.п.

И о погоде

Понедельник. И офис на улице Рабочая. Вроде бы все условия для труда.

А вот погода совершенно не рабочая. Солнце и свежесть, как бывает весной часов в 8 утра или летом часов в 7 — после поливальных машин, после ночи.

Воздух наполняет грудь совершенно безотчётной радостью. А люди вокруг почему-то не видят, как прекрасно на улице.

...Завтра осень.

Танец кисти

Изображение

Тонкой кистью по телу выстроить

акварельные пятнышки плавно.

Одиноко дождинками-искрами

гулять по раскрашенным странам:


по каштановым рекам волнистым,

по холмам, нежно дышащим вслед...

На плечах, опадая листьями

из окон оранжевый свет.


По ступням и коленям ласково

под мелодию кисть танцевала.

Ночь вошла и, любуясь красками,

Прижимала луну к груди, таяла,


растворяла во мраке цвета и цветы,

тёплым шёлка плащом накрывала.

И дорожка туши по телу росчерком. Ты.

Глаза — утонуть. Приоткрытые губы алые.


И с закрытыми выбирать глазами,

куда кисть в танце точку поставит.

Карта мира — нет, карта клада.

Свечи дышат, и ночь в восхищении тает.



29.08.2009

3.

Полоски ветра

Утром солнце вплетает

В твои волосы

2.

Два цветка лежат

На земле. Прекрасные

Вестники горя


1.

Круги на воде

Комья земли вниз летят

И сердце стучит

Spartus 0.2.6

Разработка фреймворка Spartus начата 22 июня 2009 года. Сейчас на нём работает два проекта: www.du-parc.ch и www.lingvoblog.com, а скоро появится ещё два.


Задачи для фреймворка были следующими:

— поддержка БД и работы с файлами,

— многопользовательский режим,

— быстродействие,

— малый размер.


На данный момент основу фреймворка составляет следующая функциональность:

— конфигурирование сайта,

— имитация различных расширений страниц (.htm, .asp, .php, .wbp, .love, .spa) или возможность работы с URL без расширений,

— поддержка БД и обработка ошибок соединения,

— защита от потенциального взлома,

— опциональная авторизация (с распознаванием регистра ввода логина),

— роль администратора,

— роли пользователей,

— блокировка пользователей,

— создание списков страниц, которым требуется или, наоборот, не требуется авторизованный доступ,

— работа с шаблонами вёрстки,

— включение произвольных программных фрагментов в шаблон (Tiles: вариативный вывод в зависимости от условий),

— заданные переменные для текущей страницы, для запроса и текущего URL,

— обработка ошибки 404 с отправкой правильных заголовков,

— возможность хранения программного кода и статических страниц отдельно,

— выдача пользователю разных наборов страниц в зависимости от того, авторизован он или нет,

— динамическое создание title страницы.


В расширениях также поддерживаются:

— регистрация,

— редактирование страниц,

— управление пользователями,

— движок блога (в т.ч. многопользовательского).


В разработке:

— поддержка многоязычности,

— работа с серверным кэшем.


Вес основных файлов (на данный момент):

ядерный файл: 5,5 Кб,

конфигурационный файл: 1,5 Кб,

файл .htaccess: 0,5 Кб.


Архитектура:

при помощи .htaccess все URL (кроме указываемых отдельно: изображений, таблиц стилей, javascript-сценариев, видео и т.п.) передаются на обработку ядерному файлу (index.php, хотя название не принципиально), который сначала включает конфигурационный файл, потом производит обработку данных, а потом отдаёт результат на вывод.

Портрет

Пёс у камина тихонько повизгивает во сне.

В оранжевой темноте пристыженно гаснут звуки.

Гуляют в беспечном спокойствии дивные силуэты в огне.

Но вот уже двести лет её мёрзнут руки.


Глядит обречённо-чернильно в окно,

Очертив внешний мир эпизодом ночного стекла.

Девушка прошлого. Не ест, и не любит, и не смотрит снов.

Всё застыло. И слеза по свече улиткой текла.


И когда догорела она, и луна на прощание нежно

Взмахнув покрывалом рассвета, исчезла, расправив утро,

Она, что с чернильным взором, улыбнулась

Спрыгнула на пол, чихнула от пыли и пудры,


Распахнула в рассвет окно, и в своём длинном платье,

Не ко времени в лето надетым, в саду захлебнулась воздухом,

И запахом роз, что к щекам и ладоням ластятся,

И, вздохнув глубоко, над садом взлетела, наслаждаясь отдыхом


От двух сотен лет в неподвижности, дождями бросаясь

Тёплыми и потоками солнца жгуче-прекрасными, в лучах его тая.

А в доме с утра прабабушку не нашли на портрете и испугались.

Паниковали, не понимая. А всё просто: кто хочет — летает.



16.08.2009

Без названия

Серый холст неба замызган липкими кляксами,

В форточку ветер телом обрюзгшим пролазит.

В квартирах промозглых голодные окна хлопают,

И тучи неряшливо бродят по небу овсяными хлопьями.

Погода расплёскана даже на жёлтом листке со стихами

Устланном резкими буквами, чаем и голосами.

Розами, ветками сливы и небесами.

Ломкими взглядами, прикосновениями, перчатками в пальцах,

Тихими каблуками вниз по лестнице к хлопающей двери

На пустынную улицу, где погода никак не сжалится,

Где иголки дождя в лицо, хоть расплачься, а хоть умри.

Тот бы жёлтый листок, как осенний, с ветвей упал,

А размашистым каллиграфическим от души

Сочно-солнечно сделать, чтобы дождь перестал,

А прибой с виноградом и смехом в объятиях задушил,

Чтоб на коже солёное море и яркие лоскутки,

Чтобы пение ночных скал, что обласканы

Поцелуями волн,

Что скитаются от доски до тоски,

Что дождями избиты неласковыми.

На лице опять солоно.


11.08.2009

Морское

Твоя тёплая песня с запахом свежести

положила русую голову на плечо теплоходу.

Закатный ручей пассажиров, и ночь в море нежится,

и стрелки часов к зениту восходят.


Прибой на коленях умоляет набережную

не глядеть на корабль с такою зовущей тоскою.

Ежевечерние волн валуны, он работою каторжною

хочет ревность забыть, сожжённую солью морскою.


Больно смотреть ему тяжело, как целуются коротко

в каждый приход корабля из рейса ненастного

белый усталый сильный истёрзанный волнами борт

и француженка-пристань в белом и с губами такими ласковыми...


Утихли салюты и поцелуи на громких пиратских наречиях,

По небу рассыпала ночь отражения зелёных осколков,

и только тихая песня обнимает усталый корабль за плечи,

да волны задумчивы, да звучит где-то колокол...

Vakaras

Небо, тело твоё уставшее

в волны вечера с шумом упадёт, сияя мокрым боком в глазах уходящего солнца.

Бутылочные горлышки окошек с подозрительными глазами закипающих ужинов

раскроют свои объятия в откровенной наготе вечерних автобусов,

пьяных от жары.

Следы сигаретного дыма в облаках — первый приятный запах за вечер.

Ты держишь нерешительно в пальцах длинную и тонкую More, ты ставишь одну ступню на другую,

у окна смотришь на закат и вздыхаешь:

завтра небо тоже устанет вместе с тобой.

И вы вместе чувствуете это ещё с утра.

Пыль в шуме машин, кислое яблоко и рубашка на голое тело.

iemai

http://iemai.com.br/blog/

Можно изучать по постам португальский язык, очень ясным языком написано.

Красное вино

Танцуя на краешке прозрачного стекла,

сотканного из света луны,

едва проснувшейся, с ясными глазами,

натягивающей на себя

газовое покрывало звёздного неба,

вздыхающего задумчивым пульсом звёздного света,

проникающего под кожу той,

что танцует на краешке прозрачного стекла,

опасающей поскользнуться и не утонуть,

вызвав брызги красного вина ночных улыбок

на лице, освещённым неярким монитором

луны в небе, затянутым паутинкой улыбок

таинственно подмигивающих звёзд,

рассыпанных сияющей пылью по покрывалу

волнующемуся в такт лёгким шагам танца той,

что по краешку бокала из прозрачного стекла

с улыбкой, танцуя, рассыпает из рук ясный свет

музыкальных шкатулок звёзд,

украшающих жемчужинами корону луны,

с улыбкой дарящей свет той,

что сидит на краю бокала с красным вином

и бросает в тёмные расходящиеся круги

жемчужинки своих воспоминаний

и смотрит, как в кругах

отражается

грустное лицо луны,

складывающей светлеющее покрывало неба

в шкаф синих гор,

скрадывающей сияние жемчуга

и успокаивающее круги на воде

памяти

той, что любуется небом

рассветным

с улыбкой.



21.07.2009

Лингвоблог


В бета-версии открыт «Лингвоблог» — сайт, где вы можете зарегистрироваться, писать заметки про языки мира, лингвистику, переводы и всё, что связано с языками — а можете просто читать. Комментирование доступно только зарегистрированным пользователям, хотя читать комментарии могут все. Есть поиск по темам, навигация достаточно удобна.


Сайт в самом начале своего развития. Я опубликовал там 15 записей.

Адрес запомнить очень просто: www.lingvoblog.com — добро пожаловать!


Технические подробности: сайт построен на моём новом фреймворке Spartus — второй проект, работающий на этой программной основе.


В ближайшее время там появятся: RSS, профили пользователей, подписки и некоторые другие вещи.

Из ночной реки

Погладить бы секвойи незнакомой листья

И комнату венецианской свечой озолотить,

Позволить дождю за окном мирно литься,

И в погоню за звёздами мысли отпустить.


Восточные сказки тикают часами нервными,

Под подушкой томятся недоеденные сны.

В левом предсердии почтовые ящики непроверенные,

А вовруг чёрные валуны тишины.


И ели здороваются спокойно, как старинному

Другу кивая на ходу едва, но приветливо,

Едва лишь дорога к утру длинному синему

Звёздами выстлана станет в просеке лета.


И когда первая прокричит испуганно птица.

Каждое утро думая, что проспала рассвет,

Следы полуночного ливня в плаще перестанут стелиться

По чуть смятой со сна под сосной траве.


И набрав полные лёгкие воздуха, дотронется

До загадочного, завтракающего акварелью неба —

Немножко гор и обнажённое всё в румянце солнце.


...И ты проснёшься от аромата пекущегося хлеба.


04.07.09

Spartus

В работе новый фреймворк, о котором я уже писал недавно. Сейчас делаю на его альфа-версии один сайт для швейцарских заказчиков. Когда будет релиз (с документацией), он будет, вероятно, доступен для свободного скачивания. Его нельзя назвать гибким, как Drum Bun, он именно для PHP-разработчиков. Наконец-то придумал название.


SPARTUS Framework

Название — литовское «быстрый, скоростной, спорый» — касается и работы (нет перегруженности функционалом), и скорости разработки и изучения. Разработан как основа для сайтов с любым функционалом, допускает любое количество расширений. По-спартански легковесный и минималистичный. Альфа-релиз. Apache + .htaccess, PHP 4/5, MySQL 4/5 (последнее опционально, при необходимости авторизации и работы с новостями).

Особенности: красивые URL, запрет прямого доступа к страницам и функциональным разделам, малое количество файлов, настраиваемость.

Состав: ядерный файл (менее 3 Кб), конфигурационный файл, .htaccess, закрытые от прямого доступа директории для страниц, функциональных страниц, шаблонов и открытые для прямого доступа директории для изображений, стилевых таблиц и сценариев.

Дождь

Дождь был лучшим каллиграфом этой ночи

Танцуя задумчиво и ритмично и вздыхая на зеркалах туманных

Оставлял на моём и твоём окне признания строчки

На одному ему ведомых древних и неразгаданных

А когда не хватало слов, бросал мокрые многоточия

Не снимая чёрной шляпы своей и алмазных перчаток странных

Пел нежным голосом шелестящую музыку ночи

Движения тела блестящего стройного с тайною спаянные

Поглощали все взгляды и вздохи, глубоко проникая очень

Заставляя забыть всё, дышать его дыханием и нечаянно

Двигаться в такт его струям, любоваться вспышками его дочери —

Ослепительной молнии на плаще дождя, — тая

Ощущать дождь в себе каждым волосом, каждой точкою

Своего тела. Наслаждаться. Помнить — и дождь угасает...


27.06.09

Словари

Нашёл замечательный сайт: «Словари русского языка». Поиск по базе синонимов, толкований, переводы с/на разные языки: основные европейские, иврит, венгерский, монгольский, литовский, финский, эстонский, польский, суахили, азербайджанский, арабский и другие. Поиск сразу по нескольким словарям. Интерфейс не самый интуитивный, но разобраться стоит.

Стихотворение

Юзек просыпается среди ночи, хватает её за руку, тяжело дышит:

«Мне привиделось страшное, я так за тебя испугался…»

Магда спит, как младенец, улыбается во сне, не слышит.

Он целует её в плечо, идёт на кухню, щёлкает зажигалкой.


Потом возвращается, смотрит, а постель совершенно пустая,

- Что за чёрт? – думает Юзек. – Куда она могла деться?..

«Магда умерла, Магды давно уже нет», – вдруг вспоминает,

И так и стоит в дверях, поражённый, с бьющимся сердцем…


Магде жарко, и что-то давит на грудь, она садится в постели.

- Юзек, я открою окно, ладно? - шепчет ему на ушко,

Гладит по голове, касается пальцами нежно, еле-еле,

Идёт на кухню, пьёт воду, возвращается с кружкой.


- Хочешь пить? – а никого уже нет, никто уже не отвечает.

«Он же умер давно!» - Магда на пол садится и воет белугой.

Пятый год их оградки шиповник и плющ увивает.

А они до сих пор всё снятся и снятся друг другу.


Елена Касьян

Новый PHP-фреймворк

По ходу дела так вышло, что с утра сегодня написал основу нового PHP-фреймворка, теперь с базой данных. Очень маленький, с ограниченной функциональностью, но для развёртки простого сайта очень удобен. Красивые URL, регистрация и авторизация опциональны, новостная колонка, шаблоны.

Новостная колонка в работе, бэкэнд тоже.

Нужно, чтобы пароли были уникальными. Особый пароль административный.

Объявляется конкурс на лучшее название. Или идею названия.

Из чего складывается разработка сайтов

1. Изучение ТЗ (технического задания). Переговоры с заказчиком, уточнение общей концепции и немаловажных деталей, обсуждение вариантов, нахождение компромиссов между желаемым и возможным. Вопреки сложившемуся мнению, это тоже работа, и часто тяжёлая.

Отдельно: оценка времени и стоимости работ.

2. Разработка концепции сайта. Принятие решений относительно типа дизайна, стилистики, привлекаемых образов, типа вёрстки, программной основы, хостинга и т.п.

3. Варианты дизайна (общего для всех типов шаблонов сайта или для главной и некоторых внутренних страниц), обсуждение с заказчиком.

4. Создание окончательного дизайна для всех типов шаблонов страниц сайта. Проработка деталей для конкретных страниц.

5. Вёрстка шаблонов. Параллельно: тестирование на разных типах мониторов (жидкокристаллические и ЭЛТ) с разными разрешениями (800, 1024, 1280, 1400, 1650 пикселей по ширине), в разных браузерах (Internet Explorer, Firefox, Opera, Safari и другие) разных версий под разными операционными системами (Windows, Linux, MacOS) разных версий; устранение неполадок, возникающих из-за несовместимости некоторых технологий с конкретным браузером, и непрогнозируемых браузерных ошибок. Отладка после валидации на соответствие стандартам Консорциума WWW.

6. Деплоймент (развёртка, установка) программной основы (движка, engine, фреймворка) с системой управления содержимым (CMS). Либо (в особых случаях) написание программной основы с нуля. Проектирование структуры страниц и уровней сайта, проектирование базы данных. Тестирование.

7. Интеграция свёрстанных в соответствие с гайдлайнами дизайна шаблонов в систему. Отладка вёрстки на тестовом сервере.

8. Написание недостающей программной функциональности (отдельные фрагменты кода или целые модули системы). Тестирование.

8. Работа с контентом (содержимым), тестирование сайта, наполненного содержимым. Обработка графики, текстов, редактирование, корректура.

9. Настройка системы: виртуальные пользователи и их полномочия, почтовые уведомления, отладка работы с RTE (Rich Text Editor, текстовый редактор для визуального форматирования текста), файлового менеджера, пользовательских настроек.

10. В необходимых случаях деплоймент дубликата системы на тестовом сервере для демонстрации заказчику. Тестирование в новом окружении.

11. Деплоймент сайта на «живом» сервере, тестирование всей системы.

12. Работы по увеличению посещаемости сайта, по оптимизации для поисковых механизмов, обмену ссылками, регистрации в баннерообменных сетях.

Продолжительность всех этапов оценивается по-разному в зависимости от поставленных задач, сложности и объёма работ.

Простые задачи

Иногда возникает необходимость делать на JavaScript какие-то вещи постоянно, так что проще иметь под рукой какое-то количество кода, а потом составить из него свою библиотеку, откуда можно брать функции и не думать о том, чтобы каждый раз писать одно и то же. Первой среди таких функций наверняка будет функция переключения видимости:


function showHide(id) {
document.getElementById(id).style.display = (document.getElementById(id).style.display=='block') ? 'none' : 'block'
}

Если блок скрыт, то при вызове функции он показывается. Если показан, то скрывается.

А в нужном месте достаточно будет вызвать эту функцию с нужным идентификатором блока.

Ну а когда таких функций наберётся достаточное количество, можно оформить их в свой фреймворк и включать в каждый проект.

Oh girl...

Я вошёл в последний зал и прямо перед собой увидел девушку своей мечты. Стройная, в светлом легчайшем платье, высокая — с чуть приподнятым подбородком, с лучистыми глазами, невообразимо тёплого цвета волосами волнами на плечи, курносым носиком и едва-едва насмешливой улыбкой. Она стояла передо мной во всей красе, улыбалась, и я не мог вымолвить ни слова.

Потом подвинул скамеечку и сел перед картиной, на которой была изображена эта девушка. Я не знал, какая сила будет в состоянии оторвать меня от неё. Я просто, не сдерживая восхищения, смотрел и пытался запомнить её облик, осанку, взгляд, улыбку, движение руки с веером,— у меня было ощущение, что она вот-вот оживёт. Шагнёт в зал, убежит, и только лёгкий звук шагов останется для меня — я любовался её ногами, почти целиком скрытыми длинным платьем.

Я вздохнул, поднял глаза выше, и тут она, мило улыбнувшись, показала мне язык.

Я вздрогнул и вскочил. И вовремя, потому что в зал входила старушка смотрительница. Если бы она увидела меня спящим перед картиной, получилось бы очень неловко. Я кинул ещё один взгляд на девушку и вышел из музея на вечернюю улицу.


2 июня 2009

Горизонтальное центрирование блока с неизвестной шириной, часть 2

Оказывается, есть ещё более универсальное решение. Из мелких неудобств порождает пространство для полосы прокрутки по горизонтали в Опере, но это не критично: самого горизонтального скроллинга не возникает нигде.
CSS:
div.top-bar {  
	width: 100%; 
	}  
div.top-bar-container {  
	position: relative;  
	float: right;  
	right: 50%;  
	}  
div.top-bar-container-center {  
	position: relative;  
	right: -50%;  
	} 

HTML: внешний блок с классом top-bar, в нём блок top-bar-container, в нём, в свою очередь, блок top-bar-container-center, а уже в нём содержимое. Громоздко, но кроссбраузерно...

О вордпрессе

WordPress вообще очень хорошая блогообразная CMS; плюсом является то, что систему можно использовать не только как блог, но и как сайты другого типа. Например, форум прикрутить или назначить главной страницей статическую. В общем, при желании можно сделать из него конфетку.

Несомненно, 2-3 мегабайта исходников (это только в архиве) — явный перебор. Скорость работы из-за этого сильно снижается.

Есть несколько вещей, которые кем-то могут считаться плюсами, а кем-то минусами.

1. Система шаблонов. Почему в ней совмещены и HTML, и PHP-код — неясно. Можно было бы оставить на откуп шаблонам только разметку с системными тэгами, которые динамически заменялись бы на программную логику. Но в этом случае всю систему придётся переписать. С другой стороны, такой подход позволяет не только перекроить шаблон, но и добавлять собственный функционал.

2. Работа с комментариями сделана через ягодицы. Капчи изначально нет: здравствуй, спам. Настроить вывод комментов для удаления нельзя. Отключить комментирование разом нельзя. На один из наших сайтов была спам-атака, за день 18 тысяч новых комментов, которые по 20 штук удалять было никак не оптимистично. Доступа к базе напрямую тоже нет, чтобы удалить все неодобренные комменты одним запросом: DELETE from wp_comments WHERE comment_approved = '0';. Страница модерирования от такого количества тоже умерла. Переименовал скрипт добавления комментов (а вот у меня во фреймворке одну галочку для этого надо поставить в настройках, чтобы запретить комментирование), изменил скрипт администрирования комментов на PHP, чтобы по 400 комментов разом можно было сносить (если больше, то система вешается и не отдаёт страницу в админке), поудалял комменты, нашёл плагин с капчей, активировал, обратно переименовал скрипт добавления...

3. Плагины. Страшное дело. Это путь фаерфокса: без плагинов только основаная функциональность, очень-очень основная, зато с плагинами рай земной. Только чем больше плагинов, тем больше система тормозит. А функциональность-то нужна: нормальные адреса страниц, капча, форум, перевод фрагментов текста на русский язык (с локализацией беда вообще), управление комментариями, красоты всякие аджаксовые... А элементарный файловый менеджер? Попробуй его найди. Опять — ставить плагин... И просто попытка загрузить на свой же сайтоблог файлик, чтобы показать другу, превращается в мучение.

4. Слишком большое количество файлов. Как следствие — бóльшая уязвимость системы (то, что это вордпресс, фактически невозможно скрыть: слишком много следов). Логика, конечно, предельно понятная, сразу знаешь, что где искать, но нужно ли, если как фреймворком пользуешься вордпрессом as is?

Итог. В качестве системы, которую быстро поставил, настроил и работай — очень удобно. Если нужна серьёзная основа для работы с большим наплывом пользователей — нужно ещё тринадцать раз подумать.

CMS без баз данных

Оказывается, их не так уж мало, что радует (если мне нужно создать сайт в несколько страниц с CMS, то незачем поддерживать базу данных). Сегодня ознакомился с Rumba — крошечный движок с довольно развитым функционалом. Правда, минусов очень много, но для нетребовательного сайтовладельца запросто пригодится: нетребовательный к ресурсам, легковесный сам по себе, простой движок.

Есть целый ресурс с подборкой таких систем управления содержимым — CMS без MySQL. Справа меню с выбором систем.


В 2009 году я допишу второй фреймворк-CMS без использования баз данных и в общих чертах сделаю коммерческую легковесную CMS из десяти файлов.

Центрирование блоков без указания ширины

Задача: расположить блок "centrovoj" по центру страницы, причём неясно, какая у него будет ширина. Если бы было ясно, подошло бы стандартное:


body {
	text-align:center;
	}
#centrovoj {
	text-align:left;
	width:400px;
	margin:0 auto;
	}

А вот так вот не работает, потому что ширину не можем узнать.

Оказывается, существует рецепт. Пишем два блока DIV (один внутри другого), внешний "vneshnij" и в нём вложенный "centrovoj" (он с содержимым). И добавляем стили:


#vneshnij {
	float:left; 
	position:relative; 
	left:50%; 
	}
#centrovoj {
	float:left; 
	position:relative; 
	left:-50%;
	}

И волшебство происходит. Соль-перец по вкусу.


Приятно, что внутри основного блока (который "centrovoj") можно расположить ещё несколько, которые будут выстраиваться рядом, если им задавать флоатинг. Например, одна колонка с заданной шириной, а вторая растягивается по содержимому. Вариантов применения масса.


Найденные проблемы: очень криво работает в Firefox 2 под Linux и создаёт горизонтальную прокрутку в Firefox 2/3 под Windows (последнее легко лечится overflow:hidden для body).

Спрайты

Изображение

Сколько их применяю, а не знал, что они так называются.

Css-спрайт (css sprite) — одно изображение, которое включает в себя несколько логически связанных изображений, используемых для создания эффекта анимации при наведении курсора на элемент.


P.S. Картинка не в честь этого, а просто понравилась. Есть здесь тоже какая-то анимация (от слова anima = душа).

Ресурс по запоминанию слов и фраз

на разных языках мира: вот тут.

Можно выбрать язык интерфейса и изучения.

Стихотворение

живет на моем плече.

ночами он сам не свой: работа, работа. Герой

должно быть чужих работ,

он любит шутить,

и его любит мой несу-ще-ст-ву-ю-щий кот;

ему не нравится молоко, но этим он и живет...

он может вас приютить, пожалуй, он с вас не возьмет

ни платы, ни шубы с плеча: умеет любить сгоряча,

умеет любить, будто сердце не жжет,

не знает обидных речей, умеет утешить ловчей

пожалуй, любого иного из тех ловкачей,

что вас караулят,

когда он вас ждет.

встречает с авоськой весомых сластей,

ни съест ни одну из любимых конфет.

он думает "стоит на пару ночей"

залезть, (поселиться) в кухОнный буфет,

и там наблюдать за вашей судьбой свысока

полета пропеллеров с потолка.

работа, работа, работа, немного сует

приправленных вкусным вишневым тортом:

он тих и спокоен, когда его нет

и тих и спокоен, когда он заходит в дом.

ему оставляют на полках заваренный чай,

но он

никогда не ходил в домовых!

мой кот говорит, что его нужно приучать

к хорошим сортам, но он сам по себе добрее сортов любых.

хорошее тащит к себе в комод,

ему невдомек, отчего поместиться туда не смог

ни борщ из кита, ни большая тарелка домашних котлет,

наверное, думает, нужно свет

старательно приглушить.

хрустит по ночам омлет.

ах да, он смеется. от всей души.


Виктория Митина, 20 мая 2009

Ретро-иконки

Изображение
Замечательный стиль, разработчики мастера.

Чай

Ценный ресурс, посвящённый чаю: www.tea4you.ru

Проза

Теперь вся моя проза и частично поэзия будет собираться на специальном сайте. Дизайн временный, мне хотелось просто собрать всё в одном месте.

Уроки японского

Настя Кэрролл сделала замечатальный сайт «Японский — это не сложно» и выложила на нём Уроки японского языка для начинающих — прекрасное пособие по разговорному японскому (перевод всех 50 уроков учебника Наоэ Наганумы «Первые уроки японского»).

Разница во времени

Рассказ



Бинат прищурилась на солнце, запрокинув голову, и сказала тихо:

— Уходить отсюда не хочется.

Лек с лёгкой улыбкой кивнула. Она сидела на шатком мостике, болтая в воде ногами, и вполуха слушала подругу. Мысли, по обыкновению, были заняты Путешественником.

Путешественник, который, как казалось, был тут уже очень-очень давно и вместе с тем совсем недавно, рассказывал Лек о долине виноградников, о железных птицах и о танцовщицах в золотых украшениях. Всё это вместе с густым голосом, смуглой кожей и морщинками в уголках глаз — от улыбчивости — оставило очень сильный след у девушки в душе. Она раза четыре хитростью пыталась узнать его имя, но не получилось. | полный текст

Второе-2009

А если день превратится в вечер

И если вечером будет ветер

И пыль взовьётся морским чудовищем

И об асфальт разобьётся счастье


И ты чудовища этого туловища

Напор увидишь и почувствуешь на щеках

Тоскливый и дождь уже обещающий

То слова вдруг сомнутся в твоих руках


Ты отпустишь их на волю пелены воды

И подхваченные сумасшедшим течением

Они будут размолоты ударами холода

И размажут по стеклу твои ощущения


И увидев всплеск молнии в небе вспоротом

И услышав, как шепчет плывущий по лужам цветок

Ты улыбнёшься неожиданно уголками коротко

И быстро разувшись, выйдёшь в холодный поток


И автобуса громыхающего устало и долго

Отпустив в струи строгие серую тень

В льдом кипящие лужи погружая замёрзшие ноги

Ты подумаешь: завтра будет хороший день

Седьмая ветка


Вечерело, а Рамина, сидя на самом краешке ветки и свесив ножки вниз, всё ещё вглядывалась в пустоту, разбавленную лёгкими облаками. Из головы никак не шёл разговор с Кипаритом, который полдня рассказывал ей истории о сказочных существах, которые живут под деревом.

Началось всё как обычно: они наслаждались солнцем на огромном листе пальмирии, Кипарит, скромно ухаживавший за ней уже два месяца, рассказывал свои фантастические истории, девушка поначалу смеялась, а потом серьёзно задумалась, когда он стал доказывать ей, что всё это не сказки, а самая что ни на есть правдивая правда. Она сидела, обняв коленки, слушала молодого человека и радовала его своей улыбкой. Под конец она поблагодарила его и, легко взмахнув крылышками, упорхнула, а он лишь восхищённо проводил её глазами. Рамине повезло: она была одной из немногих, у кого были крылья. | полный текст

* * *

На тонкой рисовой бумаге

Ласкает ветер руки-плечи,

Летают капли твоих взглядов,

И осень листьев ищет встречи,


И я неспешно из тумана

В туман обрывков мыслей-слов.

Забытый старый полустанок

Что зимним домом для волков...


Но тонкой рисовой бумаге

Устало слушать вой ветров,

Ей хочется цветов и влаги

И ярких радужных стихов.


Желает кисти с тушью ласку

Изведать в нежности она

И безрассудных пятен краски

Ожоги сладкие храня,


Отдать потом себя стихами

И в нежных пальцах пульсом петь,

Чтоб с восхищением вздыхали

И всё боялись — не допеть.

Семантические поля в солнечный день

Солнце нежно перебирало кончики пушистых русых волос на голове Лены Смолиной, поблёскивало в оправе очков Наташи Русаковой и двумя пятнами уныло гнездилось на створках исписанной мелом доски. В тех местах, где оно освещало доску, прочитать ничего не было возможно: отчасти из-за почерка профессора Клюева, отчасти из-за того, что доска была натёрта поколениями лекторов до блеска.

Лекция была скучнейшая, про лексико-семантические поля и их интерпретации в разных лингвистических школах. Профессор, сутулясь над кафедрой, высушенным голосом размеренно диктовал одну фразу за другой. Света Ласточкина, сидевшая рядом со мной, прилежно записывала его откровения, примеры подчёркивая зелёной ручкой, а заголовки отмечая красной. На лице Вовки Тугаринова двумя партами правее застыло безнадёжное отчаяние что-либо понять. Я подозреваю, что похожее выражение лица было и у меня, только не от непонимания. От тоски.

За окном нежилось на небе солнце, даря красоту своего горячего тела всем жителям земли. Всем, кроме тех, кто сидел в нашей аудитории. С улицы слышались звонки трамваев и торопливые гудки машин, девичий смех и из магазина напротив какая-то хорошая музыка. Весь этот праздник жизни не касался только нас. Эта потрясающая несправедливость тёплым субботним утром могла бы совершенно вывести меня из равновесия, если бы монотонный голос профессора Клюева, близоруко касавшегося носом листков с лекцией, не нагонял на меня сон. Тепло, тишина остальной аудитории, ранний подъём в шесть утра, чтобы успеть на лекцию, и мерное поскрипывание голоса лектора создавали такую умиротворяющую атмосферу, что я держался из последних сил. Веки наливались тяжестью, аудитория погружалась в лёгкую дымку, я несколько раз потёр пальцами глаза, сел чуть более неудобно, чтобы не засыпать, но не помогло. Я совершенно очевидно понял, что сейчас просто неприлично усну на лекции. Выглядеть это будет ужасно: я ворочаюсь во сне.

Чувствуя, как слипаются глаза, я старался сдерживать себя, но профессор Клюев всё же посмотрел на меня, понимающе улыбнулся, чуть оскалившись, оттолкнулся ногами от скрипучих досок пола и плавно взлетел к потолку. Поскольку голос его продолжал читать лекцию, никто не поднял головы и не обратил на это внимания. Профессор тихо приземлился около меня, сев на корточки на подоконнике, и ласково спросил:

— Вам совсем скучно на моей лекции?

Света Ласточкина тихо хихикнула, а я изо всех сил отрицательно затряс головой, боясь обидеть Клюева. И, конечно, проснулся, вздрогнув, как это обычно бывает, если просыпаешься от кошмара. Деликатная Света, едва взглянув на меня, чуть улыбнулась уголками губ, но ничего не сказала. Профессор, протирая очки полой пиджака, продолжал монотонно читать лекцию, каждая фраза которой давно уже свила плотное гнёздышко в его памяти. Листочки с записями он держал перед собой скорее по традиции.

Много позже мне рассказали, что он, стоя перед аудиторией и рассказывая про коммуникативное обоснование семантики переходности глаголов славянских языков, как-то тоже заснул. Но при этом не прервал чтение лекции, поэтому никто ничего не заметил, и профессор Клюев, проснувшись по звонку, собрал свои записи и покинул аудиторию.


25 апреля 2009

Элли

ее платье скользит по опавшей листве,

она медленно пробует вальс

на вкус. на холсте

нарисованное помело.

ее бусы алее чем этот закат,

она осень, которая сном

превращается в яд. на губах

у нее чуть горчит пастила.


у нее нет зонта, чтоб вернуться

"назад", - говорит портретист.

это кэролл рисует с нее всех Алис.

Это на пол летит хитрый лист,

чтоб потом под ногами ее опасть,

чтобы платье могло скользить

и улыбкой мог кот

по-чешырячьи вас привечать.


ее платье... оно из потока дождей.

не ждет на свиданье ее король.

"уйдет",- в окно говорит метель,

но ведь осенью снег не идет?

ее руки устало несут метлу,

ей хочется спать и сопя смотреть

на большую такую свою луну,

но сначала придется ее допеть.


в этой сказке зонты возвращают домой.

Милая Эля, волшебник уже идет.

Вешай платье на стул, просыпайся собой.

вспоминай, как готовить грушовый компот.

пусть ночами глубокою снится нора,

пусть тебя охраняет живой Дровосек.

а на холсте, на холсте акварелевая мишура,

век пылится. который век.


Виктория Митина

Краткая история языков

1.

Каждый из нас говорит на каком-то языке. Русском, литовском, тамильском, тагальском, бурушаски, вьетнамском, татарском, бацбийском или нивхском. А может, баскском, венгерском, корейском или одном из 38 основных диалектов цыганского.


2.

Языков в мире очень много — точное число сложно сказать из-за неявности определения диалектов: носители разных диалектов китайского не могут понять друг друга, как и носители диалектов аварского, а вот носители разных языков — татары и башкиры — понимают друг друга. По оценке французских лингвистов 90-х годов — 5621 язык.

3.

Языки составляют подгруппы и группы, а группы объединяются в семьи. Например, русский язык входит в восточную подгруппу славянской группы языков. А славянские языки входят в большую индоевропейскую семью языков, куда относят также романские (итальянский, испанский, французский, румынский), германские (англ., нем.), индоарийские, балтийские, армянский, греческий, албанский (настоящий), многие древние: латинский, хеттский. Сложно поверить, но украинский родствен армянскому, английский — цыганскому, а таджикский — французскому.


4.

Поскольку языки эти родственны, они имеют единого предка. Например, все славянские (русский, польский, болгарский, чешский, белорусский, македонский и другие) были максимально похожи друг на друга примерно 1,5 тысячи лет назад, а с балтийским (давшим миру потомков — литовский и латышский языки) разошлись около 2 тысяч лет назад, когда, по преданию, жил и проповедовал Христос. Ещё за тысячу лет до этого уже сформировался греческий (времена, когда Гомер на память рассказывал приятелям Илиаду и Одиссею) и латинский входил в тогда ещё живую италийскую группу языков. А ещё за тысячу лет до этого (4000 лет назад) бытовал как живой язык хеттский, клинопись на котором была открыта чехом Бердржихом Грозным только в ХХ веке, и формировался древнеиндийский язык санскрит (= «совершенный») с красивейшей слоговой письменностью деванагари (= «обитель богов»). Соответственно, более глубокое родство индоевропейских языков лежит в интервале пятого и шестого тысячелетий до нашей эры (не менее 7000 лет назад). 70 веков назад ребята болтали на одном языке и не думали, что их потомки-русские будут воевать с потомками-немцами и ненавидеть потомков-цыган, восхищаться стихами потомка-иранца Навои и потомка-англичанина Шекспира. Рубить головы потомкам-полякам, подражать потомкам-французам.


5.

Но этого мало. Семей-то на свете много. Есть, например, большая алтайская семья (монгольская и тунгусо-манчжурская группы и большая тюркская — татарский, узбекский, турецкий, казахский, якутский...). Алтайской семье близкородствен корейский и (чьи корни смешаны с другими языковыми группами) японский.

Более отдалённо алтайской семье родственна семья уральских языков, яркие представители которой — венгерский (предки которых жили в Башкирии), мелодичный финский и обстоятельный эстонский, а также саамский, по сложности грамматики и фонетических процессов сходный с русским или латышским.

У уральских языков (часть носителей языков других групп этой семьи осталась жить в пределах уральского ареала) и близкого им юкагирского (на нём сейчас говорят около 400 человек в Сибири) обнаруживается необычный родственник в виде дравидийской семьи — тамильский язык, телугу, каннада и малаялам на юге Индии и брауи на севере. Кроме этого, у дравидийских языков есть мёртвый родственник, эламский язык, на котором говорили в передней Азии (совр. Турция и там рядом).

И всё это богатство отдалённо (8-9 тысяч лет назад) родственно... индоевропейским языкам. Мы, русские, белорусы, украинцы — родственники эстонцам, туркменам, корейцам, латышам, монголам (нашествие? какое нашествие?), татарам, грекам, венграм, туркам...

Получается неплохая индийско-бразильская мыльная опера: по родимым пятнам (числительные, местоимения, названия деревьев, небесных тел, частей тела и прочие слова из основного, первичного словарного запаса) можно найти родственников то тут, то там.

Например, всей этой грозди разнообразных языков родственны — кто бы вы думали — грузины. И вся картвельская небольшая семья (сваны, мегрелы...). Вы никогда не обращали внимания, что русское «меня», башкирское «мин» («я»), грузинское «мэ» и эстонское «mina» похожи и по звучанию, и по значению? Таких следов древнего родства сотни.

Наконец, более 11 тысяч лет назад на близких языках говорили предки всех перечисленных семей и афразийцы — предки современных евреев и арабов, враждующих между собой, древних египтян и коптов и ещё нескольких десятков народов, крупных и мелких. Языки Мальты, Чада, Саудовской Аравии, Израиля, Ирака являются отдалённо родственными русскому, грузинскому, армянскому, киргизскому и мордовскому.


6.

Праязык, предок всех перечисленных семей, сейчас в науке называется ностратическим. Он возник около 15 тысяч лет назад. Его частично реконструировали, воссоздав звучание сотен слов, давших начало многообразию современных языков. Замечательный советский лингвист В. М. Иллич-Свитыч даже сложил стихотворение на ностратическом языке:


Келхэ ветей хакун кэлха,

Калан палха-ки на ветэ.

Ся да а-ка ейа элэ,

Йа-ко пеле туба вете.


Что по-русски звучит примерно как


Язык — это брод через реку времени,

Он ведет нас к жилищу ушедших;

Но туда не сможет прийти тот,

Кто боится глубокой воды.


7.

Но это ещё не всё.

Есть такие же огромные сино-кавказская макросемья (китайский, тибетский, тайский, бирманский, чеченский, лезгинский, баскский, кетский языки и сотни других), америндская (языки индейцев Америки) и другие. И есть предположение, что все мы вышли из гоголевской шинели они тоже родственны друг другу и ностратическому праязыку.

Не забыть

Всеволод Овчинников, «Ветка сакуры».

Без автора

Идёт принцесса, обходит лужи —

Спешит принцесса готовить ужин.

А доберётся — поставит кофе,

Ошпарит душу стекляшке-крохе.

Закурит в кресле — увы, привычка,

Печально глядя на пламя спички.

Две чашки кофе потом, и книга —

И снова вечер короче мига.

Постель принцессу прижмёт, со вздохом —

И та ответит коротким — охом.

Погасит лампу — свою подругу —

На службу завтра и вновь — по кругу.

Мерцает светом вечерний город,

Идёт принцесса, шагает гордо.

Ничья — владыка, ничья — невеста,

Да, да, без трона и королевства.

Ведь так бывает: родишься где-то,

Глядишь, ошибся — не та планета.

Японская гравюра

Изображение

Авторы: Рони Нойер, Герберт Либертсон, Сусугу Ёсида.

Год издания: 2008.

Кожаный переплёт.

Цена: 40 тысяч рублей.

Загадка

Изображение

Предлагается угадать, на каком языке и что тут написано.

Берите.инфо

Берите.инфо


Это уже не тестовая версия, а готовая к использованию. Давайте объявления, заполняйте базу. Скоро сайт будет лучшим сайтом саратовских объявлений.

Артистпортфолио

Поскольку я уже давно занимаюсь в компании разработкой и поддержкой сайта ArtistPortfolio (вёрстка, программирование фрагментов, редизайн, фичи...), то решил сделать себе там портфолио: вот оно.

Синие штаны

В последние два года среди девушек модно носить ярко-синие обтягивающие брюки или какое-то подобие лосин. По цвету они напоминают тренировочные трико с вытянутыми коленками начала 80-х годов, которые носили дома в небогатых семьях. Оттенок тот же, ассоциация у меня прямая. Девушки моложе, они не застали этого явления, могут носить штанишки с лёгким сердцем.

Грга прислал

Сидять в хаті невістка з свекром та свекрухою.

Свекруха каже: - Все у нас до ладу. І живемо добре, і не лаємось, от тільки хата небілена. Невістка: - Які проблєми, мамо! Білила є?

- Є, а тільки щітки нема. Невістка підбігла до свекра обстригла йому бороду, зробила щітку і побілила хату.

Свекруха знову: - От і хата в нас побілена, а вікна непокрашені.

Невістка: - Які проблєми, мамо! Краска є?

- Та є, от тільки кісточки нема. Невістка підбігла до батька, обрізала вуса, зробила кісточку та покрасила вікна.

Вечір. Вертається додому чоловік з роботи. Дивиться на груші батько сидить.

- Тату! А чого ви там сидете?

- Там, синку, у хаті дві курви зібралися млинцi пекти. Так я оце не знаю чи є в них яйця чи нема.

Личностный рост и карьерное развитие

Священник предлагает монахине подвезти ее. Сев в машину, она закидывает ногу за ногу, так, что бедро обнажается. Священнику с трудом удается избежать аварии. Выровняв машину, он украдкой кладет руку ей на ногу. Монахиня говорит: «Отец, Вы помните Псалом 129?» Священник убирает руку. Но, поменяв передачу, он опять кладет руку ей на ногу. Монахиня повторяет: «Отец, Вы помните Псалом 129?». Священник извиняется: «Простите, сестра, но плоть слаба». Добравшись до монастыря, монахиня тяжело вздыхает и выходит. Приехав в церковь, священник находит Псалом 129. В нем говорится: «Иди дальше и ищи, выше ты найдешь счастье». Мораль: если Вы плохо знаете свою работу, многие возможности для развития пройдут прямо у Вас перед носом.

Обработка ошибок

При обработке страниц ошибок (при сборке их из фрагментов, как обычных динамических страниц) с помощью фреймворков нужно не забывать, что страница всё-таки должна отдавать ошибку 404, а не 200 (а именно ошибку 200 страница отдаёт, если она собрана правильно, даже при отсутствии необходимых файлов). Например, в PHP до любого вывода в браузер нужно отдать нужный заголовок:


header("HTTP/1.1 404 Not Found");


Поисковые системы будут счастливы.

Коды ответов HTTP сервера

Диапазон кодов — значение ответа
100-199 Информационный
200-299 Запрос клиента успешен
300-399 Запрос клиента переадресован, необходимы дальнейшие действия
400-499 Запрос клиента является неполным
500-599 Ошибки сервера



Ответы в диапазоне 100-199 — информационные; они показывают, что запрос клиента принят и обрабатывается.

100 Continue
Начальная часть запроса принята, и клиент может продолжать передачу запроса.

101 Switching Protocols
Сервер выполняет требование клиента и переключает протоколы в соответствии с указанием, данным в поле заголовка Upgrade.

Ответы в диапазоне 200-299 означают, что запрос клиента обработан успешно.

200 OK
Запрос клиента обработан успешно, и ответ сервера содержит затребованные данные.

201 Created
Этот код состояния используется в случае создания нового URI. Вместе с этим кодом результата сервер выдает заголовок Location, который содержит информацию о том, куда были помещены новые данные.

202 Accepted

Запрос принят, но обрабатывается не сразу. В теле содержимого ответа сервера может быть дана дополнительная информация о данной транзакции.

203 Non-Authoritative Information
Информация в заголовке содержимого взята из локальной копии или у третьей стороны, а не с исходного сервера.

204 No Content
Ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа браузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь щелкает на бесполезных или пустых участках изображения.

205 Reset Content
Браузер должен очистить форму, используемую в данной транзакции, для дополнительных входных данных. Полезен для CGI-приложений, требующих ввода данных.

206 Partial Content
Сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range.

Код ответа в диапазоне 300-399 означает, что запрос не выполнен и клиенту нужно предпринять некоторые действия для удовлетворения запроса.

300 Multiple Choices
Затребованный URI обозначает более одного ресурса. Например, URI может обозначать документ, переведенный на несколько языков. В теле содержимого, возвращенном сервером, может находиться перечень более конкретных данных о том, как выбрать ресурс правильно.

301 Moved Permanently
Затребованный URI уже не используется сервером, и указанная в запросе операция не выполнена. Новое местонахождение затребованного документа указывается в заголовке Location. Во всех последующих запросах данного документа следует указывать новый URI.

302 Moved Temporarily
Затребованный URI перемещен, но лишь временно. Заголовок Location указывает на новое местонахождение. Сразу же после получения этого кода состояния клиент должен разрешить запрос при помощи нового URI, но во всех последующих запросах необходимо пользоваться старым URI.

303 See Other
Затребованный URI можно найти по другому URI (указанному в заголовке Location). Его следует выбрать методом GET по данному ресурсу.

304 Not Modified
Это код ответа на заголовок lf-Modified-Since, если URI не изменялся с указанной даты. Тело содержимого не посылается, и клиент должен использовать свою локальную копию.

305 Use Proxy
Доступ к затребованному URI должен осуществляться через proxy-сервер, указанный в заголовке Location.

Коды ответов в диапазоне 400-499 означают, что запрос клиента неполный. Эти коды могут также означать, что от клиента требуется дополнительная информация.

400 Bad Request

Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.

401 Unauthorized
Этот код результата, передаваемый с заголовком WWW-Authenticate, показывает, что пославший запрос пользователь не имеет необходимых полномочий и что при повторении запроса с указанием данного URI пользователь должен такие полномочия предоставить.

402 Payment Required
Требуется оплата. Этот код в HTTP еще не реализован.

403 Forbidden
Доступ запрещён. Запрос отклонен по той причине, что сервер не хочет (или не имеет возможности) ответить клиенту. Например, запрещён листинг директорий, и при обращении к директории без файлов выдаётся 403.

404 Not Found
Документ по указанному URI не существует.

405 Method Not Allowed

Этот код выдается с заголовком Allow и показывает, что метод, используемый клиентом, для данного URI не поддерживается.

406 Not Acceptable
Ресурс, указанный клиентом по данному URI, существует, но не в том формате, который нужен клиенту. Вместе с этим кодом сервер выдает заголовки Content-Language, Content-Encoding и Content-Type.

407 Proxy Authentication Required
Proxy-сервер должен санкционировать запрос перед тем, как пересылать его. Используется с заголовком Proxy-Authenticate.

408 Request Time-out
Этот код ответа означает, что клиент не передал полный запрос в течение некоторого установленного промежутка времени (который обычно задается в конфигурации сервера) и сервер разрывает сетевое соединение.

409 Conflict
Данный запрос конфликтует с другим запросом или с конфигурацией сервера. Информацию о конфликте следует возвратить в информационной части ответа.

410 Gone
Данный код показывает, что затребованный URI больше не существует и навсегда удален с сервера.

411 Length Required
Сервер не примет запрос без указанного в нем заголовка Content-Length.

412 Precondition Failed
Результат вычисления условия, заданного в запросе одним или несколькими заголовками if. . ., представляет собой "ложь" (false).

413 Request Entity Too Large
Сервер не будет обрабатывать запрос, потому что его тело слишком велико.

414 Request-URI Too Long
Сервер не будет обрабатывать запрос, потому что его URI слишком длинный.

415 Unsupported Media Type
Сервер не будет обрабатывать запрос, потому что его тело имеет неподдерживаемый формат.

Коды ответов в диапазоне 500-599 показывают, что сервер столкнулся с ошибкой и, вероятно, не сможет выполнить запрос клиента.

500 Internal Server Error
При обработке запроса на сервере один из его компонентов (например, CGI-программа) выдал аварийный отказ или столкнулся с ошибкой конфигурации.

501 Not Implemented
Клиент запросил выполнение действия, которое сервер выполнить не может.

502 Bad Gateway
Сервер (или proxy-сервер) получил недопустимые ответы другого сервера (или proxy-сервера).

503 Service Unavailable
Данный код означает, что данная служба временно недоступна, но в будущем доступ к ней будет восстановлен. Если сервер знает, когда это произойдет, может быть также выдан заголовок Retry-After.

504 Gateway Time-out
Этот ответ похож на 408 (Request Time-out) , за исключением того, что шлюз или уполномоченный сервер превысил лимит времени.

505 HTTP Version not supported
Сервер не поддерживает версию протокола HTTP, использованную в запросе.

Характер звучания языка

Язык звучит характерно (то есть его звучание можно воспроизвести без знания языка) при соблюдении одного из двух условий:

1. сильные морфонологические ограничения (невозможность или ограниченная возможность заканчивать слово согласным, ограничения на типы слогов и т.п. — итальянский, финский, японский и т.п.)

2. сильные морфонологические допущения (возможность сочетаний большого количества согласных или гласных — армянский, грузинский, полинезийские).

По Drum Bun

На основе системы Drum Bun, а точнее, на основе альфа-сборки, уже работает один сайт. Но сама система в постоянном развитии.

Сейчас хочу сделать улучшение в системе: сделать редактирование всех реестров, относящихся к страницам, в одном разделе CMS: редиректы, закрытые и запароленные страницы. Ну, и доделать блоговую часть, хотя работы там ещё море. А ведь два года назад, когда я начинал писать первую версию этой системы (кода которой в нынешней версии уже не осталось), Drum Bun позиционировался в основном как блог-система.

Мысли по Берите.инфо

Добавить в Берите.инфо:

1. ключевые слова и проч. сео (сделано);

2. удалять устаревшие объявления;

3. важно: при выводе результатов поиска должно быть понятно, что искал (сделано);

4. редактирование объявлений;

5. редактирование рекламной области для объявлений каждого типа и для одного из пяти основных типов.

Берите.инфо

Запустил в тестовом режиме сайт Берите.инфо.

Базы там пока никакой нет, так что требуется тестирование системы и одновременно заполнение сайта объявлениями.

Если коротко — это сайт для бесплатного обмена объявлениями. Для поиска или добавления объявлений на самые разные темы не требуется регистрироваться или платить какие-то деньги. Платной услугой будет только публикация рекламы или тех объявлений, которые будут показываться наверху результатов поиска.

Все замечания, указания на баги, глюки и ошибки приветствуются.

Монгольская каллиграфия

Изображение

Вот таким красивым было раньше монгольское письмо. Сейчас монголы пишут примерно вот так:

Монгол хэл нь монгол үндэстний эх хэл юм. Гарал үүслийн хувьд түрэг хэл, тунгус хэл зэрэгтэй адил Алтай хэлний язгуурт багтдаг. Солонгос хэл, япон хэлний адил нэр үг нь өгүүлбэрийн эхэнд, үйл үг нь өгүүлбэрийн сүүлд байдгаараа онцлогтой. Явцуу утгаараа Монгол улс дахь халх аялгуунд тулгуурлаж ярих хэлийг хэлэх бөгөөд өргөн утгаараа монгол үндэстний ярих хэл яриаг хэлнэ. Өөрөөр хэлбэл тусгаар тогтносон Монгол Улсын монголчууд болон, Xятад улсын нутаг дахь Өвөр Монголын Өөртөө Засах Орны Өвөр Монголчууд, Орос улс дахь Халимаг, Буриадуудын ярих хэлийг хэлдэг.

А здесь можно прочитать интересный пост про выставку каллиграфии с фотографиями.

Приятное

Вчера, как обычно, в перерыве вышли поиграть в волейбол из офиса. И тут к нам подбегают две девчушки, примерно 9 и 11 лет, и просят разрешения поиграть с нами. Конечно, мы предложили вставать и играть. Они стараются играть, повторяют наши движения, не делая никаких скидок себе, бегают за мячом, когда он улетает далеко. Забавно, что мяч чаще всего кидали мне и ещё одной сотруднице, которая тоже в университете преподаёт.

Дальше по iLyte

Скоро на этом блоге (и на официальном ресурсе) появятся ещё несколько вещей. В первую очередь:

1. постраничный вывод записей с главной страницы (но не так, как в вордпрессе и т.п.);

2. возможность добавлять по несколько тем к записям;

3. исправление бага с обрезкой записей в визуальном редакторе;

4. алфавитное расположение тем при создании новой записи;

5. более корректная система авторизации и просмотра закрытых записей.

Ariadna

Это, насколько я знаю, единственный браузер, который был создан отечественными разработчиками. У него нет поддержки JavaScript, зато уже есть закладки-избранное (не вкладки!) и англо-русский словарь. Понятное дело, никакого CSS Level 2.

На сайте разработчиков скачать уже нельзя (разработка прекратилась около десяти лет назад), поэтому я выложил его тут. Наслаждайтесь.

Фото

Изображение

Нежная минималистичная техника, мне очень нравится. Не помню, где взял.

Привязанности

Я равнодушен к дорогим вещам. Пожалуй, кроме компьютера, но его я расцениваю не как ценность, а как первый рабочий инструмент. А вот к привычным небольшим вещам я сильно привязываюсь. Например, мне безумно жалко, когда разбивается какая-нибудь кружка для чая.


К этому блогу я тоже привязан. Вчера немного обновил поисковую систему и выложил на несколько серверов.

Урок по блочной вёрстке

Мы начали верстать веб-страницу. В качестве исходного материала дизайнер дал нам целую картинку в формате GIF. Допустим, у нас нет никакого графического редактора, чтобы разрезать картинку на части, и мы вынуждены использовать её целиком. С помощью простейшего графического редактора типа Paint мы можем только узнать точное числовое значение фонового цвета и цвета для блока с текстом. Но ссылки должны быть активными, а пустые места предназначаются для текста — чтобы получилось вот так, страницу сверстать надо — и я не вижу к этому препятствий.


1. Вёрстка будет блочная. Разделим страницу на несколько логических блоков, не связанных конкретно с этим дизайном, и не забудем обязательный основной элемент, обрамляющий остальные. Получились блоки: основной, блок заголовка-логотипа со ссылкой внутри, меню (и три идентифицированные ссылки внутри) и блок основного текста.


2. В стилях назначаем точные размеры и отступы для основных элементов, для фона страницы и основного текстового блока задаём цвета.


3. Все ссылки делаем блочными элементами (display:block), а внутри блока с меню три ссылки точно позиционируем. Текст ссылок скрываем из поля видимости: text-indent:-9999px.


4. Для основного блока делаем минимальную высоту — min-height. Современные браузеры это поймут, а Internet Explorer справится с задачей и без того. Ну, и соль-перец по вкусу, как водится: подчёркивание для ссылок при наведении, вытягивающийся при переполнении текстом блок для текста и т.п. Смотрим ещё раз результат.

NicEdit и другие редакторы

Долгое время я в своих проектах пользовался легковесным визуальным редактором NicEdit для изменения текстов на веб-страницах. У него обнаружился минус: некорректная работа в Файрфоксе и подобных браузерах — не читаются стили текущей страницы, и в окне редактирования текст выглядит не совсем так, как хотелось бы и как он должен выглядеть на результирующей странице. Пришлось для одного проекта взять FCKeditor и ставить вместо прежнего редактора, потому что многие администраторы сайта пользуются Файрфоксом. Получился казус: фреймворк, на котором построен сайт, весит около 200 Кб, а текстовый редактор — 1,5 Мб.

Блоги

Нашёл сразу два интересных блога:

My Life on .RU про туризм

и Кусочек науки — интересные записи по астрономии.

Поиск по записям

Наконец-то на этом блоге появился текстовый поиск. Раньше можно было искать записи только по темам или датам, а сейчас на странице поиска внизу появилось и обычное текстовое окошко, в которое можно ввести строку запроса и искать. Пока поиск довольно простой, почти без учёта морфологии, но пара особенностей русского языка там принята во внимание.

JavaScript-фреймворк: обращения к элементам любого типа

До окончания ещё далеко. Но уже произошли изменения. Теперь к элементам можно обращаться по именам тэгов, по идентификаторам, по классам и просто по this. Происходит корректная работа с содержимым элементов и с CSS любого элемента. Фреймворк изначально позиционируется как полностью кроссбраузерный и всегда таковым останется. При этом в коде нет и почти не предвидится веток кода для конкретных браузеров: я стараюсь найти универсальные решения, которые работают во всех современных браузерах: Internet Explorer 6+, Opera 9, Firefox, Chrome, Safari, K-Meleon и другие.

Примеры вызовов:


_hide('#abc');

скрывает блок с идентификатором 'abc',


_html('#abc', _trim(_html('#def')));

записывает в блок с идентификатором 'abc' содержимое блока идентификатором 'def', у которого предварительно по бокам обрезаются пробелы,


_css('#def', { color : '#F30', cursor : 'pointer', borderBottom : '1px dashed red', fontWeight : 'bold' });

оформляет блок с идентификатором 'def' стилями, указанными в фигурных скобках,


_css('body', { fontFamily : 'Arial', fontSize : '14pt', padding : '50px' });

применяет нужные стили к тэгу BODY,


_css('div.xxx', { color : 'blue' });

оформляет синим цветом все блоки DIV с CSS-классом 'xxx'.


Следует обратить внимание, что по сравнению с предыдущей редакцией немного изменился стиль обращений к элементам по идентификатором: сейчас он производится в стиле jQuery с решёткой, предваряющий ID.

Как я писал ранее, мой фреймворк не будет изолирован от остального JavaScript-кода, в связи с чем те вещи, которые и так легко доступны в языке, не снабжаются синонимами во фреймворке:

window.onload = function() {
_hide('#def');
_html('#abc', _trim(_html('#def')));
}

— по факту загрузки страницы выполняется функция, в которой делаются все вызовы на фреймворке.


Приятная мелочь: вместо того, чтобы писать

document.getElementById('abc'),

можно просто написать _('abc').

Цвет выделения на веб-страницах

Обратите внимание, что если вы выделяете текст на страницах этого блога и при этом не пользуетесь Internet Explorer, то цвет выделения бордовый. CSS Level 3 позволяет это сделать; работает в Opera, Firefox (и других Gecko-браузерах) и Safari с Chrome:


::selection {background: #600;} 
::-moz-selection {background: #600;}

Но если есть в кармане пачка сигарет...

Сидеть на спинке скамьи в пустынном месте, почти ночью, с сигаретой и телефоном в руках — это очень успокаивает. Есть в этом что-то уютное. Никого, только по дороге в двадцати метрах справа проносятся изредка автомобили. Да раз в двадцать минут кто-то пройдёт по аллее. Дым, размышления, смс, почти медитация...

Только во рту после этого мерзкий вкус.

Тайна третьей планеты

Изображение

Такими видят героев японские аниматоры. В частности, 10-летнюю Алису (или около того, но помнится, она была пятиклассницей или что-то вроде того). Громозека шикарен.

Мысли

Мне всегда не нравилось то, что в своих разработках программисты всегда ориентируются друг на друга. Да и в повседневной работе тоже. Если хранить информацию — только в БД. Если в javascript-фреймворке обращаться к объекту, то функция обязательно называется $ (рубль). Если программировать, то с ООП. Если верстать на блоках и CSS, то забыть о таблицах. И люди не особо задумываются, что это не всегда может быть оправдано — а в части случаев просто не проявляют фантазию.

Мой JS-фреймворк

Как я уже писал, я начал работу над javascript-фреймворком. Даже название уже придумал.

Написал первые несколько команд с использованием ООП, после чего принял решение полностью отказаться от объектно-ориентированного принципа. Код сократился прилично, когда я переписал функции с использованием обычного функционального подхода.

Правда, сейчас я только в начале работы: с помощью фреймворка можно получать доступ к объектам только по ID и пока никаким другим способом (но принцип, который позволит обращаться по this, классам и именам тэгов, я уже внедрил). Можно читать содержимое элементов или динамически записывать в них новое содержимое (обе задачи обрабатывает одна и та же функция). Есть функция типа trim(). Есть пара синонимов одной функции, которая скрывает или показывает элемент в зависимости от его текущего положения. Наконец, реализовано добавление произвольного количества CSS-свойств элементу.

Вызовы всегда очень короткие и ясные. Например,

_hide('def'); _html('abc', _html('def'));

скрывает элемент с ID "def", а его содержимое записывает в элемент с ID "abc". А с помощью

_css('abc', {color:'red', fontWeight:'bold'});

можно раскрасить элемент с ID "abc" в красный цвет и сделать его текст полужирным.

В подобном стиле будут оформляться все вызовы.

Греческий запах

Изображение

Иногда парфюмерия проходящих мимо способна вызвать целую цепочку воспоминаний. У одной молодой женщины были такие духи — они пахли так, как греческая жевательная резинка Στρουμφάκια (по-английски The Smurfs), а точнее, как вкладыши от неё. В детстве я коллекционировал их.


Весна меж тем, очевидно, прочитав мой пост, стала мягче и солнечнее. Сегодня, хоть и прохладно, но погода очень приятная.


Весна

Шёл на работу и вспомнил фразу из одного из рассказов Нодара Думбадзе:

...весна прошлась босоногой красавицей по свежей зеленой траве и свела с ума всех и вся — скот, птицу, растения*.

У нас весна в резиновых сапогах, под зонтиком или опасливо выглядывающая из-под козырьков подъездов, вялая после болезни-зимы, слезливая и тяжёлая.


__________________

* Выяснилось, что это издержки перевода. В более буквальном переводе звучит так: «В горы скорым шагом поднималась весна. Она выглянула из-за губазаузской рощи и вошла к нам во двор — босая, как распутная девка; подняла подол своего платья, прошлась по свежей зеленой траве и свела с ума всех и вся — скот, птицу, растения».

Следуй за белым кроликом

Изображение

Интерпретации Кэрроловской Алисы часто уводят очень далеко от оригинала.

Web Linkarium

Здесь будут собираться ссылки по веб-разработке:


Сенорранет

Code is art

WellStyled

N.Design Studio

Энциклопедия хостинга

Overme

Проверка ТИЦ и PR


Со временем я их упорядочу.

Javascript-фреймворк

Мне очень нравится jQuery, но хочется своего и ещё более компактного решения.

Начал писать свой javascript-фреймворк. Пока он умеет мало, но уже сильно сокращает код. Из jQuery позаимствовал принцип: одна и та же функция может как читать свойства, так и изменять их (если переданы параметры).

Будет: поиск по ID, классам, тэгам и по this, динамическое изменение содержимого и CSS, генерация HTML, работа с AJAX, цепочки вызовов, анимация и drag-n-drop. То есть обычный набор, но очень компактно.

Фреймворк, вероятно, будет в открытом доступе с документацией.

Витязь на распутье: языки, фреймворки, «движки»

При создании структуры сайта с нуля можно избрать одну из трех дорог. Каждая по-своему привлекательна, и каждая таит свои недостатки.

Первый вариант наиболее сложен. Требуется очень хорошо знать один из серверных языков программирования (знание языков разметки предполагается как само собой разумеющееся), осознавать опасности от потенциальных злоумышленников, знать все типичные ошибки посетителей и тех, кто будет обновлять сайт, обрабатывать все случаи отказов сервера и прочие нештатные ситуации и, конечно, сделать так, чтобы сайтом было удобно пользоваться, самому программисту не потребовалось бы делать много рутинной работы, а при редизайне следующий разработчик смог бы легко разобраться в структуре сайта. Наиболее распространенные ныне серверные языки программирования — PHP, Perl, JSP (или Java Server Pages), ASP и ASP.NET (скорее технология, чем самостоятельный язык, как и простая технология SSI), менее распространены языки Parser, ColdFusion и некоторые другие.

Преимуществ такого подхода два. Во-первых, разработчик имеет полный контроль над собственным творением и знает, за что отвечает каждая строчка программного кода. Не приходится изначально изучать или разбираться в чужих программных решениях: требуется только знание возможностей языка, на котором пишется сайт. Во-вторых, с течением времени (а точнее, с каждым новым проектом) постепенно накапливаются собственные решения: специфическая файловая структура, библиотека кода для обращения к базам данных и для стандартной обработки пользовательских данных и т.п. Возникает желание стандартизировать такую структуру и использовать ее на всех последующих сайтах с минимальными изменениями. В этом случае практически стирается грань между первой и второй дорогами.

Второй путь, или использование фреймворков, удобен для тех, кто хорошо их знает. Фреймворк — это целостная библиотека кода на одном языке, которая позволяет не выполнять рутинную работу. Например, на языке PHP есть фреймворки Zend Framework, eZ Components, Symfony и некоторые другие; для Java (JSP) — Struts Framework и другие. Фреймворки обладают набором правил, которые позволяют использовать возможности серверных языков программирования, почти не работая с кодом на них: обращения к классам и функциям, переменным, циклам и массивам, запросы к БД берут на себя механизмы фреймворков, а разработчику нужно инициализировать эти действия по предусмотренным правилам. Плюс — увеличение скорости разработки. Минус — необходимость знания фреймворка. Кроме того, никто не мешает модифицировать код приложения и использовать дополнительные коды на любимом языке.

Наконец, третий путь предполагает либо отсутствие знания серверных языков программирования, либо отсутствие желания изобретать велосипед. То, что по-английски называется “engine”, в русском языке имеет пока только полужаргонное наименование «движок». Это тоже набор сценариев, но, в отличие от фреймворка — конструктора и помощника по своей сути — движки представляют собой законченную среду. Движок можно установить на сервер (установка предполагает загрузку на сервер нескольких десятков файлов и запуск инсталляционной страницы), настроить по своему вкусу, выбрать один из готовых шаблонов дизайна или нарисовать свой (в этом случае обычно требуется значительная правка CSS-файлов) и начать пользоваться. Есть многоцелевые движки вроде Joomla или Typo3, а есть специально предназначенные для ведения блогов — WordPress, Textpattern или MovableType. Блоги в настоящее популярны до такой степени, что многие оформляют свои сайты в виде дневников или новостных лент, жертвуя при этом удобством традиционной иерархической структуры. Плюсы очевидны: языков серверного программирования можно вообще не знать (знание позволяет работать с движками более гибко), вся работа сводится к настройке средствами самого движка и наполнением сайта информацией. Минусы — разработчик ограничивает себя уже готовой структурой (впрочем, в ряде случаев достаточно гибкой) и вынужден устанавливать такое количество файлов, какое ему вряд ли понадобится для конкретного сайта.

Веб-дизайн: история искусства

История всегда повторяется, пусть и с небольшими допущениями. Терминология остается прежней, хотя в термины вкладываются новые значения. Корабли и навигация в космосе достаточно сильно отличаются от таковых в терминологии мореходства времен Колумба, но метафора и ассоциация будут актуальны еще долго.

Веб-дизайн к искусству имеет такое же опосредованное отношение — но все-таки имеет. Если рассматривать веб-дизайн как искусство, то история его развития в целом повторяет историю развития искусства. Существенная оговорка: веб-дизайн — это далеко не только искусство, а для некоторых создателей сайтов и совсем не искусство, а скорее ремесло, набор технологий или даже рутинная работа. Такая разница в восприятии зависит от целей создания сайта, добросовестности разработчика и методов, с помощью которых он создает сайт.

В книгах по истории искусства неизменно фигурирует Древний Шумер. Если разобраться, искусства как такового там почти не было. Были тексты, которые выполняли утилитарную роль (законы, хозяйственные записи), но литературы не было, за исключением эпоса о Гильгамеше и Энкиду, и то фольклорно-религиозного. Скульптуры и прочие визуальные виды искусства выполняли также религиозные функции. Об архитектуре речи не шло: дома просто должны были быть прочными.

На заре эры веб-дизайна страницы, оформленные для передачи по сетям, тоже носили чисто утилитарную функцию: представление информации. От обычных текстовых документов (txt, log и т.п.), где недопустимо даже оформление, HTML-страницы отличались наличием логики. С помощью особых меток — тэгов — можно дать понять программе просмотра страниц, где заголовок, где обычный абзац, а где, например, цитата. Важнейшим же отличием стало наличие гиперссылок, то есть фрагментов текста, по которым можно было щелкнуть для перехода на страницу, указанную в одном из параметров. Получалось, что страницы можно было связывать друг с другом. Если страницы находились в пределах одного домена, были связанными подобным образом, то они и составляли сайт. Тогда этого было достаточно. Об искусстве речи не шло в принципе.

Эпоха античности в веб-дизайне наступила с распространением следующих версий языка HTML — второй и третьей, и была сравнительно короткой (эры в развитии компьютерных технологий вообще нельзя назвать долгожителями). Сайты были достаточно аскетичными и функциональными. Поскольку появились средства оформления текста, вставка изображений и методы верстки блоков друг относительно друга, то и сайты, к тому времени сравнительно малочисленные, уже перестали быть безличными: добросовестные создатели, претендуя на индивидуальность, старались сделать каждое творение непохожим (а недобросовестных создателей всегда хватало).

Темное средневековье в искусстве оформления сайтов пришло с разработкой технологии «флэш» (Flash). Технология изначально оказалась многообещающей и поражающей своими возможностями. Точно так же, как Стив Джобс, один из основателей Apple, на вопрос о том, зачем столько красивых, но по сути бесполезных эффектов в система MacOS, ответил “Because we can” («Потому что мы можем»), так и флэш-разработчики реализовывали на своих сайтах все знания, которые получали о любимой технологии. В результате и ролики получались тяжелые, и их эстетическая ценность не всегда была высока, и, что главное, нарушался принцип главенства полезного: для загрузки новости в 4 Кб иногда требовалось дождаться загрузки двухсот килобайтов флэш-ролика.

Условная эпоха возрождения началась тогда, когда разработчики стали понимать, что приоритеты все-таки следует расставлять так: польза, удобство, эстетика.

Если сайт бесполезен, то его не стоит и начинать создавать. Если он создается ради демонстрации собственных умений, то это пойдет только ради портфолио, да и то — тогда, если работы действительно достойные. При создании же дизайна стоит четко понимать, что дизайн — это не украшение внешнего вида страницы, а создание удобного и эстетически привлекательного интерфейса для работы с данными. Если сайт невероятно красив, но на нем сложно найти нужную информацию, то он обладает плохим дизайном. Разумеется, что если сайт удобен, но некрасив, то его дизайн тоже сложно назвать хорошим.

Если отвлечься от шаблонных сайтов (шапка и 2-3 колонки с текстами, фотографиями и ссылками), которые существовали и будут существовать, то проекты, создатели которых претендуют на хороший дизайн, начали понимать правильную расстановку приоритетов примерно тогда, когда информационные потоки на сайтах начали выходить из берегов. Тексты статей и новостей, чаты, форумы, блоги, почтовые сервисы, сервисы по обмену фотографиями, видео и музыкой, RSS, комментарии пользователей, расписания, статистика, рейтинги и многое другое — все это нужно каким-то образом упорядочивать. С точки зрения программной логики упорядочивать научились давно: принцип разделения информации, оформления и программной логики является не просто правилом хорошего тона, а необходимым правилом, благодаря которому дизайнеры могут трудиться отдельно, программисты отдельно, а информация не будет страдать в любом случае. Важно, чтобы упорядочена информация была и в смысле дизайна: страница должна не просто радовать глаз, а быть логически структурированной. Если вы встретили сайт, который отвечает таким требованиям — знайте, что он относится к эпохе нового времени.

Однако это не значит, что в интернете можно встретить только ясные, логичные, простые и симпатичные сайты…

О валидной вёрстке

В погоне за чистотой кода вёрстки (валидностью) веб-разработчики часто забывают о пользователе. Я совсем не противник чистого кода, но не в ущерб конечному потребителю.

Представьте: посетитель заходит на сайт с помощью Internet Explorer, а там колонка с информацией съехала вниз. И ему вряд ли будут утешением уверения разработчика, что код соответствует модели Strict и с точки зрения семантики является безукоризненным. Вёрстка-то ползёт!

Есть ряд приёмов, которые не слишком пагубно сказываются на семантике и соблюдении стандартов, но при этом позволяют добиться приемлемых результатов во всех современных браузерах. Несомненно, их надо использовать, даже если они идут вразрез с вашими идеалами. Сайтом ведь будете пользоваться не только вы. И вы вряд ли сможете предписать пользователю, каким браузером и с каким разрешением монитора нужно смотреть на страницы.

И ещё: ссылки на валидаторы и указания на Best viewed with... являются самыми бесполезными фрагментами сайта.

Верстая сайт, нужно смотреть на него глазами пользователей, а не валидатором.

Обычное

Люди слышат и видят только то, что хотят слышать и видеть. Не больше.

Разработка своей CMS

Какие сейчас самые популярные системы управления контентом? Из коммерческих — Битрикс, из бесплатных — Joomla, Drupal и Wordpress, причём две последние в силу блогоориентированности явные лидеры. Ещё можно упомянуть Typo3, Textpattern, MediaWiki, DataLife Engine.

Большинство из них претендует на звание CMF (Content Management Framework), так как обладают специфической структурой, расширяемы, для них пишутся сторонние модули. А значит, они, как фреймворки, должны позволять легко достраивать структуру.

Но хочешь сделать хорошо (= как нужно тебе) — сделай сам.

Общий минус всех этих систем, на мой взгляд, в том, что разделение на программную логику, вёрстку, дизайн и контент проведено не полностью.

Сейчас я занимаюсь новой CMF (одна уже используется несколькими сайтами), для которой избрал два принципа: разделение вещей, над которыми теоретически должны работать разные люди, и иерархическая структуризация в каждой из подсистем.

По поводу разделения: следует делать так, чтобы программная логика, вёрстка (шаблоны), дизайн, настройки и содержание не зависели друг от друга, при этом совершенно неважно, где они хранятся.

Иерархическая структуризация заключается в следующем.

1. В программной логике на верхнем уровне располагается ядро с основными функциями или классами. Чем более частной является задача, тем на более вложенном уровне располагается логика для её решения. Следует делать уровень пользовательской логики, чтобы можно было достраивать систему самостоятельно.

2. Шаблоны должны представлять собой чистый (X)HTML без включения программного кода. Единственное исключение — метки для вставки фрагментов. Например, {html:title} для вставки заголовка страницы. Такие метки должны обрабатываться на уровне программной логики — это единственное их место пересечения. Любые метки могут вызывать другие шаблоны, вложенные, причём разные в зависимости от каких-то условий. Например, {html:content} может в зависимости от типа страницы вызывать фрагмент содержимого, оформленного родовыми или частными шаблонами. Тип оформления конкретными шаблонами определяется в настройках (реестре связок шаблонов и страниц). Получается, что есть более общие шаблоны, используемые всеми страницами, и частные.

3. С дизайном всё довольно ясно. В идеале это CSS + графика (и опционально флэш и javascript для частных задач).

4. Настройки. Самое спорное место в этой схеме. Под настройками понимаются все реестры, от системных (доступ к БД, системный e-mail и проч.), списков пользователей и паролей до частных, определяемых программной логикой веб-приложения (например, списки переадресаций). В частности, хранить ли альтернативные адреса страниц в БД рядом с контентом страниц и указаниями их URL или в отдельных реестрах? Для своего CMF я решил эту задачу как хранение реестров отдельно.

5. Контент. По идее, может быть не структуризован, если за эту задачу отвечают реестры соответствий.

Резюме: при разделении на пять компонентов работа может вестись разными людьми, каждый из которых компетентен только в своей области. И даже для одного человека работа с логически разделёнными частями приложения проще, особенно если он осваивает новую систему.

Тестирование новых плейеров

1.
Из плюсов: не нужны конфигурационные файлы, маленький, настраивается прямо в коде записи. Из минусов: нет регулятора громкости.



2.
Плюсы и минусы те же.

Представьтесь, пожалуйста

Забавно. На этот мой блог есть ссылки только на моём сайте, у Фьёлы, в небольшом каталоге Насти Манно, у Насти Кэрролл да через Блогапп. Ну, и ещё на паре сайтов, может быть, потому что особо я как-то не рекламируюсь.

Кстати, у Насти обновление дизайна блога, на мой взгляд, очень симпатично. Жизнерадостно, в её стиле, и при этом что-то гранджевое. 

Так вот я о чём. Вместе с ботами каждый день ко мне заходят до тысячи посетителей. Очевидно, некоторые по несколько раз. Но всё равно неожиданно. 

Хочу вас попросить. Если вы читаете эту запись, напишите пару слов в комментариях: как вы меня нашли, есть ли что-то интересное для вас? Буду очень благодарен.

Блогообмен

BlogUpp — полезный сервис. Мало того, что он поднимает посещаемость своего блога, да ещё позволяет находить интересные сайты, не тратя время на собственно поиск. 

Смысл вот в чём: вы указываете в системе адрес своего блога, вам дают код, который вы вставляете на своём сайте. У вас показываются небольшие скриншоты случайных блогов, тоже участвующих в системе Блогапп. Ваш блог показывается на других.

Через эту систему я нашёл как минимум два интересных блога: один про интересные идеи для бизнеса, а второй посвящён музыке. Они информативные и хорошо оформлены.

Ночной рейс

Изображение

В оригинале — “Red Eye”. 2005 год. Напряжённый фильм. Главного злодея играет такой актёр, что не подумаешь, что он злодея может играть. В конце фильма — почти настоящий терминатор.
Из анонса:
Возвращаясь в Майами, Лиза Ризерт (Рэйчел МакАдамс, Rachel McAdams) знакомится в аэропорту с приятным молодым человеком Джексоном Риппнером (Киллиан Мерфи, Cillian Murphy) и сразу же проникается к нему симпатией. Он летит тем же рейсом, у него соседнее место. Лиза рада — она страшно боится летать. Однако уже спустя несколько минут после взлета девушка холодеет от ужаса: ее сосед — хладнокровный убийца, и намерен использовать ее как сообщницу в убийстве богатого бизнесмена. Он угрожает смертью отца…

Ещё кадры из фильма:

1

2

3

4

Темы и сборки для Вордпресса

При установке WordPress для русскоязычной аудитории лучше воспользоваться свежей сборкой блога от Лекактуса, а здесь можно найти гигантское количество тем для своего блога.


Полезная статья по настройке и плагинам: blogservice.ru/blog/2006/10/22/individualizatsiya-wordpress-glavnaya-stranitsa




Drum Bun ToDo list

Резервное копирование (настроить через cron):

1. всей обновляемой текстовой базы, включая страницы, посты, комментарии, реестры, но исключая скрипты.

2. всех пользовательских файлов.

Алгоритм: архивирование всех указанных директорий, копирование в указанные директории на сервере с именами, включающими указание на дату и тип контента.

Притча

Однажды к одному учителю пришел ученик и стал жаловаться на то, что его одолели жизненные трудности, он не мог уже справляться с ними. Учитель налил воды в четыре горшка и бросил в каждый из них по одной вещи: в первый кусок дерева, во второй морковку, в третий сырое яйцо, в четвертый — зерна кофе. Потом вода в горшках закипела. И тогда Учитель спросил Ученика: «Смотри, что произошло?»

Ученик с недоумением ответил: «Дерево не изменилось, лишь намокло, морковь совсем разварилась и стала мягкой и склизкой, яйцо сварилось, а кофе превратилось в душистый напиток». — «Это типы людских характеров, о Ученик,— сказал Учитель. — Кипящая вода — это жизненные трудности. То, что произошло с морковью, происходит с основной массой людей в трудных обстоятельствах. Редкие ведут себя как яйцо, которому после варки уже не страшно, что его разобьют. Еще меньше тех, кто не реагирует на обстоятельства и всегда остается собой, как дерево. И лишь единицы способны в трудную минуту доставить радость и ободрение другим, как чудесный ароматный кофе».

Лингвопривыкание

Поначалу многим кажется забавным, что kaban по-японски — «чемодан», а suki — «любовь, привязанность». Проходит какое-то время изучения или использования языка, и уже подобные казусы (pozor в чешском и словацком — «внимание») кажутся настолько естественными, что совершенно не соотносишь их с родным языком. Более того, начинаешь думать ономатопоэтическими и фонетическими категориями носителей языка, и мягкое финское nätti tyttö — это действительно «хорошенькая девушка», а не что-то ещё, польское słońce перестаёт ассоциироваться со «слоном», а ассоциируется только с «солнцем», как и нужно, и кажется естественным, что Mädchen («девушка») в немецком языке среднего рода, а не женского — естественным не для логики, а для привычного употребления в речи.

Финский язык

Два удачных ресурса по финскому языку:

Финский язык на Finnish.ru

и онлайн-уроки (правда, это блог, так что начинать читать надо с конца).

Ночь перед истграмом

Попугай Рэмбо слушал Лену, внимательно свесившись с люстры.

Было уже поздно.

Рэмбо всегда очень любил наблюдать за своей хозяйкой, особенно в период подготовки к экзаменам. Он всегда ощущал какой-то благоговейный трепет, когда за два дня до экзамена Лена отрешалась от мира. Рабочий стол, стул рядом, постель и всё прилегающее пространство были заполнены книжками и тетрадками. «В этой атмосфере прорастающих знаний,— неторопливо думал Рэмбо, расхаживая по подоконнику,— делаешься чище, как-то духовно растёшь». После чего пробирался на кухню и деловито таскал печенья из вазочки, обосновывая это тем, что умственный труд требует материального подкрепления.

Лена любила учить вслух. Попугай, по совместительству подрабатывавший домовым и барабашкой, был безнадёжно влюблён в Лену и в неиссякаемый поток знаний, обрушивавшийся на него дважды в год. Чтобы привлечь её внимание, он в меру своих сил занимался лётным спортом и произносил пламенные речи, в ответ на которые девушка благосклонна гладила его по холке.

Каждый экзамен был чем-то особенным. Лекции по истории русской литературы Лена читала вдохновенно, и особенно за полночь романтично настроенный Рэмбо прикрывал глаза и представлял себя кудрявым поэтом, нервно грызущим перо, а потом с сумасшедшей скоростью записывающим гениальные строки. Потом открывал глаза и со вздохом думал: «Нет, это не Рио-де-Жанейро. Это гораздо хуже».

Ярким невыводимым пятном на памяти Рэмбо осталась подготовка к античной литературе, которая далась Лене очень тяжело. Так, что попугай и сам ощущал себя рабом, который гребет против ветра на огромной ладье, перевозящей аргонавтов через моря. Он титанически ждал, пока экзамен наконец уже пройдёт, и в конце пути, когда была получена долгожданная пятёрка, героически поглотил всё съестное, что нашёл на кухне.

Но когда-то должно было произойти и это.

Истграм.

Нет, в принципе, Рэмбо слышал много страшных слов от своей прабабки, знатной колдуньи. Она могла и не такое завернуть. Но истграм последние полгода занимал всё воображение попугая. В его мыслях истграм был как надвигающийся чугунный паровоз в непосредственной близости от гражданки А. Карениной. Он светился неясным светом во тьме, он стучал в висках тяжкой неотвратимостью тёмными ночами и грозовыми вечерами.

Истграм. Попугай внятно произнёс это слово про себя. Мысленно, но отчётливо.

Только полдня назад он узнал, что это «историческая грамматика».

На воображение Рэмбо никогда не жаловался. Он слушал, как уважительно Леночка читает тексты тысячелетней давности, и представлял себе, как русоволосые русичи с весомыми бородами и ясноокие славянки с настоящими, а не накладными косами водят хороводы, напевая архаичным языком песни, пишут друг другу на бересте любовные записки, прыгают через костёр и подбадривают друг друга словами с твёрдым знаком на конце. Бесчисленные таблицы склонений и спряжений, которые в представлении бедного попугая древние русичи зубрили по ночам после полевых работ, потрясали его взор. Запомнить это было невозможно. Но Лена на его глазах совершала невозможное.

Экзамен, как попугай знал твёрдо, был назначен на завтра на 14.00. Море времени в представлении его хозяйки. Подготовка её носила характер разгоняющегося поезда. То есть сначала она бегала на кухню за провиантом. Занимала себя всем, чем можно, лишь бы перерывы были почаще: полить цветы, прибраться на столе, выглянуть в окно, поболтать по телефону. Но чем позднее, тем реже и короче становились перерывы. Еда просто запасалась на всю ночь, дислоцировалась рядом с местом, где окопалась Лена, и тут уже начиналось таинство. Рэмбо забывал дышать, говорить и перемещаться и просто наблюдал. Сначала она сидела с мирной позе, с книжкой на коленях. Потом по-турецки. Потом замёрзла и надела носочки. Потом легла на живот, не прекращая читать, и стала болтать ногами. Потом опять села. Потом попугай уснул на пять минут, а когда проснулся, хозяйка уже лежала на спине, не отрываясь от книжки и задрав ноги на стену. Все следующие её позы Рэмбо помнил уже отрывочно. На рассвете, когда он снова случайно проснулся, Лена готовилась ко сну, расчёсывая волосы. Хороший признак: значит, всё выучила.

Весь следующий день попугай провёл, изнывая от безвестности. И только к вечеру, в районе четырёх, он подслушал, как по телефону Лена сообщила родителям, что получила пять.

Рэмбо вздохнул с облегчением. Ещё один семестр он прожил не зря.


14/15 февраля 2009

While My Guitar Gently Weeps

Замечательная группа Jeff Healy Band исполняет битловскую песню:

Прямая ссылка на скачивание

Жар костей ломит

И зря утверждают обратное. Сейчас ехал в троллейбусе, сидел, а под сиденьем печка работает так, как будто поезд отапливает. Такое ощущение, что ноги по колено в расплавленном свинце, а ткань джинсов трескается.

А встать лень.

Работа в браузере по Ctrl+Enter

document.onkeydown = liveKeyboard;
function liveKeyboard(event) {
if (!document.getElementById) return;
if (window.event) event = window.event;
if (event.ctrlKey) {
	switch (event.keyCode ? event.keyCode : 
event.which ? event.which : null) {
		case 0x0D:
			// тут нужная функция
			// или прямое действие
			break;
}}}

* * *

Всё суета сует и ловля ветра.

Блог iLyte

Сделал для проекта iLyte официальный ресурс, где можно скачать, прочитать документацию, лицензию и пообщаться.

Расписание на 2-й семестр

С 9 февраля

Вторник

17.20, 18.45 Растровая компьютерная графика, 2 курс ауд. 100-в

Среда

17.20 Растровая компьютерная графика, 2 курс, ауд. 100-в

Четверг

17.20 (ауд. 100-в), через неделю и 18.45 (ауд. 209) Дисциплина по выбору, 4 курс

Hope of Deliverance by Paul McCartney

I will always be hoping, hoping.

You will always be holding, holding

My heart in your hand. I will understand.


I will understand someday, one day.

You will understand always,

Always from now until then.


When it will be right, I don’t know.

What it will be like, I don’t know.

We live in hope of deliverance from the darkness that surrounds us.


Hope of deliverance, hope of deliverance.

Hope of deliverance from the darkness that surrounds us.


And I wouldn’t mind knowing, knowing

That you wouldn’t mind going, going along with my plan.


When it will be right, I don’t know.

What it will be like, I don’t know.

We live in hope of deliverance from the darkness that surrounds us.


Hope of deliverance, hope of deliverance.

Hope of deliverance from the darkness that surrounds us.

CMS и фреймворки

Эти два понятия обычно сильно разграничиваются.

CMS — система управления контентом (содержимым). В разговорной речи называется также админка или админ, панель управления, сиэмэска. Смысл в том, что это либо страница (или набор страниц), с помощью которых обновляется контент уже существующих страниц и создаются новые страницы, либо встроенная система редактирования разделов сайта и фрагментов страниц. В зависимости от типов сайта функциональность CMS очень разная, а универсальные CMS либо бедны по возможностям, либо, наоборот, перегружены ими и тяжеловесны. 

Фреймворки — это средства для разработчиков: набор сценариев и системных файлов для построения сайта. В этом наборе уже подготовлено большое количество готовых функциональных схем (обращение к страницам, базам данных, библиотеки часто используемых функций, управление пользователями, авторизация и т.п.). С помощью фреймворка, например, можно создавать различные типы CMS.

Для меня всегда было очевидно, что эти два понятия удобно рассматривать вместе. С одной стороны, фреймворк всегда подразумевает определённую структуру сайта, а значит, к нему всегда можно привязать средства управления содержимым. Такой тип структуры сайта, когда система управления интегрирована в систему, называется CMF — content management framework. 

За всё время своих веб-разработок я написал и пишу несколько систем такого типа:

1. CMS без названия, жёстко привязанные к страницам и динамическим разделам на сайте. При входе в систему администрирования открывается служебная страница, на которой перечислены возможности администратора. Работает сейчас примерно на пяти сайтах в разных вариациях.

2. Фреймворк «Колибри», который обладает не только встроенными большими возможностями, но и встроенной CMS, каждый из модулей которой обслуживает разные типы функционала сайта. Разные наборы возможностей привязаны к пользовательским ролям. Поскольку функциональность модульная, её легко нарастить. На системе работает 4 сайта.

3. Блог-ориентированная система iLyte, которая в одной из разновидностей входит в «Колибри» как новостная лента. 

4. Система Drum Bun (сейчас в работе), которая является гибкой CMF-системой с богатым встроенным функционалом, легко расширяется с помощью плагинов, включает блог-подсистему, позволяет настраивать и вид, и функционал любой страницы или целых разделов индивидуально, очень легковесна. В ядерном файле вся библиотека функций, дополнительные функции, особая регистрация которых не требуется, можно складывать в отдельном файле. При авторизации включается административный режим с разграничением ролей пользователей (настраиваются тоже индивидуально), когда при просмотре страниц и постов появляются дополнительные элементы управления.

5. Система Margarit.CMS (в работе), которая позволяет управлять даже статическими сайтами: для этого в код статических страниц достаточно внести пару новых тэгов. Система состоит из 10 файлов, позволяет работать с расширениями. 

Навеяно прошлым постом

Поглядел на этих девушек и вспомнил, что видел хорошую подборку «Операционные системы как туалеты». Нашёл в интернете текст, а попутно ещё и «Операционные системы как самолёты». Обе подборки под катом.


Операционные системы как самолеты

DOS:
Пассажиры толкают самолёт по взлетной полосе до тех пор, пока он не взлетит. После этого они запрыгивают на самолёт и летят, пока он снова не опустится на землю. Затем всё повторяется сначала.

MacOS:
Все стюарды, стюардессы, пилоты, кассиры и технический персонал выглядят одинаково, говорят одинаково и действуют одинаково. Каждый раз, когда вы интересуетесь какими-либо деталями, вам объясняют, что вы это не обязаны знать, что вы этого не хотите знать, что все будет сделано без вашего участия и вообще просят вас заткнуться.

Windows 9x:
Аэропорт красив и прекрасно благоустроен, кассиры и стюардессы приветливо улыбаются, попасть на борт самолета проще простого, а взлет проходит без сучка и задоринки. Иногда самолет внезапно взрывается прямо в полете без предупреждения.

Windows NT:
Самолет величиной с астероид средних размеров, со множеством навесных украшений и финтифлюшек - при этом на его борт помещается только несколько пассажиров. Стюарды суровы и величественны. Перед тем как посадить пассажира в кресло, его заставляют пройти медосмотр и снимают отпечатки пальцев. Похож на самолет Windows 9x, но стоит дороже, имеет большие размеры и при взрыве сносит все аэропорты в радиусе 40 миль.

Windows 2000/2003 server:
Кресла отсутствуют — пассажиры должны лететь стоя. Поуправлять самолётом можно, но для этого надо сначала пробраться в рубку (путь туда завален мусором, который к тому же нельзя выкинуть). Иногда самолет зависает в воздухе (как вертолёт), и приходится возвращаться на аэродром и вылетать заново.

Windows XP:
От 2000 почти не отличаеться: весит чуть больше, выглядит красивее, летает быстрее. Основное отличие — самолёт летит куда хочет, не интересуясь мнением пассажиров.

Unix:
Каждый пассажир приносит с собой в аэропорт собственные детали от самолета. После этого все собираются на взлетной полосе и начинают его строить, ни на секунду не переставая спорить о том, какая модель самолета должна получиться в результате.

Linux:
Недовольные пользователи других самолетов решили создать свои собственные компании. Они сами сделали самолеты, билеты и взлетные полосы. Билеты продаются по небольшой цене, покрывающей расходы на их распечатку. Но вы всегда можете бесплатно скачать билет в электронном виде и распечатать его. Когда вы садитесь в самолет, вам дают части кресла, болты, отвертку и Seat-HOWTO.html. На настроенном кресле очень удобно сидеть, самолеты летают без проблем и точно по расписанию. Вы пытаетесь обьяснить все это пользователям других самолетов, но все они отвечают одинаково: "А что вы имеете в виду насчет кресла?"

MenuetOS:
Микроскопический одномоторный самолет. Правда, движок от Боинга-747. Как конструкторам удалось запихнуть его в свою птаху - загадка. Взлетает почти исключительно с собственного аэропорта. Пассажирам предоставлено полное право изменять конструкцию самолета по своему усмотрению. Радиосвязи с внешним миром пока нет. Билеты абсолютно бесплатны.

OS/2:
Для того чтобы попасть в самолет, вы должны поставить на своем билете 10 разных печатей, простояв для этого в десяти разных очерядях. Затем вы заполняете анкету, в которой указываете, где именно вы хотите сидеть, а также сообщаете, как должен выглядеть самолет - как океанский лайнер, как пассажирский поезд или автобус. Если вам все-таки удается оказаться на борту, а самолету удается взлететь, то вашему полету ничто не угрожает... за исключением тех моментов, когда рули высоты и закрылки заедают в одном положении. В этом случае у вас остается достаточно времени, чтобы помолиться и занять положение для аварийной посадки.

RT-11:
Заслуженный аппаpат, боевой. Hе pаз в пеpеделках бывал, весь иссечен осколками, но уцелел. Стоит в музее, но еще вполне в силах кое-кому кое-что показать...

CP/M:
Скpомненький такой бипланчик. И движок слабенький и кpылья полотняные. Только и мог, что таpахтеть на малых высотах и воpон пугать. Фанеpа фанеpой, а поди ж ты...

--------------------------------------------------------------------------


Операционные системы как туалеты

Клозет DOS:
Обычный деревенский туалет, тесная кабинка, дырка в полу, предельно прост в постройке, но при малейшем ненормальном поведении срущего субъекта может провалиться в находящуюся под ним яму вместе с ним, причем никаких средств, чтобы оттуда выбраться чистым, обычно не бывает.

Клозет Deskview: 
Расширена дырка и кабина, поэтому несколько человек могут справлять в эту единственную дырку свою нужду одновременно.

Клозет Windows 3.1: 
Такой же туалет, только несколько другой конструкции, несколько дырок в полу, благодаря чему справлять нужду могут несколько человек. Такой же шаткий и неустойчивый, но к крыше привязана веревочка и при провале туалета в яму поднимается синий флажок, извещающий об этом. Причем если один из находящихся в клозете решит бросить в дыру гранату, то в дерьме окажутся и все остальные.

Клозет Windows 95:
Красивое кирпичное здание, финские унитазы трех видов, удобная система выбора кабинок, возможность при прорыве одного из унитазов выкинуть его из здания, прочие удобства. Hо что странно, при попытке посмотреть в унитаз внизу просвечивает все та же выгребная яма. При использовании в среднем в 1 из 5 посещений вас обливает ее содержимым.

Клозет Windows 98:
Выглядит примерно так же, как и клозет Вин95, только "пользователю" предлагается почитать журнальчик во время использования либо (по выбору) послушать музычку. При попытке делать все 3 дела сразу вероятность того, что вас обольет дерьмом, возрастает до 100%. А вероятность получить свою "пайку" просто так снижена до 2х раз в год (при посещении клозета не чаще, чем раз в 2 недели).

Клозет Windows ME:
Выглядит — как клозет Вин98. Но почти при каждом посещении вас обливает дерьмом. Выгребная яма, хотя и используется, забетонирована так, что прочистить засор можно только с помощью лома. Ее содержимое кладется в сверхпрочные, накрепко приклееные к дну ямы, хотя и частенько взрывающиеся пакеты. При попытке отодрать пакет (например, яма забита до краев) взрывается отдираемый пакет и десяток соседних.

Клозет OS/2:
Туалет из бетонных плит, не очень красив, сильно смахивает на бомбоубежище, также, как и в предыдущем туалете, имеются кабинки трех видов, но два из них несколько криво сделаны, поэтому при попытке сесть на них в некоторые зады вонзаются острые шипы, вынуждая людей выбегать из туалета с воплями и спущенными штанами. С задами, специально рассчитанными для этого туалета (которых весьма немного), проблем обычно не бывает. Выгребной ямы под зданием обнаружить не удалось, наличествует система канализации, но куда она уходит, мне неизвестно. Вот только вопрос: зачем рядом с этим зданием стоит мачта со спущенным черным флажком...

Клозет Windows NT:
Большое металлическое здание (смахивает на сейф), свободного входа нет, висит огромный амбарный замок. Для постройки его требуется мощный фундамент и куча времени, тем не менее весьма надежен, и поколебать его может только взорванная в самом центре противотанковая мина, но и тогда в некоторых случаях он может продолжать работу, скажем, с выключенным освещением. Отношение к старым задам близко к клозету ОС/2, но еще жестче, непонравившуюся задницу автоматом отрезает циркулярной пилой и выкидывает в мусорку.

Клозет Windows 2000:
Выглядит снаружи как клозет Вин98, но при попытке войти вы оказываетесь в тамбуре, упершись в дверь клозета ВинНТ. Пробившись внутрь, вы находите внутренности клозета Вин98, хотя вжжик и сдавленный вопль из соседней кабинки уверяют вас в обманчивости увиденного.

Клозет ХР:
Очень, очень похож на клозет Вин2000. Только весь облеплен обоями и аппликациями, играет с трудом отключающаяся музыка, все моргает и переливается, на вас при посещении напяливается фартучек и вставляется соска, причем иногда - совсем не туда. При возникающих проблемах поведение идентично клозету ВинНТ, но при этом задница отсылается разработчику для выяснения причин.

Клозет Unix:
Hе использовали, но в видеосъемках показывают нечто крутое, небольших размеров, с мощной канализацией и системой защиты, знаем только, что необходимы специальные зады, поскольку постройка пристроек дело весьма и весьма геморройное....

Клозет Linux:
На проспектах выглядит весьма привлекательно, правда при покупке выясняется, что полученное изделие надо «тщательно обработать напильником». При окончательном монтаже представляет собой секцию из бронированных кабинок, загородки между которыми, впрочем, можно поднять. Но если они опущены, можно взорвать внутри кабинки хоть противатанковую мину — ваши размазанные останки не помешают задумчивому кряхтению остальных пользователей. Они этого даже не заметят. Покрашен в 6 разных цветов, оклеен семью видами обоев, 14 независимых ручек спускающих воду, стульчак собирается из 8 частей, каждая из которых требует напильника — зато вы можете придти со своим стульчаком, унитазом и задницей любой формы. 

Клозет QNX 
Замечательное устройство размером со спичечный коробок, включающее в себя бачок, унитаз и надувной стульчак. На выходе фановая труба очень хитрой формы, все переходники требуют наличия фрезерного станка. Вода гонится в трубу под огромным давлением — поэтому не дай бог что-то где-то недокрутишь. 

Клозет SUN Solaris 
Мощь и красота «Коммон клозет енвиронмент», спуск унифицирован с ручкой переключения передач вашего автомобиля. На бочке масса отверстий разной формы, а рядом красивая коробка тулбокс. Ручка, вставленная не туда, выливает на вас все накопившееся, но 24-часовой саппорт готов вежливо объяснить вам, что делать дальше. Параноики могут купить бронированную крышку с 26 болтами, которая наглухо закрывает отверстие на случай взрыва.

Обновление iLyte

Совершенно неожиданно для себя сделал обновления в коде этого блога:

— исправления в безопасности (прямой доступ к записям);

— исправления в поиске по темам и датам (раньше нельзя было искать напрямую по темам за прошлый год, приходилось выбирать год, месяц, а затем тему: сейчас всё это выбирается автоматически);

— исправление в системе администрирования (была ошибка, связанная с выводом текущего года).

Drum Bun, приоритеты

Главный приоритет: сделать возможность привязывать особый шаблон к главной странице, которая не обладает собственным URI (привязка шаблонов происходит по URI или части URI). В общем случае контентом при этом считается вывод последних постов. (Сделано.)


1. Кэширование. Скомпонованные страницы (особенно главная) сохраняются в отдельную директорию, в которой их наличие проверяется до запуска основного обработчика. Возможность перекэширования главной, всех или выбранных страниц: в разделе системных утилит и по факту добавления новых записей в блог, изменения страниц и изменения настроек. В настройках разрешать или запрещать автоматическое перекэширование. (В процессе: работает кэширование главной страницы и всех остальных, перекэширование реализовано частично.)

2. Обработка ошибок. Возможность назначать адрес собственной страницы ошибок. В настройках разрешать присылать отчёты о несуществующих страницах на электронный ящик (адрес запрашиваемой страницы, реферрер, данные браузера, дата), добавить эту функцию в ядро.

3. Документация по ролям пользователей. (Начато.)

Трогательное не моё

Обиделся Ёжик — смешной, лопоухий...

А, в общем-то вышла обычная штука —

Он просто попал под горячую руку,

Когда возвратился хозяин не в духе.


Колючий клубок прошуршал по прихожей,

И в угол забился, как в тёплую нору.

Мордашку склонил с молчаливым укором...

А, впрочем, забавен обиженный Ёжик!


Сопит и косит антрацитовым глазом,

От тяжкого вздоха вздымается спинка.

И, вроде бы, мелкая с виду скотинка,

А тоже имеет и чувства, и разум!


Возможно, трагедия станет уроком,

Но трудно понять бессловесному зверю,

Что может хозяин, которому верил,

Без всякой причины обидеть жестоко.


Топтался в углу, провоцируя жалость,

В пыли извозился по самые уши.

Чихнул и зафыркал, как кошка под душем...

Хозяина сердце от нежности сжалось.


Он взял аккуратно сердитого друга,

Погладил по брюшку, по бархатной коже.

«Прости меня...» Глянул доверчиво Ёжик

И носом потёрся о тёплую руку.

Подруги Ультрамарины

Ультрамарина всегда экстрамодная.

Пересвета чуть переволновалась и забыла дома часы. Теперь она счастлива.

Воскрексения любит есть шоколадные конфеты руками, а потом, вся в шоколаде, заразительно смеётся.

Авемария с ангельским личиком поёт песни в ванной, подставляя тело прохладным струям воды.

Июлия носит легчайшее зелёное платье, босиком гуляет по паркам и подставляет курносую мордашку летнему солнцу.

Карандашенька сидит с ногами в кресле, и под её руками лист бумаги расцветает весной.

Фреймворк «Колибри»

Состоялось торжественное переименование.

Фреймворк, который ранее условно назывался Fairwork, теперь будет называться Колибри. Потому что маленький, быстрый и красивый.

Маленький — в исходном виде около 200 Кб (включая все функции, реестры, основные наборы страниц и стилей, CMS). В zip-архиве 72 Кб.

Быстрый — потому что объективно быстро работает, несмотря на большое количество используемых файлов (страницы собираются из фрагментов, и каждый раз используется не менее 12 файлов).

Красивый... Просто сайт может выглядеть как угодно. Более того, каждую страницу можно сделать индивидуальной: развитая система построения моделей.

Сайт проекта: фреймворк «Колибри».

Если бы Internet Explorer был автомобилем

Internet Explorer 1.0. Это велосипед. При желании можно заехать почти куда угодно, но комфорта мало.

Internet Explorer 2.0. Тот же велосипед, но с зеркальцем заднего вида.

Internet Explorer 3.0. Да, это уже автомобиль, но только ездить он способен по дорогам с очень простой разметкой. Очень, очень простой.

Internet Explorer 4.0. Гениальное решение: изобретаем собственную разметку и по ней ездим. Да, и ещё автомобиль встроен в квартиру, так что выбора особого нет, покупать его или нет.

Internet Explorer 5.0. Он всё так же встроен в квартиру, но способен ездить почти по всем дорогам, правда, иногда у него двоится в глазах, на приборной панели вместо 100 км/ч показывается 120 или 80.

Internet Explorer 5.5. Да, и ещё теперь можно раскрашивать в разные цвета дверцы.

Internet Explorer 6.0. Он с потрясающей скоростью ездит почти по всем дорогам, но достаточно небольшой ухабины, как он немедленно сворачивает на порносайт в каком-то странном направлении. Проблема в том, что другие автомобили ездят быстрее, изящнее, сразу по нескольким дорогам и умеют реагировать на действия водителя. Другая проблема в том, что Internet Explorer до сих пор встроен в квартиру.

Internet Explorer 7.0. Научился ездить одновременно по нескольким дорогам. Приборная панель выглядит так, что всем водителям приходится переучиваться. Скорость показывается правильно, но тонирование стёкол ещё не на высоте. Вывезли из квартиры и наконец-то поставили в гараж.

Internet Explorer 8.0. Все ждут окончательной сборки, кое-кто уже решается ездить. Проблема в том, что теперь в автомобиле два двигателя: для старых дорог и для новых, и теперь надо постоянно переключаться между ними.

CSS-фреймворки

Любое удачное технологическое решение постоянно находит применение. Если это общепринятая технология, как язык разметки или программирования, то рано или поздно в ней формируются целые наборы постоянно используемых фрагментов кода, которые нет смысла повторять от раза к разу. Наборы кода, выполняющие часто используемые задачи, собираются во фреймворки — файлы или наборы файлов, которые можно включать в свои проекты, особо не задумываясь о том, как это работает. Есть такие фреймворки и в CSS.

Например, я всегда, начиная писать CSS-код для проекта, начинаю его набором правил вроде следующих:

/* CSS Framework by Erlang, 2009 */
/* General Cleaning */

* {
	margin:0;
	padding:0;
	font-family:Verdana, Arial, Helvetica, Sans-Serif;
	}
html, body {
	height:100%;
	}
input {
	padding:2px 4px;
	}
body, p, div, table, td, th, input, option, select, button, li, a {
	font-size:9pt;
	}
body {
	background-color:#fff;
	}
table, img {
	border:0;
	}
table {
	border-collapse:collapse;
	}
table td {
	padding:0px;
	vertical-align:top;
	}
div {
	-moz-box-sizing: border-box;
	-webkit-box-sizing: border-box;
	-ms-box-sizing: border-box;
	box-sizing: border-box;
	}
a, a:link, a:visited, a:active {
	color:#00f;
	}
a:hover {
	color:#f00;
	}
:focus {
	outline:none;
	}
label {
	cursor:pointer;
	}
ul, ol {
	padding:2px 0;
	}
li {
	line-height:1.5;
	margin-left:17px;
	}

/* Special Elements */

Если в нескольких словах описать то, что делает этот код — убирает все отступы у всех объектов (кроме некоторых элементов форм), в том числе и у тела документа, и у ячеек таблиц, рамки у изображений и таблиц, назначает размер и гарнитуру шрифта большинству элементов, исправляет некоторые браузерные разночтения в ширине и высоте блоков, назначает корректные выравнивания и цвета ссылок.

Несомненно, такой код не претендует на полноценный фреймворк, но избавляет от большого количества рутинной работы.

Цвет полос прокрутки

Есть вероятность, что на сайте изменены цвета полос прокрутки, и вам надо вернуть их к виду по умолчанию. Делается это просто:


html, body, textarea {
  scrollbar-face-color: ThreeDFace !important;
  scrollbar-shadow-color: ThreeDDarkShadow !important;
  scrollbar-highlight-color: ThreeDHighlight !important;
  scrollbar-3dlight-color: ThreeDLightShadow !important;
  scrollbar-darkshadow-color: ThreeDDarkShadow !important;
  scrollbar-track-color: Scrollbar !important;
  scrollbar-arrow-color: ButtonText !important;
}

(решение отсюда)


Список системных цветов:

activeborder — Цвет границы активного окна.

activecaption — Цвет заголовка активного окна.

appworkspace — Цветмультидокументного фона.

background — Цвет фона рабочего стола.

buttonface — "Лицевая" сторона объемных элементов.

buttonhighlight — Насыщенная тень объемных элементов.

buttonshadow — Цвет тени объемных элементов.

buttontext — Цвет текста на кнопках.

captiontext — Цвет текста в заголовках.

graytext — Отключенный (недоступный) текст.

highlight — Выделение объекта элемента управления.

highlighttext — Выделение текста элемента управления.

inactiveborder — Цвет границы неактивного окна.

inactivecaption — Цвет заголовка неактивного окна.

inactivecaptiontext — Цвет текста в неактивном заголовке.

infobackground — Цвет фона всплывающей подсказки.

infotext — Цвет текста всплывающей подсказки.

menu — Цвет фона меню.

menutext — Цвет текста в меню.

scrollbar — Цвет полосы прокрутки.

threeddarkshadow — Темная тень объемных элементов.

threedface — "Лицевая" сторона объемных элементов.

threedhighlight — Цвет выделения объемных элементов.

threedlightshadow — Светлый цвет тени объемных элементов.

threedshadow — Насыщенная тень объемных элементов.

window — Цвет фона окна.

windowframe — Цвет рамки окна.

windowtext — Цвет текста в окне.


Список системных цветов и шрифтов с примерами тут.

Таблицы при блочной вёрстке

Некоторые суровые параноидальные верстальщики не используют таблицы вообще. Несмотря на то, что ратуют за семантическую вёрстку. А у таблиц есть совершенно определённая семантика: это средство для структурированного вывода данных. При помощи таблиц можно выводить:

1. Статистические данные.

2. Сравнительные данные.

3. Любые списки, если у каждого из элементов имеет типизованную структуру, и набор типов элементов этой структуры повторяется в каждой итерации списка.

4. Любые принятые в бумажной документации табличные данные.

Вёрстка простой страницы на блоках и CSS

Например, вы решили сверстать сайт в две колонки (меню и контент), чтобы сверху была ещё шапочка, а снизу ещё один блок. Проще всего заключить все четыре блока в один общий. Назовём его (то есть присвоем id), допустим, wrapper. Колонку с меню назовём side, а с содержимым page-c. Блоки сверху и снизу назовём соответственно extratop и extrabottom соответственно. Получится примерно такое же расположение, как на дайри, поэтому и имена дал такие же.

Теперь сверстаем. Допустим, мы хотим сделать вёрстку фиксированной ширины посреди страницы. Для этого, во-первых, у тела страницы убираем все отступы и центрируем содержимое:

body {
padding:0;
margin:0;
text-align:center;

}

А во-вторых, у основного блока назначаем точную ширину, кроссбраузерно выравниваем по центру страницы с помощью margin и убираем центрирование содержимого:

#wrapper {
width:900px;
margin:0 auto;
text-align:left;

}

Кстати, чтобы вне зависимости от браузера, padding’ов и border’ов ширина блоков оставалась одинаковой, нужно для всех блоков назначить следующие свойства:

div {
-moz-box-sizing:border-box;
webkit-box-sizing:border-box;
ms-box-sizing:border-box;
box-sizing:border-box;

}

Чтобы правильно расположить верхний и нижний блоки, просто назначаем им ширину, равную ширине основного блока, и назначаем свойство clear:both, которое нужно для того, чтобы:
1. они располагались именно сверху и снизу относительно колонок, никуда не съезжали,
2. и растягивали основной блок (wrapper), в который мы хотели бы поместить блок.

#extratop, #extrabottom {
clear:both;
width:900px;
height:111px;

}

Естественно, высота, соль и специи по вкусу.
А чтобы расположить колонку с меню и контент-блок рядом, назначаем им «плавающий режим» — флоатинг:

#side {
float:left;
width:200px;

}
#page-c {

float:right;
width:690px;

}

Фоновые изображения, отступы внутри и параметры текста внутри блоков вы можете назначить сами ;-)

Двенадцать способов обойти закон бутерброда

1. "Терминологическое воздействие"

После падения производится взаимное переименование хлеба и масла, в результате чего масло оказывается сверху.

2. "Дублирование активного слоя с последующим переопределением"

Бутерброд намазывается с двух сторон. После падения нижнее масло исключается из рассмотрения. То, что остается, как раз и является бутербродом лежащим маслом вверх.

3. "Защитное покрытие"

На масло сверху намазывается слой икры, защищающий масло в случае падения бутерброда.

4. "Инверсия с предварительным резервированием"

В местах предполагаемого падения бутерброда размещаются ломти хлеба. После падения верхний (исходный) ломоть удаляется, и бутерброд, состоящий теперь из резервного ломтя и масла, лежит вверх последним.

5. "Своевременный монтаж"

Масло намазывается на уже упавший хлеб.

6. "Способ Эйнштейна"

Бутерброд выводится на околоземную орбиту, где понятие "низ" вообще теряет смысл.

7. "Рациональный"

Бутерброды с маслом исключаются из рациона.

8. "Постгуманитарный"

Упавшие бутерброды с маслом сохраняются для гостей.

9. "Перпендикулярный"

Бутерброд намазывается по ребру.

10. "Презумпция невиновности"

Бутерброд отмазывается от падения.

11. "Инъекционный"

Масло не намазывается на хлеб, а растапливается и с помощью шприца вводится ему под корочку.

12. "Замена вида активного слоя"

При изготовлении бутерброда вместо масла используется маргарин. Пусть теперь падает как хочет, сволочь.

Under construction

Да, и в блоге-движке обязательно должна быть функция, которая на время закрывает весь сайт, а при заходе на любую страницу показывает объявление о реконструкции: либо системное сообщение, либо редирект на указанную в настройках страницу.

Логичная блочная модель

Описание

Примеры

Код:

element {
	width:100%;
	border:20px solid green;
	padding:20px;
	-moz-box-sizing: border-box;
	-webkit-box-sizing: border-box;
	-ms-box-sizing: border-box; /*эта строка 
		уже не нужна, 
		начиная с Beta2 IE8 
		поддерживает box-sizing*/
	box-sizing: border-box;
}

Опции видимости записей

Все записи, кроме черновиков, добавляются в основной реестр. Но при этом в отдельном реестре помечать нужные записи как скрытые. Загружаются оба реестра, читаются данные, если в реестрах скрытых записей есть указания на эти записи, то они выводятся только для авторизованного пользователя. Черновики — только для автора. Скрытые записи видны автору или, если при сохранении была указана опция «Показывать зарегистрированным пользователям», то всем пользователям после входа на сайт. При редактировании эти опции можно изменить. 

Черновики в любом случае хранятся в отдельном реестре, потому что они не привязаны к дате, в отличие от скрытых записей. Запрос черновиков — отдельная функция для админов и авторов.

Как загружаются реестры записей на главной странице. Принято, что загружается реестр текущего года, а если в нём записей меньше, чем нужно для вывода постов, или часть записей помечена как скрытая, то подгружается также реестр прошлого года. Если реестра текущего года нет, то также грузится реестр прошлого года. 

Для экономии ресурсов можно добавлять реестры прошлых годов по запросу во время выполнения цикла, и выходить из цикла в том числе, если реестров не найдено. 

Проблема с публикацией программного кода пока не решена. Если только не заключать в тэги. Но в этом случае не решается проблема с эдитором, только если не писать свой.

Плагины к iLyte 2.0

Плагины к iLyte 2.0 делятся на 2 типа:

1. Увеличение функциональности сайта. В этом случае достаточно положить в папку контроля файл, который возвращает какое-то значение в зависимости от выполненных условий. Доступ к плагину — по адресу в адресной строке (название файла без расширения, если не задействована система псевдонимов).

2. Увеличение функциональности системы администрирования. В папке контроля кладётся папка ext, внутри которой лежат сами плагины и реестр активированных плагинов. Если есть эта папка, то в админской части системы появляется ссылка на редактирование плагинов. Каждый можно активировать, и в этом случае он будет доступен как отдельный пункт системы администрирования. Реестр активированных плагинов, конечно, можно редактировать и вручную: достаточно написать название плагина в отдельной строчке, а через запятую в той же строке число 1 или 2, обозначающее права доступа к плагину.

Сами плагины второго типа строятся по следующему принципу.В массив с заданным именем записываются названия плагина на разных языках, поддерживаемых системой, а дальше строится функциональность, которая возвращает результат.

Блогпост

Собираю опции, которые встречаются при написании новых постов в блоги:

1. Собственно пост

2. Заголовок

3. Экспорт в RSS

4. Присоединение изображения

5. Скрытый пост

6. Видимый избранному составу

7. Черновик

8. Редактор / голый HTML

9. Специфический адрес для поста

10. Включать дату в URL

11. Изменить дату поста (сдвинуть во времени)

12. Кат (cut), укорачивание поста

13. Отдельный блок до «читать дальше»

14. Смайлы

15. Темы (тэги, ключевые слова)

16. Пост как эпиграф

17. Уведомления о комментариях

18. Запрет комментариев

19. Автосохранение

20. Приложенные файлы

Семантико-структурная типология

Давным-давно, в одной далёкой галактике... В общем, 6 лет назад я закончил писать дипломную работу на тему стадиальной типологической классификации языков. Принцип — совмещение анализа формальной и семантической структур языков и наложение анализа на диахроническое развитие.

Основы: язык развивается от простого к сложному, а перейдя переломный этап, снова упрощает свою структуру. В процессе он проходит через несколько стадий, которые характеризуются как формальными, так и семантическими особенностями. На ранних стадиях синтаксический строй вообще слабо выражен, чем дальше — тем больше появляется вариаций. Структурная доминанта для остальных характеризующих черт — тип факультативности выражения грамматических категорий. Если на ранних этапах развития языковой структуры обязательно для формального выражения только то, без чего смысл потеряется, то с развитием факультативность уступает место избыточности. Одно и то же грамматическое значение зачастую выражается во фразе дважды, трижды и т.п.

По поводу факультативности я ещё напишу большую статью с кучей примеров.

Пока писал диплом, выявил в языках несколько закономерностей, законов и правил сочетаемостей, которые действуют почти без исключения в большом количестве языков и которые до меня никто не описывал.

Например, в общем виде описал семантико-формальную структуру нейтрального типа языков: отсутствие в глагольной морфологии и факультативное присутствие в именной морфологии формальных средств выражения актантно-предикативных отношений, слабая морфологическая оформленность всех грамматических классов слов и соотносимость языков этого типа с изолирующим и основоизолирующим строем; наличие релевантных тонов; лексика характеризуется полисемантизмом большого количества слов; редупликация выступает то как словообразовательное средство (малинке bori-bori отгл. “бег”), то как формообразовательное (индонез. orang-orang мн. число “люди”); в системе словообразования распространены сложения; отсутствие или незначительное количество аффиксов обусловливает широкие возможности конверсии; ряд полнозначных слов способен выступать в функции грамматических или словообразовательных формантов; обращает на себя внимание частотное использование слова “ребенок” как диминутивного форманта (например, вьетн. con, кит. zi и др.); прилагательные как часть речи б.ч. отсутствуют — их функции выполняют глаголы с качественной семантикой; для глагольной системы в целом характерна категория вида; темпоральные значения формируются из видовых или наряду с ними (наиболее типичное противопоставление — перфектив, дюратив и вневидовая форма); частотная характеристика: отрицательный формант выбирается в зависимости от видовой формы глагола; употребление слов без грамматических формантов (т.е. в виде корня или основы) очень распространено — факультативность грамматического оформления заключается в употреблении формантов только при необходимости подчеркнуть какое-либо грамматическое значение; характерно употребление неоформленного имени (особенно неодушевленного) в значении как единственного, так и множественного числа (кит. ren “человек, люди”), однако сама категория числа имеется — раньше всего она формируется у личных местоимений и у одушевленных существительных; нередко при имени употребляются притяжательные форманты, причем чаще всего различаются формы органической и неорганической принадлежности; связь слов в синтагме и нередко тема-рематическое членение фразы осуществляется при помощи порядка слов, служебных слов и интонации. Языки, подходящие под описание этого типа – китайские диалекты и дунганский, лоло-бирманский, тибетский, манипурский, каренские, тайский, кадайские, мяо-яо, ряд аустроазиатских (например, вьетмыонгские), индонезийские, мальгашский, полинезийские и некоторые другие океанийские; в Африке – часть западноатланических, группы манде, гур, ква (гвинейские), бане и остальные бенуэ-конголезские (кроме банту), адамауа, кордофанские; некоторые группы папуасских языков (например, сев.-хальмахерские); из индейских – часть языков майя-киче, вакашские и предположительно салишские.

Далее. Я расширил понятие флективных языков, к которым необоснованно относили только индоевропейские. Саамский из уральских и семито-хамитские из афразийских тоже выполняют все критерии.

Выделил подтип номинативно-эргативных языков (типа невари, баскского, табасаранского), о которых никто не писал.

Описал номинативные языки т.наз. «японско-корейского подтипа» с большим количеством интересных особенностей.

Сформулировал два стабильно работающих в агглютинативных языках правила, которые препятствуют развитию флективности: правило больших наборов и правило одностороннего расположения.

Первое заключается в том, что развитие флективности блокируется значительными наборами (порядка двадцати) однорядных и однопарадигматических аффиксов в некоторых агглютинативных языках. Например, в банту языках — классно-числовыми показателями, сплавление с которыми, например, падежных показателей затруднило бы идентификацию и тех, и других. К слову, кроме флективности, блокируется и развитие падежной системы (как в фула и в некоторых других западно-атлантических). По тому же принципу происходит блокировка развития флективности (и согласовательных лично-числовых аффиксов) в корейском языке, где есть большой набор аффиксов наклонения и дополнительных обстоятельственных значений.

В большинстве аффиксальных языков действует второе из названных правил — правило одностороннего расположения, согласно которому все аффиксы реляционной семантики располагаются с одной стороны от корня (либо как префиксы, либо как постфиксы, в редких случаях ещё как конфиксы, инфиксы и трансфиксы, но не бывает так, чтобы падеж выражался префиксом, а число постфиксом) — за исключением аффиксов определительно-обстоятельственной семантики (артикли, аффиксы способа действия и т.п.).


P.S. Несмотря на мои разработки, меня выгнали из аспирантуры.

Дополняю PHP

Пишу для второй версии движка блога универсальные функции.

Например, одна из моих любимых: функция записи в файл. Работает корректно в PHP 4 и 5. Проверяет корректность пути к файлу для записи. Имеет три режима: полная перезапись (по умолчанию), дозапись в начало и в конец файла. Если файла ещё нет, он создаётся. Если ещё нет директорий, в которых будет лежать нужный файл, то они попутно создаются (какой бы ни был длинный путь к файлу) с назначением корректных прав. Если отсутствует только часть пути, то создаётся только она. Перед записью производится очистка данных от ненужных обратных слэшей. Функция не только производит запись, но и возвращает строку из финального содержимого файла.

В красном

Изображение

Ну буду вас опять картинками мучать. Только автора не знаю. Спасибо Фьёле за предоставленные графические материалы.

Причастие будущего времени

Очень неудобно, что в русском языке нет причастий (да и деепричастий) будущего времени. Настоящего есть («делающий»), прошедшего времени есть — «(с)делавший» — а будущего нет. Хотя форму «сделающий» (= тот, который сделает) образовать очень легко. Звучит чуть-чуть непривычно. «Студенты, сделающие домашнее задание сегодня, сдадут зачёт досрочно».

Сайт отеля готов

Сделал наконец-то сайт отеля, о котором уже месяц прожужжал знакомым и друзьям уши. (Дата выпуска: 24 октября 2008 года.)

Понятное дело, что на фреймворке Fairwork — он уже второй раз оправдывает себя в деле.

Оформление разных разделов сделано нарочно разным: как и номера в отеле разными сделаны.

Особо долго работал над страницей заказа: серверная сторона строит JavaScript-объект на стороне клиента, а внешний скрипт формирует кнопки и результаты выбора, попутно калькулируя стоимость заказа. Особая фишка, которую заказчик не факт, что и заметит,— это что в поле выбора количества дней пребывания можно просто крутить колёсиком мыши, чтобы число менялось, как в обычных грамотных вин-интерфейсах.

В общем, я старался. Сейчас флэш-презентацию делаю.

Выходные

Сижу и программирую генерацию объектно-ориентированного javascript-кода посредством языка php и своего фреймворка из текстовой базы данных.

Так проходит второй день отпуска.

Лебедятина

По традиции Тёму Лебедева называют самым успешным российским дизайнером. Почему — не совсем ясно. Дизайном как таковым он занимается очень редко. В основном арт-директор, худрук и т.п. А в последнее время блоггер, матершинник и эпатажник. Ну, популярности мало оказалось.

Напрягает в нём другое. В каждом, что подвернётся ему под руку, он стремится отыскать плохое. Стремление к совершенству приятно. Но не в такой степени, когда неправильно написанные кавычки (или, допустим, особая форма буквы «Л», я уж молчу про кернинг) вдребезги разбивают прелесть фильма или сайта.

Ещё я не понимаю тех, кто присылают ему работы на линч. Получить очередной отзыв в стиле «говно»? Самому глазами надо прежде смотреть, а не мазохистничать.

Наконец, меньше всего я понимаю число «986 комментов» под его постом в ЖЖ о том, что он, допустим, постриг ногти. Это даже за вычетом комментариев типа «Первыйнах» и «+1», за кои он, по уверениям, банит нещадно.

Безапелляционность всегда пугает. Особенно вкупе с позиционированием себя как непререкаемо лучшего и компетентнейшего.

Флэш

Не понимаю, откуда пошла традиция писать «флеш», а не «флэш». Англоговорящие товарищи произносят слово «flash» скорее как «флаш». Если мы стремимся приближать произношение слова к произношению оригинала, то зачем это утрировать? То же самое о брэнде и брэндбуке: странно, что сейчас принято писать эти слова через «е» (англ. «brand»).

Раньше была другая крайность: следовать сложившимся традициям, откуда у нас появились «гидро-» вместо «хидро-» и «Генри» вместо «Хенри». От неё, слава аллаху, отошли. А теперь получается утрирование: вместо «э» пишем «е» с нелепой отговоркой, что «э» чужеродна для русского уха. Почему тогда не «сер» или «мер»?

Сказка о Чисти

Изображение

Предисловие

Про нечисть уже написано столько сказок, что Чисть справедливо чувствует себя ущемлённой и обделённой. Так что эта сказка будет о Чисти.


Словие

В одном стародревнем пряничном королевстве жил-был домовичок Игнатий.

Никто не знал, что его зовут Игнатий. Все звали его то Боря, потому что он очень любил борщ, то Миша, потому что он мешал всем, но имя своё он хранил в секрете. Секретом назвалась маленькая коробочка, обитая изнутри бархатом, а снаружи берестой. В секрете он держал всё, что было дорого его беспокойной душе: своё имя, перстень Ненасытных Амазонок, который он стащил у них, пока они угощали его чаем с малиновым вареньем, хранил он там книгу шумерских сказок (и шумерско-русский словарик), складную пещеру и фонарик, не требующий подзарядки. С этим багажом он отправился однажды в соседнее Сонное царство, в город Мухинск.


В Мухинске его ждала фея по имени Карамелла. Она писала ему по вечерам ласковые письма, которые начинались словами: «Сладкий мой»! Сундучок-секрет для пачки этих писем был весьма мал. Для пачки писем Игнатию пришлось нанять две повозки и четырёх пегасов. Теперь уже совсем можно было отправляться в путь.


Дорога весело вилась между земляничными холмами. Пегасы распевали песни на провансальском наречии и задорно кувыркались, едва не опрокидывая повозки, Игнатий подпрыгивал на кочках, сидя на ворохе писем, а на плечи ему садились колибри и щебетали что-то игривое. Домовичок заразительно смеялся в бороду, всплёскивал руками, потом отклеивал бутафорскую бороду и ложился прикорнуть под персиковыми деревьями.


Долго ли, коротко ли, узко ли, широко ли, синхронно ли или дискретно, но приближался его обоз к Мухинску. Карамелла совсем перестала спать, есть, пить, шить, печь, мыть и петь, села на диету, убрала подальше все конфеты, начала пропадать в Соляриуме солнечном да по бутикам заморским, чтобы встретить Игнатьюшку своего в неописуемой красоте. И надо же было случиться такому, чтобы через Мухинск проездом молодецким да поездом транссибирским проезжал Илья Соловеевич Кащеев-Муромско-Разбойкин, проказник известный, профессиональный и в обольстительных делах искушённый. А Карамеллочка, как на грех, из Соляриума возвращалась в тунике своей алым пылающей.


Как увидел Илья тьма-Соловеевич Карамеллочку, застыл, сердяжечка, закоченел весь аж от внимательности, дышать забыл, моргать перестал и лучше бы вкопанным был, чем то, что с ним стало. Потому что если вы думали, что он украсть её собирался, то вы правы, конечно, но не смог. Не вышло. Ослепила она его своей красотой — на время, конечно. Пока домой дошла, он как раз и прозрел, понял, что всё бренно и ушёл в монастырь. Женский.


Покушалися на сиятельную красоту девушки также Дракон Горынович Змеевиков, братья Богатырёвы числом 33 персоны, Пушкин Александр Васильевич (однофамилец, надо полагать), дядька Черномозг, Александр Мастодонтский и некто Юлий Брутович Бесфамильный. Все они ушли с миром, блаженно улыбаясь, но ничего не достигнув. Карамелла ждала единственного. Выходила каждое утро на дорогу, увитую сиреневым плющом и уложенную жёлтым кирпичом с загадочной искрой, гуляла до потери солнца и ждала.


Но долго сказка сказывается, а быстро колёса вертятся, и вот уже поздно ночью пегасы, запряжённые повозками со скарбом и Игнатием, важно рассекали ночные улицы Мухинска. А сказать надобно, что Карамеллочка по ночам превращалась в беломраморную статую и остывала на прохладе леденцовых ветерков в городском саду под звуки несмолкающего джаза, в позе Венеры Рафаэлевой. За сим занятием и застал её Игнатий, долго и с нежностью вглядывавшийся с полуночи до первых петухов в ангельское лицо статуи, так напоминавшее ему усладу души его. На рассвете же сморил его сон, а ещё час спустя настало утро, свежесть и прохлада окатили нежностью дорожки сада и искупали в росе листву деревьев.


Заждавшаяся Карамелла подхватила крошечного домовичка в красном кафтане на руки, усадила его на взрезвившегося пегаса, сама оседлала второго, и поскакали они пельмени есть, апельсиновый сок пить, миром жить, добра наживать, в гости захаживать и вообще жизнь образцовую вести.


Послесловие

И всё у них было ещё очень долго хорошо. Иначе зачем бы мне писать всю эту сказку?


(12-14.10.08, Кирилл Панфилов)

Автор иллюстрации — Isaya

Процесс разработки интерфейса

Краткий конспект вчерашней лекции для 5-го курса на отделении веб-дизайнеров.


Интерфейс может быть каким угодно. Это может быть и сайт, и панель управления микроволновкой, и интерфейс браузера или любой другой программы, и упаковка сгущёнки.

Главное — на каждом этапе осознавать, что дизайн — это не оформление и разукрашивание как таковое, это создание полезной, удобной и эстетически привлекательной вещи — именно с такой иерархией приоритетов.

Первый этап — постановка задачи. Если ставится задача, мы чётко осознаём, что именно нужно делать, а не вспоминаем об этом случайно в процессе работы. С другой стороны, это позволяет избежать множества лишних вещей. Когда мы чётко понимаем, какие задачи будет выполнять интерфейс, легко разработать его функциональность.

Второй — исследование/анализ: задачи, предполагаемой целевой аудитории, существующих аналогов и взаимосвязи этих трёх пунктов.

Третий: разработка семантической структуры интерфейса. Когда будущий интерфейс без учёта дизайна разбивается на ряд семантических блоков (функционально значимых элементов), после чего выстраиваются их взаимосвязи и приоритеты. Графически это можно изображать как прямоугольники, в которых записаны функции блоков. Прямоугольники располагаются строго друг под другом. Тут нет ни намёка на дизайн. Это нужно, чтобы создать оформительско-независимую структуру. Особенно это актуально при создании сайтов, когда редизайн в будущем предполагается как достаточно высокая вероятность.

Наконец, четвёртый этап — собственно оформительский, тот, что некорректно называют дизайном (дизайн — все 4 этапа). Разрабатывается идея оформления, на основе семантической структуры строится схематический прототип, а затем происходит окончательная визуализация интерфейса.

На каждом этапе необходимо тестирование. И, конечно, привязка интерфейса к механизму, оболочкой для которого он является.

Мой знак

Изображение

Я родился в год Олимпийского мишки.

Из стихотворения

...Нужно нежно ее, так исподволь, ненарочно, отходя, играя, кудри перебирая, распускать ее по ниточке, по шнурочку, взявшись за руки собирать миражи окраин, и когда ты будешь топать в рубахе мятой и лелять в ушах мотив своего Пьяццолы, она выплеснет в лицо изумрудной мяты и накроет тебя своей радостью леденцовой.


Аля Кудряшова

Музыка моего детства

Японский вокально-инструментальный ансамбль «Royal Nights». Пластинка 1979 года. Пять песен, которые мне нравятся оттуда больше всего.

«Цветок цикламена» на японском языке:


Известная во многих исполнениях «Feelings» на английском языке:


«Фейерверки» (эта и остальные на японском языке):


«Пойми меня»:


Несколько необычная по вокалу «Рабочая песня»:

Принимаемые переменные

В PHP, как известно, переменные инициализируются из строки запроса, из POST-запроса и т.п. Т.е. можно инициализировать переменную $abc, сделав адреса подобные такому: site.ru/?abc=1. Но такой подход работает не везде и не всегда в зависимости от способа установки PHP или настроек. Если не хочется возиться с глобальными переменными-массивами типа $_GET или уже написано много кода с переменными типа $abc, то ситуация лечится просто. В начале PHP-кода пишем фрагмент:
foreach($_REQUEST as $k=>$v) {
	${$k} = $v;	
	}
И, собственно, всё работает.

Табличное выявление типа языковой структуры

Сейчас будет голая теория, приготовьтесь и не пугайтесь.

Все практические грамматики оперируют набором правил школьной грамматики: есть части речи (существительное, прилагательное, глагол) и члены предложения (подлежщее, сказуемое, определение, дополнения и т.п.). При этом никто не задумывается, почему в японском языке 2 основных типа прилагательных, которые легко и свободно могут быть сказуемыми.

Методика выявления точного набора частей речи (морфологически индивидуальных типов слов) проста: нужно составить таблицу, где по вертикали располагается упрощённый набор синтаксических функций слов (то, что называют членами предложения), а по горизонтали морфологически индивидуальные типы слов.


Упрощённый набор синтаксических функций слов — это актанты (субъекты и объекты действий и состояний), предикативы (действия и состояния, эквивалентности и т.п.), атрибутивы (определения любых типов) и ситуативы (обстоятельства, некоторые виды дополнений). Остальными при глобальной проверке можно пренебречь, а вводить по мере надобности. Например, в некоторых языках действия и состояния настолько различаются грамматически, что было бы целесообразно вводить разные типы предикативов.

Правило такое: если данный тип слов имеет уникальные признаки трансформаций (выполнения различных синтаксических функций), то он является отдельной частью речи.

Так выясняется, что в японском языке нет личных местоимений, но они являются подклассом имён. Есть части речи «признак качества», «относительный признак» и «действие или процесс» [на -i, на -na и на -(r)u основных формах соответственно], причём все три части речи могут быть как атрибутивами, так и предикативами в основной форме, но в предикативной функции их морфология богаче. При этом у каждой части речи из этих трёх свои наборы аффиксов для каждой функции (в функции ситуантов это -ku, -de и -te/-de соответственно, в прошедшем времени -katta, datta и -ta/-da соответственно). Имена же чётко противопоставляются им, так как при трансформации в предикатив они обзаводятся глаголом связкой da/des(u), а в атрибутивной функции употребляются с постпозитивной частицей no. В английском языке местоимения имеют супплетивные формы даже для предикативной функции (глагол to do). В древнекитайском языке была одна универсальная часть речи (wang = царь; царский; царствовать), в современном же довольно серьёзно противопоставляются имена и атрибуто-предикативы, а прилагательные отсутствуют совсем.


В зависимости от размера итоговой таблицы и количества исключений сразу видно, изолирующий ли это язык, агглютинативный или флективный.

Рассмотрение типа семантико-синтаксической организации (номинативный, эргативный, активный, нейтральный типы) — дело более детального анализа.

Две особенности

Эргативность — это особое построение предложения в некоторых кавказских, австралийских и азиатских языках. Смысл в том, что нет противопоставления подлежащего и прямого дополнения (как в русском: Я разбил стакан) как субъекта и объекта, а есть противопоставление «того, с кем/чем что-то происходит» и эргатива — производителя активного действия. Например, по-аварски можно сказать: Истакан бекIана «стакан разбился, я разбил стакан, ты разбил стакан» или с эргативом (аналог нашего подлежащего, но не в основном, а в специальном эргативном падеже): Вацас истакан бекIана «я разбил стакан» — когда важно подчеркнуть, кем производится действие. Получается, что в таких языках аналог подлежащего — не основной, а второстепенный член предложения.


А изафет — особенность тюркских, иранских, венгерского и некоторых других языков. Когда в группе «чьё-то нечто» особым показателем оформляется не определение (Кирилл — тетрадь Кирилла), а определяемое слово (Кирилл — дефтери Кирилл в таджикском языке, где окончание И прибавляется не к обладателю, а к обладаемому).

28

Нам всем по 28 лет.

Я не видел своих одноклассников лет по 10-11.

И сейчас они заходят ко мне в профили, в аську, а я представляю их ещё пацанами с их 16-летними проблемами, с мелочью в кармане, несмотря на то, что вижу их фото — священник, мастер по каминам, ещё кто-то... Время остановилось тогда и будет стоять, пока я не увижу их вживую.

Это как полёт на скорости света. Возвращаешься в прошлое, а застаёшь будущее. Но к дядькам этим относишься как к мальчишкам.

И я помню себя за школьной партой. Это кажется таким неестественным.

Водители

Как же это приятно, когда водитель маршрутки объявляет все остановки, каждому выходящему желает «Всего доброго», а на просьбу остановить доброжелательно отвечает, а не молчит, и когда даёшь ему деньги, сообщает, сколько сдачи он возвращает.

Редкость, поэтому приятно...

Пол Маккартни

Paul McCartney. Sgt. Pepper / The End Концертное исполнение.

Времена года

Осень

Автор фото — Оля Терехова.

И ещё немного:

Зима:

Зима

Весна:

Весна

Лето:

Лето

И снова осень:

Осень

Красивые URL

Если вы работаете с PHP, добиться красивых адресов в адресной строке совсем просто. Согласитесь, проще запомнить адрес www.site.ru/company/director, чем www.site.ru/modules.php?module=2&set=24&page=director.
Работа происходит в 2 этапа.

1. Создаётся файл .htaccess, в котором находится следующий текст:
RewriteEngine on
RewriteBase   /
RewriteCond	%{REQUEST_URI}	!^/images.*
RewriteCond	%{REQUEST_URI}	!^/css.*
RewriteRule	^(.*)$		index.php?data=$1 [QSA]
Первой строчкой инициализируется модуль mod_rewrite, который позволяет на лету «переписывать» адреса. Вторая определяет директорию (в данном случае корневую), относительно которой читаются все правила. RewriteCond отвечает за условия (в примере — отсутствие в начале адресов файлов фрагментов images и css, чтобы адреса картинок и стилевых файлов не трансформировались, а выдавались как есть). RewriteRule — собственно правило, основанное на языке регулярных выражений. В примере всё (.*), что располагается после имени сервера, подвергается замене. Символы ^ и $ означают соответственно начало и конец строки, за которую принят путь к конечному файлу (в примере это company/director). Строка, взятая в скобки (точка — любой символ, звёздочка — любое количество этих символов), сравнивается с образцом (строка адреса). Всё, что находится после имени домена, записывается в переменную $1 в финальном адресе. В итоге то, что мы видим как www.site.ru/company/director, сервер воспринимает как www.site.ru/index.php?data=company/director.

2. А это нам и нужно. Мы имеем файл index.php, в котором первым делом происходит разбор строки запроса (то, что записано после вопросительного знака, т.е. data=company/director). В языке PHP с помощью переменной-массива $_GET можно получить доступ ко всем переменным, переданным через адресную строку. Нетрудно догадаться, что переменная $_GET['data'] («данные») равна строке company/director.
Теперь уже дело техники включить нужный файл. Например, если все файлы хранятся у вас в папке pages, то делаем включение с проверкой на существование файла:
if(file_exists('pages/'.$_GET['data'].'.php')) {
	require 'pages/'.$_GET['data'].'.php';
	}
else {
	echo 'Беда! Беда! Страница не найдена!';
	}
Конечно, в таком сыром виде делать этого нельзя. Перед влючением живого и трепещущего файла стоит обработать данные, которые передаются в адресной строке: убрать потенциальные http://, опасные символы, обрезать ненужные слэши по бокам* и т.п. Да и включать файл сразу не всегда целесообразно: иногда хочется сначала обработать его как строку.
Но это уже тема для другой записи.

______
* это можно сделать, например, так:
function trimSlashes($str) {
	$str = str_replace('/',' ',$str);
	$str = trim($str);
	$str = str_replace(' ','/',$str);
	return $str;
	}

Камелеон

Сейчас популярны браузеры Эксплорер, Файрфокс, Опера и Сафари. В последнее время ещё и Гугл Хром в силу популярности Google.

Я в повседневном сёрфинге использую ещё один браузер, K-Meleon, довольно лёгкий и удобный.

Движок Файрфокса (Gecko), скин свой, функциональность Оперы, размер дистрибутива около 5 Мб, множество настроек. Special features: мышиные жесты, работа с закладками разных браузеров, нетребовательность к ресурсам ещё большая, чем у ранней Оперы.

Скачать можно прямо здесь (постоянная ссылка) или на российском сайте браузера.

iLyte 2.0

Ведётся разработка движка для блогов iLyte версии 2.0.

Из официальных источников получена следующая информация:


iLyte 2.0. Что будет нового:

— многопользовательский режим (главный пользователь — номер 1 — может администрировать всё, остальные только создавать записи и редактировать и удалять свои записи; регистрировать пользователей может только администратор)

— админка не отдельным файлом, а располагается внутри блога: при авторизации появляются дополнительные элементы управления и ссылки и видны скрытые посты

— унифицированность вёрстки и, как следствие, более простая работа с CSS

— рассылка уведомлений об ответе автора блога на комментарии и подписка на комментарии

— отслеживание сайтов, с которых произошёл переход на блог

— уведомление о новых комментариях не только на почту, но и при авторизации

— изменение типа адресов постов (post.php?2008-6-1 на /post2008-6-1)

— возможность выбора для поста нескольких тем

— вставка аудио и видео

— динамическое отключение или включение визуального редактора помимо галочки в настройках

— возможность добавления статических страниц, которые будут автоматически встраиваться в дизайн блога

— совместимость с версией 1.0

— возможность онлайнового обновления движка блога и уведомления о доступности обновлений

— восстановление забытого пароля

— улучшенная безопасность и секретность данных


iLyte 2.0 Extended (и попозже)

— модули регистрации или запроса на регистрацию

— формирование френдленты путём добавления RSS-каналов

— онлайновый инсталлятор



По последним данным, в концепцию внесены некоторые изменения.

Пресс-служба разработчиков iLyte заявила, что совместимости 1-й и 2-й версий не будет. Но будет онлайновое средство, позволяющее одной кнопкой импортировать все записи из блога на первой версии в блог на второй.

Кроме того, планируется сделать настраиваемую длительность авторизации.

Красная осень

Изображение

Картинку украл с блога Xuân Phấn.

Нравятся мне осенние картинки.

Блогология

Писать в блог — целая наука.

Подборка ссылок: virtual-lab.ru/72-faq-po-bloggingu.

...И животноводство ©

Фотошоп, безусловно, гениальная и мощная программа. Только стоит, мягко говоря, недёшево, а старые версии (мне вот полюбилась CS, она же восьмая) уже не продаются. А вы, допустим, не хотите использовать пиратские версии.

Есть бесплатные программы, которые по отдельности или вместе вполне способны справиться с поставленными задачами при отстутствии фотошопа, а иногда и выполнить некоторые задачи сверх. (А если вы пользуетесь ещё и векторными программами, всё ещё сложнее: Иллюстратор, Корел или Фрихэнд тоже так уж дёшевы.)

В обзоре даются постоянно действующие ссылки на упомянутые программы (все запакованы в zip-архивы).


Программа Artweaver (9 Мб) переняла не только многие из функций фотошопа, но и его интерфейс: ориентироваться в нём совсем легко, если вы знакомы с Adobe Photoshop. Даже клавиатурные сокращения повторяются (Ctrl+T и другие). Из существенных минусов — неудобная работа с цветовыми режимами. Естественно, возможности беднее, но работает вполне корректно. Лучше всего использовать её не для рисования, а для обработки существующих изображений.

Для рисования очень удобными оказываются бесплатные же Artrage (1,5 Мб) и Project Dogwaffle (4,5 Мб). Первая (у неё достаточно необычный интерфейс) бесплатна именно в этой, первой версии. Artrage 2 весит раз в 6-7 больше и уже является платной. Dogwaffle же выглядит не так необычно, хотя и имеет свои особенности. Обе позволяют имитировать рисование настоящими кистями, карандашами, маркерами и т.п.

Из векторных программ хочется остановиться на пакете Creature House Expression (7,5 Мб). Она хоть и является платной, но компании, которая её выпускала, сейчас не существует: все последующие версии выпускает Microsoft. Из особенностей — малый вес, быстрая работа, имитация рисования кистями, лёгкая работа с кривыми Безье.

Наконец, стоит назвать две программки специального назначения. Одна из них — @icon sushi (640 Кб) — делает из изображений иконки в формате .ICO, а вторая — Photorazor (1 Мб) — позволяет пакетно обрабатывать файлы, например, создать для сотен изображений уменьшенные копии по заданным размерам.


Это программы, которые я довольно часто использую.

Дополнительные символы и их HTML-представление

Веб-мастеру постоянно оказываются нужны различные символы (©, «, ’), не входящие в стандартные алфавитные наборы. Часть из них мы вставляем мнемоническими кодами, часть цифровыми, часть Alt-комбинациями, а часть имитируем последовательностями вроде этой: (с). Чтобы держать всё это в одном месте, я подготовил небольшой справочник:

в виде HTML-страницы

то же самое в zip-архиве

Наслаждайтесь.

Псевдокласс :hover для Эксплорера

Internet Explorer 6 и ниже в числе прочего не умеет распознавать псевдокласс :hover для элементов, за исключением ссылок. А нам вдруг понадобилось стилями задать смену состояния для блоков или ячеек таблицы. Исправляем ситуацию: берём файлик csshover3.htc, кладём его в директорию, допустим, со скриптами (пусть это будет /js/), а в стилевой таблице пишем отдельное правило:
body {
	behavior: url('/js/csshover3.htc');
	}
Правило понимает только Эксплорер, но это нам и нужно. Опера, Сафари, Файрфокс и подобные Gecko-браузеры понимают :hover для любых элементов.
Первоначальный вариант файла написал Владимир Токмаков из Студии Лебедева. Мы с Андреем Филипповым исправили его: теперь он корректно обрабатывает и :hover на элементах, которым уже присвоены какие-то классы (ранее это работало с ошибками).

Высоцкий

Изумительная аранжировка «Охоты на волков» Владимира Высоцкого:

Фигня

Еду в троллейбусе, стою около сиденья, на котором сидит некая бабулька. По её движениям я понимаю, что сейчас будет её остановка, отхожу на полшага (дальше люди) вправо, чтобы пропустить.

Она встаёт и плечом задевает за полы моей куртки, которую я часто ношу расстёгнутой. Бабулька сердито пихает меня рукой в живот со словами: «Со своими тут куртками вообще уже!»

Думаю, должен ли был я снять куртку и постелить ей под ноги.

Как много раздражения в людях.

Сайт с блочной семантической вёрсткой: процесс

Требуется работа в несколько этапов:
1. Создание основного шаблона (X)HTML
2. Создание CSS-файла с основными определениями
3. Вёрстка отдельных семантических блоков на HTML-странице
4. Описание классов и идентификаторов в CSS

1. Создание основного шаблона (X)HTML
Основной шаблон необходим, чтобы сразу забыть обо всей технической информации. Обычно я беру те сайты, которые уже сделал, беру оттуда основу, вычищаю всё остальное. Пример:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<meta http-equiv="Pragma" content="no-cache">
	<meta http-equiv="Expires" content="0">
	<meta http-equiv="Content-Type" content="text/html; 
		charset=windows-1251">
	<title>{ПРИМЕЧАНИЕ:4}</title>
	<link rel="stylesheet" type="text/css" 
		href="/css/css.css" media="all" />
	<link rel="shortcut icon" type="image/x-icon" 
		href="/images/favicon.ico" />
	<link rel="alternate" type="application/rss+xml" 
		title="{ПРИМЕЧАНИЕ:4}" href="/alter/rss.xml">
</head>
<body id="{ПРИМЕЧАНИЕ:6}">
	<div id="general">
		<h1>Заголовок</h1>

		<ul id="navigate">
			<li id="li_1">
				<a id="menu_1" href="/1">первое</a>
			</li>
			<li id="li_2">
				<a id="menu_2" href="/2">второе</a>
			</li>
		</ul>
			
		<div id="content">

		</div>

	</div>	
</body>
</html>

Примечания:
1) Определение типа документа может быть различным. Поскольку очень редко удаётся при одновременной работе над проектом нескольких людей (особенно в разных организациях) отслеживать валидность кода, обходимся доктайпом, который является более вольным, чем стандартное для XHTML описание:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Если же использовать этот доктайп, то <head> необходимо изменить на
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
2) Два тэга отвечают за запрет кэширования браузером, особенно если сайт динамически изменяется.
3) Кодировка указана как пример: в случае с англоязычными сайтами логичнее указывать
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
или
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4) Содержимое тэга <title></title> логично генерировать автоматически (так же, как и заголовок ленты RSS) на основе настроек (в обоих случаях) и h1 страницы (про <title />).
5) Пути к CSS-файлам, картинкам и фидам лучше указывать относительно корня виртуального сервера (на что указывает слэш): в этом случае при Clean URLs типа /about, /news у сервера не возникнет недоумений относительно их расположения.
6) Для BODY следует генерировать ID. Удобнее всего это делать на основе URL с некоторыми изменениями. Например, в своих проектах на PHP я с помощью простой строковой замены меняю /web/articles/abcd на id="web_articles_abcd". В этом случае верстальщик получает полный контроль над специфическими элементами для каждой страницы, если они есть.
7) Внутри BODY обязательно должен быть элемент, который отвечает за всё содержимое страницы, а внутри него логично сделать блок для содержимого конкретной страницы (идентифицированный), заголовок h1 и заготовку для меню с помощью маркированного списка (каждый элемент списка можно снабдить ID).

2. Создание CSS-файла с основными определениями
В любом браузере есть встроенные стили, отличающиеся от браузера к браузеру. Чтобы получить максимальный контроль над видом элементов страницы, стоит произвести т.наз. «обнуление» некоторых стилей. Это делается в самом начале основного CSS-файла (в примере выше /css/css.css)

/* General Cleaning */

* {
	margin:0;
	padding:0;
	font-family:Arial, Helvetica, Sans-Serif;
	font-size:8pt;
	font-weight:normal;
	font-style:normal;
	color:#131313;
	}
b, strong, h1, h2, h3 {
	font-weight:bold;
	}
i, em {
	font-style:italic;
	}
table, img {
	border:0;
	}
table {
	border-collapse:collapse;
	}
table td {
	padding:0px;
	vertical-align:top;
	}
table td {
	vertical-align:top;
	}

body {
	background:#EAB476;
	}

a, a:link, a:visited, a:active {
	color:#CC3300;
	text-decoration:none;
	}
a:hover {
	color:#FF6600;
	}

/* Special Elements */

Сначала убираются все отступы, выступы, интервалы между ячейками, нежелательные полужирные и курсивные начертания, неправильные выравнивания, переопределяются основные цвета.
Естественно, что весь текст становится одинакового размера, и кегль h1, h2 и h3 нужно назначать индивидуально исходя из стилистики сайта.
Цвета, размеры, шрифт, соль и перец по вкусу.

3. Вёрстка отдельных семантических блоков на HTML-странице
Обязательная программа выполнена, теперь произвольная. Допустим, дизайн уже нарисован. Следует определить, какие блоки в нём можно выделить только на основании семантики. Обычно это заголовок страницы, логотип, меню, основной содержательный блок, сведения правового характера. Они заключаются в отдельные блоки, которым присваиваются идентификаторы.
Следует использовать тэги, подходящие по семантике: т.е. для заголовков hX, для меню списки (добрая практика: семантика соответствует и удобно верстать), для цитат blockquote и т.п.
Лучше всего верстать, отключив таблицу стилей. В этом случае мы увидим белый (или серый, если мы гордо пользуемся Netscape 4) фон страницы с чёрным текстом и синими или лиловыми ссылками. Но мы чётко видим, что на странице есть, а чего нет. Вся семантика налицо, только оформления нет.
Не уверен насчёт семантики, но всё содержимое страницы в общем случае лучше заключить в один блок с ID, своего рода BODY-2. Это удобно для верстальщика, потому что позволит добиться любого типа вёрстки.
К сожалению, не всегда удаётся придерживаться чисто семантической вёрстки. Во-первых, есть логически выделяемые блоки, во-вторых, есть чрезмерно изобретательный дизайн.
Первая проблема не так страшна. Дело в том, что от страницы к странице повторяются целые комплексы блоков (шапка с логотипом и меню, например), что реализуется программной логикой. Удобно оборачивать такие комплексы в поименованные блоки. После этого на странице оказывается от двух до четырёх логических блоков, в которых есть деление на семантические блоки. Резать и верстальщику, и программисту очень удобно.
Сложнее со второй проблемой. Если дизайн изобилует нефункциональными элементами, которые без введения дополнительной разметки почти невозможно внедрить в вёрстку, приходится вводить несемантические и нелогические элементы. Это зло, потому что засоряет разметку, при редизайне от этих блоков приходится избавляться или display:none, при нарезке программистами в разные шаблоны какой-то элемент может потеряться, а если вёрстка с position:relative... Желательно несемантические элементы включить в семантические (с помощью CSS или лишней разматки) во избежание таких потерь.
Последнее замечание касается таблиц.
Верстальщики-блочники категорично отказываются от использования таблиц, хотя это тоже семантический элемент.
Очень много данных не только удобно, но и нужно представлять в виде таблиц: отчёты, прайсы, вывод результатов поиска по категориям с несколькими параметрами, статистика, сравнение показателей. Если смысл требует табличного представления данных, незачем имитировать их блоками с нагромождением float и clear в классах.

4. Описание классов и идентификаторов в CSS
Заключительный этап, самый долгий, который предполагает определение стилей для всех классов и идентификаторов, тестирование результата во всех браузерах, ругательства на IE и отладку. Ничего интересного, просто CSS и различия в реализации нужно знать.

Эстафета

От Насти Манно мне досталась эстафета: 5 любимых и 5 нелюбимых вещей. И я должен передать эстафету 5 другим блоггерам.

Я не буду говорить о любимых и нелюбимых людях — в первом случае список получится слишком большой, во втором слишком короткий ;-)


Часть I

1. Я люблю, когда люди любят своё дело. Когда могут жить работой, своим увлечением (хорошо, если оно совпадает с работой). Только в этом случае достигается профессионализм. Да, и сюда же — внимание к деталям. Это больше из области дизайна.

2. Я люблю запахи. Пекущийся хлеб, розовая роза, свежие журналы, только что отпечатанные книги, асфальт после дождя, запах свежераспиленного дерева. Эти запахи я ощущаю всеми органами чувств.

3. Люблю веб-дизайн во всём его многообразии (проектирование, дизайн, вёрстка, программирование...). Это такой многоплановый конструктор, что сложно найти для меня настолько же увлекательную деятельность.

4. Но она есть. Это лингвистика. Я люблю экзотические (и не очень) языки и всё, что с ними связано. Грамматика, типология, переписка, алфавиты, реконструкция. Народы и страны. Культуры.

5. Постоянно узнавать что-то новое, постоянную смену ощущений (кроме самых глубоких чувств). И вообще периодическое обновление много значит для меня.


Часть II

1. Не люблю компьютерные игры и молоко.

2. Ненавижу равнодушие и необязательность.

3. Терпеть не могу, когда обращают ситуацию или слова против меня, искажая их смысл.

4. Не люблю терять время или всё, что заставляет меня его терять.

5. Не терплю самодовольство, излишние снобизм и амбиции, пустые заявления, громкие слова и всякие группировки, основанные на лозунгах и пустой болтовне.


Часть III

Перехватить эстафету и передать пятерым следующим должны:

1. Юрий «akella» Артюх (сжульничал)

2. Игорь Цыгырлаш (отказался)

3. Вика-Fjola (ответила)

4. Александр Макаров / Sam Dark (отозвался)

5. Оля Иванова-Макарова (усовершенствовала)

Вебственное

1. Для веб-ревю: concept007.ru.

2. Не забыть про статистику в LBl, в т.ч. откуда кто.

Кулуарная регистрация

Придумал для своего одного проекта такую кулуарную регистрацию.

Поскольку пользователей системы не ожидаются так чтобы уже огромные тысячи, регистрация сводится к следующему: желающий заполняет анкету (включая желаемые логин и пароль), вводит проверочные слова, чтобы подтвердить, что он не робот, отправляет заявку и получает уведомление, что его заявка поступила на рассмотрение. Администратор системы отслеживает поступление новых заявок и имеет в своём распоряжении 2 кнопки: принять или отклонить заявку. Если принимает, то данные из заявки копируются в создаваемый раздел пользователя и становятся его действующей анкетой. В обоих случаях кандидату высылается уведомление о результате рассмотрения, а заявка удаляется.

Несомненно, это отпугнёт часть пользователей и усложнит процесс регистрации (и будет занимать больше времени), но проектом будут пользоваться только действительно заинтересованные люди. Никакого спама, никаких пользователей на полтора дня.

Ждите декабря.

Пустые записки

Изображение

Я не иду на встречу однокурсников.

Я делаю тот проект, который задумал ещё полтора года назад. Он охватывает сразу два моих больших увлечения.

Хочется отдыхать и писать книгу. Для себя, для души, которую, вероятно, даже никто не захочет издавать.

А осень не только на улице, но и в душе у меня.


P.S. Фото отсюда.

Сказка о потерянном времени

Я гляжу на некоторых студентов. Лет по 20 плюс-минус. И замечаю такую вещь: для них совершенно не критична глобальная потеря времени. Т.е. они могут часами сидеть в аське, спать, сколько хочется, гулять, просто так ничего не делать.

Боже, как этого иногда хочется.

Я помню: я в 97-02 гг. был такой же. Я ждал электричку по 2 часа, я слонялся, прогуливая пары. Вечерами тоже особо как-то не занимал себя.

А сейчас... Всегда спешу. Заполняю отчёты по минутам. Если в день что-то не сделал, считаю его потерянным. Не могу сидеть без дела. Не играю в компьютерные игры. А дни всё равно пролетают, недели и месяцы мимо, и успеваю я далеко не столько, сколько хочется.

И как правильно?

Libellus

Нет, никогда я не буду читать тебя, как старую книгу, бережно переворачивая хрупкие листочки, дыша неповторимым ароматом.

Если тебе достаточно быть модным журналом, то тебя постигнет участь всей периодики.

Ты окажешься в подшивке.

Коммуникационое

Стук в дверь, Р. открывает, здоровается с девушкой, принимает пакет и смотрит внутрь:

— Там не бомба?

Я:

— Нет. Эта девушка будет нам приносить еду каждое утро. Запомни её. Она безопасна.

Мастерская работа



Вл. Путин и Дж. Буш расслабляются под «Puttin in the Ritz» Тако.

Внедрённые блоги

С одной стороны, во фреймворке FairWork есть встроенный iLyte, который можно использовать и как новостную колонку, и как однопользовательский блог. Вся основная функциональность для этого есть, он достаточно настраиваемый.

С другой стороны, фреймворк позволяет расширять себя до бесконечности: модели, функции, модули управления и в крайнем случае структуры.

С третьей стороны, задача такая: создать коллективный блог, или сообщество, с системой жёсткого контроля. Это нужно для одного проекта, который предположительно увидит свет в конце года.

Пока формулируем задачи:

1. Любой человек может подать заявку на регистрацию в системе, заполнив необходимые поля. Администратор утверждает или отклоняет заявку.

2. Утверждённый пользователь может добавлять записи, редактировать свои, комментировать любые. Администратор может редактировать и удалять любые записи и комментарии.

3. Пользователи могут готовить статьи и рекомендовать их для публикации администратору. До публикации статьи видимы только из системы управления.


(Запись будет дополняться.)

Без особой темы

Сегодня, верстая нарисованный дизайн для этого блога, в очередной раз убедился в широких возможностях CSS и в глючности IE.

Для дизайна оказалось достаточно трёх картинок, одна из которых — 2 на 1 пиксель. Заставить их правильно координироваться друг относительно друга в Интернет Эксплорере оказалось не так сложно: основные проблемы возникли с мелочами (отступы абзацев, рамки). Вывод один, и глобальный: чем точнее указываешь вложенность селекторов, тем больше вероятность, что это будет работать везде, потому что правила в ИЕ перекрываются весьма прихотливо.

L Girl

Laying near the water you read your memory, 23 aged girl with fresh grass coloured eyes.

Listening to soft whisper of grass and trees near the river, you can edit your past.

Little jungle bells in your thoughts ask you if you want to save this piece of memory or not.

Lime of the grass around is connecting to the flowers images and returns the rainbow of lovely moments.

Lights on the water are indicating that your memory works in normal mode.

Laying you touch tender little flowers with your toes — you like walking barefoot.

Like a sky with water-colour little clouds you are dressed with unnoticeable white clothes.

Lazy afternoon gives you precious pearls of river sparks, that remain on your skin.

Look, there is a piece of your happiness and smile in every drop.

Темы для статей

1. Собеседофобия. (готово)

2. Корпоративные праздники. (готово)

3. Боязнь начальства.

4. Про отношения на работе, дружба, например. (готово, блин, тоже)

5. Комфортная рабочая обстановка.

Осенние находки

Полуодинаковые дни цветными прозрачными камешками выскальзывают из рук и разбиваются на тысячи мелких бисерин, которых не собрать в траве, сочно-солнечной до желания раздеться донага — или пожухлой до невыразительной усталости от жизни.

Собрать эти — уже бывшие — камешки в ладони, почувствовать тепло их, прогретых солнцем, в каждом рассмотреть кусочек прошлого — можно, но они снова ускользают. Ты чувствуешь, что осколки разбитых камешков ранят пальцы и ладони, это отвлекает, это немного сладко, но целая мозаика безвозвратно разрушена.

Но иногда так приятно неожиданно находить в сыроватой осенней мгле закатившуюся блестящую бисеринку или даже целый камешек...

Бережное

Взмахом плаща сумерек прикрывает тебя умиротворение у реки, по-осеннему уже прохладное, сладко-сонное, с чашкой чая из термоса в руках, тонких и зовущих согреть, и что может быть уютнее — сидеть до самой темноты, смотреть на строгие тени деревьев, слушать звон тишины, прижиматься друг к другу, и чтобы из рукавов свитера только кончики пальцев были видны, и прикрывать глаза, слыша журчание воды.


Путь какого-то вечернего насекомого короткой чёрточкой в успокоившемся воздухе. Вытянуть ноги, прислониться спиной к стволу дерева. Взять горсточку вечера в руки, окунуть в неё лицо, нежный воздух пусть растечётся по телу, пригревшемуся в одежде на размер больше, и так не хочется подниматься вверх, к деревянному домику — в котором встретят с ужином, светом и радушием, но нарушать ломкое очарование берегового уюта совсем не хочется.


Ласковые волны целуют берег, волны тепла от молчаливого собеседника окутывают всё вокруг, и выбираться из них совсем не будешь, просто сделаешь вид, что уснула. И только на губах улыбка выдаёт тебя.

Волшебные меню

Вчера получил удовольствие от своей же системы (FairWork, конечно, кто о чём, а лысый о фреймворке). За весь день работы с ним пришлось написать только одну функцию, так как всё остальное уже было предусмотрено в системе. В итоге перевод сайта на фреймворк свёлся к вёрстке, подготовке моделей (типичная модель для большинства страниц занимает три строчки, которые получают данные из реестров и шаблонов кода), редактированию реестров и т.п.

К вечеру возникла необходимость в недостающей функциональности, и я её дописал.

Появилось понятие т. наз. контекстного меню (омонимия: по правой кнопке мыши ничего не всплывает), то есть меню, различного в зависимости от раздела. Фреймворк определяет, что за раздел, ищет подходящее меню в особой директории, а если не находит, подгружает меню, указанное как меню по умолчанию. Внёс изменения в основную ветку кода (сейчас на фреймворке строятся одновременно 2 крупных сайта, поэтому если обновляю системные функции, просто копирую нужные файлы с сервера на сервер без изменений). Сегодня, правда, пришли мысли, как сделать код ещё более гибким.

Таким образом, кроме Обычного меню, идентификатор которого жёстко указывается, есть Контекстные меню и Волшебные меню (последние сами выстраиваются в цепочку, если вложенность страницы более одного уровня).

Мне

Юля (14:09:34 20/08/2008)

давно хотела тебе сказать, но сейчас подошло самое лучшее время. сегодня приезжает, Кирилл. у нас все очень хорошо (тьфу-тьфу-тьфу). я воспользовалась тем советом, который ты мне тогда дал, часто вспоминала твои слова. Ты оказался прав, и без твоего совета, не знаю было бы у нас с ним все так хорошо. в общем, я тебя хотела поблагодарить, и сказать, не слушай ты свой внутрений голос, который говорит, что не нужно давать советы, что людям они не помогают, а мешают. не мешают, а очень даже помогают! ты даешь мудрые советы, не скупись на них



Приятно-то как...

MagicMenu

То же самое, что bread crumbs, но в стиле FairWork.

Путь к странице берётся как входная строка, итеративно от неё отрезается последняя часть, потом trimSlashes, берётся captio файла по этому пути, возвращается как ссылка. Путь ссылок заносится в массив. В функцию передаётся разделитель между ссылками и параметр, отвечающий за то, будет ли выводиться указатель на текущую страницу:

1 (по умолчанию) не будет

2 будет как не ссылка

3 будет как ссылка

Крик души

Как же меня достало то, что она вмешивается в каждый разговор, реальный или онлайновый, высказывает свою точку зрения там, где она совсем некомпетентна, считает себя невероятно умной, что она абсолютно неженственна, ленива во многих вопросах, настырна... И она мне раньше могла нравиться (лет 5 или 6 назад) — или я был другой, или она? Какого фига жизнь опять сводит с теми, с кем совсем не хочешь?

Модели в FairWork

Модель (в чужих терминологиях шаблон или темплейт) в фреймворке FairWork, в отличие от многих других систем, не включает в себя обязательные компоненты (типа шапки и футера), а строится по принципу матрёшки.

Есть главная модель, которая загружается в любом случае (обычно она включает всю информацию до тэга BODY, частично элементы тела страницы, которые будут повторяться везде, и окончание HTML-документа). В ней есть обязательный вызов функции (осуществляется с помощью программно определённых тэгов), загружающей внутренние модели. В общем случае загружается внутренняя модель по умолчанию; если в реестре есть соответствие текущей страницы какой-то определённой модели, то загружается эта определённая модель. А уже сама модель включает в себя вызванную страницу — точнее, берёт информацию из нужного файла, адрес которого далеко не всегда похож на адрес страницы.

В моделях запрещён программный код. Вместо этого есть возможность определять вёрстку страницы обычными тэгами и включать специфические тэги фреймворка пяти типов.

1. Вызовы функций. Например, одна строка определяет загрузку окна для ввода письма и функционал отправки почты. Другой тэг-функция отвечает за построение MagicMenu, которое прокладывает по определённой схеме путь от текущей страницы до главной.

2. Вставка деталей. Каждой детали (вёрстка этих фрагментов кода есть в отдельной модели) соответствует функция. Например, деталь, определяющая вёрстку меню, итеративно загружается для каждого пункта с помощью вызова функции, похожей по названию на тэг детали.

3. Вставка фрагментов — без программной логики. Фрагменты хранятся в тэгах-номерах в отдельной модели, вызываются при наличии тэга фрагмента с указанием его номера ядерным сценарием.

4. Вставка настроенных компонентов. Обычно это данные, которые при необходимости легко можно поменять через редактор реестра настроек: подзаголовок сайта, рабочий адрес электронной почты, основной язык интерфейса и т.п. В месте вставки настроечного тэга происходит его замена на значение этой настройки.

5. Вставка языковых терминов. Особый тэг заменяется на фразу из языка, указанного в настройках или запрошенных пользователем, если фраза есть в языковом файле. Если нет, берётся фраза из языка по умолчанию. Если этой фразы вообще нет в языковых файлах, остаётся тэг без изменений (как и в случаях выше).

Пример: нужно сделать участок страницы с контактными данными. В файле фрагментов в очередном номерном тэге пишем вёрстку этого участка. Вместо слова «телефон» пишем вызов языкового термина, вместо номера телефона тэг, берущий этот номер из настроек. В нужных шаблонах подключаем этот фрагмент. В итоге фрагмент включится, а тэги в нём динамически заменятся на соответствующие значения (уже после вставки фрагмента, когда целый код будет обрабатываться как строка).

Кокосовая парфюмерия

Ничто из парфюмерии на меня так угнетающе не действует, как аромат кокосовой стружки. Потому что он из другого мира, из кулинарии. Я думаю, даже если будет туалетная вода с моим любимым запахом пекущегося хлеба, вряд ли она покажется мне привлекательной.

Вероятно, я бы терпимо относился, если бы не личностная ассоциация девятилетней давности.

Будильники

Не знаю, чего так все взъелись на будильники. Я вот поставил у себя на телефон симпатичную музыку на будильник, не резкую, а мелодичную, и каждое утро с удовольствием под неё просыпаюсь, особо даже выключать не хочется.

Внутренние процессы FairWork

Как добавить раздел на сайт на фреймворке Fairwork.


Если это обычная страница, то в рабочей директории кладём в папку folio (в ней лежат все простые текстовые страницы) файл, разбитый на 4 тэга: заголовок, текст, черновики и установки. Примеры в рабочей версии. Страницу нужно добавить в меню через веб-интерфейс. Опционально используется визуальный редактор для форматирования текста.


Если требуется добавление программной логики или обращения к базам данных*, то добавляются понятия модели, модуля и связанных функций.

Страница (или её псевдоним-алиас) посредством одного из реестров** связывается с моделью. Модель представляет собой файл, в котором хранится вёрстка страниц, обращающихся к данной модели, и обращения к связанных функциям: обращения проводятся с помощью тэгов особого вида. Тэги основной частью соответствуют названиям функций. Название функции также должно быть в особом реестре, иначе функция обрабатываться не будет. Наиболее общего назначения функции хранятся в отдельном файле в каталоге ядра системы. Если нужны специфические функции, они хранятся в отдельных файлах-библиотеках во вложенной директории, указания на включение этих файлов осуществляются в моделях при помощи особых тэгов, а названия функций хранятся в том же реестре.

Управление данными осуществляется через веб-интерфейс посредством встроенной системы администрирования (опционально, но по умолчанию запароленной). Есть файл, подгружающий модули, связанный с адресом, страницей и моделью, а есть модули, каждый из которых отвечает за частные задачи.

Для общих задач (управление реестрами, пользователями, страницами, файлами, меню, новостями и блогами, моделями, статистикой и т.п.) уже существуют встроенные модули. Модуль можно создать самому и положить в особую директорию внутри ядерной, внести его название в особый реестр модулей и работать с ним. Он станет доступным только через систему администрирования, права на него автоматически получит Главный администратор, а для тех пользователей, которым можно будет работать с данным модулем, администратор должен дать права на его использование через редактор реестров.

С одной моделью может быть связано бесконечное количество страниц. Неважно, являются ли страницы частью одной иерархии вложенности или нет (можно указывать, будут ли все вложенные страницы связаны с той же моделью, что и главная по отношению к ним). Можно создавать модель, комбинирующую существующие; в этом случае только важно указать включения нужных библиотек функций.


Резюме. В общем случае, если требуется программная логика, то выстраивается следующая цепочка: файл страницы (или его псевдоним) — модель — библиотека функций. Связывание с моделью и включение библиотек происходит через реестры.

Осуществлено полное разделение на 4 компонента: содержимое (страницы, базы данных), вёрстка (модели), дизайн (CSS и графика), программная логика (библиотеки функций, ядро системы).


_________


* Базы данных XML-ориентированные или обычные. В этом случае текст хранить в файле страницы необязательно, тэг можно оставить пустым.


** В системе присутствует несколько маленьких текстовых реестров, отвечающих за соответствие одних данных другим или за наборы разрешённых и запрещённых элементов. Пользователи и их привилегии тоже хранятся в реестрах.

Fairwork

В основном я закончил свой фреймворк.

Какие в нём особенности:


1. Полное разделение (а) содержания, (б) дизайна, (в) вёрстки и (г) программной логики. Содержание может храниться в текстовых файлах (особый формат с 4 тэгами), в БД разного типа (в т.ч. вида XML), в реестрах (редко).


2. Для того, чтобы добавить страницу на сайт, достаточно создать текстовый файл и положить его в нужную директорию. Страницу можно связать с моделью. Модель, с одной стороны, отвечает за вёрстку (т.е. разные разделы можно связывать с разными моделями, и они могут выглядеть по-разному), а с другой стороны, содержит тэги, вызывающие программную логику. В самих моделях нет программного кода, только разметка. Но в эту разметку можно включить тэги вызова функций; в этом случае название функции надо внести в особый системный реестр. Есть набор заданных моделей, но при желании можно создать свои модели, включив туда вызовы разных функций, можно комбинировать их (например, включая часть новостей на главную сраницу, чтобы ссылки вели на новостную).


3. Встроенная система администрирования. Обработкам сложных моделей назначены модули. Можно дописывать модули самостоятельно, можно исключать их из реестра, можно каждому пользователю назначать права на редактирование любого количества модулей (от 0 до всех). Кроме работы с моделями, есть управление пользователями, редактирование страниц и редактирование реестров. Всё, что угодно, можно поправить через реестры: настройки, состав пользователей, состав меню и т.п.


4. Интернационализация. Есть понятие языка по умолчанию, когда интерфейс и язык страниц определён изначально, и есть опциональные языки. По инициализации настройки (cookie или напрямую) активируется выбранный язык, если файл со словарём есть в системе. Если файла нет или в словаре нет термина, то термин берётся из словаря по умолчанию.

FairWork

Изображение

Фреймворк FairWork подходит к завершению. Мои новые пять сайтов, которые ожидаются в ближайшее время, будут построены на нём.

Сейчас импортирую блог iLyte в FairWork, всё происходит без особых моральных потерь с моей стороны.

Тагальский язык

С тагальским языком я познакомился лет в 16 в городской библиотеке в сборнике статей по лингвистической типологии.

Вряд ли я мог тогда подумать, что спустя 12 лет буду общаться с носителем этого языка и изучать его уже вживую, слыша речь на этом языке, вникая в особенности структуры языка на живых примерах, понимая, в чём отличие живого языка от официального. Спасибо Майре, с которой я познакомился на май.опера.ком — в свою очередь спасибо этому ресурсу и браузеру, благодаря которому у меня появились новые друзья.

Langs

Никогда не начинал учить столько языков одновременно.

Ньем Тин, влюблённый в свою девушку настолько, что в профиле её фото, а не его, и добрая Суан Фан учат меня вьетнамскому. Фан даже начала писать учебник на английском для иностранцев. Ньем Тин прислал мне кучу песен на вьетнамском языке. Посредником часто выступает vdict.com.

Девушка по прозванию Би обучает меня индонезийскому, ей чуть-чуть помогает Беатрикс. Дала несколько небольших уроков, и я стал вникать в структуру лучше. Как они все сокращают слова, это жуть. Надо хорошо знать язык, чтобы разбираться в бытовых сокращениях.

Невероятно позитивная Хани, она же Майра Бернадет Паредес, живёт на Филиппинах и учит меня тагальскому языку. Дала хороший ресурс: tagaloglang.com с аудиофайлами и сама записала для меня звучание нескольких фраз.

Кроме того, общаюсь на смеси английского и японского с Нао и токийкой из Индонезии Касандрой «Юмэ-тян» и понимаю большую часть из того, что они пишут на японском. Удобный словарь.

Красота.

Дальнейшее развитие блога

Работать ещё есть над чем, что перечислено в Справочнике, но сейчас о двух вещах: о многочисленных темах и об RSS.


Темы записей

Несомненно, надо, чтобы тем у записи могло быть несколько. В БД это сделать просто: в соответствующем участке писать идентификаторы тем через запятую.

При чтении для вывода атрибутов записи просто заменять идентификаторы на ссылки; при чтении для вывода по темам — разделять на массив и проверять наличие элемента.

При создании поста в интерфейсе по умолчанию один выпадающий список, рядом с которым системная ссылка: «добавить тему», открывающая новый список. Переписать фрагмент кода, отвечающий за запись, чтобы он брал не идентификатор, а массив идентификаторов, пусть даже из одного элемента, и, склеивая в строку, записывал.

При редактировании поста почти то же самое (та же передача массива). Но убрать ненужную тему можно будет выбором значения из списка: «удалить тему». Option без value не передастся и не создаст значения элемента массива. На тот случай, если дополнительная тема выбрана по ошибке, при создании записи тоже сделать строку в селекте: «не надо темы».


RSS

Думаю, нужно ли делать так, чтобы можно было читать чужие блоги, новости и т.п. у себя на блоге? Все ленты сейчас генерируют RSS, и технически несложно импортировать данные к себе на сайт. Вопрос в том, нужно ли это, если есть нормальные фидридеры?

Техническая реализация, по замыслу, следующая: вы находите интересный сайт с RSS, берёте его адрес и вставляете в особое поле в админке. Если там есть ссылки на RSS, все они добавляются в ленту и читаются через ваш дизайн. Ненужные ленты (например, если надоело читать или на сайте было несколько RSS, и добавились ненужные вам) можно будет удалить, сняв галочки напротив названия ленты в списке в той же админке.

Тут, правда, вопрос идеологический: iLyte задумывался как легковесный блог, а любая дополнительная возможность — это утяжеление. Тут 100 Кб не обойдёшься.

Решение может быть таким: модули. Модуль представляет собой 2 файла: исполняемый и административный. Административный (лежит в особой папке, читающейся на ходу) включается сервером в админку, и для этого нужно сделать возможность (чтение, разбиение на блоки, условие для включения).

Апоферор

Тебя поглотит нежность, едва коснёшься ты босыми ступнями влажного мраморного пола террасы, купаясь в нежном утреннем ветерке с реки...

Терраса увита розовыми цветами, ты вдыхаешь их пьянящий аромат, прежде чем кончиками пальцев коснуться колокольчиков у окна.

Две полунагие мулатки-девушки приходят освежить твоё тело невесомыми маслами, омыть твои ноги розовой водой, одеть в едва заметное платье, осыпать его двумя маленькими пригоршнями алмазной пыли, сверкающей на солнце, на волосы — таинственно сверкающие украшения, едва терпкий нежный аромат за мочки ушей, на запястья и на щиколотки, под умелыми ласковыми их пальцами у тебя розовеют скулы, алеют губы, ты спускаешься в сад, к автомобилю-ретро, сопровождаемая девушками, и уезжаешь...

...просыпаешься, с улыбкой потягиваешься. Джинсы, босиком на балкон, кофе, топик, сумочка, троллейбус... и милое воспоминание о сне.

Справочник по использованию блога iLyte

Движок больше не поддерживается, но его можно бесплатно скачать и установить. Справочник и основной ресурс тут: ilyte.erlang.com.ru


1. Основное

Блог iLyte является одним из самых легковесных механизмов построения блога с нуля. Суммарный вес файлов до использования не превышает 100 Кб, в zip-архиве — не более 35 Кб.

Доступные возможности: создание, редактирование и удаление записей; чтение, удаление, редактирование комментариев и авторский ответ на комментарии; создание и редактирование тем записей; экспорт записей в RSS, запрет комментариев, скрытие записей; работа с черновиками; работа с файлами; настройка (в т.ч. редактирование CSS); поиск по дате и темам.


2. Установка

Для установки блога необходимо распаковать zip-архив (будет доступен для скачивания после релиза). В файле bricks/prefs.php внутри тэга serveraddr указать точный путь от имени протокола http до корневой директории для блога. Все файлы и папки скопировать в ту директорию, которая будет являться корневой для блога. Это необязательно корневая директория сервера. Если сервер под управлением Linux или другой Unix-системы, нужно дать всем директориям и файлам внутри них права 777; файлам вне директорий изменять права не нужно. Затем зайти на администраторскую страницу с паролем 123 и в настройках сменить пароль и отредактировать информацию.


3. Настройка дизайна

По умолчанию в дистрибутив включён стилевой файл. Его можно отредактировать заранее, а можно в онлайн-режиме через настройки. Изображения к новому дизайну можно загрузить через файловый менеджер (раздел «Файлы» сверху); под каждым загруженным файлом есть его адрес.

Схемы идентификаторов и классов:

главная страница

страница с записью

страница-рубрикатор


4. Публикации

Публикация записи является основной возможностью, и при входе на администраторскую страницу сразу загружается окно для новой записи. Для облегчения последующего поиска следует выбрать тему для записи; если тема ещё не создана, её нужно создать в пустом текстовом поле справа, сохранить обновлённый список тем, а затем приступить к написанию поста. (Впрочем, при редактировании записи тему можно сменить.) Запись можно опубликовать сразу, а можно сохранить в черновики, не публикуя. Чтобы найти сохранённую в черновиках запись, следует выбрать возможность «Правка» и в выпадающем списке после месяцев выбрать «черновики». Любую запись, в том числе в черновиках, можно отредактировать и удалить; если к записи есть комментарии, появляется возможность работы и с ними. В общем случае старую запись можно найти, выбрав год и месяц. При публикации из черновиков запись удаляется из этого раздела и появляется на главной странице сайта. Запись можно закрыть (на время или насовсем). К записи можно прикрепить изображение, которое поместится перед текстом записи. Ни заголовок, ни текст, ни изображение не являются обязательными компонентами.


5. RSS

При публикации записей обновляется канал RSS, который носит то же название, что и блог. Он построен по правилам RSS 2.0, что позволяет указывать его в качестве источника для импорта на другие блоги: достаточно указать адрес http://адрес_блога/bricks/rss.rdf. В настройках можно запретить экспорт записей в RSS совсем; можно запрещать экспорт RSS для каждой конкретной записи. Если запись публиковалась как закрытая, она никогда не будет помещена в RSS, даже при открытии. При публикации из черновиков запись экспортируется, если явно не запретить это.


6. Поиск записей и комментарии

В настоящее время поиск записей производится по темам и датам с помощью ссылок на всех страницах. В дальнейшем планируется текстовый поиск.

Комментировать запись можно, если комментарии не запрещены. Все комментарии владелец сайта может изменить или удалить, если посчитает нужным. Для публикации комментария обычному посетителю следует ввести проверочное слово.


7. Настройка

Кроме CSS и дополнительного текстового блока на главной странице можно настраивать некоторые компоненты сайта: заголовок и подзаголовок, количество постов на главной странице, запрет или разрешение комментариев, RSS, визуального редактора текста и уведомлений о новых комментариях на e-mail (тоже указывается в настройках), а также некоторые мелочи.


8. В будущем

Планируется разрешить комментаторам некоторое форматирование текста. Вероятно, можно будет подписываться на комментарии.

При создании записей будут доступны простые вставка аудио и видео.

Появится настраиваемый список избранных записей, который можно будет вывести в любом месте, например, в дополнительном блоке или в отдельной записи.

Свежие комментарии можно будет отследить в специальном разделе системы администрирования, а не получать на e-mail.

Хронофилия

Родившись из чрева осенних карнавалов беснующихся листьев, заплаканных витрин вышедших из моды магазинов, музыки, провожающей последние вагоны пыльных трамваев, взорвавшись пустыми листами бумаги с произвольными пятнами оранжевых чернил, не вдумываясь в смыслы светящихся ночами окон — уютно-малиновых, ностальгически-зелёных и устало-бледно-жёлтых,— возьми билет на поезд в своё прошлое, вернуться на два или три года назад.

Милая усталая русоволосая диспетчерская объявит посадку, попросит провожающих не вскрывать вены времени и раствориться в кофе будней.

И когда перрон опустеет, а поезд глубоко и тёмно вздохнёт, чтобы сделать первое движение туда, откуда он уже давно приехал, ты скомкаешь билет, вспомнив, что на станции назначения тебя не ждут слёзы с привкусом расставания навсегда. Вспомнив, что, когда ты выйдешь на конечной, встречать тебя будут не стайки щебечущих новостей, а стайки пыли вокруг ног. Вспомнив, что дни на станции назначения слиплись в один большой серый камень, а ночи не были заполнены даже ожиданием. Вспомнив, что ничего не было. Ничего и никого.

...Через два или три года ты снова захочешь взять билет в поезд, едущий назад. Ты захочешь?

Опять про блог

Сделал тут несколько полезных вещей: во-первых, визуальный редактор для записей и комментариев (NicEdit выбрал как самый легковесный и при этом очень гибкий) — кому не нужен, может отключить в настройках,— а во-вторых, полное управление RSS: возможность полного отключения, возможность включать или отключать для каждой конкретной записи. 

Да. И у движка блога название есть: iLyte.

Расшифровывайте: тут как минимум 2 смысла.

Rainest

Не затяжные дожди, не пузырьки в лужах, что охлаждают босые ступни, не серые точки на белой юбке, а опрокинутый сверху океан, огромный и неожиданный, словно вдруг стала голая в большом центре, по рукам и открытой спине, вся вдруг как на дне, едва дыша, и волосы вдоль тебя, и лицо словно в слезах счастья, и грудь вдруг ярче под белой футболкой, совсем открытая и желающая, и босоножки в руках, и юбка страстно и тяжело по ногам, и узкими ступнями с наслаждением в лужи, тёплые и ненастные, и струи сверху слились в один поток — подними голову, и утонешь, и вся ты видна, как на ладони, одна на улице, все боятся дождя, и только ты его любовь и любовница, и только твоего тела каждую клеточку он ласкает ледяными жаркими губами...

Story V

Сейчас шёл, как обычно, на работу, а между двумя зданиями старичок закрывал железные ворота из прутьев. Такой скрежет, я представил, как бы это ночью жутковато было.

Особенно если бы ворота вдруг сами начали закрываться или открываться, с тем же скрежетом и без видимых причин.

* * *

— Как ты себя чувствуешь?

— Бомжевато...

Седая дама

Изображение

Так называется сорт розы.

© Фото — Sandakan.

Из рабочего разговора

roman сообщает:

слюш, если в ие логинишся под xxx@xxx.xxx (пароль 1) у него нотесов нет, по жопа наблюдаецца


Kirill Panfilov сообщает:

ща гляну


Kirill Panfilov сообщает:

на жопу


roman сообщает:

ну не то чтоб прям полная жопа


roman сообщает:

но жопа вобщем

Жара в Саратове

Жара сама по себе — ерунда.

Ну, мокрый, ну, печёт. Вытерпеть можно.

Но запахи... В такую жару они гипертрофируются.

Преющие растения. Мимо мусорных баков пройти невозможно. Смесь всего, что пахнет, даёт убийственный эффект.

А у меня ещё реакция на запахи почти как у Гренуя... Я их вижу :-)

Про деванагари

Gemini (10:27:27 16/07/2008)

было бы здорово, если бы он вставлял неразрывный пробел в таких цифрах: 45 000 и т.п.


Gemini (10:28:56 16/07/2008)

я вот думаю, может ещё надо, чтобы он сам отбивал пробелом три знака? но это не так важно, как неразрывный пробел...


фразу А где же богема? "В сентябре выявим творческую молодежь",

деванагер распознал как:

А где же богема?»В сентябре выявим творческую молодежь»,


+ в комментах к сайту и про величину текстового поля.


Обновления


Gemini (10:13:24 18/07/2008)

я вот несколько раз встречала в текстах вместо маркеров списков звёздочки... ну собственно списка как такого там и нет. А ещё точки, не знаю, как они правильно называются... такие большие точки

не помню, говорила уже или нет, но было бы здорово, если деванагер распознавал и такие символы и превращал их в списки


Хэнкок

Изображение

Из последнего, что я посмотрел,— самый клёвый фильм. С юмором, с симпатичными героями, без излишней трагедийной серьёзности, которая вообще-то часто присуща фантастике с супергероями. Хочу на диске купить его тоже.

Из переговоров с клиентом

Я: ...в процессе разговора у меня появилась ещё одна идея дизайна.

Клиент: Да, у меня есть такой дар: провоцировать творческие и гениальные идеи у собеседников.

Я: (мысленно падаю на колени и воздеваю руки к небу).

Фото

Изображение
Бывают такие фото, где, с одной стороны, ничего экстраординарного, а с другой — не оторвёшься.

Ещё фото

Предупреждение

При деинсталляции предупреждение: «После удаления данная программа станет недоступной».


На кого рассчитаны эти надписи?

Sun Hill by Yoru San

Изображение

Почему-то называется Evening sun hill, хотя я бы сказал, что это не Evening, а Lazy afternoon...

Что будет скоро

Думал, основное уже сделал. Нет, ещё идеи приходят. Несмотря на то, что блог минималистичный, есть ещё что дополнить.

Будет:

1. Возможность отключать RSS совсем.

2. Возможность отключать RSS для конкретной записи.

3. Возможность давать возможность использовать в комментариях тэги; набор определяется админом сайта.

4. Текстовый редактор NicEdit.

5. Возможность его отключить.

(Зачёркнутое реализовано)

Что добавилось

1. Проверка комментаторов на человечность. Спам достал.

2. Если блок с комментариями можно скрыть, то почему его нельзя показать обратно? Теперь можно.

3. Когда аплоадишь большие картинки, они выезжают за пределы блока с постом. Некрасиво. Теперь они в любом дизайне умещаются в колонку. А при щелчке на картинке она открывается в новом окне в реальном размере.

Вечернее платье днём

Из центра «Аврора» выхожу, а к машине спускаются две девушки, у одной почти вечернее платье с очень, очень открытой спиной. Сели в джип, она за руль; оказалось, не только спина открыта.

Представил, как сложно в таком платье ходить, чтобы неосторожно ничего не показать. Нужно быть очень, очень аккуратной. И думать исключительно о том, как выглядишь.

Рус. яз.

Слышал такое: «когда мне документы из БТИ пришло...»

Т.е. в среднем роде. Почему? Потому что последнее слово перед сказуемым такое?


Думаю вот ещё, когда в словарях слово «день рождение» будет среднего рода. Но пишущимся по традиции раздельно.


И я ненавижу, когда «кофе» согласовывают со средним родом!))))

Мелочи

Во фреймворк добавить средства закрытия паролем внутренних служебных страниц (не только админки).


Техническая реализация:

1. есть реестр разделов, которые запаролены. В реестре же можно указать роли, кому доступны разделы.

2. сценарий ядра проверяет страницу или раздел на наличие в реестре, если присутствует, подгружает модель авторизации, если нет, то саму страницу в модели.

* * *

Чего-то я сразу не сообразил на свой сайт поставить этот блог фрагментами в качестве новостей. Сразу бы решилась проблема с RSS, которое мне вечно лень обновлять.

Да, и ещё 2 вещи сделать:

1. настройка — создавать записи в RSS или нет,

2. в каждом посте по умолчанию стоит галочка: экспорт в RSS (или снята, если настройка такая). Если я пишу себе напоминалку и не считаю себя таким уж великим, то эту запись незачем экспортировать в RSS.

Простосочинённое

Кирпичик ночи припечатал улицы

застыли в мгле прохожих торопящихся

домой зайти и дверь скорее за собой закрыть

ся на четырнадцать замков увидеть

швецию россию телевизор сын кричит два ноль

ноль часов ноль ноль минут

ы не хватает чтобы всё успеть

да всё успеть и невозможно бегло

проглотить свой ужин и газету

скомкать и швырнуть во двор услышав

фанатов раздирающих ночную тишь

и благодать и сонное хмельное благодушие

быстрорастворимое во сне

с утра да-да ещё во сне готовить кофе

и на работу гнусно-грустные трамваи

и троллейбусы и ноги вдоль

задумчивого настроения и раскрытого

журнала что читает невидимка

в утренней толпе на солнечной скамье

по-моему девчонка после сессии

не в состоянии прийти в себя

листает бледные страницы

глупого журнала

утром

минуты чуть длиннее

если не бежать

а смотреть

по сторонам

можно присмотреться и увидеть

как на ветке

солнечная паутина собрала

три капельки росы

над окнами с сиреневыми шторами

но время девять

опоздать

нельзя

Беги

Интерфейсы

"вот у вас программа на незаполнение любого поля выдает сообщение "Ошибка, некорректные данные!". Вот что я, пользователь, должен делать, видя эту надпись?" - студент что-то невнятно бормочет про то, что надо ввести корректные данные - "а если я не знаю, что такое корректные данные? Мне останется только плакать!"


(по сообщению Minority)

Фреймворк

Задался целью написать свой фреймворк на PHP.

Основные задачи:

1. Полная разделённость программной логики, оформления и содержимого. Причём абсолютно всё равно, где хранить информацию: в БД или в файлах.

2. Специфическая и логичная структура директорий с системой запретов и переадресаций. Полностью перекроить структуру можно за 2-3 минуты, переименовав директории и изменив содержимое некоторых переменных (логичнее, конечно, константами пользоваться, чтобы область видимости была полная). Всё, даже слэши и расширения файлов, хранятся в переменных.

3. Связки: тэг — функция. То есть тэги, отвечающие за фрагменты программного кода, можно перетаскивать в шаблоне как угодно, программная логика от этого не страдает. Тэг не будет выполняться при отсутствии ссылки на него в реестре.

4. В шаблонах можно хранить как полные структуры страниц, так и фрагменты страниц (вид элемента меню, ссылка на главную страницу и т.п.)

5. Включение больших кусков кода можно делать парой тэгов: обновление содержания страниц, вывод всяких галерей, поиск и т.п.

6. Динамическая генерация меню и других вещей.

Некоторые вещи уже сделал, остальные обдумываются.


Продолжение следует...

Certain softness

...И ночь звенит своею тишиной,

на листьях заколдованных деревьев

волшебный блеск луны,

вода волнуется, и вольно влажный блеск ветвей

и сказочных волос подводных дев

мерцает в темноте,

и ночь сладка, и волны страсти и тепла

в твоих объятьях тают, как нежнейший шоколад,

ты вся горишь, ты пламенем объята, ты влажна,

твоё нагое тело гибко, словно ивы ветвь,

ты словно плеть неистовая бьёшься в страсти,

в изнеможении ты опускаешься на землю,

на влажную листву,

твоим внимавшую движеньям,

цветы покрыли твоё искреннее ласковое тело,

целуют пальцы твоих ног нежнейшие вьюнки,

ты спишь с улыбкой на лице,

нежнейшая,

властительница радужной воды любви,

ты спишь,

и ночь звенит,

и искры страсти в звёздном небе угасают,

нежно тая...


(10 июня 2008 г.)

Про IE

Читаю ответы Могилевского про IE 8 и понимаю, что Эксплорер никогда не будет оправдывать ожидания веб-разработчиков и любителей альтернативных браузеров. Выдержки:


1. Озадачен тем, что свойство закачки файлов такое популярное, потому что никогда больше, чем 1 файл никогда не закачиваю.

(И это разработчик говорит...)


2. Мне было очень любопытно узнать, что считается само собой разумеющимся, что IE - самый опасный браузер.

(Читать больше надо.)


3. Мы, наверное, можем выпускать браузер каждый месяц и добавлять понемножку чего-нибудь. Тогда это будет значить для разработчика, что он должен будет протестировать свою работу с Internet Explorer 6-7-8, 8.1, 8.2, 8.3, 8.4 - со всем, что выпущено во время всех этих релизов за последние несколько лет. Никто этим заниматься не хочет. Поэтому чтобы не сделать работу вэб-разработчиков сплошным кошмаром, мы принципиально не изменяем в заплатках ничего, кроме безопасности.

(А, это они, оказывается, о нас заботятся, о веб-девелоперах, чтобы мы, бедняжки, не тестировали сайты в субверсиях... Трогательно.)

RSS и статистика

Текст можно было бы и не писать: к блогу прикрутил RSS (Опера, Файрфокс, Сафари и ИЕ с 7 увидят в адресной строке значок) и простую статистику (да, я вас теперь считать буду). Дальше улучшать буду.


Ещё в планах: более аккуратный и мобильный код, тулбар для HTML в посты, подписка на комментарии, поиск по текстам, избранные записи и отслеживание комментариев иначе, кроме как через почту.


Блог работает везде, где есть PHP. Ему всё равно, на какой операционной системе и на каком сервере жить.

Drafts

Не знаю почему, но мне нравится английское слово “drafts” — «черновики».

Впрочем, знаю: люблю писать прозу.


Так вот, в блоге для автора появилась возможность писать запись очень долго, периодически сохраняя её, но не показывая миру: черновики. При написании нового поста можно отметить галочку «Сохранить в черновики, не публикуя»: в этом случае запись попадёт в скрытый раздел в админке, видный только администратору. Редактировать её можно на общих основаниях, изменяя сколь угодно долго.

Но при редактировании черновика доступна также галочка «Опубликовать запись и убрать из черновиков», функциональность которой понятна. Запись в этом случае датируется данным моментом и днём, попадает на главную страницу, и редактировать её уже можно из раздела месяца публикации. Атрибуты запрета комментариев и закрытой записи доступны и для черновиков, но будут иметь смысл только после опубликования записи.

Рабочее

Я: Нарисовал редактор, смотри.

Катя: Классно, только кнопка «Закрыть» меня смущает. Негармоничная она какая-то.

...

Я: Снизошёл к твоему гипертрофированному чувству прекрасного и переделал кнопку.

Семантическая вёрстка

Часто термин «семантическая вёрстка» используют не совсем корректно, в плане просто отделения формы от содержимого.

Допустим, есть страница, свёрстанная на блоках, а всё разукрашивание ведётся средствами CSS. Логика и оформление в этом случае разделены, но при одном условии: если идентификация блоков ведётся не по внешним признакам, а действительно по семантике.

Распространённая ошибка многих веб-верстальщиков — использовать идентификаторы и классы по их верстальным возможностям. Например, специальный блок для завершения группы плавающих элементов. Span, выделяемый красным цветом. Одинаковый класс и для эпиграфа, и для авторской подписи к материалу.

Чем это плохо: если возникнет необходимость изменить стилевое описание элементов, используемых на одной странице, то есть опасность, что «поедет» вёрстка или проявятся нежелательные изменения на страницах другого типа, где применены те же классы. (При редизайне установили для блока ширину в 415px вместо 512, но не проверили, что на одной из страниц из-за этого съёжились поля для ввода и лейблы, заключённые в блок с тем же стилевым идентификатором).


Рецепты правильной вёрстки:

1. Использовать только смысловые имена. Если блок для формы регистрации и блок для отправки писем похожи по каким-то признакам или на данном этапе вообще обладают одинаковыми стилями, лучше сделать два идентичных описания, но для разных ID или классов. В будущем вы обезопасите себя от багов в вёрстке, случившихся по недосмотру.

2. Если стилей получается слишком много, можно использовать несколько стилевых файлов: один основной, для классов и идентификаторов, встречающихся на большинстве страниц, остальные по разделам. Соответственно и подгружать нужные в соответствующих разделах (это легко поручить серверу).

3. Целесообразно использовать префиксы в именах классов и идентификаторов, например: regform_main, regform_input, regform_label, regform_announcement и так далее (помимо всего прочего, это создаст удобства при динамическом изменении стилей средствами JavaScript или серверного языка).

В стилевых файлах очень удобно снабжать комментариями разделы, например:


/* Main */
a { ... }
p { ... }

/* Forms */
input { ... }
input.abcd { ... }

/* IDs */
#abc { ... }
#pretend { ... }

Старайтесь использовать в стилевых файлах только латиницу во избежание проблем некоторых браузеров в кодировкой: если страница на UTF, а стилевой файл на Windows-1251 с использованием кириллических символов, то Internet Explorer (до 6 версии точно) просто проигнорирует эту стилевую таблицу.

И, конечно, нужно использовать последовательный стиль вёрстки и написания стилевых файлов: отступы, особенности имён, стилевые правила в столбик или в строчку...

4. Можно в качестве вспомогательных мер использовать возможности наследования, или вложенности, как некий аналог ООП.

Если я напишу:

div#register input {...},

то я буду точно уверен, что таким стилевым описанием я разукрашу только поля ввода, заключённые в блок с id="register", а не какие-либо другие.

А для всех полей ввода можно описывать общие правила, только если они точно и всегда будут соблюдаться на всех страницах сайта и соответствуют общему стилю.

5. И не нужно забывать про таблицы. Их некто не отменял, если они также используются семантически, то есть для табличных данных (статистика, результаты, цены и т. п.)

Трассировка

Трассированные фигуры людей с растровых изображений при некоторой доводке могут выглядеть более или менее пристойно.

Лица (полноцветные, не монохромные) обычно выглядят ужасно, потому что акцентируются все существенные детали лица.

Новости блога

Ко всему перечисленному сейчас в блоге появились такие вещи:

1. возможность отключения комментариев к конкретной записи или ко всем записям блога сразу. Если комментарии к записям уже были, они просто не видны: в любое время в настройках (при глобальном отключении) и при редактировании записи (при индивидуальном) можно включить их обратно.

2. закрытые записи. Открыть можно в любой момент. Это не черновики, это именно скрытые записи, которые по каким-то причинам нужно спрятать (вероятно, на время), но не хочется удалять. Система черновиков ещё в работе.

3. наконец-то появилась система редактирования комментариев. И удаления ненужных. И адресных ответов на конкретные комментарии от автора блога из админки.

4. поскольку комментарии можно запрещать, ссылки на них в случае запрещения не появляются над постом, поэтому сделал заголовки постов в ленте ссылками на конкретные посты. Впрочем, для блогов сейчас это уже стандарт.

5. из мелочей: выяснил, что настроечный файл можно вообще положить почти пустым на сервер (за исключением пароля к админке); недостающие тэги и настройки в него запишутся сами при редактировании.

Песчаная сказка

1.


Рука поворачивает ключ в замке. Полутёмный подъезд. Странные звуки снизу.

Ты проскальзываешь мимо теней, на улицу, а там вечерняя — уже ночная — свежесть, ты пробегаешь мимо людей и к набережной, к своему любимому месту одиночества.

Горят неяркие фонари.

По случаю дождя почти никого, только неясные тени вдалеке.

Ты спускаешься к самой воде, садишься и пробуешь ладонью воду.

Она прохладная, но для тебя одной чуть теплее.


По воде плывёт цветок. Ты дотягиваешься, подхватываешь его и любуешься каплями воды на нём, ещё свежем, в свете фонаря.

Потом кладёшь цветок на каменный парапет, разуваешься и несколько минут стоишь босая на каменных ступенях, ощущая освежающую прохладу.

Дотрагиваешься пальцами ног до поверхности воды, и нестерпимо хочется внутрь, в глубину.

Ты раздеваешься донага, беспечно сложив одежду на ступенях, и входишь одним движением в воду, которая мягко и плотно обнимает твоё тело...


И в самой глубине, когда ты касаешься дна, вода вдруг перестаёт держать тебя, и ты оказываешься стоящей на коленях на песчаном берегу, залитом солнцем, встаёшь, обнажённая, и видишь, как к тебе подходит огромный старик в синей одежде. Вокруг него целая свита полунагих девушек...



2.


...Фонтан брызг, сдавленное дыхание с прорывающимся криком, потоки воды из горла, носа и ушей, сквозь пелену беспомощный взгляд и руки, нащупавшие берег...

Ты без сил опираешься о ступени, едва заставляешь себя вылезти на твёрдую поверхность, долго сидишь, приходя в себя.

«Вот оно как... быть около смерти?» — Почему так ярко и солнечно показалось? — Мысли роем, беспорядочным ворохом в голове.

Ты с удивлением обнаруживаешь свою одежду нетронутой, чуть поодаль туфли: одна стоит, другая завалилась набок.

И цветок на каменном парапете.

Зачем это всё было? «Я чуть не утонула».

Завтра с утра экзамен. Зачем это всё было?..

...Ты уже одета. Джинсы, курточка. Туфли ты держишь в руке, чтобы не промокли изнутри. Босиком по прохладным идеально гладким плитам.

И вдруг ты с улыбкой замечаешь, что во второй руке несёшь цветок, спасённый из воды.

Ты украдкой оглядываешься и прикасаешься к нему губами.

За сегодняшний день только цветок получил твой поцелуй.

И за последний месяц, кажется.

Всё так грустно.

Совсем уже ночь, и ты обуваешься, потому что ноги замёрзли.

Дождь совсем закончился, и только чёрный асфальт блестит на дороге.

Фонари провожают тебя до дома и устало гаснут за твоей спиной.

Загадочно

На границе месяцев вместо 3 последних постов выводятся 4.

(Уточнение. Выводит заданное N количество записей и одну последнюю с прошлого месяца. Баг или выдать за фичу?)

Всё, поправил. Не ругайтесь.

(Глюк вдогонку: в админке при закрытии записи некорректно проставляются галки, если пост содержит изображение.)

Тоже поправил.


Я назову это преступлением... © Я назову это Monkey Bug. И в будущем буду тщательнее следить за разницей == и === и за корректным прерыванием цикла.


Апдейт. Блин, я понял.

Движок блога просто без ума от обезьян и не хочет их прятать.

Одноклассники

Одноклассники.ру и подобные сайты с точки зрения своего первоначального замысла хороши, но себя не оправдывают.

Да, находится одноклассник или однокурсница. Общаемся. Как дела, женился, книгу выпустил, бухгалтером после филфака работает, этого не видишь, нет, того не встречаю, как хорошо, что Одноклассники есть. После пятого-шестого письма общение обычно сходит на нет.

Ну, пока учились вместе, не было особых-то интересов. С чего им резко появиться сейчас?

После обычных любопытных писем (ах, вот что с тобой стало сейчас) уже особо и не поговоришь ни о чем.

Часто бывает, что случайный собеседник, не одноклассник совсем, находится, с кем и поболтать приятно, но на то аська или мобильник есть.

А так... ради пяти писем снова друг друга находить? Фигня всё это.

Сравнения

Мне всегда нравились сравнения вроде «спит как сурок», «бегает как савраска» и «ревёт как белуга». Но шедевром по выразительности я считаю «устала как росомаха».

Избранные записи

Это на будущее.

При создании и редактировании записей можно помещать их в реестр избранных записей. Таким образом создаётся что-то вроде навигатора или оглавления по важным записям.

В админке — лишняя галочка:


v располагается в избранных записях


В системной папке отдельный реестр.

А уже где выводить результат — второй вопрос. Можно отдельный тэг завести, который будет заменяться на включение файла.

Сводки по блогу на данный момент

В блоге уже есть:

— работа с записями: удаление, добавление, редактирование (все компоненты: заголовок, текст, тема, иллюстрация)

— закрытые записи, причём закрыть и открыть запись можно в любое время; при выводе списков записей для удаления и редактирования закрытые записи выделены

— темы (добавление, редактирование, удаление, применение к записям при написании и при редактировании)

— возможность обрезать текст записи на главной странице в любом месте

— лёгкая смена дизайна при знании CSS

— возможность достройки сайта с использованием текущего шаблона или без него

— файловый менеджер (позволяет редактировать все директории, кроме системных: создавать и удалять директории и файлы, файлы с указанием размера и ссылкой для просмотра)

— редактирование настроек и смена пароля через систему администрирования

— система администрирования — отдельный файл, авторизация в нём не влияет на внешний вид блога

— редактирование CSS через систему администрирования

— редактирование дополнительного информационного блока с произвольным содержимым через систему администрирования

— настройка количества записей на главной странице

— настройка уведомлений о новых комментариях

— возможность использования включаемого файла на главной странице основного сайта (превращение в новостную колонку или встраиваемый блог)


В разработке:

— адресные ответы на комментарии

— вывод последних комментариев, возможность очистить список

— запрет комментариев (к записи или ко всем записям сразу)

— черновики записей (сохранение в черновики и публикация из черновиков)

— RSS

— возможность переименовывать все системные файлы и директории, назначать любые расширения файлам без ущерба для сценариев

— статистика

— возможность быстрой вставки тэгов (toolbar)

Мысли вслух

Никто ничего не успевает, потому что все стремятся успеть.

Не сделать, а именно успеть сделать.

Дизайн блога. Разное

Дизайн такого блога менять очень просто, если знать язык CSS.

Собственно при разработке схемы дизайна достаточно разработать набор CSS-правил и подготовить изображения. Чтобы периодически менять дизайн, изображения лучше сложить в отдельную директорию вроде design555, которая будет находиться в директории files (в которую можно загружать файлы посредством админки). В стилевом файле адресация изображений будет в этом случае такая:

files/design555/изображение.jpg

Загружаем изображения, посредством админки обновляем стили (сам стилевой файл никуда не надо закачивать, достаточно скопировать его содержимое в специальное поле и сохранить изменения), и новый дизайн применён.

Сама вёрстка блочная, разбита на несколько «дивов» со значащими именами. Очевидно, я напишу спецификацию для разработчиков дизайна.

Дизайн админки менять можно, но только руками и при необходимости.


Недокументированная возможность.

Если в корневой директории блога положить новую директорию, она станет видна через встроенный файловый менеджер, и туда можно класть HTML-страницы, скрипты и что угодно, расширяя возможности блога. Никто не запретит вставлять начальный и конечный файлы шаблона, если это PHP-страницы, и дополнительные страницы окажутся построенными на основном дизайне блога.

Поля загрузки файлов

Вот никогда не было у меня такой проблемы: оформить поля загрузки файлов (которые input type="file") специфическим образом — сегодня пришлось.

Дело в том, что браузеры почти не позволяют контролировать внешний вид этих элементов: в Firefox даже нельзя увеличить ширину этого элемента (собственно, если бы можно было, проблемы не возникло бы), а в Safari они выглядят не как поля, а как кнопки с текстом рядом.

Задача была такая: сделать поле тянущимся, а кнопка должна была быть с графическим фоном.

Выход нашёлся такой: кладём input в div с position:relative без точных значений и делаем input полностью прозрачным. Сверху кладём графическую кнопку, позиционированную справа, но с z-index меньшим, чем у input. Т.е. поле для загрузки прозрачно, невидимо, но оно сверху, так что на кнопку можно нажать, хотя создаётся иллюзия, что жмём на графическую кнопку. Слева располагаем обычное текстовое поле нужной ширины, а по onChange записываем в него содержимое прозрачного поля.

В старых браузерах, конечно, каша получится. А для закоренелых пользователей Safari — непривычный интерфейс.

* * *

Идет третий этап завершения продолжения окончания начала установки Windows.

Саратовская погода сегодня

Изображение

За предоставленые изоматериалы спасибо Елене Стрелковой.

Г. Сапгир, «Урок»

Там, где гуляют дикие звери,

В чаще дремучей, в темной пещере

Старый Разбойник учил сорванца:

— Слушай, о сын мой, слово отца!

Если ты волком вырастешь сдуру,

Охотник придет и сдерет с тебя шкуру!

Если ты станешь овцою, тупица,

Свяжут из шерсти твоей рукавицы.

Если ты станешь трусливой собакой,

Палкою будет лупить тебя всякий.

— Кем же мне быть? Объясни наконец! —

Просит Разбойника сын–сорванец.

Тот наградил подзатыльником сына:

— Будь человеком! Понял, дубина?

С добрым утром!

Пожелание «С добрым утром!» в отличие от простого «Доброе утро!» несёт оттенок праздничного пожелания.

Поэтому с утра хочется улыбаться.

Я так думаю!

Сам себе конкурент

Изображение

Так получилось, что я сам себе конкурент: делаю вёрстку для сайта блогового сервиса в компании, где работаю, а сам при этом пишу движки для блогов собственного производства.

P.S. Картинка как раз из вёрстки. Это Phalenopsis, авторские права на фото принадлежат Ialanta.

Jpngif

Раньше мечтал о таком графическом формате: jpgif. Сейчас требования возросли. Нужен формат JPNGIF.

Параметры:

— высокая степень сжатия без потерь,

— поддержка анимации,

— поддержка корректной полупрозрачности,

— matte, самостоятельно адаптирующиеся к фону.

Ну, и на всякий случай поддержка звука и обработка событий мыши.

Глюки

Эксплорер думает, что margin — это padding. Отсюда и разница в интерпретации блочной модели по сравнению с Оперой и ФФ. Да и всеми остальными браузерами.

И ещё ИЕ понимает dotted как dashed, если width меньше 3px.

* * *

Школьницы в шортах бегают по крышам гаражей.

К дождю?

Дивы

При всём моём уважении к возможностям табличной вёрстки мне всё больше нравится верстать блоками и CSS.

Вывески

Люди, называя компании, не дружат с головой.

И дизайнеры тоже не дружат.

Вот иду и встречаю такую вывеску: «КОМ ТЕЛ». Да ещё части названия написаны одна под другой.

Ребята не понимают, что это читается не как КОМмуникации и ТЕЛефония, а как комок тел — последствия стихийного бедствия или процесс группового занятия любовью.

Шорломит, гроссуляр и альмандин

...встречаются красный, желтый, черный гранаты. У каждого свое название. Черный — шорломит, желтый — гроссуляр, красный — альмандин. А еще есть гранат спессартин, в химический состав которого входит марганец, и гранат пироп, включающий магний...

Из Диккенса

«...двоюродная бабушка мистера Уопсла наконец победила в себе прочно укоренившуюся привычку жить...»

Предупреждение

На корпусе университета большой плакат: «Опасная зона!».

Недалеко, конечно, стройка, но это не портит впечатления.

Доброе утро всем!

В нашем офисе

На двери офиса фирменная наклейка: Microsoft Office (да, да, сюда забегает Б. Гейтс). На микроволновке: Windows Vista (хотя работает она достаточно живо). Наконец, наклейка на бачке унитаза: I’m ready...

Чем всё кончится?

Изображение

Габриела Санчес. Картинка называется «swim little ones, swim!»

Разные стороны

С одной стороны, всем добра желаешь. С другой — у каждого же свои понятия о добре. И то, что ты делаешь, может показаться неправильным, навязчивым, непредусмотрительным.

Пушной зверец...

Отчётность

Ненавижу отчётность. Мне проще сделать текстовый файлик, положить его на рабочий стол и делать всё по пунктам.

А не так: занести распорядок своего дня в календарь, назначить проекты, завести баг репортинг, получать уведомления по почте, после работы отмечать, что сделано, по какому проекту, в системе отчётности и в багтрекинге... Я понимаю, что всё это нужно для организации, но муторно.

Dawn Edwards

Изображение

Title: Pretty in pink

Style category: Fractal

Medium category: Computer Art

Искусство

Изображение

Гэри Картрайт написал эту картину, используя собственную кровь, после сердечного приступа и, я так понимаю, операции. Она стоит 2,5 тысячи фунтов стерлингов.

По этому блогу

Вот так за 1,5 часа сделал и настроил себе отдельный блог. Сделал на основе новостного модуля, который ещё чуть ли не год назад написал.

Поместил на субдомен, но можно класть и в любую папку на сервере, работать будет так же корректно.

Системные требования: PHP не ниже версии 4.

Базы данных и mod_rewrite не требуется.

Подходит для простеньких блогов или новостных лент.

Поддерживается загрузка изображений на сервер.


Сделаю ещё более аккуратную вёрстку, мелочи подправлю, и почти готово.

Вынести в отдельные переменные начальные даты публикаций и адреса страниц, чтобы названия страниц тоже можно было менять. Вероятно, в отдельный настроечный файл.

Шаблоны тоже неплохо было бы сделать. В этом случае можно настроить только шаблон.

В будущем поиск прифигачить.


Поискать, где слово «новости» встречается, на «записи» заменить.

К Drum Bun

Обязательно сделать возможность загрузки страниц (для разных типов привилегий либо разрешать, либо запрещать).

Придумать, статические и динамические страницы будут вместе или по отдельности (динамические — типа модули, вероятно, логично отдельно, с созданием для сложных модулей своих директорий). Придумать, как подцеплять модули, а статическим страницам сделать проверку на существование именно в этой папке при формировании ядерным сценарием той страницы, что пойдёт в браузер.

Офис-ФМ

Изображение

Набрёл на любопытное офисное радио: Office-FM