Записи сентября 2009
Автоувеличение 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;
}
Получится поле в три строки, которое будет вести себя так, как нужно:
