Позднее Ctrl + ↑

Муз-ТВ: Хит-парад «20»

Продолжаю разгребать архивы эфирной графики Муз-ТВ.

Каждую неделю на Муз-ТВ выходил хит-парад «20». Заставка:

Отбивка:

Отбивка с названием очередного клипа:

Анонс программы (Аврора):

Но поскольку крутизна эфирной графики Муз-ТВ не знала границ, и можно было всё, иногда анонсы были такими (Татьяна Плотникова):

См. также:

Муз-ТВ: «Сиеста» и «Вечерний звон»

Когда-то я начал выкладывать заставки Муз-ТВ времён начала 2000-х:

Но потом что-то перестал. Надо бы подлить ещё. Кто, если не я.

«Сиеста» — дневной эфир с живыми ведущими:

Охренеть же, как клёво глючили листики.

Анонс программы в рекламном блоке:

«Вечерний звон» — вечерний эфир с ведущими и звонками зрителей. Заставки были разные в разное время года. Зима:

Осень:

Лето:

Анонс:

В новогоднюю ночь ещё был «Новогодний звон», такой:

Зализняк о происхождении слов

Посмотрел ещё лекцию Зализняка. На этот раз — о происхождении слов:

Что я себе отметил:

  • 37:18. Можете посмотреть, что произошло со словом augustus, чтобы оно на протяжении всего лишь пятнадцати веков превратилось чисто фонетическим путём во французское слово «у» (août).
  • 42:27. Ну и, пожалуй, один пример вам понравится своей действительно большой эффектностью. Английское слово each, каждый. На уровне древнеанглийском это ǣg-hwilc. И тут всё-таки приятно мне вам выписать ещё более глубокий уровень, на этот раз уже прагерманский, который мне придётся пометить звёздочкой, тем не менее вполне надёжно реконструируемый: *aiwa+ga+hwi-līk-az.
  • 1:04:42. Но например для окончаний склонения прекрасно прослеживается и для индоевропейских языков, и, скажем, для угро-финских языков, что в тех случаях, когда удаётся увидеть, откуда взялось окончание, оно оказывается первоначально отдельным словом [...] Кто занимался венгерский языком знает, что падеж инессив (нахождение в чём-нибудь) по-венгерски будет иметь окончание -ben / -ban. Ház — дом, házban — в доме. Но до сих пор в венгерском языке существует слово ben(t?) со значением «середина», «внутренность».
  • 1:09:55. «Мужик», например. Кому из вас кажется, что мужик — это маленький муж? Он совсем не маленький, наоборот, очень даже грубое, крупное такое, сильное существо. Однако ж исторически это уменьшительное от слова «муж»
  • 1:10:36. Например, слово «овца». Мы же совершенно не чувствуем, что овца — это какое-то уменьшительное. А между тем, там уменьшительный суффикс -ц-. Латинское ovis, овца, никакого эквивалента для „ц“ не содержит, там ov просто название овцы. Ясно совершенно, что и в славянском когда-то овца называлась просто «овь». Не осталось от этого слова ничего, вы сейчас бы его не поняли даже, если бы сейчас кто-то стал «овью» называть овцу [...] Мы удовлетворяемся словом «овца». А белорус не удовлетворяется. В белорусском языке нет слова «овца». Белорус овцу называет единственным возможным способом: авечка.
  • 1:12:39. Откуда взялось soleil? При том, что по латыни это sol. Soleil — это продолжение формы soliculum в вульгарной латыни — солнышко.
  • 1:19:28. Вот какое-нибудь я вам могу написать типичное китайскообразное по структуре английское предложение: we can walk down to the city hall. Вполне китайскообразная фраза. В чём её китайскообразность? В том, что у вас каждая единица не имеет никакого телесного окончания [...] Вместе они сопоставлены между собой и образуют фразу. С помощью порядка слов мы прекрасно понимаем, что здесь должно было быть выражено.
  • 1:21:03. А вот пример языка санскритского состояния. Допустим, я напишу так: со-вет-уj-у в-ам по-ех-ах-ть от-дох-ну-ть. Каждое слово, использованное здесь, делится на морфемы с собственным значением. Каждое слово содержит какое-то число морфем, иногда довольно большое. Так что, конечно, русский язык из нынешних является одним из лучших представителей этого типа.
  • 1:31:53. То, что иногда это пишется по-разному в некоторых глаголах (je fais, tu fais, il fait), не меняет того, что на уровне фонетическом в современном французском языке практически все глаголы, кроме вспомогательных (je suis, tu es, il est), имеют это свойство, что всё единственное число одинаково. А пишется по-разному. Je prends, tu prends, il prend пишется по-разному, но, тем не менее, это совершенно одно звучание.

Из зала спросили, что значит этот *aiwa+ga+hwi-līk-az:

  • 1:46:15. Ну, это не так просто. Aiwa первоначально — это тоже самое слово, что век, то есть «всегда». Дальше это уже в готском означает «всегда», «все» — некое обобщающее слово. Ga — это приставка та же, что в немецком ge-, то есть первоначально это эквивалент латинского con-, то есть с-: с-делать, ge-macht и так далее. То есть некоторый в данном случае трудноустанавливаемый оттенок некоей совершенности. Hwi — это «как», «каким образом». Līk — это лик, образ. Hwi+līk — это «какого образа». Значит «всякий, какого образа», вот примерно из каких структур получается each, каждый. «Всеобразный».

См. другие лекции:

Эгея v2960

С момента выхода 2.5 (v2953) я потихоньку исправлял разные мелочи и заменял на сайте движка дистрибутив. Сейчас там уже лежит сборка v2960 (по ссылке же и инструкция по обновлению).

Вот что изменилось и исправилось:

  • Лайкли обновились до 2.1.3, где починили счётчик Фейсбука;
  • картинки-превьюшки, отображаемые в Черновиках и в редакторе под заметкой, стали ретиновыми (заодно дизайн черновиков немного улучшился: превьюшки теперь стоят под обрез);
  • в одном из файлов шаблонов по ошибке использовался короткий тег ПХП (short_open_tag), хотя я заявлял совместимость с отключенными короткими тегами;
  • заработали неработавшие иногда поле тегов, Энтер в названии заметки и подвисание карандашика в Хроме;
  • по ошибке у ответов на комментарии звёздочка ставилась в зависимости от важности комментария, а не ответа;
  • инсталятор выводил в заголовок окна диагностические сообщения;
  • максимальный размера загружаемого файла увеличился до 256 мегабайт.

Склонировать структуру папок и файлов

Мне нужно было скопировать структуру папок и файлов с одного диска на другой. Чтобы всё лежало так же по папкам, под теми же именами, но каждый файл весил 0 байт.

Смысл этой операции вот в чём. Изредка мне нужно найти что-нибудь среди файлов десятилетней давности. У меня скопилось несколько жёстких дисков с разными архивами. И есть специальная коробочка, в которую можно вставить жёсткий диск и подключить по УСБ. Меня бесит, что я порой с третьего раза нахожу, на каком из них лежит то, что мне нужно.

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

Пришлось попотеть, чтобы понять, как это сделать. У меня получилось так:

cd папка_которую_клонируем
find . -type d -print0 | xargs -0 -I {} mkdir -p папка_куда_клонируем/{}
find . -type f -print0 | xargs -0 -I {} touch папка_куда_клонируем/{}

Сложность была в том, что find возвращает список найденных файлов с пробелами в именах, и когда такие файлы передаёшь куда-то ещё, всё взрывается. Пришлось просить find в конце имени каждого найденного файла ставить символ 0 (-print0), а потом с помощью адской команды xargs это разбирать и скармливать в качестве аргументов другим командам. Учитывая, что я раньше ничего сложнее apachectl restart не писал, это была жесть.

Добавлено через полчаса: Читатели рассказали мне про -exec

Аудио по четвергам: «Индиго»

Это отличный трек Джерома Исмы-Эя «Индиго» (2005):

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

Как я узнал, что domenica — это воскресенье

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

Так вот. Есть такая дурацкая, но клёвая песня:

Самый кайф после 2:30, но сейчас нас интересует не это. В 1:13 там начинается какой-то текст про дискотеку. Мне в общем-то пофиг на текст, но когда я на третий раз услышал «Domenica... a la discoteca» у меня щёлкнуло: «А, так domenica — это воскресенье? Это ж почти как dimanche по-французски».

И тут я понял, о чём эта песня. Песня-разгадка (ещё клёвее):

«Lunedi sera, la discoteca» — ну блин, мог бы и с первого раза понять, учитывая, что lundi — это понедельник по-французски, а buonasera — добрый вечер по-итальянски.

Слова weight и height

Часто веб-разработчиков ставит в лингвистический тупик такой ЦСС-код:

font-weight: normal;
line-height: 1.4em;

Запомните: слово height читается «хайт» несмотря на то, что слово weight читается «вейт».

Как работает мой сайт

Мой сайт работает на моём самописном движке на ПХП (единственное исключение — раздел «Блог», о нём в конце).

Файлы страниц сайта лежат в папках, соответствующих урлам разделов, например страница про Ангстрем лежит на сервере под именем .../www/projects/angstrom/angstrom.php. Задача этого файла — сгенерить ХТМЛ смысловой части этой страницы.

Метаданные

Рядом с файлом имя-папки.php должен лежать файл метаданных _имя-папки.php. Для Ангстрема он выглядит примерно так (выкинул часть полей для простоты):

<?php return array (

  'logo' => 'angstrom',
  'value' => '20140201',
  'title' => 'Ангстрем', 

  'x-showcase-title' => 'Ангстрем, конвертер всего',
  'x-copyright-years' => '2014...',

  'languages' => array (
    'english' => array (
      'title' => 'Ångström',
      'x-showcase-title' => 'Ångström, the converter',
    ),
  ),

) ?>

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

Там умная и гибкая система, которая позволяет делать отличия между сайтами на разных языках (ilyabirman.ru и ilyabirman.net) только там, где они нужны: домен, текст, правила типографики, твиттер-акаунт для шаринга; но всё остальное хранить в одном месте один раз.

Самое главное в файле метаданных — это поле logo. Это постоянный идентификатор страницы, который не поменяется, если я вдруг решу перенести её в другую папку. На нём завязаны многочисленные макросы. Например, на главной у меня есть этажик, где я показываю разные проекты в горизонтальной прокручиваемой полосе — «витрине».

Вот примерный код, который её рисует (подсветка синтаксиса глючит):

<?php $showcase_elements = array (
  'angstrom',
  'moscow-metro-multiplication',
  'therules-2-for-ios',
  'chelyabinsk-trams-2015',
  'emcee',
  'train-thirteen',
  'wireless-dj',
  'snooker-results-display',
  'moscow-metro-poster-vdnh',
  'forebruary',
  'moscow-metro-nanomap',
); ?>

<?php foreach ($showcase_elements as $showcase_element) { ?>
  <div class="b-showcase-element" style="width: 160px">
    <div class="b-showcase-element-image-wrapper">
      <div>
        <a href="<?= HREF ($showcase_element) ?>" class="nu">
          <img
            src="<?= FOLDER ($showcase_element) ?>i/icon-160@2x.png"
            alt="<?= strip_tags (TITLE ($showcase_element)) ?>"
            width="160" height="160"
          />
        </a>
      </div>
    </div>
    <div class="b-showcase-element-title">
      <a href="<?= HREF ($showcase_element) ?>">
        <?= EX ('showcase-title', $showcase_element)?>
      </a>
    </div>
  </div>
<?php } ?>

Макросы

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

  • HREF ($logo) возвращает полный урл страницы по её идентификатору;
  • FOLDER ($logo) возвращает путь к папке, в которой лежит страница;
  • TITLE ($logo) возвращает название страницы;
  • EX ($what, $logo) возвращает значение поля x-something из файла метаданных.

Я, как видите, использую EX и поле x-showcase-title для того, чтобы показывать особые заголовки в «витрине». Если я вдруг решу переименовать один из проектов и перенести в другую папку, и ещё сделать про него страницу на французском, чтобы она была доступна по адресу ilyabirman.net/french/обычный-путь-к-проекту — это займёт пару минут, не считая времени написания французского текста. При этому создавать папку /french/ на сервере и копировать туда все файлы не придётся — языковые элементы урла обрабатываются отдельно и на структуру папок на сервере не влияют.

Есть и другие макросы. CHILDREN вернёт массив всех дочерних для данной страниц. Например, в разделе проектов их список автоматически дополнится новым, если я создам подпапку со страницей нового проекта в ней.

А ещё у меня на страницах бывают переключалки между связанными страницами, вот, например, такой переключалкой провязаны несколько рассказов про Лондон. Это работает, потому что эти страницы связаны в одну группу через поле group в файле метаданных. Они при этом могут лежать вообще по любым урлам, их просто вернёт GROUPLINGS. Если одна из страниц группы окажется недоступна на одном из языков — не беда, значит не попадёт в список. Движок не станет генерить мёртвые ссылки.

Или вот есть ещё WITHIN, определяется так:

function WITHIN ($what, $id = false) {
  return AT ($what) or INSIDE ($what, $id);
}

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

Есть макрос LANG, который возвращает текущий язык. Его удобно использовать, если страницы на разных языках отличаются двумя-тремя строками текста. Но чтобы не писать сто раз if (LANG == ’russian’) { ... }, можно просто положить в папке два файла — angstrom-english.php и angstrom-russian.php, тогда движок сразу возьмёт нужный из них.

Ещё есть TAIL, OFFSET, SIBLINGS, NEIGHBOURS и всякие другие, которые позволяют компактно и внятно выражаться в коде.

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

<h1><?= TITLE ?></h1>

Шаблоны

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

Например, в подвале любого рассказа о поездке я даю ссылки на соседние. Их сколько нужно возвращает макрос SIBLINGS. Но я не копирую этот этаж из рассказа в рассказ — для этого у меня есть шаблон world-story, который применяется ко всем рассказам из поездок.

Шаблон может не просто завернуть страницу во что-то, но и как угодно её обработать перед использованием.

Вот начало файла .../www/world/london-2011-may/london-2011-may-russian.php:

Лондон — лучший город, где мне доводилось бывать.
IMG_0333.jpg Парламент и Биг-бен в Лондоне

Достопримечательностям здесь совершенно необязательно быть в поле зрения, чтобы было понятно, где ты находишься. Каждая деталь напоминает об этом:
IMG_0238.jpg Телефонная будка, почтовая машина и автобус в Лондоне

Похоже на текст из редактора Эгеи, правда? Потому что я тут использую Нисден — форматтер Эгеи. Шаблон world-story автоматически пропускает текст через него. Поэтому тут автоматически работает всякая резиновость картинок, фоторамы и всё остальное, и в результате сам собой получается рассказ про Лондон.

Блог

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

Мне надо, чтобы в блоге у меня использовался ЦСС с основного сайта, но всё же в нём есть несколько своих особенностей, поэтому напрямую я не могу залинковать тот же самый файл. Чтобы не носить общие для сайта изменения из одного файла в другой, я использую Галп, который автоматически собирает нужную версии ЦСС-файла для блога.

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

Это недокументированная функция, но по секрету скажу что там, где у вас в Эгее лежит папка /user/, у меня лежит папка /users/ с двумя подпапками. Да, Эгея умеет быть многопользовательской уже много лет! Только никому не говорите. Если серьёзно, это работает на костылях. Заранее говорю, что не буду отвечать на письма с вопросом «как мне сделать так же».

Ранее Ctrl + ↓