Концовка за Сору сделана (ещё до ICFP), но она мне не очень понравилась. Сора была лучше, пока она была "просто подругой". Да и Цугуми куда адекватней себя вела в первой ветке.
Кстати, я засёк эпический обман со стороны этой... мелкой... "Пён-пён-такепён".... как же! Нечисто здесь.
Конкурс ICFP 2007 торжественно завершился. Команда, в которой я играл, EFG (Epic Fail Group, "команда эпического провала" ), в полном соответствии со своим названием, заняла почётное 64-е место из 869-ти.
Я к этой цифре отношения почти не имею, поскольку ничто из моих трудов (кроме, возможно, устных советов) так и не принесло команде ни копейки.
Да и вообще, единственное, что принесло нам копейку - это случайно обнаруженный внутри файла... (далее)впрочем, я забегаю вперёд, но это было единственным, за что мы получили очки. Здесь уже должно быть немного понятно, насколько сложным был конкурс.
Почти случайно получив грошовые очки, мы вышли в первую сотню. Потому, что порядка шестисот команд вообще финишировали впустую. Ну хорошо, не все участвовали - лишь порядка 350 команд пытались что-то сдать. Так что они участвовали наверняка, и это уже неплохая цифра.
А теперь подробнее.
Авторы ICFP обожают придумывать своим заданиям любопытные предыстории. Вот и на этот раз, случилось так, что на планету Земля из космоса грохнулся маленький Эндо расы Фуун. Тело Эндо совершенно не приспособлено к жизни в условиях ночи, дождя, гопников и химических удобрений. Ему хочется солнца, лета, девуш... ну и ещё он хочет быть не пришельцем, а коровой (чтобы переносить нашу гравитацию). Без всего этого он немедленно же умрёт, а чтобы этого не случилось, поломанный его корабль законсервировал Эндо, и пытается изменить его ДНК, чтобы, во-первых, превратить Эндо в корову, а заодно поменять ночь на день, дождь на солнце а гопников на девушек. Такая могущественная у Эндо ДНК.
Но батарейки корабля садятся, и ему не хватает времени модифицировать ДНК самому. Поэтому он посылает сигнал бедствия, который принимают организаторы ICFP, и решают выставить эту задачу на конкурс (вместо программирования сковородок, как они задумывали сначала, бла-бла-бла...).
ДНК фуунов изменяет фууна (и мир вокруг него) в два этапа: 1. ДНК компилируется в РНК. 2. РНК исполняется, и получается картинка.
Корабль передал организаторам ДНК Эндо (7 с половиной мегабайт). Если скомпилировать этот ДНК, получатся ночь и гопиники. Менять ДНК нельзя. Но можно дописать к нему что-нибудь, причём чем меньше - тем лучше (у корабля садятся батарейки от длинных ДНК).
Процесс превращения РНК в картинку несложен - по крайней мере, у нас проблем не возникло. Это просто написание интерпретатора семибайтных команд по отрисовке.
Вся закавыка была в первом этапе. ДНК превращается в РНК следующим образом: 1. Считывается закодированный в ДНК паттерн - кусок строки с "дырками". 2. Считывается закодированный в ДНК шаблон - кусок строки со "слотами". 3. Считывается ещё немного данных. Если они подходят под паттерн (то есть буквы совпадают с буквами паттерна, а там, где у паттерна "дырки", может быть что угодно) - всё, что прочитано, отбрасывается, а вместо этого к ДНК слева приписывается считанный шаблон, в котором "слоты" заполняются совпавшими кусками данных.
Например. Паттерн: (ABCD____EF) Шаблон: (TEXT * TEXT) Данные: ABCDKLMNEFGHIJKL Результат: TEXT ABCDKLMNEF TEXT GHIJKL
Примерно так, только раз в пять запутанней. После выполнения этих операций, догадайтесь, что?
Правильно - повторить. Примерно два миллиона раз.
Написать парсер этого чуда было несложно. Основная проблема была в скорости. Тупое "копирование" строк приводило к невероятно медлительной обработке, поскольку паттерны в большинстве своём были такие: AB__...(семь мегабайт пропусков)..._CD Соответственно, если паттерн совпадает, мы должны вставить его в шаблон. То есть, скопировать семь мегабайт данных в памяти. Один раз это, может, и ничего, но два миллиона раз скопировать по семь мегабайт - результата не дождёшься. А ведь это только одна компиляция, а в процессе поиска решения компиляции идут одна за другой.
Решение, которое пробовал реализовать я, сделано на связанных списках. Вкратце смысл его в следующем: мы работаем не со строкой, а с набором пар: ... (начало, длина) (начало, длина) (начало, длина) ... Когда мы пытаемся прочитать очередной символ, мы смотрим, какая пара у нас выбрана "текущей", и читаем из неё. Дойдя до её конца, мы переходим на следующую пару. В таком случае, чтобы "скопировать" семь мегабайт данных, достаточно просто найти их начало в этом списке, найти их конец, и скопировать только цепочку списка между ними (а она "лёгкая", там же нет данных - только указатели на них). Например: ... (начало1, 5 мегабайта) (начало2, 2 мегабайта) (начало3, 3 мегабайта) ... Копируем: ... (начало1, 5 мегабайта) (начало2, 2 мегабайта) (начало1, 5 мегабайта) (начало2, 2 мегабайта) (начало3, 3 мегабайта) ... Казалось бы, скопировано 7 мегабайт, но на самом деле мы просто сделали копию указателей на данные - а это примерно 32 байта.
Реализовывать эту гадость было ужасно неудобно (ДНК фуунов совершенно не рассчитывалась под такие извращения), но я, плакая от усталости, всё-таки сделал это. И что бы вы думали? Уже на двадцатой итерации длина цепочки ссылок была порядка нескольких тысяч элементов. То есть, длина цепочки росла даже не линейно. То есть, ДНК фууна устроено таким образом, что этот подход просто неэффективен. Он действительно чудовищно быстр на первых итерациях (где цепочка ещё маленькая), но с каждым следующим проходом получается так: 1. Была цепочка длины 3. 2. Скопировали, получили цепочку длины 6. 3. Скопировали её, получили цепочку длины 12. ...ну и так далее. При этом длина суммарных данных в цепочке близка к первоначальной. Когда мы работаем со строкой, мы тратим много времени на копирование символов, но в итоге строчка получается примерно того же размера, и доступ к ней очень быстр. Когда мы работаем с моим списком, мы моментально копируем огромные блоки, но ДНК написан так, что дробление информации на кусочки неограниченно растёт. В результате с некоторого момента всё работает ещё хуже, чем в "наивной" схеме.
Ну и как они предполагали решать эту задачу? (UPD: Оказывается, всё-таки можно сделать хорошую реализацию двусвязного списка. Ну что ж, значит я попросту облажался )
ДНК фууна был любопытен ещё и тем, что в нём скрывалась куча приколов. Например, добавив к РКН маааленький префикс из инструкции, можно было заставить его генерить не картинку "грустного Эндо около сломанного звездолёта", а инструкцию:
Если вы видите эту картинку, значит носитель этой ДНК потерпел крушение на неизвестной планете. Пожалуйста, ничего не трогайте в ДНК, и вызовите службу поддержки с Альфа Центавры.
Если вы совсем-совсем никак не в состоянии связаться со службой поддержки, используйте следующий префикс, чтобы получить руководство пользователя ДНК: [небольшой префикс]
Если носитель ДНК находится вдали от искуственных источников освещения, а естественный источник сейчас освещает противоположную сторону планеты, активируйте этот префикс, чтобы развернуть планету к Солнцу нужной стороной:
И самое главное: НЕ ПАНИКУЙТЕ
Ещё существовали префиксы на DNA Self-Test (картинка с текстом "Checking memory read... OK; Checking memory write... OK; Checking integer overflow... OK ", причём ДНК на полном серьёзе всё это тестировала, а в картинку выводились результаты тестов - 25 штук).
Самое интересное обнаружилось незадолго до окончания соревнования. Кое-кто из нашей команды нашёл в исходном коде ДНК строчку "Portable Network Graphics". Дампнув содержимое в файл, он убедился, что это действительно встроенный PNG-файл. В нём на белом фоне было написано: Human Audio follows.
И действительно, дамп следующего куска ДНК оказался wav-файлом. Голос в нём произнёс: "IICIFPCCI...." Похоже, это был ещё один префикс.
Единственная проблема со всеми этими префиксами, как я уже сказал, в том, что за отсутсвием эффективного компилятора большинство из них просто невозможно было запустить. Не говоря уже о, собственно, сборке Эндо (ведь именно в этом было задание). Для сравнения, полная сборка Эндо - два миллиона итераций, тогда как парсивший один из префиксов всю ночь мой компьютер успел сделать только 490 тысяч итераций. Самый короткий префикс тратил 130 итераций - то ли Self-Test, то ли страничка "НЕ ПАНИКУЙТЕ".
Надо бы подвести всем этим рассуждениям какую-то черту... Играть было увлекательно. Тяжело, но увлекательно.
А теперь я, пожалуй, вернусь к ever17, и посвящу ему следующий пост.
Удивительно, почему The Old New Thing Реймонда Чена при всей его дотошности читается так легко и приятно, а Sorting It All Out Микаэля Каплана при кажущейся простоте - напрягает?
Кстати, Чен вообще рассказывает очень интересные вещи. Знаете, например, откуда у панели иконок рядом с часами название System Tray? А вот откудаА вот откуда.
Давным-давно, когда ёлки ещё были зелёными, а на компьютерах ещё стояли Windows 3.11 for Workgroups, Майкрософт делала Windows 95. "Проводник" - её оболочка, которую мы и по сей день лицезреем в Windows, - был наследником "Program Manager"-а из Windows 3.11. Program Manager был одной из двух оболочек Windows 3.11 (наряду с Explorer-подобным File Manager). Чтобы посмотреть на это чудо, нажмите "Пуск > Выполнить", и наберите "progman". Старикан дожил до наших дней - и был убит, но не до конца, только во втором сервис-паке к XP. Если у вас уже XP SP2, придётся обойтись картинкой.
Так вот, когда команда оболчки Windows 95 разрабатывала "Проводник", они решили соединить в нём Program Manager (иконки програм) с File Manager (проводник по диску). Поскольку Program Manager висел в отдельном окне, чтобы переключиться на него, надо было раздвигать все открытые приложения. Команда оболочки решила это исправить. Они "прислонили" Program Manager к нижнему краю экрана так, чтобы новые приложения не закрывали его. В результате он всегда оставался на виду.
Ну а поскольку экран назывался "рабочим столом" (desktop), чья-то светлая голова решила называть эту штуковину снизу "поддоном" (tray, трей). Вроде как там, в поддоне, лежат ваши документы, а сверху, на поверхности стола, вы с ними работаете.
Однако время шло, и одни идеи сменялись другими. "Группы" и программы в них перекочевали из "поддона" во всплывающее меню "Пуск", где они сейчас и находятся. Освободившееся место решили занять списком открытых окон, чтобы пользователь мог быстро между ними переключаться. В таком виде полоска снизу уже мало напоминала "поддон", и её назвали "панель задач" (taskbar). Название "трей" благополучно забылось. Но!
Не до конца. Осталась утилита, системная утилита, которая запускалась и показывала рядом с часами иконки выбранного языка (RU/EN) и заряда батарей. Эта утилита была написана ещё тогда, когда панель задач называлась "треем", и носила имя systray.exe (потому, что рисовала иконки для этого самомого системного трея).
Наконец, Windows 95 вышла. Панель задач в ней назвали панелью задач, а "место рядом с часами, где иконки" - "областью уведомлений" (notification area). Но программисты и админы, похоже, мало читали инструкции, а полагались на свою интуицию. Ежу понятно, - рассуждали они, - что раз программа systray.exe рисует иконки рядом с часами, значит эта область около часиков и называется System Tray. Так и повелось. Теперь, сколько Майкрософт не борется, трей называют именно треем (хотя изначально "треем" было совсем даже не это, а панель задач).
Ещё я читаю Джоэля Сполски, только редко. А какие технические блоги читаете вы? Можно не только компьютерные, скорее - по своей профессии
Играю в ever17 - огромное спасибо RN3AOH, что познакомил. Это японский квест, устроен он так: большую часть времени наблюдаешь за происходящим на экране, кликаешь мышью и читаешь текст, а иногда можно что-нибудь выбрать, действие, фразу, или что-то такое.
Например: герой выходит в коридор, где стоит местная злобная (на самом деле очень хорошая и добрая, но мы положим, что злобная) девица.
Варианты: 1. Заговорить. 2. Стоять молча.
Результаты:
1. >>>> Такеши: Цугуми, ПРИВЕТИКИ!!! Как я рад тебя видеть!! Как дела? Чего делаешь? А где ты гуляла вчера вечером? А то все были, а тебя не было. Как спалось? Хорошо? Я вот всю ночь ворочался с боку на бок, заснуть не мог! А что у тебя физиономия такая кислая? Никак, случилось чего? Улыбнись, ч... Цугуми: Ну ты и урод! (уходит)
2. >>>> Такеши: ..... (смотрит на Цугуми) Цугуми: ..... (смотрит на Такеши) Такеши: ..... (смотрит на Цугуми) Цугуми: ..... (смотрит на Такеши) Такеши: ..... (смотрит на Цугуми) Цугуми: Ну у тебя и рожа! (уходит)
Разговор не клеился (с)
Вообще говоря, многие такие развилки долгоиграющи - они не просто меняют диалог, а переводят сюжет на другие рельсы. В итоге может получиться одинадцать разных концовок. У меня пока, правда, только две. Одна, где все умерли, и одна очень трагичная, где умерли не все
К слову о птичках: (спойлер!) Почему Такеши и Цугуми просто не выпустили лишний воздух? Боялись, что подлодка схлопнется?
Второй том приключений несносной девицы Харухи, занудного критика Кёна, инфантильной куклы Асахины, философа-чистоплюя Коидзуми и всемогущей, но жутко одинокой Нагато.
Секрет его притяжения прост: это X-Files по-японски.
Ну хорошо, я понимаю, что сказать так - значит, ничего не сказатьничего не сказать. Mushishi - это созерцательное аниме. Вообще-то меня раздражает слово "созерцательное", поскольку все применяют его по поводу и без, называя "созерцательным" всё, где отсутствует смысл - как будто бы это что-то оправдывало! Но здесь такое описание подходит, поскольку сила сериала именно в этом - в тонкой таинственности, в загадочном мире, который где-то рядом, буквально перед нами, но всё время за кадром, проявляясь лишь в мелочах, но именно этими мелочами давая создать впечатление о его настоящих размерах. Как в хороших ночных саспенс-хоррорах (The Outer Limits, The Twilight Zone), когда герой попадает в поддельный дом, и вдруг начинает понимать, что хотя всё вокруг как всегда, но мелочи, мелочи - в них ошибки, и это совсем не его квартира, а эти люди совсем не его друзья, и с минуты на минуту эта штука перестанет играться, и сожрёт его. Вот примерно такое же ощущение влияния мелочей оставляет и Мушиши, только в несколько отличном стиле.
- Генерал, а вас не смущает, что этому танку нечем стрелять?
- Не могу же я отпустить свою дочку воевать на опасной стреляющей машине!
(Цитаты)В четвёртой капсуле находилась записка, текст которой гласил:
- Они идут на Японию.
И хотя мы не знаем, чего от нас хотят эти милые маленькие зверушки, одно теперь совершенно ясно: они идут на Японию.
- Юрико, ты уже большая, мне надо тебе кое-что рассказать. На самом деле, твоя мама была инопланетянкой. Нда... пожалуй, кошачьи уши у тебя на голове уже о многом говорят...
(Описание)Начиналось очень задорно, чудесная была пародия. В таком приятном стиле, при котором не приходится постоянно напоминать себе, что происходящее на экране очень смешно, поскольку ссылается на то, другое и третье.
Но увы, с седьмой серии сдох генератор шуток, с двенадцатой - сюжета (хотя про сюжет в этом ералаше говорить сложно), и после этого в болоте однообразия завязло всё. Безобидный юмор приелся и набил оскомину, простенький сюжет окончательно забуксовал, перейдя от развития вширь к развитию вглубь (а вглубь попросту некуда в такой ерунде). Не спасают даже сверхкороткие серии по двенадцать минут.
А, да, забыл: автор идеи сериала - Кен Акамацу (известный и горячо любимый за создание Love Hina), экранизировала её студия - XEBEC (изв. и гор. люб. за экранизацию Love Hina), и вообще, исторически сложилось так, что сразу по окончании производства этого самого вы-поняли-чего весь ответственный (и горячо любимый) за создание лавхины творческий коллектив был пересажен на производство сего творения.
За это хотя бы несколько серий посмотреть, разумеется, стоит. Хотя бы ради многочисленных референсов в сторону лавхины (спойлерить не буду, но очень весёлых).
Не знаю уж, о какой совместимости платформ мечтали в Майкрософт, создавая .NET Compact Framework, но совместимость у них получилась единственная: никакая.
То есть да, конечно, теоретически .NETCF-код, написанный для КПК, прекрасно запускается и на обычном компьютере. Теоретически.
На практике как только речь заходит о чём-то большем, нежели "навесить на форму кнопку и радоваться", совместимость летит к таким чертям, что просто страшно становится.
В обычном .NET Framework клавиши PageUp - PageDown считаются "особыми", управляющими клавишами, и сообщения об их нажатии приходят отдельно от общего потока, в особый обработчик. Впрочем, такое поведение можно отключить, для чего у Control есть специальный флаг.
Поскольку .NET CF это, как бы, урезанный Framework, в нём такой особой обработки нет. Все клавиши всегда приходят в основной обработчик. Здорово, великолепно, я готов это пережить, и писать код с этим учётом, чтобы он работал на обеих платформах. Но он не будет. Потому, что реализация Compact Framework на персоналке, разумеется, базируется на обычном Framework. Разумеется, она тупо обрезает все "лишние" свойства. Разумеется, она не устанавливает флаг "обрабатывать нажатия системных клавиш на общих основаниях". Поэтому сообщения о нажатии системных клавиш на PC просто никуда не приходят. Они должны были бы приходить в особый обработчик, но в CF нет этого особого обработчика. Тогда их можно было бы перенаправить в общий обработчик (и на PocketPC они туда и идут), но на обычном компьютере этого никто не сделал.
Накапливается почему-то большое количество текстов, которые я пишу для дневника, форумов всяких, википедии, а потом не публикую.
Обычно я накатываю огромный пост, ставлю точку, смотрю на него и думаю: ночь уже на дворе, поди ерунда получилась какая-то. Смущает меня в нём что-то. Завтра на свежую голову соображу, выкладывать это или нет. И убираю под замок в записную книжку браузера Opera - очень удобная штука, кстати.
А на следующий день не выкладываю.
Иногда бывает забавно почитать. Какие-то обрывки дискуссий, мыслей, куски речей, переводы песен, неначатые переписки, брошенные идеи. Что-то из этого я совершенно точно переписывал заново и отправлял в другом виде, что-то осталось невысказаным.
Не знаю, как закончить этот пост. Поэтому просто спрошу: а как у вас? Всё ли вы говорите, что думаете?
Чем дальше в лес, тем сильнее влияет на сюжет Длань Господня. Если в первых главах действия героев были логичны (хотя Лайт и проявил себя растяпой и кретином), то с середины первой арки они уже натянуты, а конец вообще высосан из пальца.
1. Если б у Мацуды были настоящие улики, он бы уже сдал их в полицию
2. Любые косвенные (не принятые полицией) улики Мацуда наверняка сообщил персоналу телестудии (его бы просто не пустили в прямой эфир, не зная, о чём он будет говорить).
3. Любые улики вообще, косвенные или прямые - а тем более имя - Мацуда совершенно точно сообщил друзьям/знакомым, идя на такой рискованный шаг.
Поэтому убивать Мацуду бессмысленно.
Дальше, убивая Мацуду:
1. Хигучи делаем для всех очевидным тот факт, что Мацуда был опасен Кире.
2. А значит Мацуда говорил правду, и знал, кто Кира.
3. А значит Кира - тот, кого назвал Мацуда. А Хигучи знает, что Мацуда назвал его.
Поэтому убивая Мацуду, Хигучи подписывает свой смертный приговор. Убивать Мацуду опасно.
Дальше, Хигучи делает шаг вперёд, и думает: до всего этого мог додуматься и Мацуда. Ради чего же он тогда затеял это долгое двухчасовое шоу? Ради чего он тянет до последнего, не называя моего имени?
Правильно, чтобы спровоцировать меня попробовать убить его.
Ну ладно, до последнего он мог и не догадаться. Но ведь первые два пункта очевидны!
С другой стороны, просто ничего не делая, Хигучи мог бы быть в полнейшей безопасности. Реальных улик у Мацуды нет (иначе б он был в полиции, а не на телестудии). Пустые разглагольствования на дешёвом трешевом телеканале - да мало ли что выдумали эти телевизионщики! Хигучи уважаемый бизнесмен, и слышать ничего не слышал ни о каком Мацуде. Эдак любой дурак выдумает что-нибудь, и айда на телевидение, приличных людей обвинять. Ну да, погибшие мешали "Ёцуба груп". Да они много кому мешали.
И теперь шаг три. Ладно Хигучи, он клинический идиот. Но на что рассчитывали L и Лайт, готовя для него этот план?
Ээх. Про убийство L я даже не говорю. Верх кретинского танца с обеих сторон.
Я живу в десяти километрах от аэропорта. Над моим посёлком постоянно летают самолёты.
Вопреки здравому смыслу, в плохую погоду они летают высоко, а в хорошую - довольно низко. Примерно 300-500 метров над головой.
Обычно самолёты летают редко. Раз в пятнадцать минут, раз в десять минут. К этому легко привыкаешь, по крайней мере, когда живёшь тут с рождения. Но иногда в аэропорту случается затор, а может диспетчеру просто хочется поразвлечься - и самолёты пускают нарезать круги.
Вот он летит. Вон он опять летит. Уже битый час эта сволочь, как какой-нибудь комар, каждые две минуты пролетает над моею головой. Грохоча, шипя и свистя воздухом, он появляется со стороны Москвы, ревёт, проносясь над домом и улетает в сторону аэропорта.
Благородные дамы и господа, 20-23 июля 2007 года будет проходить десятый международный конкурс по функциональному программированию ICFP. Это невероятно увлекательное, интересное и умное мероприятие. (Подробнее)Например, в прошлом году задание было следующим: 1. Скачать 12-мегабайтный файл. 2. Написать интерпретатор виртуального ассемблера по заданным спецификациям. 3. Запустить на нём файл. Выясняется, что это сборка линукс-подобной системы. 4. Обнаружить в системе шесть аккаунтов пользователей. 5. Различными методами взломать все шесть. В каждом случае внутри аккаунта находятся некие остроумные задания. Например: билд текстовой квест-игры, которую необходимо пройти. Для этого надо быть либо гением от квестов, либо написать программу автоматического прохождения. Под другим аккаунтом валялся прототип графического языка программирования, код в котором задаётся рисунками блок-схем в ASCII-графике. Необходимо было решить несколько задач на этом языке. На языке программирования в ASCII-графике под собственноручно написанной виртуальной машиной. Поверьте мне, это сплошное удовольствие.
Мне нужна команда. Годятся люди, обладающие интуицией, смекалкой в компьютерном деле, желающие поиграть и хотя бы в общих чертах умеющие программировать. Полезно потренироваться на прошлогоднем задании. Хорошей проверкой профпригодности считается умение написать прошлогодний интерпретатор (поверьте, это несложно; попробуйте).
Язык программирования - любой. Можно несколько. Буде здесь таковые найдутся - приветствую.
Здорово, только концовке не хватает одного кадра. (спойлер)Кадра счётчика прыжков Конно на ненулевой цифре.
(ещё спойлер)А то у них там в будущем парни известно, какие. TokiKake снят как продолжение одноимённой книги, главной героиней которой была тётушка Казуко нынешней героини Конно. У этой тётушки всё было аналогично: два друга, прыжки во времени, один из друзей - пришелец из будущего, попавший сюда в результате экспериментов по перемещениям во времени. Он здесь всего месяц, но воспоминания в голову Казуко имплантировал на пару лет назад. При этом случайно влюбился.
В конце концов, стёр Казуко память, улетел и обещал вернуться. Как мы видим из TokiKake-фильма, не вернулся. По крайней мере, не вернулся за прошедшие двадцать лет.
Становятся понятным и слова Казуко о том, что "ты ведь не такая, как я; если твой парень опаздывает, ты побежишь ему навстречу". Вот только было бы на чём побежать. Конечно, Чьяки сказал что-то вроде "прыгай осторожнее, шею не сломай", и "жду тебя в будущем", но счётчик прыжков лучше б всё-таки показали. Для определённости. А то известно, какие у них там в будущем парни.
Книги по программированию принято называть как-нибудь так:
- Искусство программирования на C++
- Искусство написания программ для DirectX
или даже
- Искусство работы на компьютере
Притом обычно книги, в которых речь идёт действительно об исскустве, называются совсем не так, а как-нибудь совсем по-другому. Например:
- The Old New Thing.
"Исскуством" же "чего-нибудь" обычно называют книги, которые следовало бы назвать "C++ для чайников", "DirectX для чайников" и "Компьютер для законченных идиотов". Под "исскуством" в них подразумевается понимание того, в какой руке держать кисточку, и как совершать ей махательные движения, чтобы наносить краску на холст.
Ото всех этих Higurashi и прочего... я уже и забыл, каким может быть аниме.
Я думал, что я из него вырос. Что тематика исчерпала себя. Что да, интересно, конечно, но больше уже не трогает. Так, забавно глянуть в свободное время.
Я ненавижу, ненавижу, ненавижу подбирать парные носки.
Когда я покупаю их разными - специально, все, каждую сволочную пару разной, - то их никогда не бывает столько, сколько нужно. Такое впечатление, что в стиральной машине живёт поглотитель носков, или их воруют по дороге, или они растворяются в неоднородностях пространства. Всякие носки есть. Парных нет.
Но хорошо же! Я покупаю тридцать пар одинаковых носков в полной уверенности, что теперь проблема решена. Как же! Проблема решена только до очередной стирки. А после неё выясняется, что среди тридцати пар носков нет ни одного абсолютного близнеца. Один носок чуть короче, другой чуть светлее, третий с полосочкой, у четвёртого кисть длинее, чем голенище.