Подборка SQL запросов

Допустим у вас есть номер телефона рекламного отдела и PR-манагеры пустили какую-то рекламу в сентябре.
Задача: найти всех клиентов которые позвонили в сентябре первый раз в жизни, но при этом им, что-то не понравилось и они не звонили после сентября.
Инфа нужна, чтоб промыть им мозги… 🙂
Вот, что у меня получилось сходу:

SELECT c.*,d.*
FROM
(SELECT a.callerid AS callerid1,a.count AS count1 FROM
(SELECT callerid,dst,COUNT(*) FROM calls WHERE dt BETWEEN '2010-09-01 00:00:00' AND '2010-10-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS a 
 
LEFT OUTER JOIN
(SELECT callerid,dst,operator FROM calls WHERE dt BETWEEN '2009-02-01 00:00:00' AND '2010-09-01 00:00:00' AND dst='5555555') AS b
 
ON a.callerid=b.callerid
WHERE b.dst IS NULL) AS c
 
LEFT OUTER JOIN
(SELECT callerid AS callerid2,dst,COUNT(*) AS count2 FROM calls WHERE dt BETWEEN '2010-10-01 00:00:00' AND '2010-11-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS d
 
ON c.callerid1=d.callerid2
WHERE d.dst IS NULL

Запрос не сильно легкий, требует оптимизации, но результат дает 🙂

Миграция Postgres с 8.4 на 9.0

Решились потренироваться делать репликацию Master-Slave, которая реализована в версии 9.0
Значит так-с…
1. Обновляем Portage

emerge --sync

2. Ставим новую БД

LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" emerge -av  /usr/portage/dev-db/postgresql-server/postgresql-server-9.0.1.ebuild

3. Конфигурим

emerge --config =dev-db/postgresql-server-9.0.1

4. правим конфиг и запускаем на порту 6543, не выключая старый постгресс
5. производим миграцию БД

pg_dumpall -p 5432 | psql -d postgres -p 6543

6. стартуем новую БД на порту 5432 предварительно выключив старую

После чего устанавливаем Postgres на втором хосте, который будет использоваться как Slave

LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" emerge -av  /usr/portage/dev-db/postgresql-server/postgresql-server-9.0.1.ebuild

Вносим изменения в Master, чтобы слэйв мог к нему подключится:

$ $EDITOR postgresql.conf
listen_addresses = '10.0.xx.yy'
 
$ $EDITOR pg_hba.conf
# The standby server must have superuser access privileges.
host  replication  postgres  10.0.xx.zz/22  trust

Читать далее Миграция Postgres с 8.4 на 9.0

Iskratel vs Asterisk

Состыковка Астериска с ИскраТел проходит довольно занятно.
Провайдер телефонной связи может отдавать телефонные звонки по SIP, но сервер сигнализации и голосовые сервера находятся в разных местах.
По умолчанию Астер считает, что источник RTP находится на одном хосте с Сервером сигнализации, чтоб сказать ему о поиске голоса на тех хостах которые приходят в INVITE, а также в SDP, в настройках sip.conf необходимо добавить такие строки

canreinvite=yes
dtmfmode=info

When SIP initiates the call, the INVITE message contains the information on where to send the media streams. Asterisk uses itself as the end-points of media streams when setting up the call. Once the call has been accepted, Asterisk sends another (re)INVITE message to the clients with the information necessary to have the two clients send the media streams directly to each other.

А также опцией permit разрешить посылать голос на хосты отличные от сигнального.
В итоге лог должен содержать что-то типа такого:
Читать далее Iskratel vs Asterisk

Flash Player под 64bit Gentoo

Чтоб обновить флэшплеер под Firefox нужно сначала поставить nspluginwrapper

emerge -av www-plugins/nspluginwrapper

потом поставить сам флеш:

emerge -av www-plugins/adobe-flash

после чего запустить врапер указав саму библиотеку:

nspluginwrapper --verbose --install /usr/lib32/nsbrowser/plugins/libflashplayer.so

и по идее все должно работать

Привязать MAC к IP на шлюзе

Чтобы отсеять незнакомцев которым не дозволен выход в инет либо гуляние по корпоративным подсетям, можно применить фильтр мак-адресов + ip-адресов
В случае если шлюзом выступает сервер на Linux, с iptables на борту, выглядит это так:

Читать далее Привязать MAC к IP на шлюзе

15 команд для управления PostgreSQL

1. Как изменить root пароль в PostgreSQL?

$ /usr/local/pgsql/bin/psql postgres postgres
Password: (oldpassword)
ALTER USER postgres WITH PASSWORD ‘tmppassword’;
$ /usr/local/pgsql/bin/psql postgres postgres
Password: (tmppassword)

Читать далее 15 команд для управления PostgreSQL

проброс udp трафика в http

появилось желание давать знакомым смотреть свое домашнее ip-tv

Пара десятков минут в гугле и решение банально простое:
лезем на SourceForge
качаем архив, распаковываем и в папке делаем:

make && make install

Читать далее проброс udp трафика в http

Залипание порта в Asterisk

упал несколько раз Астериск 1.6.1.14.

Перед смертью в логи было написано пару милионов раз:

WARNING[21761] asterisk.c: Accept returned -1: Too many open files

а система утверждает, что Астер не врет

lsof | grep asterisk | wc -l
1129

Читать далее Залипание порта в Asterisk

Горячие клавиши в screen

Key Action Notes
Ctrl+a c new window
Ctrl+a n next window I bind F12 to this
Ctrl+a p previous window I bind F11 to this
Ctrl+a “ select window from list I have window list in the status line
Ctrl+a Ctrl+a previous window viewed
Ctrl+a S split terminal horizontally into regions Ctrl+a c to create new window there
Ctrl+a | split terminal vertically into regions Requires debian/ubuntu patched screen 4.0
Ctrl+a :resize resize region
Ctrl+a :fit fit screen size to new terminal size Ctrl+a F is the same. Do after resizing xterm
Ctrl+a :remove remove region Ctrl+a X is the same
Ctrl+a tab Move to next region
Ctrl+a d detach screen from terminal Start screen with -r option to reattach
Ctrl+a A set window title
Ctrl+a x lock session Enter user password to unlock
Ctrl+a [ enter scrollback/copy mode Enter to start and end copy region. Ctrl+a ] to leave this mode
Ctrl+a ] paste buffer Supports pasting between windows
Ctrl+a > write paste buffer to file useful for copying between screens
Ctrl+a < read paste buffer from file useful for pasting between screens
Ctrl+a ? show key bindings/command names Note unbound commands only in man page
Ctrl+a : goto screen command prompt up shows last command entered

вумні слова

Часто мы говорим “Не люблю”, а в душе у нас текут слёзы.
Часто мы говорим “Ненавижу” только для того, чтобы мы сами поверили в это.
Часто мы говорим “Прощай” в надежде увидеть человека ещё раз.
Мы говорим “Уйди”, чтобы человек не видел наших слёз.
Мы говорим “Никогда”, когда знаем что это случится вновь.
Мы говорим “Разлюбил(а)”когда боимся признаться в своих чувствах.
Мы говорим “Я тебя забыл(а)” когда мысль о человеке не выходит из головы.
Мы говорим “Я удалила его(ее) номер” когда помним его наизусть.
Мы говорим “Между нами все кончено” когда все только начинается.
Иногда мы не можем сказать “Люблю” когда боимся услышать ответ.
Мы просим чтобы нас “Оставили одних”, когда нуждаемся в чьей-то поддержке.
Мы “Надеемся”, когда нет никаких шансов.