Показаны сообщения с ярлыком ubuntu. Показать все сообщения
Показаны сообщения с ярлыком ubuntu. Показать все сообщения

5 нояб. 2013 г.

Картограммы в R: используем OpenStreetMap в качестве фона

При помощи библиотеки OpenStreetMap, R-project может использовать растровые карты проекта OpenStreetMap.

Среди ее зависимостей находятся библиотеки rJava и rgdal. Про установку библиотеки rgdal я писал ранее. Установка библиотеки rJava также требует дополнительных действий — в ее зависимости входит Java JRE и Java JDK. Ubuntu 12.04 precise использует в качестве Java-окружения OpenJDK 6, так что для удовлетворения зависимостей rJava достаточно дополнительно установить пакет openjdk-6-jdk и познакомить с ним R:

$ sudo aptitude install openjdk-6-jdk
$ sudo R CMD javareconf

После такой подготовки системы, библиотека OpenStreetMap успешно устанавливается и мы можем переходить к её использованию. С тем, как получены объекты brks, part и udm.TIK можно познакомиться в предыдущих статьях.

> map <- openmap(c(59, 49), # Широта и долгота северо-западного угла карты.
+                           c(55, 56), # Широта и долгота юго-восточного угла карты.
+                           zoom=7,    # Масштаб карты, можно посмотреть в ее URL:
+ # http://www.openstreetmap.org/#map=7/57.035/53.553 (выделен красным).
+                           type="osm") # Тип скачиваемой карты (tile server). Есть и другие.
> colors <- rev(heat.colors(length(brks), alpha=1/3))
> udm.TIK.osm <- spTransform(udm.TIK, osm()) # Меняем проекцию объекта udm.TIK на используемую
# проектом OpenStreetMap.
> str(map) # Смотрим размеры карты в пикселах (выделены красным):
List of 2
 $ tiles:List of 1
  ..$ :List of 5
  .. ..$ colorData : chr [1:422878] "#F1EEE8" "#F1EEE8" "#F1EEE8" "#F1EEE8" ...
  .. ..$ bbox      :List of 2
  .. .. ..$ p1: num [1:2] 5454655 8180387
  .. .. ..$ p2: num [1:2] 6233891 7361866
  .. ..$ projection:Formal class 'CRS' [package "sp"] with 1 slots
  .. .. .. ..@ projargs: chr "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0
+x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
  .. ..$ xres      : int 667
  .. ..$ yres      : int 634
  .. ..- attr(*, "class")= chr "osmtile"
 $ bbox :List of 2
  ..$ p1: num [1:2] 5454655 8180387
  ..$ p2: num [1:2] 6233891 7361866
 - attr(*, "zoom")= int 7
 - attr(*, "class")= chr "OpenStreetMap"
> png("ER-osm.png", width=634, height=667, units="px") # Рисуем. Размер может быть любым,
#                            карта будет отмасштабирована с сохранением отношения сторон.
> plot(map)
> plot(udm.TIK.osm, col=colors[findInterval(part, brks, all.inside=T)],
+ border="transparent", add=TRUE)
> legend("left", inset=0.1, legend=leglabs(brks, under="<", over=">"), fill=colors, bty="n")
> title(main="Доля голосов за ЕР\nв муниципальных районах\nи городских округах Удмуртии")
> dev.off()

Буду благодарен за указание способа узнать разрешение растровой карты автоматически.

30 мар. 2013 г.

Картограммы в R: меняем проекцию

Для смены проекции карты в R можно использовать библиотеку rgdal:

> install.packages("rgdal")
> library("rgdal")

В Ubuntu для работы этой библиотеки требуются пакеты libgdal1-dev и libproj-dev с их зависимостями.

Мы можем скачать и прочитать шейп-файл, как указано ранее (это, кстати, существенно быстрее), однако продемонстрирую вариант подключения к открытой базе геоданных PostGIS при помощи того же rgdal:

> # Читаем список доступных слоёв базы GEN…
> ogrListLayers(dsn="PG:host=gis-lab.info user=guest dbname=gen password=guest")
 [1] "modis_tiles"              "oblasts"                  "ru_adm2_country"
 …
[26] "wrs2_landsat_rus"
> # … и загружаем слой границ России в объект rus.
> rus <- readOGR(dsn="PG:host=gis-lab.info user=guest dbname=gen password=guest",
+ layer="ru_adm2_country", verbose=T)

Проект GIS-Lab для отображения Сибирской части России и для отображения России целиком пользуется равновеликой конической проекцией Альберса с главными параллелями 52° и 64° с.ш. и главным меридианом 105° в.д.. Проекция объекта rus —

> proj4string(rus)
[1] "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"

— что делает его изображение разорванным по 180-му меридиану, в районе Чукотки. Сменим проекцию и нарисуем карту:

> rus2 <- spTransform(rus, CRS("+proj=aea +lat_1=52 +lat_2=64 +lat_0=0 +lon_0=105
+ +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs"))
> plot(rus2, col="#31A35488", border=F)

Чтобы наложить на полученную карту сетку координат, необходимо эту сетку специально подготовить:

> grd <- gridlines(rus,
+ norths = seq(10, 90, by=5), # рисуем линии каждые 5° между 10 и 90° с.ш.
+ # Отобразятся только те из них, которые попадут в область рисуемой карты.
+ easts = seq(-179.9999, 180, by=5), # Если указать -180, этот меридиан не отобразится.
+ ndiscr=360) # Число опорных точек — если указать мало,
> # координатная сетка после перепроецирования может получиться ломаной.
> # Меняем проекцию координатной сетки так же, как у карты…
> grd2 <- spTransform(grd, CRS("+proj=aea +lat_1=52 +lat_2=64 +lat_0=0 +lon_0=105
+ +x_0=18500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs"))
> # … и добавляем её к рисунку.
> plot(grd2, add=T, col="#08519C88", lty=2)

Результат приведен в начале заметки.

Перед сменой проекции мы можем упростить контур объекта rus,

> rus.thiny <- thinnedSpatialPoly(rus,
+ tolerance=0.5, # Интенсивность упрощения, чем больше, тем проще контур.
+ minarea=0.1) # Минимальная площадь сохранямых островов.

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

12 нояб. 2012 г.

Автоконфигурирование сетевых интерфейсов в guest Ubuntu server

После установки на ноутбук ОС Ubuntu Precise server edition в качестве гостевой, возникла задача — обеспечить к ней доступ по постоянному имени не только с системы-хозяина, но и с других компьютеров ЛВС. Задача осложняется тем, что ноутбук может быть подключен к ЛВС и через разъём RJ-45, и посредством Wi-Fi. Хорошо то, что сервис DHCP предоставляется в любом случае.

Постоянное имя гостевой ОС прекрасно обеспечивает avahi-daemon. Единственный недостаток — от компьютеров ЛВС требуется поддержка Zeroconf.

Однако, эксплуатация с поддержкой инициализации то одного, то другого интерфейса омрачена следующим: если оставить для обоих сетевых интерфейсов в файле /etc/network/interfaces режим auto, задержка на попытки их инициализации (при условии, что подключен к ЛВС только один) составляет несколько минут. Выход — указание для обоих интерфейсов режима инициализации allow-hotplug и включение сервиса, отслеживающего их подключение — netplug, например.

Все настройки производятся в гостевой ОС.

20 окт. 2012 г.

Ubuntu Precise: moodle+postgresql

В двух словах: плохая идея.

Подробнее: да, поддержка СУБД PostgreSQL в Moodle заявлена, даже подключить базу удаётся (важно проконтролировать, чтобы был установлен php5-pgsql, а не php5-mysql, который может быть автоматически заказан вместо него). Нет, начальное наполнение базы не завершается из-за множественных жалоб СУБД на ошибки SQL-кода. Версии — PostgreSQL 9.1, Moodle 1.9.9. Возможно, с PostgreSQL 8.4, которая также доступна в репозитории, ситуация иная.

С MySQL Moodle в Precise Pangolin просто работает.

2 сент. 2011 г.

Настройка TV-тюнера PixelView PV — BT878P+ FM.RC

Выглядит этот TV-тюнер следующим образом:

PixelView PV — BT878P+ FM.RC

и с другой стороны:

PixelView PV — BT878P+ FM.RC

Настраивается в linux одной командой:

sudo echo "options bttv card=72 tuner=23 radio=1" > /etc/modprobe.d/bttv.conf

UPD:

В Ubuntu Lucid файл /etc/modprobe.d/bttv.conf следует создавать при помощи любимого текстового редактора.

В Windows программа DScaler 4.11.17 подхватывает телесигнал при указании в качестве карты — PixelView PlayTV pro, в качестве тюнера — Philips [PAL].

22 мар. 2011 г.

GRUB 2: Парольная защита загрузки Linux в режиме восстановления

В Ubuntu Lucid загрузка Linux в режиме восстановления настроена по умолчанию так, что доступ к учетной записи root не требует авторизациии. Кроме того, разрешено свободное редактирование любого пункта меню загрузки. Исправить ситуацию можно настроив в GRUB 2 аутентификацию.

Назначим имя и пароль суперпользователя GRUB 2, добавив следующий текст в конец файла /etc/grub.d/00_header:

cat << EOF
set superusers="user1"
password user1 password1
EOF

Суперпользователь (в нашем случае — user1) имеет возможность загружать и редактировать любой пункт меню GRUB 2, а также работать с GRUB 2 в режиме командной строки. Без прохождения аутентификации эти действия становятся невозможны.

В файле /etc/grub.d/10_linux заменяем этот фрагмент:
printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

на следующий:

if ${recovery} ; then
  printf "menuentry '${title}' --users user1 ${CLASS} {\n" "${os}" "${version}"
else
  printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
fi

Таким образом мы разрешаем загрузку режима восстановления (recovery) только пользователю user1.

GRUB 2 поддерживает хранение пароля в виде хэша (алгоритм PBKDF2). Сформировать такой хэш можно при помощи программы grub-mkpasswd_pbkdf2, которая запрашивает пароль и отдает его хэш в стандартный вывод (более двухсот символов заменено на многоточие для удобства отображения).

Enter password:  
Reenter password: 
Your PBKDF2 is grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5…

В случае использования PBKDF2-хэша пароля, запись для пользователя user2 в файле /etc/grub.d/00_header будет выглядеть так:

password_pbkdf2 user2 grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5…

Заметка основана на этом руководстве и этой статье.

19 сент. 2010 г.

Мультизагрузка, GRUB 2 и LVM

Дважды в год мне приходится организовывать на компьютере двойную загрузку — очередной и предыдущей версий Ubuntu. Ситуацию осложняет то, что корневой раздел я традиционно размещаю в системе LVM, соответственно под /boot выделен отдельный раздел, а установщик Ubuntu при работе затирает его содержимое (с фатальными для загрузки предыдущей версии последствиями).

Наиболее удобным мне кажется следующее решение:

  1. Содержимое /boot копируется с отдельного раздела в соответствующий каталог корневой файловой системы.
  2. Строка для /boot удаляется из /etc/fstab уже установленной версии Ubuntu. Также из системы удаляется системный загрузчик.
  3. Устанавливается новая версия Ubuntu. Загрузочный раздел используется под /boot уже ею. GRUB 2 при установке автоматически формирует строку для загрузки старой версии Ubuntu.

4 янв. 2010 г.

Общесистемная настройка шрифтов

Мне не нравится то, как по умолчанию выглядят шрифты в Ubuntu. Напротив, мне нравится, как выглядят шрифты Monotype, используемые маленькой фирмой, производящей мягкие окна.

Команда
$ aptitude install ttf-mscorefonts-installer
с последующей доводкой напильником gnome-appearance-properties (Система → Параметры → Внешний вид → Шрифты), решает проблему лишь частично — в firefox, например, также необходимо указать три варианта шрифта, причем, желательно, для каждого языка.

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

Для исполнения этого желания достаточно использовать пару файлов:

  • /etc/fonts/local.conf для общесистемных настроек;
  • ~/.fonts.conf для настроек пользовательских.

Содержимое этих файлов прекрасно описано здесь, однако свою версию /etc/fonts/local.conf я приведу:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Настройки отображения шрифтов по умолчанию -->
<match target="font">
  <edit mode="assign" name="rgba"><const>none</const></edit>
  <edit mode="assign" name="hinting"><bool>false</bool></edit>
  <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
  <edit mode="assign" name="antialias"><bool>true</bool></edit>
  <edit mode="assign" name="autohint"><bool>false</bool></edit>
</match>
<!-- Включить hinting, выключить antialias для мелких шрифтов -->
<match target="font">
  <test compare="less_eq" name="pixelsize" qual="any"><double>17</double></test>
  <edit mode="assign" name="hinting"><bool>true</bool></edit>
  <edit mode="assign" name="antialias"><bool>false</bool></edit>
</match>
<!-- Включить antialias для полужирных шрифтов среднего размера -->
<match target="font">
  <test compare="more_eq" name="pixelsize" qual="any"><double>15</double></test>
  <test name="weight" compare="more"><const>medium</const></test>
  <edit name="antialias" mode="assign"><bool>true</bool></edit>
</match>
<!-- Назначить предпочтения в семействах шрифтов
(шрифты Monotype предпочтительнее всех) -->
<alias>
  <family>serif</family>
  <prefer>
    <family>Times New Roman</family>
    <family>Liberation Serif</family>
    <family>DejaVu Serif</family>
    <family>Thorndale AMT</family>
    <family>Luxi Serif</family>
    <family>Nimbus Roman No9 L</family>
    <family>Times</family>
  </prefer>
</alias>
<alias>
<family>sans-serif</family>
  <prefer>
    <family>Arial</family>
    <family>Liberation Sans</family>
    <family>DejaVu Sans</family>
    <family>Verdana</family>
    <family>Helvetica</family>
    <family>Albany AMT</family>
    <family>Luxi Sans</family>
    <family>Nimbus Sans L</family>
  </prefer>
</alias>
<alias>
  <family>sans</family>
  <prefer>
    <family>Arial</family>
    <family>Liberation Sans</family>
    <family>DejaVu Sans</family>
    <family>Verdana</family>
    <family>Helvetica</family>
    <family>Albany AMT</family>
    <family>Luxi Sans</family>
    <family>Nimbus Sans L</family>
  </prefer>
</alias>
<alias>
  <family>monospace</family>
  <prefer>
    <family>Courier New</family>
    <family>Liberation Mono</family>
    <family>DejaVu Sans Mono</family>
    <family>Cumberland AMT</family>
    <family>Luxi Mono</family>
    <family>Nimbus Mono L</family>
    <family>Courier</family>
  </prefer>
</alias>
</fontconfig>

За способ включения сглаживания у полужирных шрифтов спасибо жижеюзеру sb0y.

UPD: Добавляю ссылки на отличное описание опций и виртуозный пример управления отображением шрифтов.

17 окт. 2009 г.

Санскрит в LaTeX

Устанавливаем поддержку языка и шрифты:

$ aptitude install latex-sanskrit

Далее создаем файл sanskrit.skt примерно такого содержания:

\documentclass[12pt]{article}
\usepackage[larger]{skt}
\begin{document} {\skt ddhrya}
\end{document}

Пропускаем его через препроцессор skt (входит в комплект пакета):

$ skt sanskrit.skt

На выходе получаем sanskrit.tex, с которым поступаем обычным образом.

Результат:

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

Вот результат без использования препроцессора:

Документация к пакету — /usr/share/doc/latex-sanskrit/sktdoc.pdf.gz

По желанию можно использовать пакет texlive-lang-indic, например, так.

Отличия — в препроцессоре, TeX-пакете и, естественно, в направленности на живые языки Индии.