пятница, 8 июля 2016 г.

Из GPX на экран - часть 2

Всем добрый день!
Хочу написать о проблемах, которые возникают при настройке ubuntu12 под virtualbox5.


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


И вот что из этого вышло...



Выбрал наиболее популярный дистрибутив - ubuntu.
Скачал через торрент образ ubuntu 12 потому что он занимает меньше места, среди всех поддерживаемых версий, всего 756 мб.
http://www.ubuntu.com/download/alternative-downloads
Но отказываться от удобной винды Windows 7 x64 не хочу. Мультибут или двойная загрузка - не вариант, т.к. для того, чтобы зайти в линукс и обратно в этом случае надо будет каждый раз перезагружаться, а это долго. Виртуализация показалась мне наиболее приемлемым вариантом,
благо что комп сейчас достаточно современный и мощный - intel core i5, 4гб RAM.
Программку для вируализации выбрал virtualbox, т.к. она меньше чем vmware, проще, удобней.
Итак, скачиваем virtualbox для Windows7x64 - выбираем строку "VirtualBox 5.0.24 for Windows hosts  x86/amd64"
https://www.virtualbox.org/wiki/Downloads
Основная машина в их терминах называется хостом, виртуальная - гостем (guest).
Инсталяшка занимает в районе 107мб и ставится на 200 мб.
Поднастроим virtualbox под наши нужды:
1.
Надо обязательно скачать плагин  "VirtualBox 5.0.24 Oracle VM VirtualBox Extension Pack"
Сначала я не придал ему значения, т.к. тут пишут что мол
Support for USB 2.0 and USB 3.0 devices, VirtualBox RDP and PXE boot for Intel cards
Ну экзотика, зачем оно мне - подумал я. Оказалось, что без этого плагина большая часть virtualbox не работает. Это не только USB и RDP.
Самое важное для меня - 3D ускорение. Так что качаем и устанавливаем обязательно. Маст хэв - 16 мб.
Кидаем в папку D:\programs\VirtualBox\plugins , заходим в virtualbox, Настройки, Плагины, установить новый.
2.
Я для удобства поменял папку по умолчанию D:\programs\VirtualBox\vms - чтобы не замусоривать диск С.
Всё, настройка virtualbox закончена.

Теперь приступаем к созданию виртуальной машины, т.е. гостя (guest).
Имя u32
Тип Linux
Версия Ubuntu (32-bit)
Память 1Гб

Одним из моих заблуждений было:
если указываешь Тип Linux Версия Ubuntu (32-bit) - то сразу загружается эта ОС и ты просто начинаешь с ней работать.
Фигушки. Кроме указания типа и версии, нужно скачать инсталяшку (образ диска) и с него установить ОС на диск.
Виртуальный диск. Мастер создания виртуальной машины в VirtualBox предлагает создать такой.
 Предлагают выбрать тип диска. В этом я пока не силен. Мне важно, чтобы он:
1. был по возможности простым файлом, который можно было бы перенести в другую папку на другой диск,
 перерегистрировать его в VirtualBox и продолжить им пользоваться.
Для выполнения пункта 1 нужно:
*сначала отцепить диск ото всех виртуалок, которые к нему подключены.
*потом в менеджере удалить диск
*перекинуть файл в тотале в новую папку
*в настройках конкретной виртуалки подключить этот диск
Если этого не сделать, возможна ошибка, типа такой:
2. Размер файла зависел от виртуальной заполненности диска - пустой в виртуальности диск должен занимать мало.

Для выполнения пункта 2 надо в настройках диска обязательно выбрать "Формат хранения = Динамический виртуальный жесткий диск".
Тогда в "Менеджере виртуальных носителей" в свойствах этого диска будет строчка "Дополнительно=Динамически расширяющийся образ"


Вот список форматов дисков:
VDI - Image
VMDK - Machine
VHD -Hard
HDD - Parallels
QED - QEMU
QCOW - QEMU
Чем они отличаются, пока не знаю.

Когда виртуалка создана, нужно её донастроить:
1. Система - материнская плата - манипулятор курсора = PS/2 мышь
2. отключить Audio и USB - зачем они нужны?
3. Дисплей - Экран. Видеопамять=128мб. Ускорение-3D=галка. - чтобы разрешение было не 640х480, а нормальное.

4. Сделать общую папку для обмена с большой машиной очень важно.
Общие папки. Добавить.
Путь=D:\programs\VirtualBox\virtual-obmen
Имя=obmen
Автоподключение=галка
Чтобы папка заработала, кроме этого надо после установки убунты поставить VBoxLinuxAdditions
(через меню VirtualBox : Устройства - подключить образ диска дополнений гостевой ОС)
5. Папка для снимков D:\programs\VirtualBox\Snapshots - это не фото с экрана, а бэкапы виртуалки.
Никогда не делал, но если вдруг буду, пусть они тоже будут не на С.
6. Общие - Дополнительно
Буфер обмена - двунаправленный
ДрагДроп - двунаправленный

Интересно, что в настройках VirtualBox есть пункт "Менеджер виртуальных носителей".


Здесь есть список всех дисков, которые могут фигурировать во всех машинах.
Однако почему-то просто создать диск из этого окна нельзя.
И удалить тоже.
В этом наверно кроется какой-то глубинный смысл, но от меня он пока ускользает.
Как видим, столбы с размерами отличаются. Новый диск на 8Гб фактически занимает 2мб, поскольку совсем не заполнен.
Кроме шести форматов, которые изменить потом нельзя, через этот менеджер можно поменять тип диска:
Обычный - по умолчанию для большинства.
Неизменяемый
Сквозной
с общим доступом
Множественное подключение
Для чего нужны, пока не знаю.

Установка Ubuntu12.
Отвечаем на вопросы. Серийный номер вводить не надо. 
Где живём (Europe/Chisinau), на каком языке читаем (Russian) и пишем (Russian + English).
Имя учётки я ставлю ультракороткое - одна буква q. Пароль тот же. При загрузке пароль не спрашивать.
Имя компа тоже короткое: u32

После установки надо донастроить Ubuntu12 под наши нужды.
1. Устройства - подключить образ диска дополнений гостевой ОС
D:\programs\VirtualBox\VBoxGuestAdditions.iso\VBoxLinuxAdditions.run
Перезагрузка.

2. Дисплей - разрешение экрана 1024х768

3. Double Commander
Инструкция по установке отсюда
https://sourceforge.net/p/doublecmd/wiki/Download/
ведёт сюда
http://software.opensuse.org/download.html?project=home%3AAlexx2000&package=doublecmd-qt
и получаем:
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/Alexx2000/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/doublecmd-qt.list"
sudo apt-get update
sudo apt-get install doublecmd-qt
Это значит, что программка ставится с сервера opensuse из личной папочки автора Alexx2000 - инсталяха конкретно для Ubuntu_12.04.
Первый запуск doublecmd - главное меню. Поиск double. Запуск. Правой кнопкой на значке - прикрепить к панели.

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

Думал, что это связано с галкой "Не запускать несколько копий DC". Но уже поставил и всё равно... После перезагрузки глюк исчезает.
Донастроим doublecmd под себя:*Просмотр файлов - формат размера файла = В
*Просмотр файлов - сортировка каталогов = как файлы и показывать первыми
*Просмотр файлов - показывать системные файлы = галка

3. Донастроим папку обмена
sudo adduser имя_пользователя vboxsf
у меня имя_пользователя=q
так что получается
sudo adduser q vboxsf
см. http://help.ubuntu.ru/wiki/virtualbox#расшаривание_директорий
Теперь перейдём в папку /media/sf_obmen
Если выдаётся сообщение об ошибке, что мол нельзя, нет доступа, делаем:
sudo mount -t vboxsf obmen /media/sf_obmen
как тут
http://aboutubuntu.ru/content/nastroika-virtualnoi-mashiny-virtualbox-s-gostevoi-ubuntu-na-windows-khoste
Убеждаемся в работоспособности папки обмена с внешним миром.

4. Удаляем лишние программы, освобождаем место для своих
sudo apt-get remove libreoffice
sudo apt-get remove thunderbird -плюс 80мб
sudo apt-get autoremove --плюс 30мб

Поскольку система обновлений не отключена, со временем приедут уведомления с просьбой обновить все программы, которые установлены в ubuntu12. Если прога маленькая, то это ничего страшного, пускай себе обновляется на здоровье.
Если прога большая и если она не нужна, её надо как можно раньше удалить, чтобы не приехали её обновления. Это сэкономит время настройки.

Команда sudo apt-get remove libreoffice не удаляет полностью libreoffice.
Чтобы удалить, заходим в "Центр приложений Ubuntu". Установлено. Поиск libre.
Выбираем каждый и тыкаем Удалить. Вводим пароль, если надо.
И всё равно после всех удалений папка /usr/lib/libreoffice
если верить doublecmd - 160мб. Больше чем у ФФ.

Как удалить это чудо?

На самом деле, надо указывать ремув со звёздочкой на конце
sudo apt-get remove libreoffice*
Помогает очистить в районе 180 мб.
см.
http://help.ubuntu.ru/wiki/libreoffice
http://www.tvs-sm.ru/kak-udalit-ves-libreoffice-iz-ubuntu/
http://forumooo.ru/index.php?topic=5661.0
После такого удаления папки
/usr/lib/libreoffice как не бывало.





Убунту донастроили под себя. Теперь давайте ставить на неё то, для чего мы её создавали. Анаконда.
Качаем отсюда https://www.continuum.io/downloads
выбираем питон2 и Linux 32-bit
http://repo.continuum.io/archive/Anaconda2-4.1.0-Linux-x86.sh

В процессе установки Анаконды важно, чтобы места было много. Сама инсталяшка занимает 340мб, разворачивается на 1гб.
Поэтому не надо экономить на месте и создавать диски на 5 Гб, как поступил я.
Однако, поскольку я так сделал, запишу свои действия, как жить дальше с таким диском, если вся убунта уже сюда установлена и настроена.
Я придумал, по аналогии с виндой, что можно создать ещё один диск, дополнительный, на котором установить анаконду. Типа диска Д.
Сказано - сделано.
В VirtualBox:
1. выключаем виртуалку.
2. заходим в настройки виртуалки. Носители. Создаем ещё один диск. Обязательно указываем полный путь до диска/файла, а не просто имя.
А то опять создаст в C:\Users\user.domain\.Virtualbox
Главное: тип, размер и переменный размер.
3. Запускаем виртуалку.
4. Заходим в Дисковую утилиту. Видим, что новый диск появился. Пустой, неотформатированый. Форматируем, подключаем. Указываем имя disk2
Теперь новый диск будет по адресу /media/disk2
5. При установке анаконды указываем папку не в home/ а /media/disk2/ana2

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

Займемся сначала модулями.
0. sudo apt-get install python-pip - это пакетный установщик модулей python

В документе
https://ocefpaf.github.io/python4oceanographers/blog/2015/08/03/fiona_gpx/

есть следующие команды по загрузке внешних библиотек:
import geopandas as gpd
import fiona
from shapely.geometry import shape
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.io import shapereader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import cartopy.io.img_tiles as cimgt

Итого, нужно 5 дополнительных библиотек:
1. matplotlib
2. geopandas
3. fiona
4. shapely
5. cartopy

1. matplotlib
import matplotlib.pyplot as plt - отрабатывает без проблем, не считая мелкого предупреждения, что сейчас мы будем кэш шрифтов создавать - на это время надо, подождите.

>>> import matplotlib.pyplot as plt
/media/disk2/ana2/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
>>>
Идём дальше.

2. geopandas
Команда
import geopandas as gpd
пишет
>>> import geopandas as gpd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named geopandas
Пытаемся поставить через
pip install geopandas
Установка сначала бежит бодренько, но когда начинает ставить Shapely, встаёт вопрос насчёт GEOS.

3. fiona
Поставим-ка лучше fiona.
http://toblerity.org/fiona/README.html#installation
https://github.com/Toblerity/Fiona
pip install fiona
а в ответ ошибка
      File "/tmp/pip-build-aRlmgM/fiona/setup.py", line 193, in <module>
        if gdalversion.startswith("1"):
    NameError: name 'gdalversion' is not defined

Итого, 6.gdal и 7.geos - две ключевые библиотеки/программы, которые надо ставить, если хочешь глянуть на то, что замутил океанограф.

Начнем, с 6.gdal.
Особенность её в том, что она поставляется _только_ в форме исходных кодов. И чтобы поставить её, надо её сначала скомпилировать
на локальном компиляторе. Добро пожаловать в опенсурс, детка!
http://download.osgeo.org/gdal/2.1.0/
качаем
http://download.osgeo.org/gdal/2.1.0/gdal210.zip - 15мб
распаковываем - 60мб, кидаем в обмен, оттуда в /media/disk2/tmp
Инструкшен по компайлу тут:
https://trac.osgeo.org/gdal/wiki/BuildingOnUnix
Инструкшен надо смотреть именно про "Install in non-root directory : ", потому что места на С нет.
% cd gdal
% ./configure --prefix=/media/disk2/gdal/ [options]
% make
% make install
% export PATH=/media/disk2/gdal/bin:$PATH
% export LD_LIBRARY_PATH=/media/disk2/gdal/lib:$LD_LIBRARY_PATH
% export GDAL_DATA=/media/disk2/gdal/share/gdal
# Test
% gdalinfo --version
# See below for installation of Python bindings

Первая же команда
./configure --prefix=/media/disk2/gdal/
сообщает что
configure: error: "You don't have a working C++ compiler."
Да ты компилить не умеешь. Нет у тебя на это средствов, то есть программок соответствующих.
Что делать и как быть?
Проблема решается командой
sudo apt-get install build-essential плюс 27 мб.
Узнал например отсюда
http://www.howtogeek.com/105413/how-to-compile-and-install-from-source-on-ubuntu/

вот теперь другое дело.
Компилить - дело долгое, поэтому надо набраться терпения.
На экране мелькают буковки, папка пухнет от свежих файлов - а нам пофигу, место есть.
Вот уже из 60мб папка распухла до 202...потом до 389мб...
И вот наконец
o@o-VirtualBox:/media/disk2/tmp/gdal$ gdalinfo --version
GDAL 2.1.0, released 2016/04/25
круть. теперь что скажет фиона?
pip install fiona
Successfully installed click-plugins-1.0.3 cligj-0.4.0 fiona-1.7.0.post2 munch-2.0.4
Всё супер. только вот открыл другой терминал, запустил питон, сделал import fiona и вылезла ошибка:

o@o-VirtualBox:~$ python
Python 2.7.11 |Anaconda 4.1.0 (32-bit)| (default, Jun 15 2016, 15:21:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import fiona
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/media/disk2/ana2/lib/python2.7/site-packages/fiona/__init__.py", line 69, in <module>
    from fiona.collection import Collection, BytesCollection, vsi_path
  File "/media/disk2/ana2/lib/python2.7/site-packages/fiona/collection.py", line 7, in <module>
    from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
ImportError: libgdal.so.20: cannot open shared object file: No such file or directory
>>>

Что делать и как быть?
Открываем файл /home/o/.bashrc в любимом редакторе и добавляем в конец:

export PATH="/media/disk2/gdal/bin:$PATH"
export LD_LIBRARY_PATH="/media/disk2/gdal/lib:$LD_LIBRARY_PATH"
export GDAL_DATA="/media/disk2/gdal/share/gdal"

пути прописываем. Как в винде в autoexec.bat...

Вот тепер другое дело:
o@o-VirtualBox:~$ python
Python 2.7.11 |Anaconda 4.1.0 (32-bit)| (default, Jun 15 2016, 15:21:34)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import fiona
>>>

7.geos
Теперь геос.
https://trac.osgeo.org/geos/
Проблема в том, что в стандартном репозитории убунты нет геоса.
Точнее, он есть, но очень древняя версия - 2009 года.

o@o-VirtualBox:~$ sudo apt-get install libgeos-3*
[sudo] password for o:
Чтение списков пакетов… Готово
Построение дерева зависимостей      
Чтение информации о состоянии… Готово
Заметьте, выбирается «libgeos-dbg» для регулярного выражения «libgeos-3*»
Заметьте, выбирается «libgeos-dev» для регулярного выражения «libgeos-3*»
Заметьте, выбирается «libgeos-doc» для регулярного выражения «libgeos-3*»
Заметьте, выбирается «libgeos-ruby1.8» для регулярного выражения «libgeos-3*»
Заметьте, выбирается «libgeos-3.2.2» для регулярного выражения «libgeos-3*»
Заметьте, выбирается «libgeos-c1» для регулярного выражения «libgeos-3*»
Следующие пакеты устанавливались автоматически и больше не требуются:
  libwpg-0.2-2 libreoffice-emailmerge libreoffice-base-core python-uno
  libwps-0.2-2 libwpd-0.9-9
Для их удаления используйте «apt-get autoremove».
Будут установлены следующие дополнительные пакеты:
  libreadline5 libruby1.8
Предлагаемые пакеты:
  libgdal-doc
НОВЫЕ пакеты, которые будут установлены:
  libgeos-3.2.2 libgeos-c1 libgeos-dbg libgeos-dev libgeos-doc libgeos-ruby1.8
  libreadline5 libruby1.8
обновлено 0, установлено 8 новых пакетов, для удаления отмечено 0 пакетов, и 269 пакетов не обновлено.
Необходимо скачать 10,1 MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 38,5 MB.
Хотите продолжить [Д/н]?

А мы пойдем другим путём:
conda install -c scitools geos

o@o-VirtualBox:~$ conda install -c SciTools geos
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .........
Solving package specifications: ..........
Package plan for installation in environment /media/disk2/ana2:
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    geos-3.4.2                 |                2        16.5 MB  SciTools
    conda-4.1.6                |           py27_0         199 KB
    ------------------------------------------------------------
                                           Total:        16.7 MB
The following NEW packages will be INSTALLED:
    geos:  3.4.2-2      SciTools
The following packages will be UPDATED:
    conda: 4.1.4-py27_0          --> 4.1.6-py27_0
Proceed ([y]/n)? y
Fetching packages ...
geos-3.4.2-2.t 100% |####################################################| Time: 0:00:41 419.72 kB/s
conda-4.1.6-py 100% |####################################################| Time: 0:00:01 197.74 kB/s
Extracting packages ...
[      COMPLETE      ]|#######################################################################| 100%
Unlinking packages ...
[      COMPLETE      ]|#######################################################################| 100%
Linking packages ...
[      COMPLETE      ]|#######################################################################| 100


Круто. Не понадобилось из исходников компилить. И версия подходящая.
теперь остаётся три библиотеки:
2. geopandas
4. shapely
5. cartopy

2. geopandas
Команда
pip install geopandas
даёт
Successfully built geopandas shapely pyproj
Installing collected packages: shapely, descartes, pyproj, geopandas
Successfully installed descartes-1.0.2 geopandas-0+unknown pyproj-1.9.5.1 shapely-1.5.16

4. shapely
pip install shapely
уже есть.

5. cartopy - 8 мб
pip install cartopy
даёт ошибку
    Complete output from command python setup.py egg_info:
    Proj4 4.9.0 must be installed.

8. proj4
https://trac.osgeo.org/proj/

в требованиях
http://scitools.org.uk/cartopy/docs/latest/installing.html
чётко написано что нужно именно
PROJ.4 4.9.0 or later (https://trac.osgeo.org/proj/)
версия и не ниже. Так что простая команда

o@o-VirtualBox:~$ conda install -c SciTools proj4
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .........
Solving package specifications: ..........
Package plan for installation in environment /media/disk2/ana2:
The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    proj4-4.8.0                |                0        1011 KB  SciTools
The following NEW packages will be INSTALLED:
    proj4: 4.8.0-0 SciTools
Proceed ([y]/n)? n

могла бы решить проблему, но нет. Хорошая попытка, конда, но пролёт.
И то что здесь написано
https://anaconda.org/SciTools/proj.4
 тоже не прокатывает.
conda install -c scitools proj.4=4.9.1
Error: Package missing in current linux-32 channels: - proj.4 4.9*

Ладно, компилим из исходников, ничего не поделаешь.
Инструкшн тут
https://github.com/OSGeo/proj.4
Скачал, распаковал, установил. В свою папку, естественно:
./configure --prefix=/media/disk2/proj4
make
make install

поставил.
Теперь вернёмся к оставшейся команде
pip install cartopy

после бодренькой установки выдалась ошибка:

    lib/cartopy/trace.cpp:274:22: фатальная ошибка: proj_api.h: Нет такого файла или каталога
    компиляция прервана.

Файл лежит тут:
/media/disk2/proj4/include/proj_api.h

Пути есть:
o@o-VirtualBox:~$ echo $PATH
/media/disk2/proj4/include:/media/disk2/proj4/bin:/media/disk2/gdal/bin:/media/disk2/ana2/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
o@o-VirtualBox:~$
Чо он хочет?

Возможно как в случае с GDAL надо прописать путь ещё и в LD_LIBRARY_PATH ?
export PATH="/media/disk2/gdal/bin:$PATH"
export LD_LIBRARY_PATH="/media/disk2/proj4/lib:$LD_LIBRARY_PATH"

После перезагрузки ситуация поменялась:
pip install cartopy
выдал
SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
А ну это просто:
sudo apt-get install python-dev плюс 44мб
После этого повторяем:
pip install cartopy

но потом опять:
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include -I./lib/cartopy -I/media/disk2/ana2/include -I/usr/include/python2.7 -c lib/cartopy/trace.c -o build/temp.linux-i686-2.7/lib/cartopy/trace.o
gcc: ошибка: lib/cartopy/trace.c: Нет такого файла или каталога
gcc: фатальная ошибка: не заданы входные файлы
компиляция прервана.

Или поставить её тоже через компиляцию из исходников?

Картинки пока тут https://yadi.sk/d/PlPLmNJvt8Jb4

UPD 11-09-2016
Бодание с чистой убунтой 16 у некоторых специалистов может вызвать недоумение: "Зачем так мучаться, если есть Runtu-Lite 14 - отличная минималистическая линукс-система с нормальным форумом поддержки".
И действительно. Скачал образ - 400 мб, создал виртуалку, запустил, установил. Всё отлично работает и не тормозит.
Осталось теперь прогнать все эти манипуляции с анакондой на рунту. Интересно, какие ещё проблемы выплывут?
 

Комментариев нет: