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

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

Записи июня 2008

Мелочи

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


Техническая реализация:

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. И в будущем буду тщательнее следить за разницей == и === и за корректным прерыванием цикла.


Апдейт. Блин, я понял.

Движок блога просто без ума от обезьян и не хочет их прятать.

Одноклассники

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

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

Ну, пока учились вместе, не было особых-то интересов. С чего им резко появиться сейчас?

После обычных любопытных писем (ах, вот что с тобой стало сейчас) уже особо и не поговоришь ни о чем.

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

А так... ради пяти писем снова друг друга находить? Фигня всё это.

Сравнения

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

Обновление: «исцарапал, как акула доску сноуборда».