Hamburg (session 07)

0 коммент. | добавить комментарий
Пишет вам Сережа, коему осталось пребывать в земле Гамбургской, аки казачку засланному, четыре дня, зело не праздно провести предстоит кои, а в трудах ратных, сиречь в заботах праведных.

Как оказалось, немецкий народ очень ценит свои выходные дни, отпуска, и пр. Многие из них тяжело работают, но зато на выходные предпочитают или уезжать из города на природу, или выходить в центр Гамбурга и там праздношататься, пожирая сосиски, бутерброды, и запивая их обильным количеством пива и глювайна, сиречь глинтвейна с ромом. Мне такое желание выходить в общую толпу и шататься непонятно – но им, похоже, нравится. Об этом я узнал благодаря Сергею и Виолетте, проведя с ними почти всю субботу. Здесь в большом количестве проводятся рождественские ярмарки, на которых ничего нельзя купить (потому что – Боже мой – какой хлам там продается!), зато можно гулять и смотреть на толпу, чем мы и занимались. Я познакомился с их соседями из восточной Германии, которые приехали на выходные, мы жарили сосиски на балконе и ели их с салатом. Приятные люди – жаль, по-английски не говорят.

Еще на днях Питер посоветовал мне сходить в бассейн (Хуссенсбад, или как-то так). Я сходил – и не жалею, очень хороший релакс получается после работы. За 4-90 евро там можно везде плавать целый час. Например, я был в бассейне, где каждые 15 минут создаются высокие волны. Или вот еще: бассейн с теплой водой, который выходит наружу, т.е. в нем плаваешь под открытым небом – очень необычные ощущения. Еще термы есть – бассейны с очень-очень теплой водой, где приятно брать резинку и лежать на ней, а вода тебя плюхает вдоль бортика. Всего две остановки метро от нашей гостиницы. Кстати, там очень красивое и старинное здание. Питер рассказал, что еще его мать училась там плавать – вот как! А Миша туда не ходил – и не надо, он и так много пропустил.

В одной из предыдущих серий я упомянул о том, что мы договорились пойти с Питером в кино на «Wasser Sonne пустыни». В пятницу это осуществилось. Озвучка была русская, перевод – немецкими субтитрами. Мы приобщили Питера к глубинам русской души, объясняя ему моменты, сложные иностранцу для понимания. Особенно впечатлила его реплика Саида: «Стреляли» (до него она дошла как «There was a shooting»). После фильма он взял с меня слово, что я подаю ему диск с песнями Окуджавы, когда он приедет в Одессу в следующий раз. Не знаю, что он там поймет... Хотя, с другой стороны, Окуджава еще никому не повредил – так что подарю, конечно, пускай слушает.

В воскресенье мы гуляли в гавани, где много красивых яхт и больших судов. Кроме того, я побывал в музее, где давно хотел побывать. Это самый большой в мире макет железной дороги, он занимает целый этаж бывшего корабельного склада общей площадью 1600 кв.м. Собственно, это даже больше, чем макет железной дороги – там есть горы, леса, города, театры, люди, шахты, день сменяется ночью, за дождем появляется солнце... В городах по дорогам ездят машины, соблюдая правила движения – сам видел! Они показывают сигналы поворота, пропускают помеху справа, и никого не давят. На стадионе футбольная команда играет в мяч, в Лас-Вегасе горят огни казино, в Скандинавии в горах подъемники везут лыжников кверху. Иногда происходят неожиданные события: например, я застал пожар, на который тут же приехали две пожарные машины, скорая и полиция. Также кое-где есть кнопочки, нажимая которые, можно наблюдать интересные эффекты. Я случайно тыкнул одну – и маленькие человечки внизу в шахте стали отгружать уголь на подъемник... Я провел в этом месте (называется Miniatur Wunderland) два часа, сделал много фотографий и записал видео. Возле выхода я нашел комнатку, в которой сидят люди, управляющие этой миниатюрной жизнью – у них где-то с тридцать мониторов, и множество пультов. Очень большое впечатление на меня произвело это место – не каждый день увидишь такое!

В среду мы с Мишей пойдем к Питеру домой, потому что он нас пригласил. Познакомимся с его женой, наладим контакты потеснее с ним самим. Мы будем готовить, а потом есть т.н. «чиз фондю» - это такой горшочек с горячим сыром, куда нужно окунать, например, хлеб, и есть это. Питер говорит, что будет вкусно, а я не возражаю :) Вообще говоря, подход немцев к общению с нами очень странен. Похоже, что они не знают о текучке кадров среди украинских программистов и готовятся к сотрудничеству с нами (именно с нами, как с людьми – со мной, с Мишей, и пр.) на долгие годы. Мне, меняющему работы в среднем раз в полтора года, в этом смысле жаль немцев – скоро они в нас разочаруются. И кстати, следующий мой визит в Гамбург Питер планирует на май-июнь ;)

Был я также на Репербане и на Гербертштрассе – все правда, что говорят – действительно, много красных фонарей, разврата, и интересно. У нас такого нет. Собственно, у нас многого нет, но домой все равно уже хочется. Я закрыл еще не все позиции по подаркам близким, но собираюсь это сделать в ближайшие дни.

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

Hamburg (session 06) // Paris

0 коммент. | добавить комментарий
Закончив свой рабочий день в пятницу на полчаса раньше, мы с Мишей сначала поехали в гостиницу, чтобы приготовиться к поездке и собрать вещи, а затем отправились на автобусную станцию.

Полупустой автобус компании Gullivers отправился без опоздания, как это и принято здесь. Первая большая остановка была в Ганновере, где к нам присоединилась целая толпа людей, в основном негров. Затем была остановка в Брюсселе, где большинство пересело на другой автобус, идущий по направлению к Амстердаму – как оказалось, почти все они ехали в Амстердам или в Лондон. Спешу доложить вам, что вся дорога в Париж оказалась вымощена муками и болями в коленках – мои чересчур длинные ноги оказались совершенно не готовы к тому, что пассажир впереди опустил спинку сиденья для поспать. Кстати, этот пассажир впоследствии оказался девушкой Таней из Гомеля, а за нами ехало еще трое пассажиров – студентов из Питера. Как оказалось, русских в Гамбурге много, но попросту район, в котором мы живем и работаем, слишком крут для них – они обитают на окраинах. Так что засыпал я под русскую речь.

Утром автобус привез нас в Париж, к станции метро Gare de L'Est. Выйдя из автобуса, я осознал: Париж – город негров. Неграми вокруг были буквально все – от маленьких детей до дворников. Впрочем, пройдя чуть дальше, мы выяснили, что все не так плачевно – просто нас привезли в самый что ни на есть негритянский квартал Парижа. Так что, дабы долго там не задерживаться, я, следуя наперед составленному плану, потащил Мишу к метро, чтобы ехать в центр – на станцию Сите.

Однако нас ожидало еще одно испытание: чтобы поехать в метро, нам надо было купить билеты у кассира, который ни слова не понимал по-английски, и поэтому не мог объяснить, какие билеты нужны. К счастью, неподалеку я услышал русскую речь и, после краткой беседы с двумя нашими женщинами, уже покупал 10 билетов на 10 поездок в метро за 10.90 евро. Ах, парижское метро! Таких узких, кривых, темных коридорчиков, грязных переходов и крутых железных лестниц нет, наверное, больше ни в одном метрополитене. Однако, мы справились и с этим. Поблуждав немного в подземельях станции Сен-Дени Страсбург, мы вышли на нужную нам ветку М4, и поехали на остров Сите – остановок 5 или 6.

Выйдя из метро, мы внимательно осмотрелись. На часах было 10, Эйфелевой башней пока не пахло, так что мы отправились блуждать наугад. Видели много русских туристов. У двух девочек Миша спросил: «Девушки, вы не собираетесь в Дисней-Ленд?» – но сей вопрос был встречен отказом. Тем не менее, через несколько минут прогулки вдоль Сены перед нами предстал во всей красе Нотр-Дам де Пари – собор Парижской Богоматери. Благодаря Гюго, закрывшему эту тему, от обязанности описывать собор я избавлен раз и навсегда (привезу фотки – на них все есть). Мы с Мишей просто сперва обошли его и присели на скамейке в саду. Я сказал, что хочу смотреть собор внутри, и химер – наверху. Миша сказал, что хочет в Дисней-Ленд. Мне пришлось еще раз озвучить мысль о целесообразности того, чтобы разбежаться – ну, на том мы и порешили: Миша укатил веселиться на качельках и обещал в три часа ждать меня под Эйфелевой башней.

Я завершил круг вокруг собора и, вместе с другими туристами, зашел внутрь. Хочу вам сказать, что все правда – и высокие мрачные своды, и кельи, и фрески, и невероятнейшие витражи... Впрочем, только что понял: моего убогого слога с лихвой хватает на то, чтобы описывать еду, которую мы жрем в Гамбурге, но писать про Нотр-Дам я не готов – простите меня. Кое-что есть на фотографиях и видео, которые я привезу с собой – но впечатления, которое собор на меня произвел, – мне, увы, не передать.

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


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

Я посидел в кафешке над Сеной, выпил кофе, что было весьма не лишним после полу-бессонной ночи, и съел круассан. Затем, стоило мне сделать еще несколько шагов, как предо мной предстал Понт де Неф (Новый Мост), построенный в один пролет над всей рекой. У меня от радости в зобу дыханье сперло – так, что я даже забыл его сфотографировать. Не страшно, конечно – все мы его и так видели – но потом я старался быть внимательней, и держал фотоаппарат наготове.

Да какая к черту карта! Сделай еще два шага – и ты перед церковью Сен-Шапель и дворцом правосудия. Внутрь, из-за большой очереди, я снова не попал – но это не важно, потому что еще шаг – и твой каблук уже попирает брусчатку бульвара Сен-Жермен. Что ни шаг – то легенда, что ни взгляд – то новый шедевр – архитектурный, культурный, или исторический – здравствуй, Париж, весь я твой! Понт де Артс, набережная Мегре... Без преувеличения скажу, что идти от острова Сите можно без карты и в любом направлении – результат будет ого-го, уверяю вас. Например, вот я решил осмотреть некое здание, во дворе которого с бульвара виднелся фонтан. Зашел внутрь – и знаете что?

Это был Лувр. Я попал во дворик Лувра! Я просто шел по улице и зашел в Лувр! Получилось так, что я попал туда через один из боковых входов, и поэтому сперва не распознал его. Но зато уж вышел я оттуда по-настоящему – через главный вход, мимо знаменитых новых пирамид из стекла и металла, мимо фонтанов, и через сад Лувра со скульптурами и подстриженными деревьями прошел к... хм... ну, как сказать... В общем, к какой-то площади с градусником, похожим на наш памятник на Площади 10 апреля. Но слева виднелась Эйфелева башня – и я буквально заурчал от восторга. Затем, когда я спустился из сада Лувра вниз, мое урчание перешло уже в совсем неприличный рык – ведь площадь с градусником оказалась Пляс де ля Конкорд, ею начинались Елисейские поля, а вдалеке ясно была видна Триумфальная арка.

Добравшись до Авеню де Мариньи, мне пришлось сделать перерыв на обед, потому что вдруг я осознал, что уже наступило два, через час – встреча с Мишей под башней, а я еще толком не завтракал, и совсем не обедал. Ел я суп с креветками и мясное блюдо toast cannibale – вкусно все, ничего не скажешь, умеют ведь! После обеда я поспешил к башне и был там ровно в три, после чего получил сообщение от Миши, что, мол, Серега, задерживаюсь я, не накатался еще, жди меня в четыре. Я решил, что ждать его не буду, и встал в очередь насчет прокатиться на Эйфелеву башню вверх. Отстояв там с полчаса, я проник внутрь, после чего был вознесен в лифте на самый верх, откуда фотографировал и любовался. Башня вблизи – крайне величественное сооружение, огромная, но, тем не менее, очень четкая структура металлических конструкций. Поход на башню и вниз, вместе с очередями, занял два часа – и в пять, когда я спустился на землю, уже почти стемнело.

У меня была еще одна миссия – посмотреть на Елисейские поля ночью. Кроме того, спеша на рандеву с Мишей, телефон которого перестал отвечать, я так и не добрался до Триумфальной арки. Однако, в пылу покорения башни, я совершенно запамятовал, в какую сторону нужно двигать – и поэтому, в очередной раз положившись на судьбу, пошел в абсолютно случайном направлении. Париж точно вел меня за руку в тот день, и вскоре я вышел на Avenue des Champs-Elysees – почти у самой арки. Елисейские поля ночью – это море огней и света, башня сверкает слева, как огромный фейерверк, арка впереди, и... и...

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

Вот так и прошла поездка. Открыв рот от восторга в Нотр-Дам, я не мог его закрыть до самого вечера. Париж – чудный город, и понятно, что за этот день я успел только лишь прикоснуться к нему – но даже от одного этого прикосновения, черт возьми, еще острей чувствуешь, какая это штука - жизнь!

Hamburg (session 05)

0 коммент. | добавить комментарий
Как это часто и бывает, жизнь начинает диктовать нам свои условия как раз в тот момент, когда мы меньше всего ждем от нее эдакой подляны. Вот скажите – разве не странное совпадение: только мы с Мишей окончательно созрели для того, чтобы сделать Настоящую Вечернюю Вылазку на Репербан – с дойче-развратом и всеми делами – как на работе случился неожиданный затык. Тут-то и всплыл тот прискорбный факт, что приехал-то я сюда, оказывается, работать, и оплачивает меня здесь Люксофт, и что все развлечения и все самое вкусное хоть и не то чтобы отменяются, но следуют исключительно после работы. Вчера Питер вежливо и твердо попросил меня определить крайние даты всех майлстоунов, и еще попросил сделать это так, чтобы общий объем работы был завершен за два дня до нашего отъезда. Эти последние два дня расходуются так: один уходит на пересмотр выполненной работы и поимку ну совсем уж выпирающих ошибок, а еще один – на презентацию программы немецкому начальству, на которой буду присутствовать и я, в качестве ейного автора. С одной стороны – ничего страшного, а с другой – вчера я очень-очень устал, так что никакого разврату не получилось.

Сегодня, впрочем, его тоже не было. Когда мы, несколько серий назад, ходили с Питером в иранский ресторан, он сказал нам, что неподалеку есть еще хороший индийский ресторан, где тоже вкусно. Ну, вот мы туда сегодня и поперлись. Оба, по рекомендации официанта, заказали овчатину (или овечину – как неправильней?) - я «сааг», а Миша - «виндалу» (ударение везде в конце). Ох, ребятки, вы-таки думаете, что вы ели в жизни острую пищу? Мишин «виндалу» был оранжевой субстанцией консистенции детского поноса в оцинкованной тарелочке – как я теперь понимаю, в обычной тарелке оно прожгло бы дырку и запачкало пол. Дракончик в мультике дышал огнем как раз после порции «виндалу» - даю на отсечение че хошь, хоть палец – век кода не писать.

Мой «сааг» был такой же консистенции, но только зеленый, и походил на какашки в болотной тине. Однако, он оказался гораздо менее острым, а мясо так вообще было очень даже ничего. Соус только я не ел, потому что вредно. А зато расскажу про Мишу.

Он поел мяса из своего «виндалу». Я пытался его успокоить, говоря, что сами индусы соус, скорее всего, тоже не едят. Он позвал официанта и спросил, показывая на свой соус: «Is this eating?». Официант сказал: «Oh, yeah» (и, как мне показалось, вполголоса добавил: «Try»). Итак, Миша осилил две ложки, и больше не мог – а я снял сей эпический эпизод на видео. За соседним столиком бабулька, говорящая по английски, заинтересовалась нами, и объяснила, что «виндалу» - это одно из самых острых блюд в индийской кухне – а значит и в мире. Его заказывают обычно после 8-9 порций пива, бахвальства ради. Когда мы расплачивались, я сказал официанту за Мишу «It was a great experience», а тот мне ответил: «So, see you tomorrow, yes?». Он большой шутник – этот официант. Рекомендовать «виндалу» среднестатистическому украинцу - это готично. Завтра надо не забыть выяснить, что Питер имел в виду, когда хвалил этот ресторан...

Сейчас будет главная, и уже официальная новость: мы успешно купили билеты в Париж! С одной стороны – это «ура», «гоп-гоп» и «тру-ля-ля», но с другой – мы будем там всего один день: субботу, с 9 утра до 8 вечера. Многое надо успеть посмотреть. А этот, блин, Миша хочет ехать во французский Дисней-ленд кататься на каруселях! Нет, ну как так можно, а? Я лично ни в какой в Дисней-ленд не поеду. Буду сидеть на Монмартре, пить кофе, есть лягушек, и ностальгировать. Париж надо просто увидеть, а потом всю жизнь жить, осознавая свое превосходство над теми, кто там не был. Приехать в Париж, чтобы кататься на каруселях – это невообразимо пошло. Пейте уксус, господа!

А вчера я купил цифровой фотоаппарат – без помощи Сергея. Он вообще-то мог помочь, но пришлось бы заказывать аппарат в Гонконге, долго ждать доставки, а дешевле вышло бы баксов на 20. Нет смысла. Зовут аппарат Panasonic Lumix DMC FX-07 – это мыльница, можно снимать одной кнопкой, у нее оптика Leica, широкоугольный объектив, высокая чувствительность и 7 мегапикселей – типа круто. Буду фоткать.

Пока я пишу все это, в прачечной внизу, в подвале, достирываются мои вещи. Проникнуть туда я не мог, потому что гостиница у нас симметричная, и ломился я попросту не в те двери. Фрау Мюллер меня за это пристыдила своим немецким взглядом.

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

У вас, читая меня, может сложиться мнение, что я здесь в основном ем. Так, к этому моменту я породил 706 слов, 287 из которых посвящены еде. В свое оправдание скажу, что моя жизнь здесь уже входит в свое русло, и одним из основных развлечений в вечернем Гамбурге, где магазины закрываются в 20:00, музеи – и того раньше, а культур-повидло (театры, кино) – сплошь на немецком, является еда.

У местных бюргеров, кроме еды, развлечениями служат пиво и, по словам Сергея, секс – в самом своем неприглядном виде. Так что мы, конечно же, пойдем на Репербан в один из вечеров искать приключений :) Но, судя по всему, только после Парижа, который уже сигналит нам своей Эйфелевой, как светит маяк в ночи, подавая знак идущим мимо кораблям.

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


Рис. 5.1. Вид на холл гостиницы Schaper

Hamburg (session 04)

0 коммент. | добавить комментарий
«Как я провел выходные»

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

В субботу я проснулся в 9 часов. Позавтракав, как обычно, молочной кашей, йогуртом, сырком-колбаской, булочкой и кофе, я позвонил Сергею. Сергей – это друг семьи, он эмигрировал в Германию и живет здесь уже лет шесть. Он был рад моему звонку, и мы договорились, что он подъедет прямо ко мне в гостиницу в два часа пополудни. Затем я поехал с Мишей в город покупать покупки в супермаркет Walmart. Walmart – это международная сеть больших магазинов, в которых продается все – от еды до одежды. Я купил себе кенгурушку, потому что давно хотел себе ее купить. Кенгурушка – это такая кофта с капюшоном и карманом на животе. Очень хорошая. Также я купил несколько подарков. Я составил список тех, кому надо купить подарки – их оказалось 7 человек. Теперь есть причина для больной головы – в субботу я закрыл только две с половиной позиции. Конечно, все подарки можно купить и в Одессе, но разве мне кто простит, что я был в западной Европе, и ничего им не привез? Не простят.

Вернувшись, я оделся и стал ждать Сергея. Мы с ним посидели в кафе выпили по капуччино и съели по круассану. Он рассказал мне, как тут надо себя вести. Здесь все любят друг на друга подавать в суд. Например, категорически нельзя ходить по велосипедным дорожкам, коих тут великое множество. Если на велосипедной дорожке на тебя наедет велосипедист, и в результате этого, к примеру, он упадет, то он обязательно подаст на тебя в суд. А если, к примеру, водитель автомобиля напугает пешехода, затормозив слишком близко к пешеходному переходу, то пешеход запомнит номер автомобиля и подаст на водителя в суд. Еще Сергей рассказал, как ему здесь дарит подарки телефонная компания. Каждые два года он должен с ней перезаключить договор. В конце первых двух лет компания сделала это автоматически. В конце вторых двух лет он написал им письмо о том, что отказывается от их услуг. В ответ телефонная компания предложила ему в подарок новый телефонный аппарат и 17-дюймовый ЖК-монитор – в обмен на то, чтобы он остался их клиентом. Сейчас заканчиваются третьи два года – и Сергей снова готовится писать им письмо об отказе от их услуг, потому что ему нужен новый ноутбук. Вот такая здесь идет борьба за клиента.

Потом мы поехали к нему домой через центр на его машине. У Сергея машина «Рено» - вместительный минивэн. Квартира двухкомнатная, неплохая, все есть, стоит около 500 евро в месяц, вместе с оплатой за свет. С нами был также песик Джоник. Джонику уже 11 лет, он в порядке. Да, а еще мы с Мишей были в магазине, где продавали разную технику, и мне очень понравился один цифровой фотоаппарат – Миша купил себе такой, и я бы тоже такой купил. У нас таких нету. А поскольку Сергей сказал, чтобы я ничего серьезного не покупал сам, т.к. он все может доставать дешевле, чем везде, то я попросил его разузнать об этом фотоаппарате. Если получится, то будет хорошо.

После встречи с Сергеем я встретился с Мишей в центре мы там немножко погуляли, Миша купил себе свитер, а я ничего не купил, но кое-что присмотрел. Может, куплю, а может – нет. Как получится.

В воскресенье, раскачавшись часам к 11 утра, мы поехали в район знаменитой улицы красных фонарей Репербан – посмотреть, что же это такое. Там интересно: много зазывающих витрин, магазинов с занятными товарами и дискотек. Решили сходить туда, когда будет темно – чтобы поближе познакомиться с немецким развратом, легализированном на государственном уровне.

После Репербана мы были на фестивале Winterdom. Winterdom – это такое развлекательное место, где очень много людей, аттракционов и очень много еды. Мы покатались там на американских горках, и еще на двух аттракционах – на одном нас сначала поднимали высоко вверх, а потом швыряли вниз, и наоборот – опускали вниз, а потом закидывали вверх; на втором суть была та же самая, только по кругу, и часть времени мы висели вниз головой. Получилось очень здорово, мы осуществили большой выброс адреналина. У нас есть видео с американских горок, как мы на них едем, орем и материмся. Очень страшно было, но и очень классно.

Утром я нашел в гостинице туристический путеводитель по Гамбургу – хочу посетить здесь пару музеев. Ах да, еще я не написал про созревший у нас план съездить в Париж. Париж – он лучше Амстердама, и лучше Берлина. Ехать туда нужно целую ночь – можно выехать в пятницу в 8, в субботу в 9 утра быть в париже, гулять там до 9 вечера, и в воскресенье в 8 утра быть в Гамбурге. Мне очень хочется поехать в Париж, потому что там Эйфелева башня, Елисейские поля – да и просто потому, что это Париж. Увидеть Париж и умереть. Единственный затык, как всегда, получился в нас с Мишей. Мы оказались просто не готовы к возможности вот так вот взять и поехать туда. Поэтому нам пришлось взять тайм-аут с официальной отмазкой «мы только завтра уточним, позволяют ли нам это наши визы». Так вот, если позволяют – я поеду. Обязательно. Не представляю, как можно лучше провести выходные, кроме как съездить в Париж.

В воскресенье мы ужинали в итальянском ресторанчике в центре – цены божеские, как по местным меркам, и еда потрясающе вкусная! Я съел луковый суп за 3 евро, и пасту «Карбонара» с беконом, яйцом и сыром «Пармезан» за 7 евро. Еда за 10 евро – это хорошо.

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

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

Hamburg (session 03)

0 коммент. | добавить комментарий
А Сереженька-то, хотя он и сам не до конца в это верит, все еще находится в Гамбурге, откуда и ведет свое повествование о житии программиста, попавшего в нужное время в компанию Люксофт, снарядившую его в месячную командировку. С удивлением и радостью я наблюдаю за тем, как повышается качество жизни среднестатистического Сережи, выезжающего за рубеж. Например, как вам такой штрих: утром, когда я в полвосьмого выхожу позавтракать, в гостинице, обычно, очень тихо. Но, как только я приближаюсь к холлу, откуда-то начинает играть тихая приятная музыка, которая развлекает меня во время сеанса принятия пищи. И я, хоть вы меня режьте на куски и намазывайте на хлеб, не могу сообразить, как это у них так получается. Сегодня родилось подозрение, что управительница нашего отеля – фрау Мюллер, как я ее называю – где-то сидит и ждет, когда я появлюсь в зоне ее видимости, чтобы нажать на кнопку PLAY, дабы тем самым доставить мне еще больше fun und pleasure.

Но, к сожалению, жизнь здесь, как и в Украине, состоит не только из развлечений. Вот и во второй день нашей работы в офисе Харман-Бекера я к вечеру так устал, что даже не поехал осматривать центр города, как планировал, равно как был не в состоянии писать о чем бы то ни было...

Но я исправляюсь. Нам с Мишей выдали электронные ключи – это такие маленькие пластмассовые блямбы, которые нужно подносить к электронным замкам, которыми в компании снабжены все входные (и выходные) двери на этажах. Сам по себе этот факт, бесспорно, абсолютно не интересен – интересно другое: для того, чтобы открыть дверь, ключ нужно поднести к замку на одну-две секунды. Однако, задержка ключа на пять секунд включает сигнализацию на всем этаже, а также активизирует детекторы движения. Любой поворот головы человека в офисе после этого заставит завыть сирену. Так что мне, открывая двери, необходимо быть чертовски внимательным и быстрым, чтобы случайно не получилась мелкая, досадная неприятность.

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

Только Мише все нипочем – он выползает из норы, нагребает жрачки на тарелку, и вновь уползает в нору – до выхода на работу. А я весь день ходил и терзался в догадках. Терзался в обед, когда мы ходили кушать в страховую компанию, имеющую столовую для всех желающих. Терзался, пока жевал тушеную капустку и мясцо с ананасиком. Так я терзался вплоть до вечера, когда Питер предложил обсудить новые проекты, которые ждут наш отдел навигации в ближайшем обозримом будущем. К началу седьмого, когда обсуждение, наконец, закончилось, я поехал-таки смотреть центр. Питер сказал, что ему со мной по дороге – ну а Миша уже поехал с нами автоматычно. Мы приехали на центральную станцию метро Hauptbahnhof Nord, откуда сперва отправились в автобусные кассы. Дело в том, что я имею планы посетить Голландию, а в идеале – сам Амстердам. И в самом деле – думали мы с папой – дотуда от Гамбурга рукой подать. Но это если смотреть по карте. А в действительности туда ехать нужно 6 часов. Таким образом, даже если отправиться туда на выходные, то потери все равно слишком велики: 12 часов уходит на дорогу, а сидение в автобусе, как известно, не является самым лучшим времяпрепровождением. К тому же и время неудобное – выезд в 13:45 (пн, чт, сб), приезд в Амстердам - в 20:00. Ну, приеду я туда в восемь вечера – и что? Спать идти? А дебоширить кто будет – Пушкин? То-то и оно, что неудобно!

Существует, правда, семейство автобусов, которые ездят в Амстердам каждый день, но... хи-хи... через Брюссель – всю ночь, с десяти часов вечера до 9 часов утра. Можно было бы выехать туда в пятницу вечером, приехать в субботу утром, и уехать – в субботу вечером (выезд обратно – в 20:15), но, как всегда, есть нюанс: пересадка в Брюсселе, да и, все же, большой это крюк. Кто бы мне посоветовал – заводиться, или не стоит? ;) А так – цены хорошие, ехать можно.

Созрел также у меня план съездить в Берлин. Дорога туда отнимает не больше двух часов, автобусы ходят каждые два часа каждый день, так что это не должно быть проблемой. Питер с Мишей все твердят мне про кинотеатры IMAX, которые там есть, и что для меня очень важно обязательно побывать внутри одного из них. IMAX – это такие кинотеатры со стереоизображением, Питер говорит про них «wow!» и «wonderful!» - думаю, стоит и это попробовать. Ведь круто – побывать в Берлине? Унтер-ден-линден, рейхстаг, и все такое? По-моему, круто.

После автобусных касс мы пошли кушать. Питер повел нас в иранский ресторан, где я изволил откушать салат с овощами, мятой и лимонным соком, филе ягненка, и изумительнейший, невероятнейший, самый что ни на есть лучший в моей жизни рис! Лучшего риса я никогда не ел, и, увы, вряд ли поем еще раз, если только сюда не вернусь. Хозяин этого ресторанчика открыл нам некоторые (но, очевидно, не все) секреты приготовления такой вкуснотищи, так что слушайте.


«Как готовить рис»

Рис готовится в два этапа. Сначала он варится в большой кастрюле с большим количеством воды, чтобы быть рассыпчатым. Только перед тем, как кипятить воду, в нее нужно положить кусок масла, чтоб оно растопилось и плавало вверху. Варить его надо минуты 2-3, чтобы серединки рисинок еще оставались твердыми. Потом рис нужно откинуть через дуршлаг, и сделать вот что: взять другую кастрюлю, налить в нее чуть-чуть воды (полчашки, или там чашку), снова добавить масла, вывалить туда рис, закрыть крышкой и обмотать полотенцем. Таким образом, рис, который окажется под водой, после приготовления есть будет нельзя, зато тот рис, который сверху, будет доварен на пару, и, по словам этого хитрого иранца, обретет unbelievable taste. Так что все заинтересованные лица могут взять это на заметку.

Потом мы с Питером еще прошлись по центру, где он наметил нам points of interest. Зашли в фойе любимого Питером кинотеатра. Оказывается, он любит кино, часто ходит в кинотеатры, и, вроде, является членом клуба любителей русских фильмов – по крайней мере, 8 декабря здесь будут крутить «Белое солнце пустыни» – в оригинале, но с немецкими субтитрами – Питер туда пойдет, и приглашает нас. Если будет нечем заняться – пойдем конечно, отчего же не пойти.

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

А еще мы в двух шагах от нашей работы нашли супермаркет Walmart. Хорошее место, все там есть, много еды, много одежды, много всего. Да и вообще, мне здесь нравится. Все нравится, кроме погоды. Погода – самая что ни на есть мерзопакостная – ни дня не проходит без дождя, дикая влажность, пасмурно и серо. Оно-то понятно, что Гольфстрим обязывает, да и маленькие речушки вокруг испаряются в атмосферу – ум понимает, да серце не приемлет...

Ну, хватит на сегодня – уже поздно, пора спать. Резюмирую: все действительно здорово, и я очень рад, что я очень рад, чего желаю и всем вам :)

Hamburg (session 02)

0 коммент. | добавить комментарий
Вслед за первым днем моей поездки в Гамбург незамедлительно проследовал второй. Ну а, собственно говоря, что такого? Оно мне пишется – вот я и пишу. Глупо будет писать спустя несколько недель, когда каждый следующий день станет похож на предыдущий, и мощный поток новых впечатлений сменится стоячим болотцем обыденности. Поэтому, пока рука писца кропать не устала, спешу породить еще несколько строчек.

Мой будильник зазвонил в семь утра. Время чистого спанья составило 6 часов – далеко не сиеста для меня, привыкшего с младых лет даже днем ухо давить, не говоря уже о крепком ночном сне. В 7-30 нас ждал завтрак в гостиничном холле. Холл представляет собой уютную комнатку с диваном, столиком, и еще несколькими маленькими столиками и шкафчиками вдоль стен. На всех этих столиках были разложены булочки, круассаны, колбасы, сыры, чаи-кофеи, соки, а также фрукты, молоко и разные растворимые хлопья. Ел в это утро я хлопья рисового происхождения, залитые молоком, круассан, колбасу, сыр, йогурт, и пил кофе со сливками. Не завтрак – а чистое здоровье! Мише все еще нездоровилось, в связи с чем он отказался от еды и укрылся в своей норе.

Миша Норель
Укрылся в норе.


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

Затем пришел Аксель, и мы отправились к метро. По дороге мы не стали покупать билеты, потому что Аксель заявил, что уже купил билет, по которому мы можем ехать все втроем. Спасибо, Аксель! От нашей гостиницы до метро идти минут пять, и ехать до работы – минут 20-25. В дороге есть одна пересадка. Кстати, станция, на которой мы живем, называется... кхе-кхе... HOHELUFTBRUCKE. Переводится это как «высокий мост». Названа она так потому, что рядом есть высокий мост. Просто как кирпич, и элегантно как бакенбарды. Вот у нас в Одессе – улицу Манежную переименовали в улицу 10 апреля. На каких, спрашивается, радостях? А тут – есть мост, значит и станцию называют соответствующе. Одно слово – дойчландия.

Итак, едем мы по ветке U3 до станции Schlump, где пересаживаемся на ветку U2 и едем до «Берлина-туа» (Berliner-Tor). Оттуда пешком еще минут 10, и мы – в Харман-Бекере. Компания сидит в здании, которое раньше было шоколадной фабрикой, даже труба еще осталась с тех времен. Поднимаемся на третий этаж в стеклянном лифте. Долго идем по коридору, и – Hello Peter, how are you? Вручаю подарки. А дальше происходит вот что. Нам с Мишей приготовили два места: одно – в кабинете Питера, а другое – в соседнем кабинете, с Титькой. Титька (Frank Tiedke) – сотрудник компании Харман-Бекер, весьма молчаливый и очень застенчивый на вид парень. На мою тираду о том, что, мол, мы знакомы заочно, так как, дорогой Титька, видели твои программы, которые ты выкладывал на сервере, он никак не прореагировал. То есть просто посмотрел прямо в глаза и промолчал. Или я дурак, или он английского не знает. В общем, надо было решить, кто будет сидеть с Питером, а кто – с Титькой. Говорю Мише: «Садись с Питером. Ты – мой фюрер, тебе оно важнее». Миша отвечает: «Садись лучше ты». Ну, на том и порешили.

Питер устроил нам небольшую экскурсию по компании, познакомил с некоторыми своими коллегами, из которых я не запомнил абсолютно никого. Помню только, что один толстый немец жевал булку, а два худых немца дружелюбно улыбались. Надеюсь, раззнакомимся со всеми по ходу дела. Порадовало наличие комнатки, в которой можно бесплатно брать любые напитки, включая минералку и мой любимый айс-ти. Кофе у них, похоже, заварной – это тоже плюс; также имеется много сортов чая – буду пробовать постепенно. Еще есть комната, в которой можно брать бесплатные фрукты, а также покупать бутерброды. Покупаются они за специальную валюту в виде пластиковых жетончиков – т.н. Innovative Systems Euro – которую можно получить у секретаря в обмен на настоящие евро. Решил для себя, что не буду этим заниматься – завтрак в гостинице вполне себе ничего, а на обед полезно выходить аутсайд. Тем более, что в пятницу все бутерброды и пирожные в 16 часов становятся бесплатными – в это время все собираются в той комнате и общаются, отмечая конец рабочей недели.

На обед Питер, Аксель, и еще один немец в очках водили нас есть пиццу. Я ел пиццу с беконом и грибами – не фонтан, но можно покушать ради разнообразия. Из разговоров запомнилось обсуждение ticketing system гамбургского метро. У них существует множество различных проездных билетов. Одни позволяют ездить в течение дня одному человеку; другие – ездить одному, но не раньше 9 утра; третьи – ездить компанией не более пяти человек; четвертые рассчитаны только на одну поездку, и т.д. По словам Питера, необходимо прослушать трехмесячный курс в университете, чтобы разобраться во всем этом. Вот и Аксель, встряв в наш разговор, гордо сообщил Питеру, что купил нам билет на троих. Питер не поленился проверить, и оказалось, что этот билет был на одного человека. Так что, очевидно, Аксель прогулял этот курс... Если бы нас поймал контролер, пришлось бы платить штраф. Кстати, похоже, что существует хорошо отличная от нуля вероятность того, что за время поездки контролер так и не проверит честно купленный билет – сегодня вот нас никто не трогал, но, правда, рисковать все равно не хочется.

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

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

Миша по нездоровью остался дома, а я решил немного прогуляться, благо было еще только около семи. Решил в первый вечер никуда не ехать, а исследовать прилегающую к гостинице территорию. Нашел кинотеатр, несколько магазинов (кстати, почти все магазины в Гамбурге закрываются в 20:00 – так тут принято), пару-тройку ресторанчиков, макдональдс, две аптеки. Райончик не сильно оживленный, но и не совсем уж спальный. Сунулся было в один ресторан – да напугала гардеробная при входе и куча маленьких VIP-залов. Решил, что вернусь сюда, когда вырасту. Мой выбор насчет покушать остановился на заведении Block House, где меня накормили большим свежим овощным салатом, печеной картошечкой и восхитительнейшим стейком. Ноль жира, с кровью – но самую-самую малость, и вкуснющий итальянский соус. М-м-м, очень вкусно было, чесслово! И стоило вместе с питьем всего 20 евро, включая чаевые. Поел я, да и вернулся в номер, потому как было уже около девяти. А больше сегодня и говорить не о чем.

Только про светофоры одно предложение: они тут такие же, как у нас, только красных человечков – два, чтобы внимание сильнее привлекать.

Hamburg (session 01)

0 коммент. | добавить комментарий
Я пишу эти строки, лежа в кровати своего номера №3 в гостинице на Клостераллее. Возможно, название улицы я слегка переврал, но отнюдь не из желания запутать, а только лишь из-за обилия событий, коими был полон этот день, 20 ноября, понедельник 2006-го года. Сейчас 23 часа 45 минут, и только к этому моменту у меня появилась возможность подвести некоторые итоги.

Поездка в Гамбург началась для меня в 11 часов, когда мы поймали машину и приехали к офису Люксофта в дом с шариком. Пообщавшись (и попрощавшись) с ребятами из моего отдела, я совершенно точно понял, что забыл взять из дома страховку, наличие которой необходимо для вылетающих по Шенгенской визе в Евросоюз. В связи с этим, после напутственной беседы с начальником одесского Люксофта Андреем Лозой, мы с Мишей Норелем заказали такси, которое привезло нас сперва ко мне домой за страховкой, а после – в аэропорт.

Паспортный контроль, таможенный контроль, контроль безопасности – все это было нами пройдено на удивление гладко. Уже спустя минут 15 мы сидели в предбаннике перед взлетным полем, любовались на прилетающие и отлетающие самолеты, и философствовали о многогранной программистской доле. Так продолжалось вплоть до того момента, когда прозвучало объявление о задержке нашего рейса, Одесса-Прага, на 50 минут. Ситуация была усугублена тем, что между ним и следующим рейсом – Прага-Гамбург, на который мы должны были попасть, интервал составлял также 50 минут. Короче говоря, когда мы попали на борт нашего самолета Аэробус А-310 с опозданием более часа, надежда вовремя улететь из Праги в Гамбург стала совсем уж призрачной.

Но самолет все же взлетел. Летящий первый раз в жизни и дико кашляющий Миша, который умудрился подхватить (на минуточку!) левостороннюю пневмонию, восторженно смотрел на проплывающие под крылом облака, а я поглощал апельсиновый сок, вареную картошку (возможно, впрочем, это были сырные шарики), телятину, булочку с маслом, пирожное и чай со сливками. Полет продолжался два часа, однако с учетом отличия на час времени в Праге от времени в Одессе, прилетели мы туда в 17:15. Надежда умирает последней, поэтому мы, аки укушенные в седалищную часть, ринулись бежать по пражскому терминалу до ближайшего электронного табло, на котором прочли, что на Гамбург, увы, Gate Closed.

Разочарованные в своей счастливой звезде, мы потопали к Transfer Department нашей компании-перевозчика Czech Airlines. Я объяснил проблему девушке за стойкой, и она с улыбкой сообщила, что мы (и наш багаж) можем полететь в Гамбург следующим рейсом, в 20:25. Однако, перевозчик там уже другой – Lufthansa, и организатор (или посредник – сложно сообразить) тоже другой – компания Memzies Airlines. Ситуация называется «прощай багаж» - при таком количестве транспортных компаний не потерять его было бы просто невероятно.

Однако, обо всем по порядку. Улыбчивая девушка сделала пометки на наших билетах, ввела нас в компьютер, и сказала идти в Мемзис, чтобы сообщить о себе, указав при этом направление «все время прямо». А надо сказать, что Пражский аэропорт не просто огромен – он дико, ультра, архиогромен! Широченные и длиннющие переходы со множеством электронных табло, ответвлений, эскалаторов, движущихся лент и стоек подействовали на нас удручающе. Поэтому по дороге прямо мы спросили у одного из служащих аэропорта, как нам пройти в Мемзис. Он показал рукой налево, где находилась стойка с дядечкой за стеклом. Здесь-то и началось веселье. Дядечка попросил паспорт, посмотрел на мою визу, открыл последнюю страницу, шлепнул там печать и сказал «Велкам».

Все случилось секунд за 10. Я пересек границу Чехии. Я оказался в Праге, о чем красноречиво сообщал штампик в моем паспорте.

Черт!

Да, на такой поворот событий рассчитывать не приходилось. Мы рассеянно вышли из здания аэропорта и вдохнули сырой пражский воздух. Постояв там с минуту, мы решили действовать. В справочной я узнал, где находится Мемзис. В Мемзисе мне сказали, что они к нашему полету отношения не имеют, и предложили обратиться напрямую в Люфтганзу. В Люфтганзе объяснили, как пройти на чек-ин нашего рейса.

- What will happen to our baggage?
- Oh, no problem with that!

Пройдя чек-ин и получив посадочные талоны, на которых значилось время посадки 19:55, мы отправились в ресторан. Да, я забыл написать, что улыбчивая девушка из Czech Airlines выписала нам талоны по 140 крон (где-то 6 евро) каждому, на которые мы могли бы перекусить. Есть не хотелось, но дико хотелось пить, поэтому я ограничился йогуртом и персиковым айс-ти. Перекусив, мы пошли к указанному в наших посадочных талонах гейту С12, где нас досмотрели, поставили штампики о вылете из Праги, и пропустили в терминал. Таким образом, я пробыл на территории Праги около двух часов, о чем имею фотографию, штампики в паспорте и впечатления.

Дальше все было немного скучнее. Люфтганза посадила нас на небольшой самолетик CRJ-200 (впрочем, я могу и ошибиться в этих буковках). Полет в Гамбург продолжался около часа, за это время я съел бутерброд с сыром, шоколадку и выпил чай. При пересечении границы, немецкий таможенник спросил у меня, что я забыл в Праге – ну, пришлось изворачиваться, говорить про delay, flight change и re-check-in... Зато, выйдя из самолета к движущейся дорожке в аэропорту Гамбурга, я сразу увидел наши чемоданы! С багажом и правда не было проблем, за исключением того, что у моего чемодана была повреждена ручка – отломалась ее верхняя часть с компасом. Тем не менее, катить его все равно можно – и на том, как говорится, данке.

Встретил нас немец в годах по имени Аксель, и повез в гостиницу на своей машине. Сначала мы приехали на улицу Оберштрассе, но оказалось, что номера нам забронированы в другом месте – в полутора километрах оттуда. О том, как приехали и разместились – писать особо нечего. Скажу только, что номер хороший, имеет ванную с душевой кабинкой, туалет, кухню, телевизор, шкафчики, ну и так – по мелочи. Разложившись и почистив зубы, я написал эти строки, которые отправлю уже завтра, 21 ноября, и лег спать.

Очень важно, чтобы было что вспомнить после поездки. Мне – уже будет, и это радует :)

RSS (Redkiy Svinksiy Svin)

0 коммент. | добавить комментарий
Уфф, ну и навозился я с этим эр-эс-эс-ом, пока заставил его работать по-человечески!

Проблема изначально была в том, что мой хостинг любит показывать рекламу на всех страницах, превышающих некий пороговый размер. Соответственно, генерируемый мною RSS-поток оказывался ни разу не валидным, а как раз наоборот - инвалидным. В связи с этим я изобрел солюшен: создавать на сервере файл с расширением .xml, который и служил в качестве моего RSS-потока весь последний месяц. Каждый раз, когда я добавлял запись, мой сайт запускал скрипт, перезаписывающий данный файл.

И все-то было хорошо, только вот было нехорошо. Некрасиво было, одним словом. Поэтому сегодня я задался целью все исправить. Несколько раз прогнав свой урл через FeedValidator.Org, я исправил:
а) проблемы с кодировкой: реально было UTF-16, а в заголовке выбрасывалась WIN-1251. Теперь там всегда WIN-1251.
б) content-type - был он text/xml, а стал - application/rss+xml.

К такому контент-тайпу мой хостинг не умеет добавлять рекламу, поэтому теперь RSS-поток работает круче в сто раз - теперь он действительно поток, а не файл, потому что генерируется на лету.

В связи с вышесказанным Редкого Свинского Свина на данной территории прошу считать укрощенным.

Число и подпись.

UPD 27.12.2007: этот пост уже не актуален - тут я рассказываю, как я мучался с RSS, когда использовал WebWizJournal на lonewolf.od.ua.

Из этических соображений

1 коммент. | добавить комментарий
Собрался я тут пойти на концерт одной группы (название группы я не пишу из этических соображений). В связи с этим я вышел в инет, чтобы узнать диапазон цен на билеты, где был приятно удивлен: Google одним из первых результатов выдал сайт (название которого я не пишу из этических соображений), на котором эти самые билеты можно сразу и заказать. На следующий день их доставит курьер. Заказав 2 билета, вчера я лег спать в ожидании сегодня.

Сегодня мне перезвонил женский голос и мы договорились, на какое время мне нужно доставить эти билеты (время я не указываю из этических соображений). Когда время наступило, билеты мне принес почему-то один знакомый программист (имя которого я не пишу из этических соображений). На мой вопрос: "А чего ж ты подрабатываешь курьером?" он ответствовал примерно такой историей.

В общем, именно он писал этот сайт, с которого я делал заказ. Сам сайт существует всего пару дней, я у них первый клиент. А поскольку курьерская служба еще не функционирует, то билеты, кроме как программисту, отнести оказалось некому. Вот он их и принес. Короче, дал я ему денег за билеты (сколько денег - не пишу из этических соображений), и мы разошлись.

Как справедливо мне советует другой программист (имя которого я не пишу из этических соображений):

- Сережа, не пиши сайты! Особенно с предложениями интим-услуг :)

C++: const-методы класса. Как не дублировать код

5 коммент. | добавить комментарий
Из последнего задания: "особое внимание уделить избавлению от copy-paste, как, например, в методах "find" из HashImpl".

Методов find в классе HashImpl, реализующем хранение произвольных данных по хеш-ключам, есть два:
1) const Item* find (KeyType key) const
2) Item* find (KeyType key)

Первый вариант будет вызываться для константного объекта, а второй - для неконстантного. Проблема следующая: код этих методов звучит не просто как "return & mHash[key]", а реализует какой-никакой, а все же алгоритм поиска. Да и хешей там два - первичный и вторичный, что еще немножко усложняет ситуацию. Внутри методов используются всякие вспомогательные указатели на внутренние данные класса, которые в константном методе должны быть константными, а в неконстантных - соответственно, неконстантными.

Отсюда формулируем вопрос: как избежать дублирования кода для константной (const) и неконстантной версий одного и того же метода, реализующего нетрививальный алгоритм? Примечание: константный объект может пользоваться только методами, объявленными с квалификатором const, и не может использовать неконстантные указатели и неконстантные ссылки на свои данные - в частности, не может их возвращать.

Нарытые варианты решения:

1. Вызывать константный метод из неконстантного.
Чем плох: константный метод вернет константный указатель, с которого затем придется снимать константность, используя const_cast, что небезопасно и отстой. Код будет выполняться на целевой платформе (это такой девайс с черт-знает каким процессором и черт-знает какой организацией памяти). Вполне вероятно, что константный объект окажется в физически защищенном от записи сегменте памяти, и, при попытке записи чего-либо по его адресам, мы получим жопу. Не наш метод.

2. Объявлять хеш-таблицы как mutable, чтобы иметь право изменять их в константном методе
Чем плох: mutable - грязный хак. Если программист серьезно размышляет об использовании mutable - ему надо выйти проветриться (цитатирую Мишу Нореля). Короче, тоже не наш метод.

3. Использовать неконстантные указатели "через один указатель"
Объясняю популярно. Если в классе Foo есть поле mData типа Bar, то из константного метода нельзя сделать return & mData.getItem(key). Но зато если эту же mData объявить как Bar*, выделяя память для него в конструкторе, то из константной функции можно сделать return & (mData->getItem(key)).
Чем плох: не удовлетворяет требованиям к классу: необходимо использовать статическую инициализацию. И класс-то вовсе не класс, а шаблон, один из параметров которого - размер хеш-таблицы. Опять облом.

4. Хранить рядом с данными указатель на них, и возвращать item через него (см. метод 3)
Ну, типа объявить в классе Foo два поля: Bar mData и Bar* mDataPtr, присвоив последнему mDataPtr = & mData в конструкторе.
Чем плох: См., во-первых, метод 1. Если объект будет размещен в защищенной от записи памяти, то при записи по указателю mDataPtr будет жопа. Во-вторых, sizeof всех объектов увеличится на 4 байта. Если объектов будет миллион, то мы проебем 4 метра памяти, что для целевой платформы может быть нехорошо.

5. Написать еще одну константную функцию для поиска
Да-да, пишем третью функцию:
void findHadler (KeyType key, KeyType & resKey) const

Такой метод можно вызывать из обоих версий find. Он вернет ключ, по которому хранится искомый item. А потом константный find может вернуть const Item* p = & mData[resKey], а неконстантный - Item* p = & mData[resKey].
Чем плох: Добавляются лишние вызовы, немножко падает производительность, дыр-пыр-тыр, бла-бла-бла. Все это, по сравнению с проблемами предыдущих вариантов - суть мелочи, поэтому я остановился именно тут.

Итого: я не люблю C++, среди много-прочего, как раз за такие вот мансы. Ну, типа, придумали мы слово const - и теперь ловим сопутствующие проблемы. Зато (sic!) мы получаем неибацца свободу выбора решений таких проблем...

А свободу, как известно, не купишь :)

Послание Святого Павла к гермафродитам

0 коммент. | добавить комментарий
Дорогие гермафродиты!

Go fuck yourself!

Всегда ваш,
Святой Павел.

Complementing Klaymen!!!

0 коммент. | добавить комментарий
Привет, я Вилли. Вилли Баранкин. Если ты это смотришь, то ты молодец. Вилли счастлив."

Немало попыток я предпринял в свое время, чтобы найти в Инете саундтрек к ахуительной игрушке The Neverhood. Итак, что мы знаем о ней?

1. Написана она была свежеиспеченной студией The Neverhood, по заказу Dreamworks Interactive (да, ТОЙ САМОЙ Dreamworks!). За год они ее написали.

2. На создание декораций было потрачено три тонны пластилина

3. Съемкой и производством руководил Стивен Спилберг. Пэрсонально.

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

Поэтому пост посвящен тому, что наконец-то я нашел саундтрек The Neverhood!!! Кусочек был в расшаренной папке одного сотрудника, а еще кусочек я скачаю с не-скажу-откуда, когда попаду в инет снова. Ура! Ура! Ура!

Интрига же сегодня заключается в том, что, оказывается, главная тема (та, которая играет в Credits), оказывается, имеет слова! Не берусь судить, насколько они осмыслены, но тем не менее:

The Neverhood Theme


Complementing Klaymen
Clitton Clatton Klogg
We behold it's Hoborg
Big Robot Bil is odd!
The Clockwork Beast and Frenchy guy are with them. Hard to see:
Crit Unit "A" – oh what a day! – he joins Crit Unit "B"
At the Neverhood
Neverhood
Neverhood!

Эту бню надо петь все время, варьируя ее, например, так:

K k k k Klaymen
K k k k Klogg
Ho ho ho ho Hoborg
Big Robot Bil is odd!
C....C....C....C....Clockwork Beast, F....F....Frenchy.... gee!
Crit Unit "A" – oh what the hey! – he joins Crit Unit "B"
At the Neverhood…
Hey ho
Hey ho
Hey ho!

Swift Publisher - мой первый проект в BeLight

0 коммент. | добавить комментарий
Моя работа в Билайте началась 9 марта 2005 года. К тому моменту, как я попал в эту компанию, она имела два продающихся продукта. Первый - Business Card Composer - программа для создания и печати визитных карточек, и второй - Mail Factory - программа для создания почтовых наклеек, печати конвертов и прочей лабуды. Что касается Mail Factory - суть этой программы для меня до сих пор не ясна, она очень сложна, наворочена, и продается плохо. А вот работа с Business Card Composer в то время представляла из себя примерно следующее: в вашем распоряжении имелся холст размером с визитку, на котором можно было размещать картинки, прямоугольники, линии, и текст. Кроме того, можно было вставлять элементы из Address Book. Полученную визитку можно было напечатать на визиточной бумаге.

Компания в то время получала много отзывов от пользователей на тему того, что они используют BCC не по назначению, а для создания бланков деловых писем путем установки размеров холста в стандартный A4/Letter, и последующей распечатки. В связи с этим было решено меня, как нового сотрудника, бросить на создание специализированной программы для печати бланков и деловых писем. Соответственно, рабочее название нового проекта было "Letterhead", а я занялся тем, что стал переносить в него классы из BCC.

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

Потом я грохнул интеграцию с Address Book.

Еще потом мы решили, а я принялся разрабатывать новый инструмент - Extended Text. Суть задания сводилась к тому, что хорошо бы иметь набор текстовых боксов, чтобы текст, размещенный в них, умел "перетекать" из одного в другой - это было бы удобно, например, для организации многоколоночных писем. Проектирование, реализация и борьба с багами отняли около месяца. После завершения этой работы я познакомил дизайнера нашей компании с тем, что получилось, после чего он стал требовать добавления новой функциональности, а именно - обтекания текстом других объектов (картинок, фигур, и пр.). Это, по его утверждению, придало бы письмам больше выразительности и красоты.

Реализация обтекания отняла еще месяц, после чего всем стало ясно, что городить такие сложности ради создания дурацких бланков - дело неблагодарное, и менеджмент решил, что программа будет предназначена для Desktop Publishing.

Дальше были бесконечные просмотры Apple Pages, Adobe InDesign и иже с ними, тыренье их функциональности, нудная работа над пользовательским интерфейсом, отладка, отладка, и отладка. Полученный продукт назвали Swift Publisher и выпустили в конце июля 2005 г с ценой $35 за download-, и $40 - за CD-версию.

Итого: проект не имел никакого плана, вся разработка велась исключительно на основе первоначального видения, оперативных событий и анализа рынка. Работа над проектом заняла 5 месяцев, 3 из которых я работал один, а потом ко мне подключились еще два разработчика. Продукт тогда по популярности полностью затмил и BCC, и MF. Это был успех. Хотя мы и породили прямого конкурента Apple Pages (Apple даже впоследствии отказалась от размещения Swift Publisher в Apple Store), наш выигрыш был в цене (Pages продавался только в комплекте с Keynote за $80) и в простоте пользовательского интерфейса. Кстати, вышедший позже Pages 2.0 ушел от настольного издательства в сторону текстового процессора - туда ему и дорога.

Ах да, торт, который мы съели в день релиза, был очень вкусным :)

Pod-pod-pod

0 коммент. | добавить комментарий
Вчера, 12 сентября, Стив Джобс на специальной презентации Apple продемонстрировал обновленную линейку плееров iPod. В глаза бросилось то, что новая прошивка плееров iPod video и iPod nano позволяет (наконец) играть в игры и (о, ужас!) запускать ПО сторонних производителей.

- Сережа, к чему ты клонишь?
- К тому, что теперь под iPod, а точнее - под ОС Apple для iPod можно писать софт.

Мак-девелоперы, ряды которых я покину через три дня, скоро начнут медитировать на фреймворки с названиями вроде iPodApplicationKit и CoreIPod. Я как будто вижу перед собой оглавление следующего ADC Reference с классами NSiPodPlaylist, NSiPodSettings, NSiPodControl, и т.д.


iPod is Not a Black Box Anymore!


Так совпало, что именно сегодня я снес прошивку Rockbox с моего iPod nano (теперь уже предыдущего поколения) и вернулся на оригинальный firmware Apple.

Эксперименты на живом iPod nano я начал сразу, как только узнал, что его родная прошивка Apple имеет настоящий bootloader и умеет обращаться с файловой системой - а значит, может именоваться Операционной Системой. Для такого популярного гаджета просто не может не быть альтернативных ОС - решил я, и оказался прав.

К установке нарытого мной в Интернете iPodLinux я подошел серьезно. Вначале я долго читал форумы, на которых американские ай-подо-воды жаловались друг другу на неудачи с установкой данной ОС на свои гаджеты, в результате чего последние переставали работать, а предпоследние шли в магазин за новыми гаджетами. Однако, экспериментатор победил скептика, в результате чего я целую неделю играл в iDoom, запускал редактор vi, медитировал на bash и неимоверно пёрся.

Спустя неделю я вернулся к родной прошивке. Следующим экспериментом была установка прошивки Rockbox, которую мне очень рекомендовал друг Женя. Rockbox продержался на моем iPod целый месяц, поскольку в комплекте с ним я нашел целую кучу игрушек, которые доставили мне много приятных минут.

Почему я снова вернулся к родной прошивке? Потому, что в проигрывании музыки ей нет равных. Также ей нет равных по удобству интерфейса. iPodLinux, конечно, имеет mp3-плеер, но у меня он иногда зависал, и, к тому же, я так и не смог добиться от него поддержки Unicode в ID-тегах. Rockbox в этом отношении вел себя несравненно лучше, но, признаться, я так и не смог привыкнуть к его интерфейсу. Может быть, на всяких там iRiver прошивка Rockbox рулит, но...

Не знаю, в общем. Кто-то из зала кричит, что, мол, iTunes - suxxx! Я раньше тоже так думал. Однако, распробовав хорошенько связку iTunes + iPod, на самом деле уже не хочется ничего другого. Да, идея копировать музыку на плеер просто в виде файлов и директорий звучит заманчиво, но надо ли мне оно?




Почему тогда я устанавливал iPodLinux, Rockbox? Более того - почему я собираюсь пробовать новые прошивки, как только таковые будут появляться? И еще более того - почему я советую всем ай-подовцам и ай-подовкам делать как я? Да потому, что это чертовски занятно! Я с нежностью смотрю на маленький экранчик моего гаджета, на котором (ни хрена себе!) я селил целых две ОС, для которого я компилировал ядро linux, в котором я создавал новые разделы на диске... Мне кажется - это сравнимо с чувствами маленького ребенка, который в который раз разбирает новую, только что подаренную ему машинку, чтобы посмотреть, что там у нее внутри.

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

Deadlock и военкомат

0 коммент. | добавить комментарий
Был сегодня в райвоенкомате - пришел становиться на учет офицеров запаса. Тетенька там сидит такая смешнючая - и говорит мне: "А отчего же ты, Сережа, раньше не явился? Приказ-то о присвоении тебе звания уже два месяца как пришел. Это называется "несвоевременная явка" - будем штраф оформлять".

А я ей: "А не пришел я потому, что не знал, что приказ уже есть - мне же не приходила повестка!".

А она мне: "А повестку я тебе не прислала, потому что ты ко мне не пришел, и я не могла завести твою карточку и вписать в нее твой адрес".

А я ей: "А не пришел я потому..." - ну и так несколько раз, по кругу.

Типичный deadlock, когда один поток (я) хочет обратиться к ресурсу (в военкомат), но не получает положительного значения семафора (повестку), а второй поток (военкомат) тоже хочет обратиться к ресурсу (ко мне), и тоже у него нет семафора (моего прихода). И некому эти семафоры взвести.

(В этом месте я два часа философствую о том, что взаимные блокировки - суть явление природы, и могут они встречаться везде, а не только при параллельном программировании. Вот ведь как оно все устроено заковыристо! :)

О переходе на новую работу

0 коммент. | добавить комментарий
А вот снился мне давеча сон про самое ужасное собеседование в мире.

Прихожу я, значит, на собеседование в новую контору. На первом этаже здания - загончик а-ля конюшня, песок, грязь, листочек с надписью от руки "менеджер по персоналу", а за ней - наглый хмырь (жлоб). И толпа соискателей - задроченных прыщавых студентов типа "мы из общаги". Всех заводят в загончик, каждому указывают его место и дают решать тесты. У меня кто-то все время пытается списать, поэтому я встаю и отсаживаюсь отдельно. Ко мне подбегает "менеджер по персоналу" и начинает орать, что мой тест закончен, т.к. я встал с места, указанного им - типа, нарушил указание начальства и потому недостоин работать в такой классной конторе.

А потом, гад, добавляет: "Ну, мне надо притащить из подвала комп - вот, мол, сходи-притащи, и тогда, так уж и быть, я тебя не выгоню". Я, ясен перец, взвиваюсь на дыбы, выдаю ему, что мне не нравятся его методы и что в рот я ебал эту контору мне не хочется работать в компании, где так относятся к будущим сотрудникам. Встаю и гордо ухожу. Проснулся.

Понял я одно: надо начинать заниматься поиском новой работы только тогда, когда назрело. И все-то меня утвердили, и завтра - финальное собеседование с заказчиками по телефону на английском, а вот гложет меня чувство, что преждевременно все это.

Одно слово - не назрело!

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

Как же меня сейчас выкручивает всего! Что случится завтра - ума не приложу... И вот ведь какая штука - никто за меня ничего не сможет решить!

Что-то будет?..

О Лукаше Подольски и об одной проблеме роста

0 коммент. | добавить комментарий
С момента моего рождения и до определенного золотого возраста я ощущал себя самым маленьким, самым-самым крошечным во Вселенной. Даже ровесники казались мне тогда намного больше, старше и опытнее. "Вот вырасту", - говорил себе я - "и буду кем только захочу". Космонавтом не хотелось, а вот каким-нибудь спортсменом, капитаном, директором заводов-газет-пароходов, или даже врачом - это запросто. В то время, если в моем кругу и появлялся кто-то еще младше меня, я таких просто не замечал по причине их крайней незначительности (если уж я сам - крошечный, то они тогда - какие?) Старшие же из моего окружения зачастую казались мне неудачниками (уж я-то, когда вырасту, буду гораздо круче, чем они). "Все у тебя еще впереди", - говорил я себе.

Но время шло и, не помню точно, когда, я ощутил, что у меня-таки не все впереди - кое-что уже осталось за бортом, неосвоенное и неохваченное.




Может, это случилось тогда, когда мой хороший знакомый и ровесник женился и завел ребенка, а я еще продолжал блядовать, не помышляя о продолжении рода?Или когда одноклассник - вечный конкурент - показал мне свое первое творение на Си, в то время как я еще только разгребался с Паскалем?Или когда бывший одногруппник и одногодка вдруг оказался моим начальником?


Я не знаю. Знаю только, что вчера, когда я смотрел матч Германия-Португалия за 3 место ЧМ-2006, я опять почувствовал это. Ну, Лукаш Подольски, ну как же так?! Ты - и по телевизору, и пасы, и по воротам, и комментатор в восторге, и Мондиаль, и поклонницы, и деньги, и слава, и гимн. А я - на диване, и пиво, и духота, и мухи, и Жигули, и эта сука прожужжала все уши!

А, между прочим, я старше тебя на целый год.

Разэдак тебя и разтак, Лукаш Подольски!

Вести с поисковых полей

0 коммент. | добавить комментарий
В Mac OS 10.4, среди прочих новшеств, была внедрена технология поиска Spotlight, включающая индексирование и поиск по именам файлов, а также индексирование и поиск по метаданным. Для меня это значит примерно следующее: поскольку наш проект использует свой формат документов, представляя их в виде Mac OS bundles (т.е. документ представляет собой папку, в которой содержится описание структуры документа, а также хранятся использованные текстуры, материалы, 3D-объекты, представления и пр.), то автоматически Spotlight'овый поиск по нашим документам работать не будет. Чтобы справиться с этой проблемой, мне вчера довелось написать плагин для системы Spotlight - т.н. Spotlight Importer, который предоставляет данной системе метаданные наших документов в требуемом ей формате.

Об этом и речь. Для быстрого поиска информации в системе можно, как Microsoft, долго разрабатывать WinFS, и впоследствии отказаться от внедрения ее в новой версии Windows, а можно придумать Spotlight, поддержать поиск по стандартным форматам данных, и обязать разработчиков писать плагины для поиска по нестандартным форматам. Отличие в том, что второй подход уже реально работает на протяжении более чем полугода, а первый - нет, и неизвестно, когда WinFS будет-таки выпущена в свободное плавание.

Итак, Spotlight Importer. Его разработка сводится к реализации функции Boolean GetMetadataForFile(void* thisInterface, CFMutableDictionaryRef attributes, CFStringRef contentTypeUTI, CFStringRef pathToFile), которая принимает имя документа, созданного в нашем приложении, а возвращает ссылку на словарь метаданных attributes. Очевидно, что данная функция должна открыть документ, прочитать из него то, что может быть проиндексировано, и запихнуть это все в словарь attributes. Я уложился в набор стандартных ключей, используя:

  • kMDItemTitle - имя документа
  • kMDItemAuthors - массив, состоящий из имен авторов документа (у наших документов м.б. только 1 автор)
  • kMDItemDescription - описание документа

Нет, ну ведь правда здорово? Немедленно создаем документ spiralka и заполняем поля автор/копирайт/описание (кому не видно - имя автора "Zaycheg"):



Итак, что мы теперь найдем в Spotlight по запросу "zaycheg"? Конечно же, документ spiralka:



Не просто, а очень просто! Напоследок самое вкусное: как связать разработанный плагин с форматом документов. Иными словами - как сказать Spotlight'у, что для индексирования наших документов необходимо запустить наш плагин. Для этого в файл Info.plist приложения (содержит метаданные о приложении) необходимо указать тип (расширение) наших документов в формате UTI (Uniform Type Identifier). После первого запуска приложения Mac OS проанализирует его файл Info.plist, а затем всегда будет искать плагин для индексирования данного UTI в bundle приложения, и в системных папках Library. А плагин декларирует множество поддерживаемых UTI, и имеет собственный GUID, что гарантирует его уникальность в системе.

Ну красота ведь! До сих пор не нарадуюсь :)
А Microsoft пускай еще WinFS попишет.

О важности выполнения плана проекта

2 коммент. | добавить комментарий
План программного проекта - это:

  • чертовски
  • важная
  • штука.

Говоря об этом, я имею в виду следующее. Если план проекта изначально не составляется, и разработка ведется исключительно на основе некоторого видения (зафиксированного документально или устно), а также оперативных (текущих) рассуждений/собраний, то на самом деле к менеджменту не может быть никаких претензий, поскольку его нет. Ведь нельзя преъявлять претензии к тому, чего в действительности не существует? По-моему, так.

Но если ты, сука, составил план проекта, то ты должен его выполнить. Пусть у тебя каждую минуту болит голова о том, как еще выебать (или наоборот, поощрить) свою команду, какие привлечь дополнительные ресурсы, какими выходными, какими партиями в любимую игру и какими просмотрами футбольных матчей пожертвовать, чтобы выдать на-гора готовый проект в соответствии с твоим планом - это твоя вотчина, твой фейерверк и, если хочешь, твой траур. Это - твое.

Потому что если ты не выполнишь свой план проекта, то ты нихера не стоишь как менеджер. Пусть у тебя самый лояльный в мире заказчик, который простит тебе любые огрехи и примет твою работу спустя N месяцев после намеченнной даты релиза. Пусть ты руководствуешься, с твоей точки зрения, самыми лучшими соображениями на тему о том, что "добавление еще одной функции в нашу систему привлечет к нам еще больше покупателей", "давайте изменим мой план, потому что я вдруг решил, что так будет лучше", и т.д. - это никак тебя не оправдывает, потому что ты все равно непрофессионал и неудачник.

Ведь если не вести проект в соответствии с планом - то зачем тогда было гнуть пальцы и составлять план?

Подведем итоги:
1. Добейся утверждения заказчиком своего плана
(Если ты не можешь этого сделать, то ты нихера не стоишь как менеджер)
2. Умей отстоять утвержденный план.
(Если ты не можешь этого сделать, то ты нихера не стоишь как менеджер)
3. Добейся от команды выполнения плана.
(Если ты не можешь этого сделать, то ты нихера не стоишь как менеджер)
4. Если ты, менеджер проекта, не выполняешь свой план, то лучше убей себя сам.

Черт, и как же сильно воняет максимализмом от всего этого! Но, возможно, так до тебя четче дойдут мои мысли о том, почему и насколько в действительности важно выполнение планов? И тогда мы, нашими совместными усилиями, сможем сделать этот мир еще чуточку лучше :)

О вреде табуляции в середине строки

0 коммент. | добавить комментарий
Священной коровой любого кодера, безусловно, является набор правил форматирования исходных текстов. Каждый уважающий себя кодер считает, что лучше него расставлять скобочки, пробелы и табуляции не умеет никто, и, более того, что только лишь его способ форматирования кода является единственно правильным.

Позволю и я себе высказаться на эту тему. Поскольку скобочки меня мало волнуют, да и не во всех языках они есть, я остановлюсь на пробелах и табуляциях.

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

int n;
double d;

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

Так вот, неужели кому-то действительно трудно понять, что это - полная хуйня не лучший способ написания кода?! Давайте разберем этот пример подробнее. Пусть размер табуляции - 4 символа, позиции табов обозначим точками. Итак:

. . .
int n;
double d;

Очевидно, что для того, чтобы выровнять этот код, кодеру пришлось после слова "int" нажать кнопочку Tab два раза, а после слова "double" - один. Недоумок!

Что теперь произойдет, если на этот код посмотрит другой кодер, у которого размер табуляции - 2 позиции (ну, например, из-за низкого разрешения монитора)? А вот что:

. . . . .
int n;
double d;

Код "пополз". Ну, теперь всем понятно, в чем дело?!!!! При разных размерах табуляции код, отформатированный с помощью табов в середине строки, ползет и становится очень плохо читаемым.

А как надо было сделать? Смотрим сюда:

int n;
double d;

В чем разница? В том, что здесь после слова int кодер не два раза нажал на таб, а пять раз нажал на пробел. А после слова double он нажал на пробел два раза. Такой код будет выглядеть одинаково при любой установленной ширине табуляции.

Вывод - НЕЛЬЗЯ нажимать кнопку Tab в середине строки. Однако, можно и НУЖНО нажимать кнопку Tab в начале строки, о чем речь пойдет дальше.

UPD 25.06.06: А лично я всегда пишу так:

int n;
double d;

Да-да, выравнивать середины строк - идея от лукавого. Ну, скажем, возникнет необходимость поменять тип переменной d с double на float..

От лукавого, говорю :)

UPD 5.07.06: Да, все вышеказанное верно лишь для моноширинных шрифтов. Если кодер грезит об использовании пропорциональных шрифтов, то ему будет полезно ознакомиться с вот этой методикой.

Свет

0 коммент. | добавить комментарий
В прошлом посте речь шла о материалах и их свойствах – ambient, diffuse и specular. Как оказалось, теми же самыми свойствами обладает и свет. Этот факт сводится к тому, что у света также имеется три составляющих. Diffuse-цвет света, взаимодействуя с diffuse-цветом материала, определяет свойства рассеивания света по данному материалу. Specular-цвет света, взаимодействуя со specular-цветом материала, определяет вид блика, или светового пятна. Есть еще ambient-цвет света – но это отдельная песня, в которой поется об общем цвете сцены. Например, закат часто красит все вокруг в багровые тона – это потому, что у закатного солнца багровый ambient.

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

Говоря о том, что что-то там с чем-то взаимодействует, я имею в виду вот что. Разные материалы при освещении одним и тем же светом ведут себя совершенно по-разному. Например, светлая сосна, если светить на нее, будет освещаться в целом равномерно, а, скажем, темный орех будет иметь характерное круглое световое пятно. Это говорит о том, что материалы по-разному реагируют на свет. Можно рассматривать аддитивную модель взаимодействия, когда, например, diffuse-цвет света складывается с diffuse-цветом материала, что дает результирующий цвет в освещенной точке. Из имеющих названия бывает еще модулятивная модель. А вообще говоря, модель взаимодействия компонент материала с компонентами света называется blending, и их бывает много разных типов.

В нашем проекте мы, разумеется, не обращаемся напрямую к OpenGL API, а используем opensource-3D-движок OGRE (http://www.ogre3d.org/). Когда он рендерит сцену, внутри него происходит деление материала на т.н. illumination passes. Грубо говоря, ему удобней просчитывать освещенность в несколько проходов: в первом (ambient pass) считаются ambient-компоненты материалов, полученные в результате освещения источниками света, находящимися в сцене; во втором (per-light pass) – diffuse и specular-компоненты; в третьем проходе (decal pass) обрабатываются текстуры. Кстати, это верно только для непрозрачных материалов; всякие там стекла на проходы не делятся, да и рендерятся они совсем по-другому, поскольку необходимо рисовать на экране также то, что находится за ними.

Напоследок – несколько картинок:

Сцена после ambient-прохода

Сцена после всех проходов

Сцена после всех проходов + наложение теней



Итог прост. Цвет объекта образуется во взаимодействии трех компонент света с тремя компонентами материала. В следующий раз я расскажу о том, во что выливается вся эта история с материалами и светом лично для меня и для нашего проекта.

О свойствах материалов

0 коммент. | добавить комментарий
Почти всю свою жизнь я считал, что свойства материалов в окружающем нас мире сводятся к паре «цвет/текстура». И в самом деле – казалось мне – если, например, стену покрасить краской, то она приобретет определенный цвет; если же ее оклеить рельефными обоями, то она станет обладать некоторой текстурой. Работая над проектом codename Sweet Home в BeLight Software, мне пришлось познакомиться с представлением материалов в OpenGL, которое, как оказалось, разительно отличается от моего [убогого] представления.

Так вот, первым свойством материала является т.н. ambient color. Ambient – это, попросту говоря, цвет материала, который мы наблюдаем в отсутствие текстуры и [выраженного] освещения – например, в пасмурный день. Вторым свойством назовем diffuse color – этот параметр определяет то, как свет рассеивается по объекту с рассматриваемым материалом. Кроме ambient и diffuse есть еще такой specular color – мы можем наблюдать его, когда свет светит так ярко, что дает блик на поверхности, а specular color как раз и есть цвет этого блика

Совсем непонятно, ага? У меня пример есть, вот он:



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

А что мы скажем теперь? Specular-цвет у материала, примененного к шарику, желтый – это видно на блике. Когда блик заканчивается, начинается власть diffuse-цвета. Как это легко видно, здесь он красный, что и придает красноту всей освещенной поверхности шарика. В тени шарик черный как жопа у негра что-то очень-очень черное – это потому, что у этого материала ambient-цвет такой… ну, вы поняли ;).

Что, еще не все? Ах, на рисунке еще какой-то self illumination есть? И тоже черный? А каким же ему быть, если self illumination, или emissive – это цвет самосвечения объекта. Ну, например фосфор в часах светится ночью зелененьким, потому что у него self illumination зеленый. А shininess, раз уж на то пошло, – это степень четкости блика. Чем shininess больше, тем блик меньше и границы его четче (характерно для металлов). А чем он же меньше, тем блик размазанней (характерно для матовых поверхностей).

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

С шариком вроде все. В следующий раз остановимся на лампочке.

Уроки рисования

0 коммент. | добавить комментарий
В мужском туалете у немцев висит иконка. Она мне и в прошлый приезд покоя не давала, но тут я уж больше не могу. Она выглядит так:



  • Не ссать согнувшись! (выпрями спину, ты же мужчина)!
  • Не ссать на унитаз с поднятой крышкой! (закрыть крышку и аккуратно ссать на нее)
  • Ссать только с длинной палкой в правой руке! (для гимнастов и рыболовов)
  • Не ссать с оторванной головой!
  • Не ссать на наковальню!
  • Не ссать! (ага, и не срать… это над унитазом-то, ага)

Мораль сей басни такова: пиктограмма должна стать предметом для тщательных размышлений ДО того, как она будет вывешена на всеобщее обозрение.

ДО, а не ПОСЛЕ.