Графический редактор...
...написанный на 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.
Особенно стоит обратить внимание на фотоальбом.
FormSpring
Завёл себе анонимный опросник:
Соединение с базой данных на 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 году вышло её переиздание под названием «Создание веб-сайта от замысла до реализации» — оба в московском издательстве «ДМК Пресс».
В будущем я планирую выпустить книгу по вёрстке сайтов, книгу по растровой графике, учебник одного из любимых языков по своей методике и одну (или не одну) художественную книгу с красивыми иллюстрациями.


