Сообщения

Сообщения за май, 2017

Установка PostgreSQL-9.6 и pgAdmin на Ubuntu 16.4

На данный момент из официальных репозиториев есть возможность установить postgresql-9.4 и pgadmin3. Но нам нужна актуальная стабильная версию postgresql-9.6 и pgadmin4 для нее. Перед установкой нужно проверить настройки локализации: $ locale Для корректного хранения данных на русском языке LC_CTYPE и LC_COLLATE должны иметь значения ru_RU.UTF8 При необходимости их можно установить: $ export LC_CTYPE=ru_RU.UTF8 $ export LC_COLLATE=ru_RU.UTF8 Проверяем наличие локали ru_RU.utf8 $ locale -a | grep ru_RU Если нет то добавляем: $ sudo locale-gen ru_RU.utf8 Добавляем репозиторий postgresql.org В файл  /etc/apt/sources.list или  /etc/apt/sources.list.d/pgdg.list добавляем новую строчку: deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main Загружаем и добавляем ключ: $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \sudo apt-key add -sudo apt-get update Устанавливаем postgresql-9.6: $ sudo apt-get install postgresql-9.6 Будет создан

Битовый вектор

В посте О битовых операциях  были рассмотрены логические побитовые операции и побитовые сдвиги. В качестве примеров были взяты битовые флаги и множества. Если применения битовых флагов вообщем то понятно, то для множества необходима структура данных и набор алгоритмов по работе с ней. В книге Донован А. Керниган Б. - Язык программирования Go приведен пример битового вектора. Такая структура хорошо подходит для множества небольших положительных чисел над которым часто проводят операции объединения, пересечения, разность и пр. Реализуем на Go структуру и основные методы. Тип вектора имеет одно поле. Срез беззнаковых целочисленных значений, каждый бит которых представляет возможный элемент множества. type IntSet struct { words [] uint } Нам понадобится узнать размер слова const sizeWord = 32 << (^ uint ( 0 ) >> 63 ) На 32 разрядных платформах sizeWord будет равен 32, на 64 соответственно 64. Когда не часто работаешь с битовыми операциями может пок

О битовых операциях

Число в двоичной записи можно использовать как множество или битовые флаги. В таком виде проще познакомится с побитовыми операциями. Возьмем для примера число 168, в двоичной записи это (1010 1000). 7 6 5 4 3 2 1 0 1 0 1 0 1 0 0 0 Получается множество {7, 5, 3} или можно сказать что включен флаг 7, 5, 3 Логические побитовые операции Побитовое НЕ Инвертирует состояние каждого бита. Унарный префиксный оператор ^ ^(1010 1000)=(0101 0111) Побитовое И Логическое & к каждой паре битов. Если оба бита равны 1 то результат будет 1, в остальных случаях 0. Бинарный оператор & Для множества это операция пересечение (1010 1000) = {7, 5, 3} (0110 1001) = {6, 5, 3, 0} (1010 1000)&(0110 1001)=(0010 1000) = {5, 3} Для битовых флагов позволяет узнать включены ли нужные флаги flags =  1010 1000 mask = 0000 1000 - хотим узнать включен ли 3й бит (flags&mask)==mask (flags&mask) = (1010 1000)&(0000 1000)=(0000 1000) сравниваем маску с результ