SVN принципы работы, основные команды

Одной из самых распространенных систем контроля версий в мире является SVN. Ей пользуется добрая треть всех разработчиков. Почему она такая популярная — да потому, что очень проста в использовании, для нее написаны самые удобные графические клиенты.

Принцип работы SVN

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

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

Базовые операции SVN

Итак, предположим, что у вас есть пустой удаленный репозиторий SVN Читать далее

Gitolite сервер продвинутая настройка

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

Gitolite группы

Прошу обратить внимание — пользователей и репозиториев, да вы не ошиблись, в gitolite можно и репозитории объединять в группы.

Во-первых существует одна предопределенная группа @all. Она означает в зависимости от контекста либо всех пользователей, либо все репозитории. Вот пример конфиг файла Читать далее

Gitolite сервер установка и настройка

Если вы уже ранее использовали для контроля версий SVN, то вероятно заметили, что установка и настройка сервера (svnserve) довольно проста и многофункциональна. С «git» все не так просто. Непонятно почему, но родные средства «git» не позволяют настроить авторизацию, не говоря уже об объединении пользователей в группы и настройке прав на определенные папки репозитория.

Конечно, есть возможность использовать github, но там репозитории по-умолчанию создаются с открытым для чтения доступом. Закрытие доступа стоит денег…

Есть два специализированный бесплатный открытых веб-сервера для «git»: «gitosys», «gitolite». «gitolite» более сложен в настройке, но он предоставляет все необходимые нам возможности. Итак, поехали Читать далее

Android асинхронные задачи

Прожженные Java-разработчики или же начинающие программисты, когда пробуют свои силы в Android разработке по началу для выполнения фоновых задач используют стандартные Java потоки (интерфейс Runnable и класс Thread). Данный метод в принципе действенный и проверенный, но в Android SDK для выполнения фоновых задач есть специальный базовый класс AsyncTask.

Вкратце рассмотрим все функциональные возможности данного класса, ситуации, в которых его нужно использовать, и, конечно, преимущества и недостатки использования AsyncTask перед стандартными потоками Java.

Когда лучше использовать AsyncTask вместо Runnable & Thread

Данный класс используется обычно для выполнения фоновых задач приложения, которые определенным образом отображают прогресс выполнения задачи в интерфейсе приложения (GUI), или же каким-либо образом обращаются к GUI элементам. Если вы попробуете реализовать обращение к GUI в параллельном потоке, то вы получите сообщение об ошибке, или же, если повезет — повиснет на время обращения вся графика приложения. Это происходит потому, что в Android вся графика работает в основном (GUI) потоке и обращение к GUI должно выполняться только из него. Как было описано ранее, это можно обойти использованием отложенных сообщений с помощью класса Handler. Читать далее

SVNSERVE настройка прав доступа

В этой статье речь пойдет о гибкой настройке прав доступа к SVN репозиториям, которые контролируются c помощью svnserve.

В продолжение того, что было сказано ранее об установке и базовой настройке svnserve, предположим, что у нас есть репозиторий под названием «test», корень которого лежит в папке «/var/spool/svn/test». Для того, чтобы настроить права доступа так, как хочется зайдем и отредактируем файл прав доступа:

sudo nano /var/spool/svn/test/conf/authz

Например, в моей ubuntu-11.04 в этом конфигурационном файле следующее содержимое по-умолчанию: Читать далее

Установка и настройка SVN сервера

Для настройки SVN сервера будем использовать простейшие варианты с минимумом телодвижений и кликов, то есть используем пакетную установку и любую Debian подобную систему (Debian, Ubuntu и т.д.).

Есть как минимум два варианта настройки поднятия SVN сервера:
1. Веб-сервер apache с модулем — dav_svn.
2. Специализированный сервер — svnserve.

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

Установка и настройка SVNSERVE

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

Устанавливаем svnserve:

sudo apt-get install subversion

Для создания репозиториев используется следующая утилита ядра svn — «svnadmin». Создадим для начала репозиторий с именем «test»:

sudo mkdir /var/spool/svn
sudo svnadmin create /var/spool/svn/test

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

Apache + DAV_SVN

Итак, приступим к поднятию нашего первого svn сервера под linux.

Устанавливаем все необходимые пакеты:

sudo aptitude install subversion libapache2-svn libapache-mod-dav apache2

Создаем папку, где будут храниться наши будущие репозитории (не путать с рабочими копиями проектов):

mkdir -p /var/spool/svn

Даем права Apache для записи в папку репозиториев и делаем его владельцем: Читать далее

Работа с картами Bing, геолокация

Всем приятного времени суток. Итак, вкратце — в этой статье речь пойдет о Bing Maps, будет описан пример использования HTML 5 Geo-Location в приложении ASP.NET MVC, с помощью встроенного API и JavaScript.

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

Перед тем, как начать работать с картами, вам необходимо зайти на Bing Maps developer portal и получить ключ API. Можно войти используя любой Live ID или же Hotmail аккаунт. Итак, поехали…

Использование Bing Maps Ajax Control and API

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

  1. Мы знаем адрес нашего супермаркета и, для простоты, пусть у него будет один единственный адрес.
  2. Мы просим пользователей, чтобы они нам дали доступ к геолокационному API.
  3. Если пользователь дает нам доступ, то это здорово! Мы будем вычислять маршрут, используя API Bing и показывать маршрут между обнаруженным местонахождением пользователя и супермаркетом на карте Bing.
  4. Если пользователь не дает нам доступа, мы будем просить предоставить нам адрес и попытаться получить маршрут между двумя точками.

Давайте рассмотрим все шаги для построения такого приложения… Читать далее

Android заполнение listView в параллельных потоках

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

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

Делаем базовый класс модели для поисковых систем — SearchModel:

public abstract class SearchModel {
 
    private String query; 
 
    public SearchModel() {
	init();
    }
 
    protected void init() {
    }
 
    public void setQuery(String query) {
	this.query = query;
    }
 
    public String getQuery() {
	return query;
    }
 
    public String toString() {
	return "Search system";
    }
 
    public abstract ArrayList<searchresultsitem> getResults() throws IOException;
}
</searchresultsitem>

И класс для элемента результатов поиска — SearchResultsItem: Читать далее