среда, 24 августа 2011 г.

YaC'11

Yet another Conference 2011, 19 сентября

Yet another Conference 2011 состоится 19 сентября в Москве в залах World Trade Center Moscow.
Регистрация на мероприятие стартовала 19 августа. Количество мест ограничено.
Для тех, кто не попадёт в число участников или не сможет лично присутствовать на Yet another Conference 2011, будет организована онлайн-трансляция.
Подробную информацию о мероприятии читайте здесь.
Поделиться этой информацией с другими: url

среда, 29 июня 2011 г.

Как сделать патч

Q: Как сделать патч?

A:
diff -Naur some_file some_file.orig > some_file.patch

воскресенье, 19 июня 2011 г.

Установка redmine на Debian 6.0 squeeze

Будем считать, что apache уже установлен. В качестве базы данных используем PostgreSql:
plumbum@alpha:~$ sudo aptitude install postgresql
Изменим пароль пользователя postgres:
root@alpha:~# sudo -u postgres psql
psql (8.4.7)
Type "help" for help.

postgres=# ALTER ROLE postgres WITH ENCRYPTED PASSWORD 'sa';
ALTER ROLE
postgres=# \q
root@alpha:~# 
После этого установим redmine:
plumbum@alpha:~$ sudo aptitude install redmine redmine-pgsql
На вопрос о настройки базы данных с помощью dbconfig-common отвечаем утвердительно, в качестве базы данных указываем pgsql. Придумываем и вводим пароль.

После этого ставим passenger:
plumbum@alpha:~$ sudo aptitude install libapache2-mod-passenger
Создаем конфигурацию для сайта:
plumbum@alpha:~$ sudo touch /etc/apache2/sites-available/redmine
Конфигурация будет следующей:
<VirtualHost *:80>
  ServerName  redmine.alpha

  DocumentRoot /usr/share/redmine/public
  <Directory /usr/share/redmine/public>
    Options -MultiViews
    allow from all
  </Directory>
  LogLevel warn

  CustomLog /var/log/apache2/access.log combined
  ErrorLog /var/log/apache2/error.log

  ServerSignature Off
</VirtualHost>
Делаем новый сайт активным:
plumbum@alpha:~$ sudo a2ensite redmine
plumbum@alpha:~$ sudo invoke-rc.d apache2 reload

После этого redmine должен стать доступен на поддомене redmine. Для ввода используется учетная запись admin/admin.

четверг, 9 июня 2011 г.

Настройка виртуальной машины с Debian stable для экспериментирования

Допустим. нам нужно настроить виртуальную машину со стабильным Debian, чтобы обкатывать на нем настройки рабочих серверов. Начнем с голой установки base system с netinst cd. Нужно сделать следующее.

  1. Проверить sources.list apt и переключить репозитории на stable, после чего обновить систему.
  2. Установить sudo и настроить выбранному пользователю его использование без пароля для запуска всех программ.
    plumbum ALL=NOPASSWD: ALL
    
  3. Поставить vim и настроить его для пользователя и root'а.
    syntax on
    set number
    
  4. Убрать пароль пользователя для облегчения работы.
    sudo usermod -p plumbum
  5. Поставить openssh-server, разрешить вход с пустым паролем, для чего подправить конфигурационный файл ssh сервера.
    PermitEmptyPasswords yes
    И настройки PAM в /etc/pam.d/common-auth: изменить nullok_secure на nullok.
    auth    [success=1 default=ignore]      pam_unix.so nullok
  6. Удалить exim4.
  7. Настроить GRUB, уменьшив тайм-аут и отключив recovery.
  8. Установить apache. Чтобы убрать ошибку
    Could not reliably determine the server's fully qualified domain name, using 192.168.55.101 for ServerName
    нужно создать в директории /etc/apache2/conf.d файл с произвольным именем, например common, и ввести туда строку
    ServerName alpha
    где alpha — имя хоста.
  9. Отключить IPv6, как описано в http://wiki.debian.org/DebianIPv6#How_to_turn_off_IPv6

пятница, 10 декабря 2010 г.

Установка boost под Windows. Сборка из исходников

Новый пост из серии «Простой проект с использованием CMake, log4cxx, boost».

В предыдущей записи было рассказано, как установить boost с помощью Boost Installer. Данный подход оказался неудачным, поскольку сервера, с которых инсталлятор скачивал необходимые файлы, часто оказывались недоступны. Поэтому рассмотрим второй способ установки — сборку из исходников.

Последнюю версии архива с необходимыми файлами можно скачать здесь. Необходимо распаковать архив, запустить cmd и перейти в папку с содержимым архива.

Сборка осуществляется за два шага. Сначала нужно собрать bjam, утилиту, управляющую процессом компиляции и установки. Для этого предназначена команда bootstrap. После ее запуска необходимо собрать и установить сам boost.
bjam --prefix="C:\Program Files (x86)\boost\boost_1_44_0" --build-type=complete --with-system --with-filesystem install

Ключи имеют следующие значения:
  • prefix — директория, куда будет установлена библиотека;
  • build-type определяет варианты сборки (статические/динимические, многопоточность, наличие отладочной информации, способ линковки с run-time'ом). complete осуществляет сборку всех возможных вариантов;
  • with-system — собирать библиотеку system;
  • with-filesystem — собирать библиотеку filesystem.

воскресенье, 28 ноября 2010 г.

LaTeX и шрифт 14 пунктов

Чтобы использовать шрифт размером больше 12 пунктов, необходимо установить пакет extsizes. Размер шрифта указывается при объявлении класса документа.

\documentclass[14pt]{extarticle}

При использовании нестандартных шрифтов рекомендуется использовать нестандарные классы, такие как extarticle.

При трасляции может быть выдано предупреждение
Package ExtSizes Warning: It is better to use one of the extsizes classes, if you can.

Оно означает, что где-то в прамбуле явно через usepackage подключается пакет extsizes. Эту команду нужно убрать. Подробности можно найти здесь.

суббота, 27 ноября 2010 г.

BibTeX, utf8 и стили gost

У BibTeX из TeX Live возникает проблема с кодировкой utf8 при использовании стиля gost78s, которая может касаться и других стилей gost: вместо инициалов авторов подставляются неюникодные символы, что приводит к ошибке трансляции.
! Package inputenc Error: Unicode char \u8:�. not set up for use with LaTeX.

Это можно решить тем же способом, что и проблему с MiKTeX: необходимо заменить f. (f с точкой) на ff (две f). В файле /usr/share/texmf-texlive/bibtex/bst/gost/gost780s.bst эта подстрока встречается два раза. Чтобы не менять системный файл, этот файл можно скопировать в рабочую папку, сменив имя, чтобы LaTeX не спутал его с системным.

Найдено здесь.

вторник, 9 ноября 2010 г.

WCF: аутентификация по логину и паролю. Ссылки

http://codebetter.com/blogs/peter.van.ooijen/archive/2010/03/22/a-simple-wcf-service-with-username-password-authentication-the-things-they-don-t-tell-you.aspx

http://codebetter.com/blogs/peter.van.ooijen/archive/2010/04/09/a-simple-wcf-service-with-username-password-authentication-the-things-you-told-me.aspx

Как запустить просмотр pdf из Makefile в Windows

Q: Как сделать так, чтобы цель Makefile'а под Windows запускала pdf'ку в программе по умолчанию?

A:
view: $(PDF)
  cmd /c start $(PDF)

LaTeX: единый Makefile для Windows и Linux

Бывает необходимо собирать документы LaTeX и на Windows и на Linux. За счет использования MiKTeX и GnuWin можно не беспокоится о платформозависимости, но остается один мелкий нюанс: создание директории для сборки командой mkdir. В linux'е она принимает ключ -p, позволяя создать несколько вложенных директорий за раз и не падать с ошибкой, если директория уже существует. В винде этот ключ рассматривается как имя папки и повторный запуск make'а прерывает сборку с ошибкой, что папка уже существует. Для решения этой проблемы нужно реализовать ветвление по типу ОС.

...

UNAME = $(shell uname)
ifeq ($(UNAME), windows32)
  MKDIR_COMMAND = if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)
else
  MKDIR_COMMAND = mkdir -p $(BUILD_DIR)
endif

all: $(PDF)

$(PDF): $(TEX) $(STYLE)
  $(MKDIR_COMMAND)
  pdflatex -output-directory=$(BUILD_DIR) $(TEX)
  pdflatex -output-directory=$(BUILD_DIR) $(TEX)
  mv $(BUILD_DIR)/$(PDF) .

...

суббота, 6 ноября 2010 г.

Установка PSCyr под TeX Live

Google на вопрос об установке PSCyr под linux отвечает массой странных ссылок, предлагающих превратить Убунту в Слаку. Самая адекватная, на мой взгляд, инструкция находится здесь. Позволю себе ее скопировать, приведя ее в соответствие тому, что есть сейчас.

  1. Нужно достать PSCyr. На данный момент последняя версия, доступная тут — 0.4d-beta9. Скачиваем файлы pscyr-0.4-beta9exp2-tex.tar.gz и pscyr-0.4-beta9exp2-type1.tar.gz.
  2. В домашнем каталоге необходимо создать директорию с именем .texmf-var. В этом каталоге будут храниться пользовательские настройки, что довольно удобно: дополнительные пакеты может ставить и простой пользователь, не только root.
  3. Теперь извлекаем из скачанных архивов в ~/.texmf-var/ каталоги fonts и tex. Каталог dvips извлекать не нужно!
  4. В каталоге ~/.texmf-var/fonts/ необходимо создать два каталога: map и enc. Здесь хранится информация осоответствии имен файлов и имен шрифтов, а также о кодировках шрифтов.
  5. Теперь настал черед директории dvips из архивов. Необходимо распаковать файл dvips/pscyr/pscyr.map в каталог ~/.texmf-var/fonts/map/, а файлы dvips/pscyr/t2a.enc и dvips/pscyr/t2d.enc в каталог ~/.texmf-var/fonts/enc/. Тем самым, необходимые для работы PSCyr файлы оказываются на нужных местах. Остается только указать xdvi и dvips, чтобы они их использовали.
  6. Изменение конфигурационных файлов. Увы, тут без прав root не обойтись. В файл /etc/texmf/xdvi/xdvi.cfg нужно добавить строку dvipsmap pscyr.map. А в файл /etc/texmf/dvips/config/config.ps строку p +pscyr.map. После чего от имени пользователя выполнить команду texhash. PSCyr должен работать с этого момента.

Проверено на Ubuntu 10.10 Maverick Meerkat, texlive версии 2009-10.

Update: лучше пользоваться этим.

Ubuntu 10.10 Maverick Meerkat. Настройка grub

Адаптируем заметку Ubuntu Karmic. Настройка Grub к последней версии дистрибутива — Maverick Meerkat.

Касательно файла /etc/default/grub все осталось без изменений, необходимо изменить указанные ниже настройки:
  • GRUB_TIMEOUT=5 — время показа меню, 5 секунд.
  • раскомментировать GRUB_DISABLE_LINUX_RECOVERY="true" для отключения recovery пунктов меню.

Для отключения вызова memtest'а с выводом на последовательную консоль необходимо привести файл /etc/grub.d/20_memtest86+ в следующий вид:
#!/bin/sh
set -e

if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
  . /usr/lib/grub/grub-mkconfig_lib
  LX=linux16
elif [ -f /usr/lib/grub/update-grub_lib ]; then
  . /usr/lib/grub/update-grub_lib
  LX=linux
else
  # no grub file, so we notify and exit gracefully
  echo "Cannot find grub config file, exiting." >&2
  exit 0
fi

# We can't cope with loop-mounted devices here.
case ${GRUB_DEVICE_BOOT} in
  /dev/loop/*|/dev/loop[0-9]) exit 0 ;;
esac

prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"

if test -e /boot/memtest86+.bin ; then
  MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
  echo "Found memtest86+ image: $MEMTESTPATH" >&2
  cat << EOF
menuentry "Memory test (memtest86+)" {
EOF
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
    $LX $MEMTESTPATH
}
EOF
fi
На закомментированные строки в конце файла (начинающиеся с #) можно не обращать внимания. Код, который следует поместить в файл /etc/grub.d/08_windows_7, представлен ниже. Новый файл должен иметь исполняемый бит.
#! /bin/sh
set -e

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib

. ${libdir}/grub/grub-mkconfig_lib

if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
  # missing os-prober and/or linux-boot-prober
  exit 0
fi

OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`"
if [ -z "${OSPROBED}" ] ; then
  # empty os-prober output, nothing doing
  exit 0
fi

for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7" >&2
    cat << EOF
menuentry "Windows 7" {
EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
    cat << EOF
  chainloader +1
}
EOF
  fi
done
Теперь необходимо внести изменения в файл /etc/grub.d/30_os-prober, что он не находил Windows 7. Файл большой, поэтому приведем только часть кода, начинающуюся со 149 строки. Необходимо добавить в файл последние 4 приведенные здесь строки:
for OS in ${OSPROBED} ; do
  DEVICE="`echo ${OS} | cut -d ':' -f 1`"
  LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
  LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
  BOOT="`echo ${OS} | cut -d ':' -f 4`"

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

  if [ "x${LONGNAME}" = "xWindows 7 (loader)"  ]; then
    echo "Found Windows 7, skipping" >&2
    continue
  fi
После внесения все изменений необходимо отдать команду sudo update-grub:
user@host:/etc/grub.d$ sudo update-grub
Generating grub.cfg ...
Found Windows 7
Found linux image: /boot/vmlinuz-2.6.35-22-generic
Found initrd image: /boot/initrd.img-2.6.35-22-generic
Found memtest86+ image: /memtest86+.bin
Found Windows 7, skipping
done
После этого загрузочное меню должно принять вид
  • Windows 7
  • Ubuntu
  • Memtest

По умолчанию будет загружаться Windows 7.

четверг, 14 октября 2010 г.

LaTeX: добавить библиографию в оглавление

Чтобы в классе article добавить библиографию в огравление нужно успользовать следующий код:
\addcontentsline{toc}{section}{\refname}
  \bibliography{bib_name}
где bib_name — имя файла с BibTeX'овской базой. Для других классов стоит попробовать \bibname вместо \refname

Подробнее смотреть здесь и здесь.

Пропадающие инициалы авторов в BibTeX из MiKTeX 2.9 со стилем gost780s

При использовании стиля gost780s в MiKTeX 2.9 не отображаются инициалы авторов, хотя место для них выделяется. Для исправления этого бага необходимо в файле [MIKTEX_INSTALL_FOLDER]\bibtex\bst\gost\gost780s.bst в строке 523 исправить
#1 "{vv~}{ll}{~jj}{,~f.}" format.name$
на
#1 "{vv~}{ll}{~jj}{,~ff}" format.name$
а в строке 534
"{f.}{~vv}{~ll}{, jj}"
на
"{ff}{~vv}{~ll}{, jj}"
то есть f. (с точкой) поменять на ff (без точки). Это может касаться и других стилей gost.

Найдено здесь.

четверг, 30 сентября 2010 г.

MEX endpoint и ошибка 400

Пусть есть некоторая WCF служба, у которой определен MEX endpoint:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="GeneralBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
      <service name="WcfTest.Core.TalkingService" behaviorConfiguration="GeneralBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="WcfTest.Core.ITalkingService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <directoryBrowse enabled="true" />
  </system.webServer>

</configuration>

Служба хостится в IIS по адресу http://localhost/WcfTest.IISHost/TalkingService.svc. Заходим браузером на этот адрес и видим сообщение, поясняющее, что мы можем сделать с этой службой. В сообщение предлагается получить WSDL, перейдя по ссылке http://localhost/WcfTest.IISHost/TalkingService.svc?wsdl. Это работает, именно для этого был использован httpGetEnabled.

Однако при попытке перейти по адресу http://localhost/WcfTest.IISHost/TalkingService.svc/mex, указанному в MEX endpoint, мы получим от сервера ошибку HTTP 400 Bad request. Почему, мы же разрешили MEX? Плюс WCFTestClient нормально работает с этим адресом.

Дело в том, что mexHttpBinding использует SOAP и ожидает POST запрос, поэтому к нему нельзя обратиться через браузер. Единственный способ получить браузером WSDL - использовать параметр ?wsdl.

Найдено здесь и здесь.

вторник, 21 сентября 2010 г.

Использование WSE в Windows 7 x64

WSE поддерживается только 2005 студией. Установщик WSE терпит неудачу при обновлении конфига студии, в результате чего она неверно генерирует прокси-классы. Для решения этой проблемы необходимо добавить в файл C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\devenv.exe.config следующий код:

<configuration>
  <system.web>
    <webServices>
      <soapExtensionImporterTypes>
        <add type="Microsoft.Web.Services3.Description.WseExtensionImporter, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </soapExtensionImporterTypes>
    </webServices>
  </system.web>
</configuration>

Найдено здесь.

среда, 15 сентября 2010 г.

Установка boost под Windows

Второй пост из серии «Простой проект с использованием CMake, log4cxx, boost». Рассмотрим установку библиотек boost под Windows.

Существует два способа:
  1. собрать из исходников
  2. использовать инсталлятор

Выберем второй, как более простой. Boost Installer находится здесь, последняя на данный момент версия 1.44.0. Для работы установщика необходимо соединение с Интернет.

После запуска и принятия лицензии будет предложено выбрать зеркало, следует оставить значение по умолчанию (Nearest SourceForge Mirror). Затем требуется указать варианты конфигурации бинарников.


Данное окно позволяет выбрать вариант установки библиотеки. Например, если выбрать Visual C++ 2010, Multithread Debug DLL, то будут загружены все компоненты boost'а, собранные под 10-ую студию в динамически загружаемую библиотеку с отладочной информацией. Нам все компоненты не нужны, поэтому никаких галочек здесь не ставим, вместо этого выбираем отдельные компоненты.


Для текущего проекта понадобится Boost Filesystem, Boost System и все заголовочные файлы. Выбираем варианты Multithread Debug DLL и Multithread DLL под vs10.0. В PATH (Add to path чекбокс) ничего добавлять не нужно. Destination Folder оставляем по умолчанию. Затем следует процесс скачивания выбранных компонентов. Если возникают проблемы с доступностью серверов и соединение рвется, следует перезапустить установщик с теми же параметрами.

На вопрос об обновлении PATH отвечаем отрицательно, это действие выполним вручную. Поскольку мы будем линковаться с динамически загружаемыми библиотеками, они должны быть доступны нашей программе при запуске. Для этого в PATH добавляем C:\Program Files\boost\boost_1_44\lib, т.е. папку с бинарными файлами boost'а.

На этом установку можно считать законченной.

ReSharper: имена обработчиков событий UI

По умолчанию VS генерирует имена методов, подписанных на события UI, по шаблону
объект_событие, однако решарпер подчеркивает эти имена как имеющие неверный стиль. Для исправления открываем его настройки (ReSharper --> Options) и на странице Languages --> C# --> C# Naming Style выбираем опцию Override Common Settings. В таблице выделяем Methods, Properties and Events и нажимаем Advanced Settings. В поле Event subscriptions on fields вместо $object$_On$event$ пишем $object$_$event$.



Взято здесь.

вторник, 7 сентября 2010 г.

MS SQL CE 3.5: Список файлов

Полезная статья, содержащая списки бинарных файлов MS SQL CE 3.5 для разных сценариев частного развертывания.