Архив для the языки программирования Category
-
Расчёт динамической скорости пользователей
код #2 расширенный алгоритмЦель:
Поделить свободный канал между пользователями, стараясь не вызывать перегрузок. Желательно что бы пользователи на тестах скорости видели запредельные скорости.
Решение:
Средняя скорость загрузки за 1 минуту — обьем поделен на расчётное время в текущей сессии.
Эмпирически было установлено что если пользователь за 1-у минуту не перекачивает 19.8-24Мбайт, то он пользуется тестом скорости ( speedtest), 330-450Кбайт.
Так же такая загрузка (даже меньше) при обычном и даже активном веб-сёрфинге (тестировал Я — непрерывно открывал закладки в течении 1-ой минуты).
У Меня пользователи которые получают «гарантированную» скорость и нарезаются динамически используют один канал.
Алгоритм:
Классифицируем пользователей на 4-и класса:
- red-те кто непрерывно сосёт трафик
- yellow-те кто качают, но не делали этого слишком активно раньше
- brown-те кто не качают в данный момент ( не достигают порога, но непрерывно сосёт трафик )
- green-те кто не качают ( не достигают порога)
Это нужно что бы каждому человеку выставить нужную скорость
<!--?php define("HOST", "localhost"); define("DB", "test_db"); define("USER", "user"); define("PASS", "password"); try { $dbh = new PDO('mysql:host='.HOST.';dbname='.DB.'', USER, PASS); } catch (PDOException $e) { print "Error!: " . $e--->getMessage() . ""; die(); } ?>
SQL:
-- -- Структура таблицы `speed_counter` -- DROP TABLE IF EXISTS `speed_counter`; CREATE TABLE IF NOT EXISTS `speed_counter` ( `ip` INT(50) NOT NULL, `in_last` BIGINT(20) NOT NULL, `out_last` BIGINT(20) NOT NULL, `time_last` BIGINT(20) NOT NULL, `in_speed` FLOAT(20,2) NOT NULL, `out_speed` FLOAT(20,2) NOT NULL, `in_speed2` FLOAT(20,2) NOT NULL, `out_speed2` FLOAT(20,2) NOT NULL, `in_load` FLOAT(20,2) NOT NULL, `out_load` FLOAT(20,2) NOT NULL, `interface` VARCHAR(12) NOT NULL, `speed_car_in` BIGINT(20) NOT NULL, `speed_car_out` BIGINT(20) NOT NULL, UNIQUE KEY `ip` (`ip`) ) ENGINE=MyISAM; -- -- Дамп данных таблицы `speed_counter` --
Код, engine.php:
<?php /* * функция чтения массива * array() */ function read_speed_array(&$dbh){ $sth=$dbh->prepare('SELECT * from `speed_counter`'); $sth->setFetchMode(PDO::FETCH_ASSOC); $sth->execute(); $ips=array(); while($row=$sth->fetch()){ $ips[$row['ip']]=array( 'in_last'=$row['in_last'], 'in_last2'=$row['in_last2'], 'out_last'=$row['out_last'], 'out_last2'=$row['out_last2'], 'in_speed'=$row['in_speed'], 'out_speed'=$row['out_speed'], ); } } /* * функция расчёта коэффициентов скорости из массива * array() */ function calc_coefficient_speed_array(){ } /* * функция расчёта скорости из массива * array() */ function calc_speed_array(){ } ?>
После столь продолжительного копания в моём коде рекомендую посмотреть интересный ресурс шарж с фотографии, шарж с фото.
Читать полностью статью "Расчёт динамической скорости пользователей"Считаем загрузку на интерфейсах mpd4/mpd5 по snmp для freenibs+mysql
Считаем загрузку на интерфейсах mpd4/mpd5 по snmp для freenibs+mysql:
Цель:
1.Посмотреть — кто жрет скорость?
2.Сюда подкрутить — ng_car, ipfw pipe, iptables, pf, ipf,etc для динамической нарезки скорости…Как еще можно сделать?:
Смотреть по netflow(в том числе ng_netflow), ng_ipacct,ipcad…
Но тогда это будет полезно если Вы трафик учитываете с помощью этих инструментов…*Это можно использовать не только совместно с freenibs…
Читать полностью статью "Считаем загрузку на интерфейсах mpd4/mpd5 по snmp для freenibs+mysql"Расчёт динамической скорости пользователей: код #1 базовый алгоритм
Расчёт динамической
скорости пользователей: код #1 базовый алгоритмЦель:
Поделить свободный канал между пользователями, стараясь не вызывать перегрузок. Желательно что бы пользователи на тестах скорости видели запредельные скорости.
Решение:
Эмпирически было установлено что если пользователь за 1-у минуту не перекачивает 19.8-24Мбайт, то он пользуется тестом скорости ( speedtest). Cредняя скорость загрузки за минуту (ADSМ) - обьем скачанный за 1 минуту поделенный на 60 сек. так вот ADSМ 330-400Кбайт.
Так же такая загрузка (даже меньше) при обычном и даже активном веб-сёрфинге (тестировал Я — непрерывно открывал закладки в течении 1-ой минуты).
У Меня пользователи которые получают «гарантированную» скорость и нарезаются динамически используют один канал.
Алгоритм:
Высчитываем загрузку канала статическую (NBS) — сколько занято под пользователей у которых: статическая скорость, ADSМ.
Высчитываем загрузку канала динамическую (NBD) — сколько занято под пользователей у которых ADSМ >400Кбайт.
Весь максимально допустимый канал (AMAC).
Высчитываем свободную полосу (FC):
FC=AMAC-NBS
Высчитываем предельную скорость пользователя(MSU):
MSU=FC/количество динамических пользователей
Читать полностью статью "Расчёт динамической скорости пользователей: код #1 базовый алгоритм"
Свалка скриптов для доработки
ВОТ: a.charset.rar
Читать полностью статью "Свалка скриптов для доработки"MySQL++
MySQL++ — это специализированная библиотека так называемых «обёрточных» (wrapper) методов для прикладного программного интерфейса C API для СУБД MySQL. Главная цель этой библиотеки — сделать работу с SQL-запросами такой же простой, как работа с STL-контейнерами.
Самую последнюю версию библиотеки MySQL++ можно найти на официальном Web-сайте. Тем не менее, чтобы избежать дополнительных сложностей, лучше обратиться к репозиторию пакетов для вашего дистрибутива.
2. Краткое описание основных объектов (соединение, запрос, результаты)
MySQL++ обеспечивает поддержку большинства разнообразных способов и приёмов работы с базами данных. И всё же, несмотря на это разнообразие, можно выделить обобщённую схему использования API-интерфейса, предназначенного для доступа к базам данных:
Читать полностью статью "MySQL++"Отключение некоторых php функций, для защиты от php web shell’ов
Большинство cms, при отключении данных функций, работает без проблем.
В php.ini при включеном safe mode должно быть прописано так:
Читать полностью статью "Отключение некоторых php функций, для защиты от php web shell’ов"
disable_functions = system,exec,passthru,popen,proc_open,shell_exec,eval,
ini_get_all,phpinfo,phpversion,ini_get,php_uname,
disk_total_space,diskfreespace,disk_free_space,posix_getpwuid,
posix_getgrgid,posix_uname,fileperms,fopen,opendirWindows C++: получить список локальных подключений (ЛВС)
Взято с форума отсюда by crackedmind
Надеюсь из кода понятно, что он отключает нужный сетевой интерфейс, предварительно получив список интерфейсов и найдя в нем нас интересующий.По непонятным причинам данные интерфейсы не описаны в MSDN Грустный Тоже в свое время потратил кучу времени на поиски такого кода
Читать полностью статью "Windows C++: получить список локальных подключений (ЛВС)"Автоконфигуратор PPPOE/PPTP соединения
На русском:
link 1
Введение в Remote Access Service
СОздается новое соединениеОдно замечание — для совместимости с ранними версиями винды стоит инициализировать dwSize следующим образом:
Читать полностью статью "Автоконфигуратор PPPOE/PPTP соединения"
Код
DWORD dwSz=sizeof(RASENTRY);
RasGetEntryProperties(NULL,NULL,NULL,&dwSz,NULL,NULL);
rasEntry.dwSize = (dwSz
Создание хешей файлов для файлопомойки
Когда-то давно ( 2008 год) нужно было создание хешей файлов, причём не на основании md5sum() утилиты.
проблема в том что файл на 4Гб у меня для md5sum отдает хеш за ~3m, sha1sum за ~5m. А нужно очень быстро
Во первых — Я максимум буду иметь 1-100млн файлов для которых хеш должен различатся.
Во вторых Я хочу читать из файлов в 5-25-ти(n) местах одинаковое количество Кб. Допустим из файла размером 100Мб Я прочитаю 25*128Кб непрерывным потоком и отправлю на mdsum — который и посчитает хеш… Алгоритм такой — берём размер файла, делим на сколько блоков читать(n), читаем n блоков а размер блока(r) будет опредёлён так — если размер файла/n >1M читаем r=1М, всё остальное — r =размер файла/(2*n), если размер файлаОбсчитать первый и последний мегабайт. Приблизительно так
Читать полностью статью "Создание хешей файлов для файлопомойки"Класс для реализации Шинглов на PHP
Алгоритм Шинглов – определяем уникальность текста
Пример:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
< ?php include_once('shingles.php'); //; Список стоп-символов $stop_symbols = "x27 x22 x60 \t \n \r ' , . / « » # ; : @ ~ [ ] { } = - + ) ( * & ^ % $ < > ? !"; ; Список стоп-слов через запятую (в cp1251 кодировке) $stop_words = "а, без, более, бы, был, была, были, было, быть, в, вам, вас, весь, во, вот, все, всего, всех, вы, где, да, даже, для, до, его, ее, если, есть, ещё, же, за, здесь, и, из, из-за, или, им, их, к, как, как-то, ко, когда, кто, ли, либо, мне, может, мы, на, надо, наш, не, него, неё, нет, ни, них, но, ну, о, об, однако, он, она, они, оно, от, очень, по, под, при, с, со, так, также, такой, там, те, тем, то, того, тоже, той, только, том, ты, у, уже, хотя, чего, чей, чем, что, чтобы, чьё, чья, эта, эти, это, я"; //; Длина шингла length = 10 $setting=array( 'stop_symbols'=>$stop_symbols, 'stop_words'=>$stop_words ); $shingles = new Shingles($setting); $shingles->addText('То, что старшая сестра держалась на собрании так уверенно, меня сперва беспокоило, а на Макмерфи не подействовало никак'); $shingles->addText('То, что главная сестра держалась на собрании так уверенно, меня сперва беспокоило, а на Макмерфи не подействовало никак'); echo 'Тексты схожи на ' . $shingles->compaire($shingles->getShigles()) . '%'; ?>
Файл shingle.php содержащий Класс:
Читать полностью статью "Класс для реализации Шинглов на PHP"