Как через SELECT запрос в PostgreSQL посмотреть структуру таблицы

SELECT a.attname, format_type(a.atttypid, a.atttypmod), a.attnotnull, a.atthasdef, a.attnum 
  FROM pg_class c, pg_attribute a 
  WHERE c.relname ='имя таблицы' AND a.attnum > 0 AND a.attrelid = c.oid ORDER BY a.attnum;

Blacklist в Asterisk

Допустим нужно, чтоб определенный список людей попадал сразу в отдел продаж минуя IVR.

Реализация такой схемы:

[incoming]
exten => s,1,LookupBlacklist(j) ;проверка на наличие номера в базе, j - переход на приоритет n+101
exten => s,2,Goto(ivr,s,1)
exten => s,102,Dial(SIP/1234,60,tT)
exten => s,103,Hangup

Добавление номера в базу данных происходит таким образом:

asterisk -rx "database put blacklist 0442223344 1"

Если номеров много, можно реализовать скриптом.

В более новых версиях Asterisk (>1.4) нужно использовать функцию Blacklist()

pbx*CLI> core show function BLACKLIST

Пример диалплана:

exten=> s,1,Answer()
exten=> s,n,GotoIf($[${BLACKLIST()}=1]?blacklist)
exten=> s,n,GoTo(incoming,s,1)
exten=> s,n(blacklist),Hangup()

BLACKLIST() проверяет в базе данных AstDB в семействе blacklist ключ, равный Caller*ID, со значением 1. Если ключ есть и значение равно единице, то BLACKLIST() возвращает 1.
Добавление номера в черный список:

pbx*CLI> database put blacklist 0441112233 1

FreeBSD: Средства мониторинга

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

  1. Информация о дисках
    1. mount – показывает смонтированные подразделы и флаги из монтирования
    2. df – показывает смонтированные подразделы, их размер и свободное место на них
    3. fdisk /dev/ad0 – показывает информацию о диске ad0 и разделах на нем
    4. disklabel /dev/ad0s1 – показывает список подразделов в первом разделе диска ad0
    5. swapinfo – показывает список подразделов свопинга на дисках и их использование
    6. fstat – показывает список открытых файлов (имена файлов не выводятся)
    7. pstat -f – выводит список открытых файлов (имена файлов не выводятся)
    8. systat -vmstat n – каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
    9. iostat – выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
    10. vmstat – выводит количество операций на диске в секунду
    11. /stand/sysinstall – можно посмотреть и изменить разметку диска и монтирование
    12. less /etc/fstab – таблица монтирования при загрузке
  2. Информация о процессоре и памяти
    1. systat -vmstat n – вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
    2. top – аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.
    3. ps afx – список запущенных процессов и время процессора на каждый
    4. grep -i cpu /var/run/dmesg.boot – узнать тип процессора
      Read more

Новый синтаксис в Asterisk 1.6

Буду тут оставлять заметки о том как меняется синтаксис между Asterisk 1.2 и Asterisk 1.6

1. Вместо “трубы” теперь в диалплане используется запятая, например

1.2

include => kiev|8:30-18:30|mon-fri|*|*

1.6

include => kiev,8:30-18:30,mon-fri,*,*

2. В ivr сменилось использование переменных DigitTimeout, ResponseTimeout, например:
1.2

exten => s,1,DigitTimeout,5 ; Set Digit Timeout to 5 seconds
exten => s,2,ResponseTimeout,10 ; Set Response Timeout to 10 seconds

1.6

exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
exten => s,2,Set(TIMEOUT(response)=10) ;Set Response Timeout to 10 seconds

Сервисы в Gentoo

Спижжено с Gentoo Wiki

Чтобы запустить программу при загрузке системы, в Gentoo сущестует специальный файл:

/etc/conf.d/local.start

Синтаксис предельно простой. Каждая строка – команда с параметрами, которая должна быть выполнена.
Также есть возможность запускать программы при выключении системы. Для этого есть файл:

/etc/conf.d/local.stop

Что сделать если невозможно остановить сервис, или процесс убит а система продолжает думать что сервис работает?

/etc/init.d/<service> zap

Как выяснить статус сервиса?

/etc/init.d/<service> status

Как увидеть все запущенные сервисы?

rc-status

Как перезапустить сервис?

/etc/init.d/<service> restart

Как выяснить какие сервисы должны быть запущены если мне надо использовать определенный ?

/etc/init.d/<service> ineed

Какой сервис зависит от этого ?

/etc/init.d/<service> needsme

Простой сайт своими руками

По роду деятельности есть у меня несколько более-менее стандартных запросов к БД, а также парочка скриптов, которые, что-то делают.
Но все это безобразие делалось на скорую руку и разбросано по всему компьютеру, скрипты отдельно, SQl отдельно… и иногда просто тяжело найти, что-то, а особенно когда смотришь на название файла и не понимаешь к какому месту его приложить.
Почесав репу решил все это собрать под одну крышу, но как всегда человека одолевает лень. Так случилось и со мной, стало лень все это переписывать заново, а хотелось как-то красиво все это склеить.
Read more

Всплывающие изображения в WordPress

Как-то никогда не заморачивался картинками в блоге, тем более, что у меня на весь сайт картинок 5 наберется, но вот добавил в пост 2 скрина и стало грустно, они открываются в том же окне, что и сам пост, но в режиме “только картинка”.
Read more

rewrite правила Gallery2 на Nginx

location /v/
{
    if ($request_uri !~ /main.php)
    {
        rewrite ^/v/(.*)$ /main.php?g2_view=core.ShowItem&g2_path=$1 
last;
    }
}
 
location /d/
{
 
    if ($request_uri !~ /main.php)
    {
 
rewrite /d/(\d+)-(\d+)/([^/?]+)/main.php?g2_view=core.DownloadItem&g2_itemId=$1&g2_serialNumber=$2&g2_fileName=$3
last;
    }
 
}

nginx, php-cgi или избавляемся от apache

Теста ради решил несколько доменов поднять только на nginx и посмотреть как поменяется картинка на графиках загрузки сервера.
Как запустить nginx поверх apache было описано тут
Теперь начинаем прикручивать php к nginx через fastcgi.
для этого нам понадобится пакет spawn-fcgi

Read more

Добавление AdSense в WordPress

Ставим плагин AdSense Manager.
Заходим в раздел “Записи” там находим “Ad Units
Добавляем новую контекстную рекламу нажав на ссылку “Create New Ad

Увидим такое поле, вставляем ваш код от Гугла
Read more

Кодування імен файлів в Linux

Дали мені декілька каталогів з музикою, щоб записати на CD-R, але під час передачі через FTP побилось кодування самих файлів, щоб виправити данну неприємність в Linux є маленька утиліта convmv
Ставимо її:

$apt-get install convmv

а потім правимо кодування :

$convmv -f cp1251 -t utf-8 -r --nosmart --replace --notest /якась/папка/

–nosmart – не чіпає файли які вже в кодуванні UTF8
–replace – заміняє файли
-r – рекурсивно

Отримати список всіх підтримуваних кодувань :

$convmv --list