Сегодня лень писать, завтра расскажу про комикет.
Токио – день первый
Алиса говорила, что книга без картинок никуда не годится, но к сожалению, я пока фотографировал мало и фотки обрабатывать здесь неудобно, так что потом.
Про Японию: вы не поверите, насколько здесь всё правильно и качественно. Я не поверил. А я заранее знал! Если окно в поезде, то белоснежно белое, если стекло, то абсолютно прозрачное. Стыки заклеены резинкой, даже шва не видно. На каждой конечной поезд моют. У нас даже в новых поездах тут дырень, тут прокладка неплотно прилегла, тут обшарапано, тут кто-то расписался для потомков.
У японцев ВСЁ безупречно. У них сорная трава везде одной высоты и одного цвета. Расчерчена на квадраты. Между ними одинаковые асфальтовые дорожки. В самой глуши грунтовые, при этом обе канавки для колёс на одном уровне.
Япония – это наша несбывшаяся мечта, Союз Советских Капиталистических Республик. (далее)
У нас если надо – протопчут тропинку, в Японии, похоже, ни одна тропинка не появляется сама собой, а если появляется, её замечают, продумывают, добавляют на план, укрепляют, ставят поручень, ступеньки, и назначают там ежедневную уборку. Сколько я ехал и смотрел за окно, ни одно место не выглядело самопроизвольным. Даже лес растёт по какому-то высшему плану и сам себя подравнивает. Посреди поля стоит никому не нужная ограда, так на ней искусственно выращивают плющ, чтобы это была не “никому не нужная ограда”, а “офигенная внезапная ограда с плющом среди поля”.
С другой стороны, Токио не выглядит мегаполисом. Да, тут офигенно много людей. Гигантские транспортные хабы, каждая станция – это подземные и надземные миры какие-то целые, то восемь подземных ярусов с разными ветками, то огромные коридоры с выходами на разные платформы. Но.
Представьте себе деревню. Узенькие улицы, сплошные пешеходы, изредка проедет повозка, останавливаясь каждые два шага. Городская площадь с тремя магазинами.
Токио – это деревня девяностого уровня. Каждая отдельная мелочь проапгрейдилась от мира крестьян до хайтека, но всё вместо осталось деревней. Сложно сказать, отчего такое впечатление. Но вот Москва – мегаполис. Как выйдешь на восьмиполосное шоссе, где всё несётся и плевать на тебя хотело, так сразу ясно, что тут не шутят. А в Токио километры, десятки километров сельского города. Двухполосные улочки, улицы впритык, площади, на которых большая часть отдана пешеходам. Может, дело в том, что автомобилистов здесь явно держат за людей второго сорта. Может, это правильно. Но мегаполисом город в результате не кажется. Во всяком случае, в привычном смысле.
Общаться по-японски ещё сложнее, чем я думал, а ведь я заранее опасался. Обычно меня понимают, но с непривычки я всё время сбиваюсь на английский, и получается такое месиво! Хотя обычно реагируют очень вежливо и с готовностью бросаются на помощь – найти, куда выкинуть бутылку из-под колы (тут всё выкидывается в разные места), подсказать, где нужный мне адрес (в Японии омега ультра глупая система адресации), объяснить, как в их магазине заказывают собу. Пара человек меня испугались, ну как же, я лысый и опасный.
Иногда долго не получается что-нибудь объяснить. Например, один человек в магазине ранобе не понимал Нисио Исина. Я ему:
– Нисио Исин но хон ва доччи но section десё ка?
– Хай??
– (ок, упрощаю) Нисио Исин.
– Хай??
– Сакуся, Нисио Исин?
– Хай???
Тут пришёл помощник и сразу всё понял. Но этот человек тоже был хороший, он мне на другой вопрос понятно ответил.
Покупаю переходники. Ах да, в Японии ВНЕЗАПНО какие-то клинические розетки из Ада. Только у меня успело всё разрядиться, как приезжаю я в отель, а там штепсель воткнуть некуда. Пришлось ехать в Акибу прям в первый день.
Говорю продавцу: бла-бла, так и так, приехал, у вас тут переходники, не могу зарядить (фраза была умной, меня Эйен научил, как говорить. Я бы сам не сочинил!)
Продавец: Ага, во. (Даёт переходник. Подходит!)
Я: Ёццу кудасай! (Четыре дайте)
Продавец даёт одну.
Я: Ёццу. Ич ни сан ши.
Продавец кивает и даёт одну.
Я ему: ОК, чётто матте, МИРО. (Достаю с полки ещё три штуки и даю ему доп. деньги).
Продавец согласен. Ну и то хорошо.
Поскольку нужда привела в Акибу, гулял по Акибе. Там просто ФЕЙСПАЛМОВЫЕ объёмы аниме-рекламы и магазинов. Отовсюду какая-то анимешная музычка, здания под десятиэтажные потолки забиты анимешными товарами, на стенах висят гигантские плакаты. Отаку во все поля. Иностранцев полно.
Нашёл здание, в котором каждый этаж посвящён какому-нибудь извращению, ну например, третий этаж – использованные трусы. И так десять этажей. Там на окнах написано. Я дважды прошёл мимо, но зайти не рискнул.
В другом здании два этажа были рыбачьи автоматы, тут их называют “UFO catcher”. Просадил тыщи 4 йен в них (это тыщи полторы рублей). Уж такие там хорошие призы, анимешные. И улитку из баке хотелось получить, и эту из кейона, ну вы сами знаете, какую. Но фиг там, ничего вытащить вообще нельзя. Но автоматов очень много, и какой только тематики нет, так что ходишь-ходишь, и опять на что-нибудь прикольное натыкаешься. В итоге я только брелок простенький с баке-Ханекавой вытащил.
Вообще всё это здание было забито игровыми автоматами. На других этажах игры друг против друга, или вот автоматы, где синхронно под музыку танцевать надо. Я не рискнул.
Был в Yellow Submarine, там продают карты типа Magic the Gathering и фигурки для сборки-склейки, так два этажа. Ничего особенного, хотя знамениты.
Akihabara Radio Kaikan сейчас почему-то лишена своей знаменитой надписи над входом, хотя на крыше всё равно гордо написано “Секай но АКИХАБАРА РАДИО КАЙКАН”, а снизу ещё и переведено: “Akihabara Radio Kaikan OF THE WORLD”, да.
И вот, иду я по такой всей анимешной и громкой Акихабаре, и тут из-за левого плеча в громкую связь говорят:
“В нашем магазине вы можете купить электронику, товары для быта, музыкальные и DVD проигрыватели и многое другое. Ждём вас со стольких по стольких в павильоне таком-то”.
И я сначала не понимаю, что это у меня вдруг электричество в голове пробки выбило. Ну реклама и реклама. А потом берусь за голову и оглядываюсь, потому, что до меня доходит, что она НА РУССКОМ. Причём на хорошем русском, звучит ну ровно как обычное объявление в московских моллах.
Что там делала реклама на русском – я до сих пор не знаю.
Несколько слов про токийскую систему перевозок. Автобусов тут мало, а вместо метро надземные электрички, но внутри они всё равно как метро. Билеты стоят по-разному, смотря, откуда и куда ехать. Можно либо купить билет у человека и назвать станции, и там просто будет написано, либо купить билет “на поездку до такой-то стоимости”, если посмотреть, столько стоит до нужной станции. На каждой станции висят карты, сколько от неё до других станций.
Билет нужно вставлять на входе и на выходе, и если ошибся, на выходе можно билет докупить на требуемую сумму, либо допродать, наверное. Не проверял, но японцы такие правильные, что должно быть можно. А когда билет на выходе прикладываешь, то его сжирает, и билета не остаётся – и никаких сувенирчиков.
Повсюду стоят автоматы, продающие совершенно без людской помощи всякую хрень типа сигарет и колы, что очень удобно. Кола выходит холодная, даже холоднее, чем у нас из холодильника, то есть, реально ледяная. Это плюс. И стоит недорого.
Пока всё, завтра на Комикет пойду, тогда заодно и о магазинах ранобе расскажу.
| Оглавление | Комикет – часть 2 -> |
Ангел Дураким
Какие интересные подробности у появления церкви мормонов! Оказывается, мормонскую библию продиктовал в 1823-м году ихнему пророку “Angel Moroni“. Кто не в курсе, “Moron” по-английски “кретин”. А “Moroni” – не совсем грамматически правильное множественное число от “moron”.
Тут уже становится любопытно, а не содержит ли и само слово “mormon” такого же скрытого послания?
И ещё одно. Читая про мормонов, увидел такую картинку:
Почему пророк в костюме, а ангел в одеяниях? Чтоб выглядел “по-ангельски”? Так их раньше рисовали в накидках потому, что все ходили в накидках! Ангелы от людей не сильно отличались. По логике, ангелы в наше время должны быть в современной одежде и подстрижены коротко. Они же от бога прилетели, а не из прошлого! У бога на небе не “вечная древняя греция”.
Что же мне делать, что же мне делать, чтожемнеделать, через 10 часов самолёт, надо что-то решать 
Вроде я себя чувствую получше после амоксициллина.
Отличные новости
Похоже, у меня нет метастаз в лёгкие, это просто пневмония
</sarcasm>
День, когда WordPress подавился метадатой
Сегодняшняя история програмистская. Кому компьютеры скучны, можете смело пропускать.
Как все знают, у меня есть отдельный блог на boku.ru. Записи туда по большей части копируются отсюда – в виде исключения я пару раз выложил там скучные рассказы, чтобы включить их в архив, но не афишировать.
Блог сделан на WordPress. Копирование записей устроено так: специальный скрипт генерирует RSS из дневника на Diary, а плагин FeedWordPress забирает RSS и импортирует в WordPress.
Категории при этом сохраняются, внутренние ссылки мой собственный плагин заменяет на местные, а если пост на дайри изменился – изменяется и пост на boku.ru, так что всё устроено достаточно удобно.
Но есть проблема. (далее)
function WhatToDo(post)
localPost = FindLocalCopy(post);
if localPost==null then
//New post!
AddPostMeta(localPost, 'syndication_item_hash', post.Hash);
return doCreateNewPost;
else
if not FindMeta(localPost, 'syndication_item_hash', post.Hash) then
//Post changed!
AddPostMeta(localPost, 'syndication_item_hash', post.Hash);
return doUpdatePost;
else
//No changes.
return doNothing;Если пост на дайри не менялся, FeedWordPress не будет заново его импортировать и не создаст новой ревизии местного поста. Это хорошо. Но перед тем, как записать пост в базу, WordPress прогоняет его через ряд плагинов, которые меняют его содержание:
Пост на дайри (из RSS) –> (замена ссылок на местные) —-> (исправление форматирования) –> Пост на boku.ru
Бывает, что какой-то из плагинов сбоит, и преобразует пост неправильно. Тогда я начинаю искать, в чём дело. Чтобы разобраться, мне нужно импортировать пост снова и снова, пока я не найду ошибку.
Но как это сделать? Ведь пост уже импортирован, и с точки зрения FeedWordPress, его содержимое не менялось (на дайри он остался тем же).
Для этой цели я влез в файлы FeedWordPress, и временно покромсал описанную выше процедуру. Она стала выглядеть так:
function WhatToDo(post)
localPost = FindLocalCopy(post);
if localPost==null then
//New post!
AddPostMeta(localPost, 'syndication_item_hash', post.Hash);
return doCreateNewPost;
else
if not FindMeta(localPost, 'syndication_item_hash', post.Hash) then
//Hack: Post is always changed!
AddPostMeta(localPost, 'syndication_item_hash', post.Hash);
return doUpdatePost;
//TODO: Restore normal version.Менялся пост или нет, мы всегда импортируем его заново. Конечно, при этом создаётся новая ревизия и захламляется база, но подумаешь, мне же ненадолго… А старые ревизии поста легко удалить.
Поправив таким образом FeedWordPress, я залил новые файлы на сервер и стал искать баг в своих плагинах. И нашёл. Исправил. Убедился, что теперь посты преобразуются правильно. Всё сохранил, применил, закрыл… а отключить хак забыл.
И ушёл.
Вторая половина этой истории началась через месяц, когда я зашёл на блог на boku.ru. Все страницы с последними постами не работали.
Вместо них отображался белый экран. Не работала даже консоль админа, из которой посты можно удалить. В логах сервера появлялась ошибка:
php error: maximum memory allocation exceeded
Какой-то из скриптов жрёт память? Но почему? Что я менял?
И тут я вспомнил, что забыл отключить хак.
Но постойте, а что такого? Проверки раз в полчаса – это 48 проверок в день, жалкие полторы тысячи ревизий за месяц. WordPress может обслуживать десятки тысяч постов, для MySQL лишние несколько тысяч ревизий – пустяк.
Если я напишу ещё полторы тысячи постов – вордпресс даже не поперхнётся. А полторы тысячи ревизий вывели его из строя?
Да ну! Не так он написан.
Тогда почему любая страница, которая обращается к последним постам – вылетает с переполнением памяти? База данных находится на диске – что вообще вордпресс грузит в память?
Метадату.
Каждый раз, загружая очередной пост для печати, вордпресс делает примерно следующее:
rows = exec_sql('SELECT * FROM post_metadata WHERE post_id=id');
while rows.MoveNext() do
metadata[rows['name']]=rows['value']То есть, читает из базы все относящиеся к посту записи метадаты и загружает их для быстрого доступа в память.
Обычно таких записей 8-10, иногда до 15 – мелочи, в общем.
У последних записей в моём блоге их было по 60 000.
Ничего удивительного, что обращаясь к этим записям, вордпресс падал. Он не рассчитан на 60 000 записей метадаты у поста. Удивительно, откуда эти записи взялись.
Я открыл таблицу phpMyAdmin-ом, и увидел, что все они – это копии параметра syndication_permalink. Тогда всё стало ясно.
Описанная выше функция WhatToDo решает, что делать с постом из RSS – добавить новый, обновить существующий или пропустить. При этом она регистрирует syndication_permalink, чтобы второй раз не обновлять одно и то же.
Да, импорт RSS происходит лишь раз в полчаса, 48 раз в сутки, и каждый пост импортируется лишь однажды – но функция проверки WhatToDo вызывается десятки раз за процедуру одного импорта. Только однажды её результат имеет значение, поэтому ревизий в базе действительно создано лишь полторы тысячи – но при каждом вызове она добавляет syndication_permalink, и этих пермалинков, совершенно одинаковых, у одного поста набираются десятки тысяч.
Ирония: вордпресс мог бы вынести десятки тысяч постов – но не десятки тысяч свойств поста.
Как всё это чинить?
Итак, испорчена таблица post_metadata: в ней для некоторых постов некоторые записи продублированы десятки тысяч раз. Нужно удалить дубли, но оставить по одной копии каждой записи.
После некоторой возни и гуглинга сотворился следующий манёвр:
CREATE TABLE `keep_ids` AS ( SELECT MIN(`rowid`) AS `rowid` FROM `post_metadata` GROUP BY `postid`, `name`, `value` )
Этим запросом мы находим все цепочки дублей (записей с одинаковыми данными в полях postid, name и value), и в каждой выбираем наименьший номер записи. Таким образом, мы получаем по одной копии каждой уникальной записи. Эти копии надо сохранить, а всё остальное удалить.
ALTER TABLE `keep_ids` ADD UNIQUE INDEX `rowid` (`rowid`)
Это чтобы операции с новой таблицей были быстрыми – сейчас понадобится.
DELETE FROM `post_metadata` WHERE `rowid` NOT IN (SELECT `rowid` FROM `keep_ids`)
Удаляем все записи из исходной таблицы, которые не вошли в наш “список на сохранение”. Если б в `keep_ids` не было индексов, мы бы тут завязли на несколько минут, а так – только секунд.
Ну и, наконец, удаляем временную таблицу:
DROP TABLE `keep_ids`
Победа! Число записей в post_metadata резко падает с сотен тысяч до 13 000 и блог снова работает нормально.
Названия таблиц и полей в примерах условны, и не соответствуют настоящим названиям в базе вордпресс. Код написан на условном языке, а код SQL может быть не совсем правильным, но передаёт общую мысль.
Ну вот, похоже, девятого числа я еду в Японию. Хотя чувствую себя по-прежнему нехорошо (после последней химии). Надеюсь, всё в ближайшие дни как-нибудь разрешится: либо мне резко станет лучше или хуже, либо придут результаты каких-нибудь анализов, которые любые путешествия исключат, и т.д. и т.п.. А то непонятно как-то.
В Токио я буду неделю, при этом попадаю на летний комикет (10-12) и, возможно, Обон (15 августа, но в Канто 15 июля, короче, я ничего не понял, разберусь ближе к делу).
Надо вспомнить все места, которые я хотел посетить. Подскажите что-нибудь интересное. Пока помню:
– Комикет
– Акибу
– Синдзюку
– Токийскую башню
– Сибую
– Это место где продают отоме-игры (забыл место)
– Посмотреть на Токийский залив
– Обон
Принимаю запросы на сувениры, также на покупки с комикета (поскольку заранее неясно, что будет на комикете, и что я из этого увижу, можно просить и в общих чертах, например, “додзи по ореимо манами х папа кёске”, и тогда я, скрепя сердце, постараюсь найти хоть что-нибудь в таком духе).
Разумеется, нужно уметь как-то у меня это потом забрать. Обычно я в Москве.
Ещё аниме пачками
Kokoro connect – ещё пять школьников открыли кружок времяпровождения.
Binbougami ga! – ещё один сверхъестественный кто-то поселился в доме у кого-то.
Jinrui wa suitai shimashita – что-то из ноитамины, очередной непонятный мир будущего, мало сюжета, все такие необычные девочки, феечки, какая-то соц. сатира (но в сто раз менее едкая, чем в зецубо сенсее), в общем, кому-то может понравиться… скорее, девушкам.
Sword Art Online – чуваки зашли в виртуальную реальность и не могут выйти. Капля интереса в завязке есть, но похоже, впереди просто 13 серий приключенчества.
Получил свою японскую визу
Выглядит как радужная наклейка во всю страницу загранпаспорта.
Заодно сравнил последнее фото с тем, что на загранке (circa 2010). Два года назад я был вежливый молодой человек, а сейчас бандит какой-то лысый 
Я не уверен!
Попробуйте быстро ответить на вопрос, в ответе на который не уверены до конца:
– Ты дома свет выключил?
– По-моему, да.
Не годится! “По-моему” – это сокращение от “по моему мнению” (“По-моему, Пупкин – плохой президент”), а какое уж тут мнение? Либо выключил, либо нет.
– Кажется, да.
Не годится! “Казаться” могут предметы вдалеке (“Кто это там на эшафоте?” – “Ба! Кажется, Пупкин”), ну в крайнем случае, будущее (“Кажется, Пупкину кранты”), но никак не прошлое! Где это оно “кажется” (показывается)?
– Вроде бы да.
Не годится! “Вроде” значит “похожего рода, сорта” (“Чья это дача?” – “Вроде бы депутата какого-то”). Вы же со светом поступили вполне определённо, либо выключили, либо нет.
– Полагаю, да.
Не годится! Полагают верным то, на чём строят дальнейшие рассуждения (“Полагаю, здесь теперь не искупаться, так что надо искать новый пляж”). А тут речь о ваших сомнениях, а не предположениях.
– Наверное.
Не годится! Какое же это “на верное”, когда вы не уверены? Правильное употребление: “Почему стоим?” – “Наверное, депутата везут.”
– Возможно.
Не годится! А то мы не знали, что это возможно! Правильное употребление: “Возможно, будет революция”.
– Видимо.
Что это вам “видимо”, когда дом далеко-далеко? Правильное употребление: “Что солдаты там делают?” – “Видимо, охраняют мир и порядок.”.
– Скорее всего.
А что, было соревнование в скорости выключения света? Правильно – указать на событие, которое случится прежде любых других: “Скорее всего, президент выступит с заявлением.”.
– Да выключил я, выключил, отвяжись от меня!