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

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

...написанный на 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 году вышло её переиздание под названием «Создание веб-сайта от замысла до реализации» — оба в московском издательстве «ДМК Пресс».

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