Saturday, November 22, 2014

View Discovery и View Injection в Prism 5

Сегодня спустя столь долгого перерыва в пять месяцев я решил снова вернуться к статьям по Prism 5, так как вижу, что эта тема интересна для читателей, один из которых недавно поделился проблемами, которые он пытался решить с помощью призма. Интересные моменты, которые, возможно, пригодятся вам для решения подобных проблем, мы рассмотрим сегодня в статье, а также в следующих статьях по призму. Надеюсь, что тема будет нескучная и полезная. А мне достаточно того факта, что я поборол свою лень и апатию и смог наконец-то вернуться к написанию статей по программированию. Поэтому сегодня мы будем играться с регионами в Prism. Мне почему-то казалось, что использование регионов не должно вызвать сложностей, но, оказывается, здесь действительно есть много нюансов, которые сложны для понимания. 
Мы рассмотрим два способа компоновки Views (представлений): с помощью View Discovery и View Injection. Если вы только начинаете свое знакомство с регионами, то рекомендую статью "Введение в Prism 5. Работа с регионами", в которой на простом примере продемонстрировано использование регионов. Сегодня также каждую тему, связанную с регионами, мы будем демонстрировать на практике. Поэтому рекомендую сразу сделать себе заготовку, в которой мы последовательно будем разбирать каждый отдельный этап. Поехали. 
Как и в предыдущих статьях, я использую последний Prism 5, поэтому если вы работаете с версией 4.1, то вам, возможно, придется слегка модифицировать ваш код. Но в целом мы не будем использовать много разных моделей (Model) и моделей представлений (ViewModel) с классического паттерна MVVM, а будем в основном обходиться только представлениями (View). Для демонстрации работы регионов этого будет достаточно. Давайте создадим новый WPF проект с выбором фреймворка 4.5. Назовем наш проект "RegionViewerSample".
Дальше, как обычно, нужно создать структуру для нашего проекта. Поэтому создаем такую структуру папок:
Эта структура, как несложно догадаться, реализует классическую схему паттерна MVVM, где в папку Models мы складываем модели, в ViewModels – модели представления, и в папку Views – сами представления (внешний вид контролов, окна и т.д.). Две папки добавлены уже специально под логику призма. Modules – работа с модулями, Regions UI контролы для заполнения регионов. Ничего сложного на этом этапе не должно возникнуть. 
Так как я использую Prism, то стараюсь оперировать его понятиями, а в призме основное окно называется оболочкой (Shell). Поэтому первое, что я сделаю, – это переименую мой класс MainWindow.xaml в Shell.xaml. Затем перенесу это класс в папку Views. Затем уберу с App.xaml метод StartupUri для запуска главного окна. После этого нужно создать загрузчик, который будет создавать и инициализировать наше главное окно, а также, если это необходимо, устанавливать все начальные параметры. 
Я использую для таких случаев в 90% загрузчик UnityBootstrapper. Скачивать его нужно отдельно, как и саму библиотеку Prism. Сделать это можно с помощью Manager NuGet Packages. Для этого открываем Manager NuGet Packages, вводим слово Prism и устанавливаем библиотеки призма, которые идут самые первые.
Затем на второй странице также устанавливаем Prism.UnityExtensions, который и содержит загрузчик UnityBootstrapper. Этот загрузчик использует IoC контейнер Unity для управления зависимостями. Этот IoC контейнер мне нравится своими возможностями, поэтому предпочитаю использовать именно его. Затем переходим к созданию класса загрузчика. Назовем этот класс просто: Bootstrapper. Ниже приведена его реализация.
public class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<Shell>();
    }

    protected override void InitializeShell()
    {
        Application.Current.MainWindow = (Window) Shell;
        Application.Current.MainWindow.Show();
    } 
}
Не забывайте, что мы уже переименовали с MainWindow.xaml на Shell.xaml и все поправили в соответствии с этим. Затем нам нужно завершить финальную стадию подготовки нашего проекта. Для этого нужно перейти в класс App.xaml.cs и переопределить метод OnStartup на приведенный ниже. 
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        var bootstrapper = new Bootstrapper();
        bootstrapper.Run();
    }
}
После этого ваш проект должен успешно собраться и запуститься, показав главное пустое окно. Если у вас что-то не получилось, не расстраивайтесь. Просто посмотрите вот на эту статью, в которой эти шаги описаны более детально: "Введение в Prism 5. Bootstrapper". Со временем на подготовку проекта у вас будет уходить очень немного времени. Или вы можете создать свой темплейт, который будете использовать в дальнейшем в своих проектах. Например, по аналогии, как это сделано в MVVM Light. У вас подготовка проекта для работы с призмом займет считанные минуты.
А теперь вернемся к нашим регионам и рассмотрим, как с ними работать. Сначала немного теории, но лишь чуть-чуть. Просто для того, чтобы понимать суть происходящего и иметь представление о том, почему было сделано так, а не иначе. С регионами мы можем работать с помощью менеджера регионов, а также адаптеров регионов. Что первое, что второе – довольно сложная тема, мы ее рассмотрим только поверхностно. Постараюсь детальнее к ней вернуться в следующих статьях. Вернемся для начала к менеджеру регионов (RegionManager). Это класс, который отвечает за то, чтобы создать регионы и связать их с элементами управления. Ниже показан рисунок, взятый с документации, который демонстрирует работу класса RegionManager.
С помощью RegionManager мы можем создавать регионы как в xaml-разметке, так и в коде. Приложение может содержать один или несколько экземпляров RegionManager. Есть возможность выбирать, в каком экземпляре менеджера регионов необходимо зарегистрировать регион. Это может оказаться полезным, если вы хотите передвинуть элемент управления в визуальном дереве, но не хотите, чтобы регион очистился после очищения присоединённого свойства.
RegionManager предоставляет присоединённое свойство RegionContext, с помощью которого можно обмениваться данными между регионами. У меня недавно спрашивали, как передать данные в другой регион для обмена. Вот один из ответов. Например, через RegionContext, хотя я больше предпочитаю белее сложное управление через навигацию на основе моделей. 
Мы так много говорим о регионах; пора бы уже, наверное, подойти вплотную к определению этого понятия. В призме регионом называется класс, который реализует интерфейс IRegion. По сути, это контейнер, в котором содержится динамическое содержимое пользовательского интерфейса. Еще мы упомянули о таком понятии, как адаптеры регионов. Так вот: для того чтобы подставить элемент в регион, он должен иметь необходимый адаптер. Каждый адаптер регионов адаптирует определённый тип элементов управления. Prism предоставляет следующие адаптеры:
  • ContentControlRegionAdapter. Он адаптирует ContentControl и его наследники.
  • SelectorRegionAdapter адаптирует Selector и его наследники, такие как TabControl.
  • ItemsControlRegionAdapter адаптирует ItemsControl и его наследники.
Давайте рассмотрим использование регионов на простеньком примере. Для этого откроем редактор нашей оболочки Shell.xaml и добавим следующий код.
Window x:Class="RegionViewerSample.Shell"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:regions="http://www.codeplex.com/CompositeWPF"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="Auto"/>
          <RowDefinition Height="Auto"/>
      </Grid.RowDefinitions>
   
      <ItemsControl regions:RegionManager.RegionName="ComboBoxRegion" Grid.Row="0"/>
      <ItemsControl regions:RegionManager.RegionName="GroupBoxRegion" Grid.Row="1"/>
      <ContentControl regions:RegionManager.RegionName="CompositeRegion"  Grid.Row="2"/>
    </Grid>
</Window>
Если мы выполним наш код, то ничего, к сожалению, не увидим на экране, кроме главного окна. Это потому что мы не указали, какие представления мы должны отображать в данных регионах. Для этого нам понадобится использовать класс RegionManager и один из способов композиции представлений. Композицией представлений является способ создания представлений. Представления могут быть созданы как автоматически, через обнаружение представлений (View Discovery), так и программно, через внедрение представлений (View Injection). Мы рассмотрим сначала первый способ с обнаружением представлений. При этом подходе необходимо создать отношение между именем региона и представлением через класс. RegionViewRegistry, используя метод RegisterViewWithRegion. Но можно пойти проще, так как для класса RegionManager написано куча методов расширения, то у нас есть метод такой же метод для интерфейса IRegionManager (ну и, понятное дело, что этот метод реализует внутри себя класс RegionViewRegistry).
А если мы заглянем в исходники библиотеки и откроем пространство имен Regions, то можем увидеть, сколько логики и невиданных дебрей для нас припасено.
Я и сам не знаю большей части из этого, так как не было возможности все использовать из-за специфики использования призма. Теперь давайте перейдем в папочку Regions в нашем проекте и добавим туда несколько UserControl, которые будут заполнять наши регионы. Первым добавим контрол ComboBoxView.xaml. Реализация этого контрола приведена ниже.
<UserControl x:Class="RegionViewerSample.Views.Regions.ComboBoxView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
      <ComboBox>
        <ComboBoxItem Content="Test1"/>
        <ComboBoxItem Content="Test2"/>
        <ComboBoxItem Content="Test3"/>
      </ComboBox>
    </Grid>
</UserControl>
Реализация его очень примитивная. Обычный комбобокс с трема пунктами выбора. Следующим создадим контрол GroupBoxView.xaml.
<UserControl x:Class="RegionViewerSample.Views.Regions.GroupBoxView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
      <GroupBox>
        <StackPanel Orientation="Vertical">
          <RadioButton Content="1" />
          <RadioButton Content="2" />
          <RadioButton Content="3" />
          <RadioButton Content="4" />
          <RadioButton Content="5" />
        </StackPanel>
      </GroupBox>
    </Grid>
</UserControl>
Ну и напоследок создадим контрол, который внутри себя будет содержать еще дочерние регионы CompositeView.xaml.
<UserControl x:Class="RegionViewerSample.Views.Regions.CompositeView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:regions="http://www.codeplex.com/CompositeWPF"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
      <Border Background="DarkSeaGreen" Margin="5">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
          </Grid.ColumnDefinitions>
          <ContentControl regions:RegionManager.RegionName="RegionOne" Grid.Column="0"/>
          <ContentControl regions:RegionManager.RegionName="RegionTwo" Grid.Column="1"/>
        </Grid>
      </Border
    </Grid>
</UserControl>
Теперь давайте это все свяжем с помощью модулей в призме. Для этого перейдем в папку Modules и создадим класс MainModule. Реализация этого класса приведена ниже.
public class MainModule : IModule
{
    private readonly IRegionManager _regionManager;

    public MainModule(IRegionManager regionManager)
    {
        _regionManager = regionManager;
    }

    public void Initialize()
    {
        _regionManager.RegisterViewWithRegion("ComboBoxRegion",
                typeof(ComboBoxView));
        _regionManager.RegisterViewWithRegion("GroupBoxRegion",
                typeof(GroupBoxView));
        _regionManager.RegisterViewWithRegion("CompositeRegion",
                typeof(CompositeView));
        _regionManager.RegisterViewWithRegion("RegionOne",
                typeof(ComboBoxView));
        _regionManager.RegisterViewWithRegion("RegionTwo",
                typeof(GroupBoxView));
    }
}
Код, как мне кажется, очень прост для понимания. Мы указываем, какой регион какой контрол будет отображать. Затем нам нужно инициализировать этот модуль в нашем загрузчике (класс Bootstrapper который мы добавили раньше). Для этого нужно переопределить метод InitializeModules().
public class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<Shell>();
    }

    protected override void InitializeShell()
    {
        Application.Current.MainWindow = (Window)Shell;
        Application.Current.MainWindow.Show();
    }

    protected override void InitializeModules()
    {
        IModule mainModule = Container.Resolve<MainModule>();
        mainModule.Initialize();
    }
}
После этого мы можем запустить проект на экране и увидеть результат того, что у нас получилось.
Вид этого, конечно, не товарный. Но наша задача – научиться пока это использовать, а не рисовать красивый интерфейс в xaml. А теперь давайте в этом же примере вместо View Discovery воспользуемся внедрением представлений (View Injection). В этом случае ваш код получает ссылку на регион, и затем программно добавляет представление в него. Обычно это делается во время загрузки модуля или в ответ на действие пользователя. Ваш код должен запросить RegionManager для необходимого региона по его имени, после чего внедрить в него представление. Так вы имеете гораздо больший контроль над тем, как представления создаются и подставляются в регионы. Этот код намного лучше подходит для динамичной компоновки регионов. Но для наше примера он тоже неплохо подойдет. Для этого перейдем в класс MainModule и модифицируем его следующим образом:

public class MainModule : IModule
{
    private readonly IRegionManager _regionManager;
    public readonly IUnityContainer _container;

    public MainModule(IUnityContainer container, IRegionManager regionManager)
    {
        _container = container;
        _regionManager = regionManager;
    }

    public void Initialize()
    {
        _regionManager.Regions["ComboBoxRegion"].Add(_container.Resolve<ComboBoxView>());
        _regionManager.Regions["GroupBoxRegion"].Add(_container.Resolve<GroupBoxView>());
        _regionManager.Regions["CompositeRegion"].Add(_container.Resolve<CompositeView>());
        _regionManager.Regions["RegionOne"].Add(_container.Resolve<ComboBoxView>());
        _regionManager.Regions["RegionTwo"].Add(_container.Resolve<GroupBoxView>());
    }
}

Дело в том, что зачастую вам придётся использовать View Injectionтак как такой подход внедрения представлений более гибкий и позволяет вам управлять изменением содержимого региона самим. На этом закончу свою небольшую статью по работе с регионами и управлению в них представлениями. В следующей статье постараемся рассмотреть еще что-то интересное по Prism 5.

Friday, November 14, 2014

Бельгия. Рай для сладкоежек и пивных гурманов

Здравствуйте, уважаемые читатели. Сегодня снова предлагаю вашему вниманию статью не технического плана, а некий расслабляющий экскурс в страну шоколадных вкусностей, изысканного пива, красивейших замков и соборов. Позвольте поделиться своими впечатлениями о красоте и особенностях Бельгии. Постараюсь охватить такие города, как Брюссель, Антверпен и небольшой городок Лёвен, с которым была непосредственно связана моя командировка и в котором я провел больше всего времени. Наша бизнес-поездка началась с прилета в город Брюссель, по прибытию в который мы сразу отправились в горд Амстердам – столицу Нидерландов.  О жизни и культуре Амстердаме вы можете посмотреть мою предыдущую статью: "Амстердам. Велосипедная столица свободных нравов". Единственное, что мы успели запечатлеть в Брюсселе, – это местный аэропорт. Эту красоту стоит увидеть.
Замечательное зрелище: весь потолок выхода с аэропорта устелен искусственными маками. И так как расстояние к выходу довольно-таки внушительное, то вместо "пешкаруса", можно воспользоваться сервисом элеватора, который двигается горизонтально. 
Мы планировали больше времени провести в Брюсселе по возвращению с Амстердама, но нашим планам не судилось сбыться по той простой причине, что экономить на поездах в Амстердаме выливается в большую потерю времени. Самые дешевые билеты, которые мы приобрели, обошлись нам в районе 49 евро и включали в себя 3 пересадки. Вот на такой электричке мы в конце-концов добрались в город Антверпен.
Даже не взирая на столь ужасный вид данной электрички, едет она очень тихо. Так как билет мы брали до Брюсселя, и нам нужно было либо ждать любую электричку в направлении Брюсселя, затем с Брюсселя добираться в Лёвен – наш пункт назначения, либо плюнуть на купленный билет и поехать прямой электричкой прямо с Антверпена в Лёвен. Билет с Брюсселя в Лёвен стоил 5 евро, а с Антверпена, куда мы прибыли, в Лёвен стоил 7.5 евро. Мы решили, что 2 с половиной евро не стоят потерянного времени, так как мы уже были изрядно уставшими и голодными. Поэтому мы взяли билет на поезд, который отправлялся где-то через полтора часа, чтобы хоть немного побродить по городу. Я очень сожалею о том, что у нас было так мало времени посмотреть этот город. Дело в том, что порт Антверпена – второй по величине в Европе и входит в 20 самых крупных портов мира. Также Антверпен славится тем, что это крупнейший в мире центр огранки алмазов. Да что далеко ходить. Как только вы приезжаете в Антверпен, начиная с центрального ЖД вокзала вы станете понимать, насколько это удивительный город.
На фото вы видите фото центрального ЖД вокзала "Антверпен-Центральный", который является одной из достопримечательностей города. Вот фото более крупного плана.
Основная особенность этого вокзала состоит в том, что в отличии от большинства других железнодорожных вокзалов, с появлением новых путей площадь вокзала разрастается не в ширину, а вглубь. В нем есть 4 уровня размещения поездов. Один уровень рассчитан под разные магазинчики, а остальные три принимают поезда с разных направлений.  Вот как выглядят эти уровни со стороны.
(Фото взято с Википедии)
Зал здесь очень просторный и красивый, а неординарное построение уровней не оставит вас равнодушными. Думаю, как минимум этот замечательный вокзал отложится у вас в памяти надолго. Если у вас очень мало времени для ознакомления с достопримечательностями города, то можете выйти на площадь Астрид, на которой расположен центральный ЖД вокзал, и полюбоваться местной красотой с огромного колеса обозрения.
Здесь спереди видно статую мальчика на верблюде. Ниже эта статуя более крупным планом.
К сожалению, я не знаю, что это за статуя, но скажу,что она стоит на входе в зоопарк. В плане досуга Антверпен спроектирован ну очень классно. Вы только с вокзала можете довольно приятно, с пользой провести время и оставить немножко ваших деньжат в этом городе. А вот фото внешнего вида ЖД вокзала.
Как можно заметить с фото, он расположен совсем рядом с колесом обозрения. Так как я "зажал" свои денежки на колесо обозрения (с курсом национальной валюты к евро и дороговизной меня сначала охватила паника), то приведу несколько фото, сделанных моими коллегами по "цеху".
Вид на центральную площадь с колеса обозрения:
Вид на город с колеса обозрения:
Ну и еще одно фото с видом на площадь, которое мне показалось очень неплохим:
Так как время нас хорошенько поджимало, мы сразу же отправились на электричку до города Лёвен. Здесь нас также ждало приятное удивление. Во-первых, электричка очень просторная, а во-вторых, при езде не слышно стука колес. Она едет бесшумно. Ниже на фото показан вагон электрички с информационным таблом внутри.
Город Лёвен встретил нас узенькими улочками, которые были лишь чуточку шире, чем те же улочки в Амстердаме. Количество велосипедистов также отличалось. Возможно, по той причине, что население города Лёвен составляет порядка 100 тыс. жителей, поэтому велосипедисты нас не "доставали" настолько, как в Амстердаме. И ездили они как-то более спокойно и по правилам. Ниже на картинке показана пешеходная улочка Лёвена.
Первое, что бросается в глаза на улицах Лёвена, – это очень малое количество деревьев. Для меня этот факт сразу бросился в глаза. В Лёвене есть несколько университетов, которые считаются одними из лучших в Европе. Поэтому вы сами можете представить, сколько в городе студентов. В вечернее время, когда студенты выползают со своих скромных уголков, город оживает. Мне очень понравилась особенность города Лёвен, а именно: Большой рынок, или Гроте Маркт. Гроте Маркт расположен в историческом центре небольшого городка Левен в окружении древних архитектурно-исторических памятников 15-16 веков, таких как церковь Святого Петра, Ратуша и Круглый стол. Гроте Маркт можно по праву назвать частью культурного наследия страны. Недалеко от рынка находится древнейший вуз Европы – Лёвинский католический университет. Здесь вы не только сделаете покупки, но и совершите небольшой тур по достопримечательностям Левена. На Большом Рынке расположены магазины, отели, кафе и рестораны, сувенирные лавки. В местных пабах, которые там на каждом шагу по несколько штук, можно отведать знаменитое бельгийское пиво. Бельгийцы славятся своим мастерским пивоварения. В Лёвене заходится знаменитая пивоварня Stella Artois, которую мы так и не смогли отведать из-за строго расписанного распорядка дня.
Так как я не особо фанат пива, название которого совпадает с названием фабрики Stella Artois, я предпочитал другие сорта бельгийского пива, такие как Leffe, Hoegaarden и Karmeliet. Я считаю, что любители пива здесь смогут найти тот вкус пива, который им запомнится надолго. Я думал, что меня нельзя сильно удивить пивом, но сильно ошибался. Например, мне очень понравилось пиво "Hoegaarden Rosee".
У него довольно необычный вкус, поскольку в пиве присутствует пикантная нотка малины, это придает пиву пряный насыщенный фруктовый аромат. Средняя стоимость пива в пабах и ресторанах колеблется в районе 2.5 - 3.5 евро за бутылку 0.33 литра. Как мы поняли, такой размер бутылки для пива в Европе является нормой. Ну и как не испробовать аппетитные блюда бельгийской кухни...
Такая порция рёбрышек стоила 22.5 евро. Порцию чуть поменьше можно было заказать за 16.5 евро. Если переводить на нашу национальную валюту, получается не так уж и дешево. Средний счет в кафе или ресторане составляет в районе 20 евро за первое и второе блюдо. Первое стоит в районе 3 евро. Обычно такие наборы называют стартерами, и состоят они в основном из супов-кремов. Особенностью бельгийской кухни мне понравился вкус блюд, плюс подача этих самых блюд. На второе блюдо вы заказываете что-то из мясного или рыбного, а на гарнир подается какой-либо салат и картофель-фри, или крокетсы, или еще что-то идет просто как добавка к основному блюду. Обычно мы привычно заказываем, например, картофель, а затем отдельно что-то мясное. Здесь вы заказываете, например, лосось с миндалем и впридачу получаете гарнир на выбор к нему. Вам в итоге принесут огромный кусок лосося с миндалем и ароматным соусом, а закусить вы можете хрустящей картошкой фри.
Отвлечемся немного от еды, так как от этого искушения начинают течь слюни, и кто-то из вас, наверное, уже устремился к холодильнику... Поэтому давайте вернемся к достопримечательностям Лёвена. На первом месте, пожалуй, среди достопримечательностей города – Ратуша(Stadhuis), которая находится в центре Лёвена, напротив церкви святого Петра на большой площади  (Гроте-Маркт; Grote Markt).
В ночное время эта Ратуша выглядит намного эффектнее и величественнее.
Также в Лёвене вы можете увидеть замечательный фонтан Фонске, что означает "Источник мудрости".  Находится этот фонтан в центре города, на площади Fochplein, что неподалеку (около 100 м на восток) от Большой площади. Почему такое оригинальное название, вы сразу же догадаетесь, как только увидите фото самого фонтана.
Также довольно-таки оригинальная, и к тому же, недалеко от центральной площади находится скульптура шута Paep Thoon.
Рекомендую пройтись к этому месту не столько чтобы посмотреть данную скульптуру, сколько испробовать замечательных ребрышек, которые вы видели на фото выше.
По рассказам коллег по работе, мы узнали, что в основном жители среднего достатка предпочитают жить в собственном доме за чертой города. Так как у нас была возможность посмотреть, как живут на окраине Лёвена, мы совершили небольшую экскурсию и хотели бы поделится с вами несколькими фотографиями домов обычных жителей, которые живут за городом.  
Неординарный домик за городом
Дом с симпатичным балконом
Думаю, этот домик говорит сам за себя:
В Лёвене есть несколько моментов, которые очень огорчают. Первый из таких моментов заключается в том, что магазины работают в основном до 18:00. Из-за этого мы так и не смогли устроить себе небольшой шопинг. Дольше всего могут работать некоторые супермаркеты, и то время работы их обычно до 20:30 максимум. Жители города привыкли "затариваться" раз в неделю, поэтому для них это нормально.  Второй момент больше вызвал удивление, чем огорчение. Множество местных жителей одеваются чрезмерно неприхотливо и безвкусно. Одежда дачников в нашей стране выглядит лучше, чем у некоторых бельгийцев парадная. Увидеть свитер, заправленный в спортивные штаны здесь можно намного чаще, чем в другой стране.  Для европейцев главное, наверное, удобство, а не то, как это выглядит. Также европейцы предпочитают не тратить деньги на ветер. Они экономят просто на всем, чем только можно. Возможно, это одна из причин, почему они так отличаются от нас. Ну и как же можно поехать в Бельгию и не попробовать знаменитого бельгийского шоколада. В городе Лёвен знаменитой мастерской шоколада является магазин "Leonidas", в котором можно приобрести замечательный шоколад ручной работы. Шоколад действительно вкусный, но не самый дешевый. Купить хорошие конфеты обойдется вам в "копеечку". Но эти конфеты могут служить лакомством как вам, так и неплохим подарком для ваших близких или родственников, если вы захотите подарить что-то необычное. Особенно ели этот "кто-то" сладкоежка, ему бельгийский шоколад должен прийтись по вкусу. Бельгиям – замечательная страна. Если у вас будет возможность в ней побывать, постарайтесь насладиться этим вполне. Тем более, после прочтения этой статьи вы будете знать, как полезно провести время в Бельгии. Следующая статья будет о замечательном городе Кёльн, Германия. Поэтому до встречи в Германии. 

Wednesday, November 12, 2014

Амстердам. Велосипедная столица свободных нравов

Наконец-то за долгое время я смог собраться с мыслями и описать свои впечатления от отдыха в городе Амстердам – столице Нидерландов. Я забросил статьи и изучение чего-то нового, к сожалению, не из-за лени. Сентябрь принес горе в мою семью, так как я потерял свою маму. Она умерла от рака крови. После такого события в первое время работа, семья и другие вещи становятся словно приглушенными и было очень сложно на чем-то сосредоточиться. Лучше всего, наверное, приглушить гнетущие мысли и болезненные воспоминания помогает работа. Если же у вас в такие минуты есть возможность куда-то уехать на время, чтобы собраться с мыслями, воспользуйтесь этим шансом. У меня появилась возможность поехать с рабочей поездкой в Бельгию, и это был отличный шанс привести свои мысли в порядок. Не будем о плохом, так как статью я собрался писать в целом позитивную, поэтому вернемся к замечательному городу Амстердам, в котором мне посчастливилось побывать один день. Это небольшой отрезок времени, но в целом позволяет оценить прелести города. Для бронирования отеля мы воспользовались знаменитым сайтом booking.com.
Остановились мы в отеле Rooms & Co с приемлемыми ценами и удачным расположением. Но на этом позитивные моменты данного отеля закончились. Как позже я узнал, у этого отеля даже есть сайт, если это творение можно так назвать. 
Первое, что нам очень не понравилось, — это тот факт, что у нас оказался неправильный пин-код для того, чтобы получить ключ, и нам пришлось звонить по телефонному номеру, указанному на коробке с ключами при входе. По каким-то причинам после обеда в этом отеле никого из управляющего персонала нельзя найти. Также в этом отеле очень крутая лестница, поэтому со спиртным лучше не злоупотреблять, потому что свалиться с нее не составляет проблем. Благо, отель не поскупился на завтрак и доступный wi-fi.
Погода в Амстердаме нас очень порадовала. Было очень тепло, поэтому мы могли вдоволь побродить по городу и полюбоваться местными достопримечательностями. Первое, что бросается в глаза — это то, что город буквально прошит каналами. Сомневаясь, стоит ли прогулка по каналам 15 евро, которые просили перевозчики с туристов, мы решили, что это дороговато для нас. 
В Амстердаме очень много велосипедистов. Эта категория участников дорожного движения здесь имеет права намного выше, чем водители автомобилей. Поэтому зачастую велосипедисты ведут себя довольно-таки нахально. К вечеру прогулки по городу эти велосипедисты, признаться честно, порядком мне надоели, так как очень многие из них ездят не по отведенным велосипедным дорожкам, а где хотят, и несколько раз приходилось отпрыгивать с дороги, спасаясь от наезда “велодятлов”.
Думаю, вам неоднократно приходилось слышать об Амстердаме. Для многих этот город ассоциируется со знаменитым кварталом “Красных фонарей”, в котором “древнейшая профессия” абсолютно легальна. 
Также вы можете встретить множество кафешопов, в которых абсолютно легально покурить “травку”, съесть грибочков или “веселых” кексов. Но насколько нас заверили, в Амстердаме преступность очень низкая. Возможно, основная причина этого — что многое запрещенное здесь разрешено законом. Вы, вероятно, смотрели часть из описанных достопримечательностей Амстердама с веселой молодежной комедии “Евротур”.
Первым делом мы решили сходить на площадь музеев. (Об этом названии я узнал намного позже). Выглядит это место неповторимо. Вот, например, фото с сайта toamsterdam.ru, по которому можно оценить красоту данного места. 
Совсем рядом здесь находятся два замечательных музея: Национальный музей (Rijksmuseum) и Государственный Музей Винсента Ван Гога. Кроме картин самого Ван Гога, там есть картины К.Моне, П.Пикассо и другие. Также в Амстердаме есть еще один интересный музей Рембранта, который представляет собой восстановленные апартаменты художника. Я немного жалею о том, что у нас не было времени посетить данные музеи. Поэтому мы любовались в основном только внешним видом. Картин знаменитых художником мы так и не увидели.
Мы также не могли побывать в столице Нидерландов и не опробовать фирменного голландского пива. Тем более, что в Амстердаме находится знаменитая броварня “Heineken”. Так как возле этой броварни пролегал наш путь, я просто не мог удержаться, чтобы не сфотографировать довольно-таки большую очередь туристов, ожидающих посетить данное место, в котором хмель превращается в пиво. 
Прошу прощение за качество фотографий, так как не умею профессионально делать снимки, да и часть фотографий взял у коллег, которые посетили Амстердам вместе со мной. Довольно-таки оригинальное место жительства на воде напротив “Heineken” также демонстрирует определенный колорит города.
В Амстердаме мне очень понравился городской транспорт. Прошу обратить внимание на довольно низкую посадку трамвая. 
Подобного рода транспорт мы видели также в Бельгии и в Германии, но почему-то городской транспорт Нидерландов произвел наилучшие впечатления. В самом городе очень мало дорогих машин. Во время прогулки по городу возникает ощущение, как будто ты попал в другой мир, потому что машина для голландца — это средство передвижения, а не средство роскоши, как у нас. Поэтому основным видом транспорта является велосипед. По всему городу оборудовано просто громадное количество парковок под велосипеды. Поэтому с парковками велосипедов у вас проблем не будет. Арендовать велосипед вы, вероятнее всего, сможете в том отеле, в котором остановитесь. Стоимость аренды в отеле, в котором заселились мы, была 15 евро. Но поскольку мы не устали после перелета, то решили просто бродить по городу пешком. Ниже приведено фото музейной площади с очень интересными деревьями. 
Если вы оказались в Амстердаме впервые, то вас наверняка удивит отсутствие на окнах штор. Зачастую окна до половины перекрыты какой-то материей и все. Большинство голландцев живут своей жизнью просто за открытым стеклом, не опасаясь быть объектами наблюдения, как в фильмах.
Большинство домов в центре Амстердама построены в 17-18 веках. Поэтому сразу вопрос для читателей данной статьи: “Для чего приспособления на крыше данных домов, которые вы можете увидеть на фото ниже?”
.
Не буду вас томить. С помощью этого приспособления жильцы этих домов через окна заносят в свои дома мебель, так как двери в домах достаточно узкие, и мебель зачастую в нее не проходит. Жаль, что я не смог наблюдать этот процесс в Амстердаме, но я видел, как мебель доставляют через окно в Бельгии. 
Амстердам — город тюльпанов, поэтому здесь вы можете купить луковицы самых разнообразных сортов. Поскольку я не являюсь любителем цветом, то просто проходил мимо продавцов луковиц разных цветов. Мне больше понравился выбор магнитиков и разных сувениров на память об Амстердаме. Также в городе представлен в изобилии выбор настоящих голландских сыров.
Таких магазинов я видел несколько в центре. Сам сыр не пробовал, поэтому не могу сказать, чем примечательный вкус голландского сыра и в чем его отличие от сыров, которые продают у нас. 
Амстердам нас встретил множеством туристов. За день прогулки я услышал столько разных языков, сколько не слышал за всю свою жизнь. Возможно, основная причина такого большого количества туристов был выходной день, в который мы попали в город. Приведу несколько кадров замечательной старинной центральной площади “Площадь Дам” (нидерл. De Dam). Ниже на фото изображен королевский дворец.
Рядом также находится церковь Ньивекерк 15 века и музей восковых фигур мадам Тюссо, известный во всем мире представленными там восковыми фигурами мировых личностей. 
Еще одно интересное фото с центральной площади. 
Также на площади есть национальный монумент, большая каменная белая стелла, возведенная в 1956 году в память о жертвах Второй мировой войны. 
Не мене замечательные фото мы смогли сделать с центрального вокзала в Амстердаме, построенном в 1881-1889 годах архитектором Питером Кейперсом. Этот же архитектор спроектировал здание Государственного музея в Амстердаме. 
Центральный ЖД вокзал находится рядом с портом, поэтому на картинке видно даже какой-то паром, путешествующий по ночному Амстердаму. Ниже представлено фото того же вокзала, только в дневное время. 
Итоги
Хотелось бы сказать несколько заключительных слов об этой виртуальной экскурсии. Амстердам с замечательный старинный город, который однозначно стоит посетить. По ценовой категории это местность не из дешевых. Например, за приличный обед в каком-то ресторане вам принесут чек в среднем от 18-25 евро. Самая дешевая бутылка пива 0.33 литра стоит в районе 2.5 евро. Аренда велосипеда – 15 евро, прогулка по каналу  15 евро. Очень удивили их электрички. Если честно, я до сих пор так и не понял, как работает их система check in/check out. Билеты мы решили брать сами, так как услуга покупки их через кассу обошлась бы нам + 7.6 евро, и билеты в районе 70 евро с человека за то, чтобы доехать в Бельгию. Мы купили билеты сами в автомате по продаже билетов, что стоило нам 39 евро, и приобрели потерянный день в дороге, поскольку наш маршрут включал три пересадки, так что не хватило сил даже погулять по Антверпене. Но это уже совсем другая история. В целом Амстердам – волшебный город с многовековой традицией, в которую хочется хотя бы раз в жизни окунуться. Это незабываемые впечатления.