Эта заметка была написана в моем втором по счету блоге на сайте blogspot два года назад. Сейчас я уже пришел к пониманию, что такая система логов мне не нравится. Она довольно навороченная, но все эти шаблоны меня теперь почему-то пугают. Дабы это добро не сгинуло вместе с тем дневником, публикую здесь. Прочитав данную статью, возможно, вы сможете подцепить тёлочку блеснуть умом в узких кругах. :)
Полгода назад мы создавали крутой логгер, использование которого выглядело так:
logger::info() << "Тестовое сообщение номер " << 1; |
Самая главная проблема была в том, чтобы воткнуть ‘\n’ в конце сообщения. Для этого в info() был примерно следующий код:
InfoStream info() { static InfoStream stream; // std::endl пишет в ostream '\n' и делает flush() stream << std::endl; return stream; } |
Последняя строка завершалась только при закрытии файла (в деструкторе класса InfoStream). Первый flush игнорировался. Это все кажется простым, если мы пишем лог в обычный текстовый файл.
Когда лог стал в формате html, начались пляски с бубном.
Во-первых, в html надо записать заголовок, во-вторых, красиво оформить начало строки, в-третьих, красиво закончить строку, в-четвертых, вставить теги в конце файла. Это было реализовано, но совместимость между использованием текстового лога и html в некотором смысле пропала (базовый класс для обоих типов выглядел монстром).
Совсем недавно пришлось копаться во внутренностях. Задача стояла — вынести этот логгер в отдельный набор заголовков а-ля boost. Посмотрев на этот код, я плюнул и решил написать логгер заново. :)
Вот как это было реализовано:
class logger { public: class internal_stream { public: template <class T> internal_stream & operator <<(const T & value) { logger << value; return *this; } ~internal_stream() {} private: // Может использоваться только классом logger internal_stream(logger & stream) : mStream(stream) {}; logger & mStream; }; internal_stream info() { return internal_stream(*this); } }; |
Как это все работает:
- в конструкторе logger — подготавливаем файл для записи, в текстовом ничего не делаем, в html — записываем заголовок
- в деструкторе logger — закрываем файл, в html формате закрываем теги body, html и т.д.
- в конструкторе internal_stream — начало строки, в html формате пишем tr, td и все что нравится
- в деструкторе internal_stream — окончание строки, в текстовом это просто ‘\n’, в html закрываем теги tr и т.д.
Если сделать logger шаблонным классом, то можно реализовать разные буферы вывода. Начиная от текстового, html и xml и заканчивая сервером для приема и клиента для отправки сообщений по сети.
По прилету на остров Кос нас разместили в отеле «Oceanis Beach Resort». Отель довольно старый, но уютный. Всюду травка зеленеет, пальмы растут. Отель называется по-разному: где-то написано «Blue Oceanis», где-то «Oceanis Beach».
Номер
В номере, при вселении, нас ждала бутылка вина и фрукты. Вино надо выпить, а фрукты съесть. Это подарок. Некоторые туристы этого не знают и спрашивают про вино у гида только под конец отпуска. Мы скромничать не стали — схарчили фрукты и допили вино в первый же день.
Питание
Питание в отеле по типу «шведский стол». Стол не один, их много, еды тоже много и разной. Столько еды в одном месте мне раньше видеть не доводилось. Подносы пустеют, тут же подносят новые. В общем, красота. Вечером в ресторане включают дресс-код, проверяемый девушкой при входе. Мужчинам с открытыми плечами делается замечание, но в ресторан все равно пускают. Утром дресс-код выключают и завтракать можно в любой одежде.
В один прекрасный вечер в отеле был какой-то праздник, посвященный Греции. В связи с этим каждому выдавали стопку «Узо» на входе и фотографировали на память. Так вот, выпивать водку сразу же и занюхивать рукавом, как сделал я — не надо, не палитесь! Иначе сразу последует вопрос: «Are you russian?». Оказывается, эту стопку надо взять с собой и пить ее во время ужина. Хотя, если употребить сразу при входе, то вам нальют еще одну. Ее я тоже хотел выпить тут же, не отходя, что называется, от кассы, но мои спутницы утащили меня ужинать от греха подальше. А ведь могла бы быть еще и третья стопка, но не срослось.
Бассейн
Так же в отеле есть аж три бассейна: два с соленой водой и один с пресной. Купаться в них можно только с восьми утра до восьми вечера. Об этом сообщает табличка на трех языках: немецком, греческом и английском. Мы грамоте тамошней не обучены, поэтому купались с восьми вечера до двух часов ночи.
Правила мы нарушали аккуратно, купаясь в бассейне тихо, как мышки. В отличие от дебилов-немцев, которые мало того, что игнорировали надпись на их родном языке, так еще орали и шумели ночью в бассейне. А уходя кинули в него шезлонг. Может это юмор какой немецкий — непонятно. Хотелось подойти к ним, тихо сказать «Hitler kaput» и закатить в табло.
Бар
Часов с семи-восьми вечера в отеле, недалеко от входа, открывался бар. Главное украшение этого бара — бармен. Приятный во всех отношениях дядька. Если открыть энциклопедию на слове «Хороший бармен», там вы увидите это фото.
В баре рекомендую попробовать «Узо», греческую водку. Она вкусно пахнет «Пертусином» и пьется как «Пертусин» нектар. Стандартный способ питья: маленькими глоточками потягивать из стакана. Но можно взять трубочку и растянуть удовольствие. Бармен поначалу удивлялся такой манере пить местную водку, но потом привык.
Что интересно — в Греции город Санкт-Петербург называют «Petropolis», а в Финляндии — «Pietari». Так что в Грецию вы едете петрополисцем, а в Финляндию пиетарасом пиетарцем, будьте бдительны.
О полете в Грецию можно почитать в в первой части, а про экскурсию во второй части.
Доступные экскурсии были следующие: обзорная по острову Кос на автобусе, поездка в Бодрум (город Турции, которая видна прям из отеля) на теплоходе, поездка на Родос и плавание на шхуне на три острова. Первая экскурсия была отвергнута из-за своей обыденности. Кататься на автобусе по острову шириной 40 километров нас не привлекало. Вторая экскурсия и не экскурсия вовсе. Тебя доставляют в Бодрум, оставляют на три часа и делай там что хочешь. Немного посовещавшись, мы решили плыть на три острова.
Нас загрузили на шхуну под названием «Katelina». По какому-то счастливому совпадению нам достались места прямо перед кабиной капитана, так что мы видели все, что видел капитан корабля. И мы поплыли или пошли, как говорят моряки. Морской ветер дует в лицо, судно качает по волнам, солнце жарит так, что даже я стал мазаться мерзким кремом для защиты. Ощущения незабываемые. Затем две девушки стали загорать топлес, я как-то отвлекся, красота островов поблекла и вся экскурсия прошла мимо…
Что характерно, практически на каждом острове нарисован флаг Греции. Размеры можно примерно оценить по фотографии. Раньше злые турки ночью прилетали на самолетах или приплывали на кораблях и втыкали свой флаг. Типа этот остров наш — турецкий. Местные греки такие шутки не оценили и нарисовали флаг, чтоб было понятно чьи это острова на самом деле. Сейчас про такие истории не слышно. Попробуй такую дуру перекрасить за одну ночь, да и флаг Турции посложнее в рисовании будет.
Первый остров Samos включал двухчасовое купание в лагуне. Те, кто купаться не хотел или не умел, могли подняться повыше на гору и посетить местный монастырь. Монастырь с виду — так себе, коробка белая, я туда не пошел. А вот лагуна с прозрачной водой, местами попадаются рыбки размером с ладонь. Там мы провели полтора-два часа и отправились дальше.
Второй остров под названием Kalymnos известен магазинчиком, где продают натуральные губки. Которыми можно мыться. Изначально они темные и жесткие, но потом их промывают марганцовкой и еще какой-то жидкостью и они становятся белыми и пушистыми. Натур-продукт, короче говоря..
Кстати, греки православные христиане. А на острове стоит красивая церковь. Любуйтесь:
Третий остров не содержал каких-то достопримечательностей. Местные старички лениво играли в домино или карты. Я зашел в первый попавшийся бар и спросил по-английски: «Вере ай кен бай сигарет?». Мне показали направление, в ответ я сказал «Спасибо» по-русски. Местные сразу оживились, побросали карты, затихла неторопливая беседа. И началось: «Раша, раша», «Сигарет?», «Тейк сигарет!» (протягивая пачку), садись, рассказывай, что у вас там творится, как жизнь! Бери пиво! Стали хватать за руки мол, иди сюда, будь в тусе. Я оторопел от такого гостеприимства и, с криками «Но, сенкс!», пугливо поскакал в указанном мне направлении покупать сигареты.
В перерывах между островами на шхуне потчевали чем Бог послал. А Бог послал: шашлыки с рисом и салатом, вкусные пышки с корицей и сочные арбузы. Также работал бар, где всегда можно было купить баночку вкусного холодного пива Mythos местного разлива, чем я и пользовался неоднократно.
О полете в Грецию и прохождении таможни читаем в предыдущей заметке. Про отель можно прочитать в следующей заметке.