Ленивая теория

Брат главной героини в Сасами-сан ганабаранай – это Кён.

Судите сами, лица его мы не видели. Разница в возрасте подходящая (он теперь в школе преподаёт). Имени его не слышали (Каминоми, очевидно, псевдоним) – да мы и настоящего имени Кёна не знаем! Как и имени Кёновой сестры. И опять какие-то божественные способности.

Я уж молчу, что в первой серии он станцевал танец Харухи. То есть, не молчу.

Коимоногатари

Я рискну вынести суждение, не дочитав книги – возможно, придётся за это поплатиться, если в концовке всё встанет с ног на голову.
Но это уже сложно.

Удивительным образом. Совершенно неожиданно. Кайки Дэйсю – самый офигенный персонаж во всей серии.
И если вы не читали книгу, и думаете, что представляете, о чём я, то вы не представляете. Он офигенный в гораздо более простом смысле, чем “офигенный злодей” или “офигенный образ”.

(Цитата)“Когда я познакомился с Сендзёгахарой Хитаги – то есть, два года назад – я подумал про неё:
– Хрупкая девочка.
Естественно, в то время она была больна паранормальной болезнью, из-за которой меня, якобы “изгоняющего духов”, и наняла её сектантка-мать. Но даже за вычетом этой болезни Хитаги всё равно казалась мне “хрупкой”.
Так я считаю и до сих пор.
И даже теперь – излечившись, повзрослев, найдя себя парня – она всё равно кажется мне хрупкой. И если Сенгоку Надеко “разбитая девочка”, то Сендзёгахара – “легко бьющаяся”.
Хрупкая, едва держащаяся – так я думал.
И именно поэтому то, что она теперь такая, какая есть – чудо. Настоящее чудо – что и два года назад, и сейчас, в восемнадцать, девочка, которая могла бы разбиться в любую минуту – живёт и не бьётся.
Мать сошла с ума.
Но дочь не сломалась – вернее, я не знаю, как жизнь повернётся дальше, но по крайней мере сейчас, по крайней мере, в этот раз, она уцелеет.
Потому, что я обману Сенгоку Надеко.”

Сасами-сан @ ганбаранай

Химселф-сан @ это аниме смотреть не будет.
Наверное.

Пол-серии любопытно, вторые полсерии просто страшный, бессмысленный бред. Поскольку аниме громкое и первую серию всё равно все посмотрят, можно не распинаться, отговаривая это делать. Посмотрите. Сами всё поймёте.
Посмотрели?

Ну вот. 50% ждшывтывптифдыоважжмщшш, 35% скучных героинь и героев и 15% сасами-сан, которая тоже интересна только потому, что куколка и аккуратно переодевается.

Sword Art Online

Во-первых, в роли несчастной сестрёнки опять Кирино. У этой актрисы, похоже, амплуа такое. Кто-то озвучивает императоров, кто-то застенчивых девочек, а эта девушка отныне в каждом аниме будет сами знаете кем. “Н-нэ! Кёске ттеба!”
Офигенная карьера.

Во-вторых, Sword Art Online талантливо снят. Это не заметно сначала, по первой серии вообще кажется, что типичный сериал про прокачку в РПГ. Но он не такой. Он большой. От него остаётся то самое замечательное ощущение, что смотришь не пустяк, а что-то судьбоносное, неизбежное. Наверное, это одна из лучших реакций, которой может добиться автор книги или аниме – когда история кажется важной, какой бы пустяковой она не была. Не знаю, всякий ли вообще испытывал такое чувство, поскольку у меня оно бывает редко.

Траляля три рубля, здесь я говорю о плохих сторонах SAO, здесь я говорю о плохих сторонах SAO. Рыба рыба рыба. Придумайте вопрос, подходящий для экзамена по выбранной специальности и ответьте на него сами.
Поговорили о плохих сторонах SAO.

Что я хотел сказать-то. Нигде не видел, чтобы так здорово сделали деление на реальный мир и РПГ. Так последовательно, что приятно смотреть. Сказочный, волшебный мир игры, со сверкающими городами, с огромным древом, уходящим в заоблачные выси, с ярким синим небом. Блондинка-Лифа, болтающая весело, задорно. И серые будни, обычный город, дождик за окном, темноволосая, как все японки, неряшливая Сугуха, глухой – обыкновенный – будничный голос, скучный высокий голос её одноклассника. Это жизнь. Это правда жизнь.

Не смешали, не противопоставили, а просто дополнили одно другим.
Будни и сказку.

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

Мне, в целом, не успел понравиться Sword Art Online, и уже не успеет – осталось пять серий. Возможно, несколько лет назад он мог бы подействовать на меня, как подействовала раньше Тора-дора. Сейчас не получается – некоторые серии я даже скроллил, он скучноват.
Но глядя на него, всё-таки хочется сказать: посмотрите – ведь можете, если захотите. До сих пор можете. Даже сейчас, даже среди всего того, во что давным-давно превратилось аниме. Ведь можете же.

Нарисовать не мадоку магику. И даже не Нисемоногатари.
А вот эту грозу и этот телефонный звонок.

Дарю кому-нибудь

Часто приходят в голову отличные переводы разных терминов в книгах, которые совершенно не собираешься переводить.
А жалко!

Например, книжка Ононоги из “Моногатарей” в русском должна называться “Книга сплошных исключений ” (в японском – “Свод правил, где больше исключений”).
То, с чем столкнулся Арараги в “Онимоногатари” – не просто тьма, а ТЬМИЩЕ. (Хотя честно говоря, оно скорее безликое, чем страшное)

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

Заметка была написана 2 февраля 2012 года.
Когда люди воображают себе другую страну, им обычно кажется, что там всё по-другому.

Речь даже не о победившем капитализме, феминизме, терпимости и прочих хороших вещах. Просто быт. Весь быт за границей необычен. И когда в глаза бросаются знакомые образы, люди недоверчиво трясут головой: нет! Этого не может быть! Это какая-то особая куча мусора, тенга-мьяма по туземному. Часть колорита.

Вот домашняя куча мусора – это просто kucha musora, они не возражают.

Школа в Японии не просто школа, а японская школа! Дорога в Японии не дорога, а мити. Берег реки не берег, а я хз как там берег по японски, но тоже особый берег, в общем.

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

Внимание, новости: помойки одинаковы по всей планете. Жизнь в большинстве стран очень похожа. Колорит проявляется не в том, что герой ходит в “старшую школу 2-й класс”, живёт в “2DK” и меряет годы эпохами правления императоров.

Inc(i)

Все знают, что когда перебираешь null-terminated строки, то нужно останавливаться по нулю:

while pc^<>#00 do Inc(pc); //ищем конец строки

Все знают, что когда перебираешь дельфийские строки, нужно останавливаться, когда индекс превысит длину строки:

while (i<Length(s)) and (s[i]=' ') do Inc(i); //пропускаем пробелы

Все знают, что у дельфийских строк в конце всё равно ноль.

 74 00 65 00 73 00 74 00 00 00

Но не всем и не сразу приходит в голову, что длину дельфийской строки тоже часто можно не проверять!
Второй пример можно записать так:

while s[i]=' ' do Inc(i); //пропускаем пробелы

В конце строки ноль, а ноль – это не пробел, поэтому цикл сам собой прервётся.

Где надо быть осторожным – так это при промотке строки назад. В начале строки нуля нет:

while (i>0) and (s[i]=' ') do Dec(i); //пропускаем пробелы в обратную сторону

ват

У меня когнитивный… я не знаю, как это назвать даже!
Я уже долгое время читаю один хороший вебкомикс. Про пацана и его девушку, автобиографический. Вот небольшой стрип, например. Или вот. Ну короче, такой.

Так вот, я сейчас внезапно выяснил.
Что вот этот парень с короткой стрижкой. Он же автор этого комикса.
Это, &%%%$, (спойлер)

девушка.

И она не имеет в виду рисовать парня. Просто так у неё получается. Потому, что она плоскогрудая коротковолосая лесбиянка.

АТАМА ОКАШИИИИИИИИ СОНО ХИТО!

А комикс такой хороший был.

.

type и class

В Delphi можно написать:

type HexString = string;

Так мы отметим специальный тип строк, который хранит в себе hex. Но для компилятора они ничем не отличаются от обычных. Вот это скомпилируется нормально:

var a: HexString;
  b: string;
begin
  a := b;
end;

Что, если мы не хотим разрешать такое копирование? (А обычно мы должны не хотеть! Разные по смыслу вещи нельзя присваивать, это опасно). Компилятор можно попросить создать “независимый тип”:

type HexString = type string;

Теперь строку типа HexString нельзя присвоить строке типа string, и наоборот.

Похожий приём работает с классами, только чуть иначе.

type
  HexStringList = TStringList; //можно присваивать HexStringList -> StringList и обратно!
  HexStringList = class(TStringList); //можно присваивать только HexStringList -> StringList, но не обратно!

Классы, в отличие от простых типов, поддерживают наследование. Более “частный” класс можно положить в переменную более общего, но не наоборот. Если мы объявляем тип без “class“, то мы просто создаём для него другое имя: оба типа на самом деле одно и то же. А с помощью “class(TStringList)” мы говорим компилятору “HexStringList – это частный случай StringList, он от него наследует”.

Но что, если мы напишем так?

type HexStringList = type TStringList;

Или так?

type HexStringList = type class(TStringList);

Ответы на это в следующий раз!

Don’t write what you don’t need

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

Но понемногу я пришёл к выводу, что это вредно.

Даже не тем, что тратится лишнее время. Функции могут однажды пригодиться, и потом, это мелочи, тут нечто гораздо более страшное.

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

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

Возможно, вы узнаете об этом через год, отлаживая загадочные баги в новой программе, использующей старую, давно проверенную библиотеку. Наткнётесь на ошибку в коде функции, удивитесь: “Да как оно вообще работало?” А оно и не работало.
Даже если вы не тестируете новые функции специально, нужные функции сами собой проверяются в ходе работы программы. Пусть это не полноценное тестирование, но большинство путей кода всё-таки оказываются покрыты. Дополнительные же функции не вызывались ни разу, поэтому баг может быть где угодно, даже на самом виду.

Но мало того, когда вы захотите исправить ошибку, вам вдруг станет страшно. Вы подумаете: “А что, если?..”

Что, если эта функция кем-то используется? Ведь неспроста она оказалась в библиотеке. Никто не будет писать функции просто так. Значит, какой-то из проектов вызывает эту функцию и притом работает.
Если вы её сейчас исправите – не сломается ли он?
Да, у вас тут индексация с нуля, а не с единицы, как сказано в комментарии. Вызывая функцию правильно, получить хороший результат невозможно. Значит, кто-то вызывает её неправильно, по ошибке передаёт как раз нужный ошибочный индекс. Если вы функцию почините, тот проект сломается.
Неизвестно, какой. Неизвестно, когда и где. Но что сломается – это почти наверняка.

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