• Сейчас в работе SHOP ( cart, categories, product ) в разработке


Как скопировать из консоли CISCO файл с TFTP на FLASH

Читать статью Как скопировать из консоли CISCO файл с TFTP на FLASH в категории Cisco 3825


Сброс к заводским настройками CISCO 7962

Читать статью Сброс к заводским настройками CISCO 7962 в категории Cisco 3825

ix/">запись о сбросе настроек к заводским на аппарате CISCO 7975
Собственно, мне необходимо было сбросить настройки CISCO 7962, он завис при обновлении намертво.
Собственно процедура практически похожа.
  • 1. Выключаем питание
  • 2. Зажимаем #, держим и включаем питание, продолжаем держать
  • 3. Держим до тех пор, пока кнопки блока расширения справа вверху аппарата не начнут методично перемигивать
  • 4. Отпускаем и вводим заветные 123456789*0#

После этого происходит сброс настроек, подключение к TFTP и повторная попытка закачать первоначальную прошивку.
Мне помогло.


Пример редиректа используя пакетный фильтр PF

Читать статью Пример редиректа используя пакетный фильтр PF в категории Пакетный фильтр PF, FreeBSD

его гейтвея
  • Внешний IP 1.2.3.4
  • Внутренний IP машины в локалке 5.6.7.8

Файл с правилами для чтения pf.conf

# Внешний интерфейс
ext="bge1"

# Это внутренний IP
from="5.6.7.8"

# Это внешний IP на который будут приходить запросы
extip="1.2.3.4"

# Перечисление портов, при обращении к которым на внешний IP будет происходить редирект
devports="{53, 10000, ftp, 1723}"

# Нормализация траффика
scrub in all

#Правило для nat
nat on $ext from $from -> $extip

#Собственно сам редирект
rdr on $ext proto {tcp, udp} from any to $extip port $devports -> $from

# Еще вариант, если порт надо с какоего-либо внешнего перекинуть на внутренний
# Тут получается что если кто-то из вне обращается на внешний IP на порт 12345
# будет переадресован на внутренний IP на порт 54321

rdr on $ext proto {tcp, udp} from any to $extip port 12345 -> $from 54321



Вуаля. Работает
Не забываем о том, что на внешнем интерфейсе должен быть данный IP )


Nginx PHP-FPM, прикручиваем phpmyadmin

Читать статью Nginx PHP-FPM, прикручиваем phpmyadmin в категории NGINX

от себя, как и что я делал, чтобы все это запустить.
Всте вставилось из исходников, не порты
    - установка PCRE ( описывать не буду - элементарно )
    - установка MySQL - бинарник ( опять таки рассказывать нечего, очень хороший мануал по установке)
    - сборка и установка PHP
      ./configure --prefix=/usr/php --sysconfdir=/etc/php --enable-fpm --with-config-file-path=/etc/php --with-libxml-dir-regex=/store/pcre --with-zlib --with-bz2 --with-curl --enable-exif --enable-ftp --with-gd --with-jpeg-dir=/usr/jpeg --with-png-dir --with-zlib-dir -pe-dir --enable-gd-native-ttf --with-mhash --enable-mbstring --with-mcrypt --with-mysql=/usr/local/mysql --with-unixODBC=/usr/unixODBC --enable-sockere-dir --enable-fastcgi --enable-force-cgi-redirect --enable-discard-path
    - установка nginx
    Тут немного подробнее. Я его собирал с такими параметрами
      --prefix=/usr/nginx --conf-path=/usr/nginx/conf --with-http_dav_module --with-pcre=/sources/pcre --with-poll_module

    PHP у меня уже юыла собрана с поддержкой FPM так что много мороки не возникло. Надо было только скрипт автостарта сделать и подключить в rc.conf
    Собственно практически все, тут я вспомнил про phpmyadmin
    1. Скачал
    2. Распаковал в папку в корне дефолтного сервера, обозвал sql
    3. Залез в конфиг дефолтного сервера и кое-что поправил после 2 часов колупания
    upstream backend {
        server unix:/var/run/php-fpm/php-fpm.sock;
    }
    
    server {
     listen       80;
     server_name  192.168.70.226;
            charset utf-8;
    
    access_log  logs/ns2.access.log                main;
    error_log   logs/ns2.error.log;
    root /store/www;
    index index.php;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
         root   /store/www/errors;
    }
    
    // тут все что связаное  исполнение PHP скриптов
     location ~ \.php$ {
                fastcgi_index  index.php;
                include /usr/nginx/fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                if (-e $request_filename ) {
                    fastcgi_pass backend;
                    }
            }
    
    Не поверите! Но это все. Больше ничего не надо.
    Рекоменедую - если не запустится, сходить и поправить здесь
    fastcgi_conf
    Тут в первой строке у меня стояло fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    Снес $document_root
    И здесь fastcgi_param SCRIPT_NAME $document_root$fastcgi_script_name; тоже снес.

    Переходим к fastcgi_params
    Везде где находим $document_rootчего-то там - сносим $document_root
    И все заработало.


proFTPD 1.3.4 Установка и конфигурировение

Читать статью proFTPD 1.3.4 Установка и конфигурировение в категории FreeBSD

blank" href="http://proftpd.org/download.html">proftpd-1.3.4 зеркало сами выбирать будете.
Далее так:
1. Распаковываем через tar -zxvf proftpd-1.3.4a.tar.gz ( помним что у вас может быть другая версия и имя файла другое )
2. Конфигурируем. Я собирал с такими параметрами
--prefix=/usr/proftpd куда ставить сам proFTPD
--sysconfdir=/etc/proftpd, это место где будет конфигурация лежать
дальше:
  • --enable-memcache, думаю название само за себя говорит
  • --enable-pcre, опять таки, расчитываю на вашу смышленность
  • --enable-openssl, куда ж тут без этого, в наш то век
  • --with-mysql-config, думаю что в какой-то момент своей жизни конфиги и прочее переползут в базу MySQL

Ну вот, дальше делаем make install clean
Ждем, дожидаемся окончания процесса установки и таки смотрим на конфигурацию дефолтную (по умолчанию) в /etc/proftpd, стартовый скрипт в /usr/local/etc/rc.d не забываем в rc.conf прописать proftpd_enable="YES"
Все - это вся установка. Делалось все на FreeBSD 7.2 из исходников. Порты стараюсь использовать в крайнем случае.


Не открываются ссылки в письмах в MS Outlook

Читать статью Не открываются ссылки в письмах в MS Outlook в категории Windows

ся.
Вам необходимо сделать следующее
Пуск -> Выполнить -> и написать это regsvr32 urlmon.dll
И нажать Enter


Использование helo.regexp

Читать статью Использование helo.regexp в категории Postfix

зано как обрабатывать запросы HELO // и в каком порядке
smtpd_helo_restrictions = permit_mynetworks,
  check_helo_access regexp:/etc/postfix/helo.regexp,
  reject_non_fqdn_hostname, reject_unknown_hostname, reject_invalid_hostname,
  permit

// Другой пример // поменяем местами строки
smtpd_helo_restrictions = permit_mynetworks,
   reject_non_fqdn_hostname, reject_unknown_hostname, reject_invalid_hostname,
   check_helo_access regexp:/etc/postfix/helo.regexp,
   permit

В первом случае, если Вам надо будет добавить в "белый" список некий узел, который нельзя определить то все пройдет гладко, если вы его опишите как
/^vasya.pupkin$/      OK

И все красиво отработает, тоесть письмо полученной с таким HELO попадет к полчателю.
А вот второй пример, где поменяли местами правила, до вашего разрешения проверка не дойдет и письмо не будет получено, ибо вначале перед проверкой файла с правилами стоят четкие указания отбрасывать всех, кто не соответствует FQDN. А именно reject_non_fqdn_hostname. Здесь оно будет убито и до файла с правилами не добежит.


CISCO 3825 как начать конфигурировать

Читать статью CISCO 3825 как начать конфигурировать в категории Cisco 3825

будет как подсказка другим

conf t // идентично тому что внизу
conf terminal // идентично тому что вверху


CISCO 3825 настройка места, куда будет сохраняться статистика

Читать статью CISCO 3825 настройка места, куда будет сохраняться статистика в категории Cisco 3825

imary ftp 10.1.1.4/DATA username USERNAME password PASSWORD //меняем USERNAME и PASSWORD secondary ftp 10.1.1.4/DATA username USERNAME password PASSWORD //меняем USERNAME и PASSWORD maximum retry-count 5 // сколько раз стучаться в случае неудачных попыток maximum cdrflush-timer 1400 // с каким интервалом дропаем на удаленный хост статистику cdr-format compact // формат файл статистики


CISCO 3825 автоматическое получение факсов и отправка на почту

Читать статью CISCO 3825 автоматическое получение факсов и отправка на почту в категории Cisco 3825

x receive called-subscriber COMPANY NAME // Тут можно указать название вашей компании fax send transmitting-subscriber $s$ fax send left-header FROM: XXX XXXX // Это городской номер который указывается в хидере fax send center-header +$a$ $t$ $p$ fax send right-header TO: $d$ fax interface-type fax-mail // тип интерфейса mta send server 10.1.1.114 port 25 // IP адрес почтового сервера на который будет напрвлятся полученнный факс mta send subject FAX from mta send with-subject $s$ mta send filename both mta send postmaster fax@DOMAIN.COM // адресат на которого кидаем факс mta send mail-from hostname DOMAIN.COM // домен вашей компании mta send mail-from username FAX-SERVER mta send return-receipt-to hostname fax@DOMAIN.COM mta send return-receipt-to username FAX-SERVER mta send success-fax-only mta receive aliases fax@DOMAIN.COM mta receive maximum-recipients 10 mta receive generate mdn


MySQL, количество открытых файлов ( open_files_limit )

Читать статью MySQL, количество открытых файлов ( open_files_limit ) в категории MySQL

нь много, MySQL сваливается, т.к. упирается в лимит (1024 открытых файла). Отсюда и ниже цитировение: текущее использование открытых файлов можно узнать так:
lsof -u mysql | wc -l

Если же оно приближается к 1024, то стоит в блок [mysqld] файла my.cnf добавить следующее:
open_files_limit = 8192

И перезапустить MySQL
У кого как
  • service mysql restart (ubuntu)
  • ./usr/local/etc/rc.d/mysqld restart (freeBSD)
  • .. и дальше, смотря у кого на чем стоит и как установлено


JavaScript, удаляем ( заменяем ) знаки табуляции в textarea

Читать статью JavaScript, удаляем ( заменяем ) знаки табуляции в textarea в категории JavaScript

rea').value; txt = txt.replace(/(\t)/g," "); Другой пример
Надо заменить
\r\n
на
<br />

Выглядит пример так
txt = txt.replace(/(\r\n)/g,"<br />"); 


Автодозвон на Asterisk - как сделать и как применять

Читать статью Автодозвон на Asterisk - как сделать и как применять в категории Asterisk

br />

Как видно из схемы, часть пользователей зарегистрировано на cisco 3825, а часть на asterisk 1.6. Но, автодозвон должен быть доступен как для тех, кто зарегистрирован на CISCO так и для тех, кто зарегистрирован на Asterisk. Итак я сделал все это следующим образом:

  • Создал правило на CISCO, в котором сказано, что "Все кто набирает 33T" убегают на asterisk по SIP и им еще на выходе дописывается опознавательный код ( может потом понадобится )
  • На Asterisk создано правило, прописано в /etc/asterisk/extension_custom.conf. Выглядит следующим образом:
    exten => _33.,1,Dial(Local/${EXTEN:2}@from-internal,10,tr)
    exten => _33.,2,GotoIF($[ "${DIALSTATUS}" == "ANSWER" ]?end)
    exten => _33.,n,GotoIF($[ "${DIALSTATUS}" == "ANSWERED" ]?end)
    exten => _33.,n,GotoIF($[ ${CDR(billsec)} >0 ]?end)
    exten => _33.,n,Wait(10)
    exten => _33.,n,Goto(${EXTEN},1)
    exten => _33.,n(end),Hangup
    
По каждой строке долго расписывать нечего, их формирование и синтаксис станет понятен после чтения документации, тут все просто. Замеччу только что в строке
exten => _33.,1,Dial(Local/${EXTEN:2}@from-internal,10,tr)

Я использовал tr чтобы пользователь с ума не сходил от постоянного пиликанья "BUSY" в линии.
Итак, у меня до этого было сформировано правило, по которому звонящий - набравший 0 в начале отправлялся в транк который смотрел в сторону той же CISCO 3825 и там уже отрезался 0 и номер кидался в E1 для выхода в город. Соответсвенно тут происходил набор 33 + 0 + номер производился дозвон. По расширению 33 Asterisk определял - что надо повторять до посинения звонки.

P.S. Ко всему этому замечу, что все это делалось на конфигурации Asterisk "по-умолчанию"


Создание дерева категорий / PHP / jQuery

Читать статью Создание дерева категорий / PHP / jQuery в категории PHP


Merge / C / Объединить 2 массива и отсортировать

Читать статью Merge / C / Объединить 2 массива и отсортировать в категории Язык C

а отсортированных по неубыванию массива длинами len1 и len2.
Произвести слияние этих массивов в третий, также отсортированный по неубыванию.
Алгоритм должен работать за линейное время.
Результат вывести в task.out

#include <stdio.hgt;

int getLen(FILE *in) {
    int size;
    
    fscanf(in, "%d", &size);
    return size;
}

void arrayFill(FILE *in, int array[], int limit) {
    for ( int i = 0; i < limit && fscanf(in, "%d", &array[i]) > 0; i++ );
}

void arrayPrint(FILE *out, int array[], int size) {
    size = size - 1;
    for ( int i = 0; i < size; i++ ) {
        fprintf(out, "%d ", array[i]);
    }
    fprintf(out, "%d\n", array[size]);
}

void arraySort(int array[], int size) {
    int temp = 0;
    int nextIndex;
    
    size = size - 1;
    
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size; j++ ) {
            if ( array[j] >= array[j+1] ) {
                temp = array[j];
                nextIndex = j + 1;
                array[j] = array[nextIndex];
                array[nextIndex] = temp;
            }
        }
    }
}

int main() {
    FILE *in = fopen("task.in", "r");
    FILE *out = fopen("task.out", "w");
    int len1 = getLen(in);
    int len2 = getLen(in);
    int size = len1 + len2;
    int array1[len1], array2[len2], dst[size];
    int indexPosition;
    
    arrayFill(in, array1, len1);
    arrayFill(in, array2, len2);
    fclose(in);
    
    for ( int i = 0; i < len1; i++ ) {
        dst[i] = array1[i];
    }
    for ( int i = 0; i < len2; i++ ) {
        indexPosition = len1 + i;
        dst[indexPosition] = array2[i];
    }
    
    arraySort(dst, size);
    arrayPrint(out, dst, size);
    fclose(out);
    
    return 0;
}


Прочитать массив, удалить дубликаты, записать в файл

Читать статью Прочитать массив, удалить дубликаты, записать в файл в категории Язык C

ов.
Прочитать массив и удалить из него дубликаты элементов.
Результирующий массив записать в task.out.
#include <stdio.h>

#define SIZE 100

int arrayScan(FILE *in, int array[], int len) {
    int i;
    
    for ( i = 0; i < len && fscanf(in, "%d", &array[i]) > 0; i++ );
    
    return i;
}

void arrayPrint(FILE *out, int array[], int len) {
    len = len - 1;
    for ( int i = 0; i < len; i++ ) {
        fprintf(out, "%d ", array[i]);
    }
    fprintf(out, "%d\n", array[len]);
}

int arraySearch(int array[], int needle, int len) {
    for ( int i = 0; i < len; i++ ) {
        if ( array[i] == needle ) {
            return i;
        }
    }
    return -1;
}

int arrayUnique(int array[], int len) {
    int index, needle;
    
    index = 0;
    for ( int i = 0; i < len; i++ ) {
        needle = array[i];
        
        if ( arraySearch(array, array[i], i) == -1 ) {
            array[index] = needle;
            index += 1;
        }
    }
    
    return index;
}

int main() {
    FILE *in = fopen("task.in", "r");
    FILE *out = fopen("task.out", "w");
    int array[SIZE];
    int len = arrayScan(in, array, SIZE);
    
    fclose(in);
    
    arrayPrint(out, array, arrayUnique(array, len));
    fclose(out);
    
    return 0;
}


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

Читать статью Задача - вывести числа от нуля до указанного максимума включительно, кратные заданному делителю в категории Язык C

тать с клавиатуры целый, не равный нулю делитель.
Вывести в строку числа от нуля до указанного максимума включительно, кратные заданному делителю.
#include <stdio.h>

int main() {
    int a = 0;
    int b = 0;
    
    scanf("%d %d", &a, &b);
    
    if ( b == 0 || a < 0 ) {
        printf("\n");
        return 0;
    }
    
    if ( b < 0 ) {
        b = -b;
    }
    
    a -= a % b;
    
    for ( int i = 0; i < a; i += b ) {
        printf("%d ", i);
    }
    
    printf("%d\n", a);
    
    return 0;
}


Функция нахождения элемента массива

Читать статью Функция нахождения элемента массива в категории Язык C

1 в случае, если число в массиве не содержится.
int arraySearch(int array[], int size, int needle)
int arraySearch(int array[], int size, int needle) {
    for ( int i = 0; i < size; i++ ) {
        if ( array[i] == needle ) {
            return i;
        }
    }
    
    return -1;
}


Задача по сортировке массива

Читать статью Задача по сортировке массива в категории Язык C

Отсортировать элементы в порядке неубывания.
Настоятельно рекомендуется разработать алгоритм самостоятельно, без помощи гугла. Результат вывести в task.out.

#include <stdio.h>

int getSize(FILE *in) {
    int len;
    
    fscanf(in, "%d\n", &len);
    
    return len;
}

void arrayFill(FILE *in, int array[], int limit) {
    for ( int i = 0; i < limit && fscanf(in, "%d", &array[i]) > 0; i++ );
}

void arraySort(int array[], int size) {
    int min;
    
    for ( int i = 0; i < size - 1; i++ ) {
        for ( int j = i; j < size; j++ ) {
            if ( array[j] < array[i] ) {
                min = array[j];
                array[j] = array[i];
                array[i] = min;
            }
        }
    }
}

void arrayPrint(FILE *out, int array[], int size) {
    size = size - 1;
    
    for ( int i = 0; i < size; i++ ) {
        fprintf(out, "%d ", array[i]);
    }
    fprintf(out, "%d\n", array[size]);
}

int main() {
    FILE *in = fopen("task.in", "r");
    FILE *out = fopen("task.out", "w");
    int size = getSize(in);
    int array[size];
    
    arrayFill(in, array, size);
    fclose(in);
    
    arraySort(array, size);
    arrayPrint(out, array, size);
    fclose(out);
    
    return 0;
}


Задача на нахождение общего кратного двух чисел

Читать статью Задача на нахождение общего кратного двух чисел в категории Язык C

файл task.out наименьшее общее кратное этих чисел.
#include <stdio.h>

unsigned long long gcd(unsigned long long a, unsigned long long b) {
    unsigned long long result;
    
    if ( b == 0 ) {
        return a;
    }
    result = a % b;
    
    return gcd(b, result);
}

unsigned long long lcm(unsigned long long x, unsigned long long y) {
    return x * y / gcd(x, y);
}

int main() {
    FILE *in = fopen("task.in", "r");
    FILE *out = fopen("task.out", "w");
    unsigned long long x, y;
    
    fscanf(in, "%llu %llu", &x, &y);
    fclose(in);
    
    fprintf(out, "%llu\n", lcm(x, y));
    fclose(out);
    
}

Саундтрек к заставке сериала Хранилище ( Sanctuary )

Опять таки, порадовать тех, кто ищет, скачивайте 01_Santuary_TV_Theme.mp3

Саундтрек к сериалу Strike Back / Ответный удар 2010 года

Для тех кто ищет. Саундтрек к сериалу "Strike Back" от студии SKY 1. В часности, к его заставке (тизеру)
Группа THE HEVY. Песня "No Time"
    Вообще удивительно, что столько слов об этом, достаточно хорошем британском сериале, но при этом никакой информации о его музыке.
    Композиторы указаны, но, я даже в Wiki не нашел вменяемой информации о музыке из этого сериала, хотя достаточно много всяческих "официальных источниках" о нем.
P.S. Рекомендую купить альбом этой группы за 2009 год. Называется "The House That Dirt Built"

DEV/ME © 2000-2011 Dmitriy Kravchenko
Powered by PHP, MySQL, Brain