Записи за месяц: November 2012

Shifuku

В японской прозе постоянно встречается “обычная”, “повседневная” или “будничная одежда” (shifuku, 私服 ). “Навстречу мне вышел отец в обычной одежде”, “в коридоре стояла Кирино в обычной одежде”, “по пути нам встретился Акаги в повседневной одежде”.

Понятно, что это значит “не в школьной форме, не в костюме готик-лолиты и не в рабочем пиджаке”. Но переводить-то неудобно! Читатель скажет – вот заладили: обычная одежда, обычная одежда… Если она обычная, чего о ней говорить?

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

Это какие-никакие, а уточнения. Конечно, лучше бы сказать “Акаги в джинсах и куртке поверх футболки”, но “Акаги в обычной одежде” звучит хуже, согласитесь.

Итак, если текст позволяет – если нет картинок – заменяйте “обычную одежду” на “домашнюю” или “уличную”, по обстоятельствам. Ничего страшного, если герой в “уличной одежде” сразу пройдёт к себе в комнату: в тёплом климате Японии это не вызовет вопросов (на самом деле ведь так и происходит).
А если мешают картинки (трудно назвать “уличной одеждой” майку с шортами) – просто замените “обычную одежду” её описанием.

Это вольность перевода, но результат того стоит.

HDTV

Помните, год назад я говорил, что блюреи не нужны? Ну так вот, купив телевизор, который их проигрывает, я, разумеется, поменял мнение на противоположное: теперь я объективно могу заявить, что блюреи – лучшее из всего, что случалось с человечеством после предыдущей случившейся с ним не менее хорошей вещи.

Теперь-то мне стало понятно, зачем мыII-Subs выпускали Бакемоногатри в BD-формате. Это затем, чтоб я его через пару лет на телевизоре посмотрел. От качества перехватывает дыхание. (Ну или в комнате наконец надо проветрить)

Но лучше я расскажу о телевизоре – возможно, кого-то заинтересует.

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

Конечно, на деле всё немного неудобней. Просто расшарить файлы нельзя: нужно ставить программу, сервер медиа-вещания, и объяснять ей, где у вас что лежит. Программа пожует-пожуёт ваши файлы, и они станут доступны на телевизоре.

Хорошие новости: таких программ много. Не обязательно использовать глючную от Samsungвашего корейского производителя телевизора, можно скачать бесплатную открытую и более надёжную Serviio, например (к ней ещё есть плагины). Ну или любую другую.
Хорошие новости: Serviio и некоторые другие программы умеют перекодировать на лету. Если телевизор всё-таки не поддерживает формат файла, так его можно посмотреть.

Плохие новости: безупречных медиа-вещателей нет. Все они глючны, какие больше, какие меньше! Один раз настроить и забыть не выйдет; привыкайте, что с каждым новым сериалом или фильмом придётся минут 15 возиться, перезагружая сервер, скармливая ему файлы, гладя по головке, упрашивая проиндексировать… Ну почему ты не индексируешь? Ну что тебе не нравится? Ах не под тем аккаунтом ты запущен? Ах под администратором тебе не нравится? Запустить твою службу под обычным пользователем? Конечно, запущу, ты только не плачь.
Привыкайте, что телевизор будет файл за файлом отказываться проигрывать, упрямо глядя на вас, как баран, и талдыча: “Ничего не знаю, формат пока не поддерживается”. Что перекодированный файл он не сможет скроллить. Вот так! Смотрите от начала и до конца. Что наткнувшись на восьмую серию Нисемоногатари, медиа-сервер сойдёт с ума, и все дальнейшие папки на телевизоре будут одинаково называться “Ore no imouto”.

Но зато вы можете посмотреть Бакемоногатари в офигенном разрешении 1080p. Это правда очень красиво.

P.S. Плохие новости: медиа-серверы не очень любят внешние сабы, только встроенные. И у встроенных теряется разметка.
Хорошие новости: скоро Новый год.

P.P.S. Забыл сказать, что на телевизор можно устанавливать приложения для работы с интернетом. Например, можно смотреть ютюб. Только это неудобно.

Верните болт

Был у нас переходник с евророзетки на советскую. Маленький белый такой. Если присмотреться, он состоял из двух частей, воткнутых одна в другую и соединённых болтом.
Кто-то пришёл.
Болт выкрутил.
Унёс.
А две части оставил.

Вот нафига? Болтов других не было?

Breaking Bad

В пятом сезоне каждая серия – это очередной гвоздь в крышку гроба для симпатий к Волтеру Вайту. Столбик градусника приязни падает на глазах: теперь уже хочется, чтобы Волт проиграл. Он умудрился, не став по-настоящему крутым, как этого все ждали, стать по-настоящему плохим. Получился трусоватый и нелепенький, но жестокий учитель химии с манией величия.
Трусость, конечно, понемногу уходит, но заменяет её не уверенность в себе, а ощущение вседозволенности. Выходит, Breaking Bad показывает нам историю становления диктатора того сорта, который в глубине души остался кроликом, просто вырастил броню и когти-ножи.
Майк – старикан-убийца – сказал про Волтера: “Это бомба с часовым механизмом, который отстукивает: тик-так, тик-так, тик-так. Рано или поздно она рванёт, и уничтожит всех вокруг, и я не хочу в это время быть рядом”. Наверное, он говорил про манию величия: для химика нет правил, он никогда не удовлетворится тем, что имеет. Волт всегда будет рисковать, бросаться в огонь:
“You asked me if I’m in it for the money business or the drug business? I’m neither. I’m in it for the empire business.”
Я сочувствовал Волту первые сезоны, даже когда ему приходилось поступать жестоко – именно потому, что его вынуждали обстоятельства. Я сочувствовал ему даже тогда, когда Волт был сухарём и врал, что ему жалко погибшего ребёнка: некоторые люди просто лишены эмоций, тут ничего не поделаешь. Но теперь Волтера всерьёз решили сделать плохишом.

Это просто праздник какой-то

if AnsiCompareStr(uppercase(value),uppercase(s))<0 then r:=c else
if AnsiCompareStr(uppercase(value),uppercase(s))>0 then l:=c+1 else
if AnsiCompareStr(uppercase(value),uppercase(s))=0 then r:=c;

Мало того, что “<=” разбито на “<” и “=” с одинаковым исходом, так тут вообще достаточно одной проверки:

if AnsiCompareStr(uppercase(value),uppercase(s))<=0 then r:=c else l:=c+1;

UPD. Я в этот пост буду складывать все такие примеры!

if (doall) then
begin
  if not doall then
  begin

Трудно быть богом

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

Всем строкам кода не поможешь, их слишком много, а наши силы ограничены! Закрой глаза на это чудовищное условие для while из 15 строк. Отвернись, когда видишь, как одна и та же проверка снова и снова вызывается в цикле. Занимайся своим делом: переписывай самые медленные места, а остальное оставь как есть. Тут просто эпоха такая.

Оптимизация

Ну вот, после моих переделок текст, который раньше переводился в Вакане минуту 10 секунд, переводится за 5 секунд.
Хо-хо!

Полюбуйтесь, что для этого пришлось нагородить:
{$IFDEF INTEGER_HELL}
{
Note on integer comparison optimization:
We're not checking if roma_t[i].hiragana has one or two 4-chars.
It's okay. If it has one, then roma_t[i].hiragana[5]==#00, and it wouldn't match
to any 4-char hex combination.
It also won't AV because the memory's dword aligned and hiragana[5] is accessible already.
}
if ((pinteger(ps)^=pinteger(roma_t[i].hiragana_ptr)^)
and (pinteger(integer(ps)+4)^=pinteger(integer(roma_t[i].hiragana_ptr)+4)^))
or ((pinteger(ps)^=pinteger(roma_t[i].katakana_ptr)^)
and (pinteger(integer(ps)+4)^=pinteger(integer(roma_t[i].katakana_ptr)+4)^)) then begin
{$ELSE}
if FcharCmp(ps, roma_t[i].hiragana_ptr, 2)
or FcharCmp(ps, roma_t[i].katakana_ptr, 2) then begin
{$ENDIF}

Это я здесь сравниваю строки из 4-символов (4 байта на хекс-код).

Капусту в студию

Хотите посмотреть на код, от которого хочется плакать кровавыми слезами? Исходный код Вакана… Я когда-то его выпросил у автора в рассчёте исправить баги.
Только посмотрите на TfUser.DicSearch… TfUser.RenderText… Да на что угодно! Эти простыни непрокомментированного кода! Эти сотни переменных с именами s, i, w, f, buf, ws, wss, wcs, l, ls, dp, tp, jtt, dot, s2, s3! Эти затычки для экспшнов повсюду, где (автор удивлённо пожимает плечами) почему-то случаются эксепшны… Эти названия компонентов Label1-Label123! Это ДНК. Никому не ясно, как в нём работает, что в нём работает, и зачем оно в нём работает.

Функция перебирает строку по символу (на самом деле, по 4 символа):
if i<=9 then se.Add(inttostr(9-j)+'0'+inttostr(i)+'F'+copy(s,1,i*4)) else se.Add(inttostr(9-j)+inttostr(i)+'F'+copy(s,1,i*4));
Если номер символа меньше девяти, то мы добавляем куда-токакую-то хрень с нулём в середине. Если больше девяти, то без нуля. Что? Почему?! Почему девять? Что это за нули? Что это за F? Куда мы их добавляем? В чём смысл жизни?! Есть ли бог?! Почему мы сравниваем с девятью i, а вычитаем из девяти j?! Все эти вопросы оставлены без ответа.

На всякий случай скажу, что к автору Вакана претензий нет – он не обязан был публиковать код, и когда я просил его открыть, то сказал, чтоб он не стеснялся кривого кода, я разберусь; этим сейчас и занимаюсь. Но того, что код кошмарный, это не меняет.

RSS

Пожалуйста, пожалуйста, пожалуйста, я вас очень убедительно прошу, красивыми чёрными буквами. Когда делаете RSS к своему блогу, экспортируйте ПОЛНЫЕ ЗАПИСИ. Не начало и “читать дальше”, не половину, не две трети – целиком.

Зачем?

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

То есть, вообще-то говоря, не закрывайте свои блоги блин! Что вам, сложно хостинг раз в год оплатить? Триста рублей? Даже если вы уже расстались с юношескими мечтами однажды написать такой пост, что интернет содрогнётся. (Или уже написали такой). Но во всяком случае, экспортируйте в RSS посты целиком… даже если там спойлеры или куча текста.

Цуккоми значит ирония

В японской культуре популярен вид шутки, который называется “цуккоми”. Вот несколько примеров, которые я сочинял сам, так что это не совсем чистокровные японские цуккоми, но надеюсь, идею они передают:

– А денег у меня нет. Всё, что было, я на воду потратил.
– Из-за тебя нам придётся идти пешком!!!

– Дурацкий выходной, проторчали весь день в магазине…
– Ты сам нас сюда позвал!!!

– Всё, я пошёл. Завтра увидимся.
– Сдай ключи перед тем, как уходить!!!

Не очень смешно, да?

Не очень смешно, да? Идея цуккоми в том, чтобы резко, решительно указать на допущенную человеком глупость. Название происходит из парных комедийных выступлений, где участвуют “боке” (дурак) и “цуккоми” (придира). Дурак предлагает и делает глупости, а придира преувеличенно реагирует на них. Японцам это кажется смешным, европейцы в недоумении хлопают глазами.

Но навести культурные мосты здесь проще, чем кажется.

Цуккоми – это обратная сторона иронии. Эти две формы юмора происходят из одного источника, хотя выглядят друг другу полной противоположностью. Но достаточно заменить одно другим, и примеры внезапно становятся смешными:

– А денег у меня нет. Всё, что было, я на воду потратил.
– И что, автобус нас бесплатно повезёт?!

– Дурацкий выходной, проторчали весь день в магазине…
– Конечно, это ведь мы тебя сюда притащили!

– Всё, я пошёл. Завтра увидимся.
– А ключи за тебя Пушкин сдавать будет?!

Как европейцы не понимают цуккоми, так многие японцы не понимают иронии. Мы спрашиваем: “но что смешного просто указать на чужую ошибку?” Японец спросит: “что смешного сказать в ответ на глупость ещё большую глупость?” И хотя европейская культура понемногу проникает в Японию, обратное точно неверно: цуккоми без перевода в других языках не поймут.
Так или иначе, если об этом правиле знать, перевести цуккоми очень легко. Просто разворачивайте их на 180 градусов и превращайте в иронию.

– А я цуккоми не перевёл.
Нашёл, чем гордиться!