Главная

Про книги

Про работу

Про фото

Про ссылки

Про форум и прочее

Гостевая

 

Про программы

Как-то так получилось, что все мои программы практически не имеют интерфейса, или на форме всего пара кнопок. Так что внешний вид программы не привожу.
Также не выкладываю сами программы. Для рядового домашнего/офисного пользователя они бесполезны, если кому-то будет такое нужно – пишите. Еще один повод сделать описания – для других узлов связи, может им что-то нужно.

 

www2hdd

www2hdd - программа для скачивания интернет-страниц на локальный диск.
Объясню подробнее – пользователи локальной сети не имеют выхода в интернет и часто меня просили сказать им прогноз погоды, особенно это часто проявляется во время посадки картофеля и в случае всяких погодных катаклизмов. Не то чтобы замучили, но когда стали часто спрашивать, родилась такая идея – сохранять заданные странички и выкладывать их на файловый сервер для общего пользования с помощью своей программы.
Я знаю, что есть специальные программы для скачивания, но не хотелось с ними разбираться, ну и были определенные конкретные требования.
Итак, как работает и что делает программа:
В ini-файле задается количество страниц, путь для скачанных файлов на локальном диске и на сетевом, количество скачиваемых страниц. Для каждой страницы определяется конкретный путь, название проекта, название папки, записывается время последнего скачивания и частота проверки:

ArrHtml1=http://www.gismeteo.ru/weather/towns/34223.htm
ArrName1=Прогноз погоды по Острогожску на 3 дня
ArrDir1=weather3day
ArrTimeLast1=19.01.2006 7:47:37
ArrTimeDiff1=2

При запуске программа проверяет разницу во времени между настоящим моментом и временем последнего скачивания этого страницы, если разница больше заданной, то эта страница скачивается. Это делалось для того, чтобы можно было запускать программу автоматически по расписанию несколько раз в день, при этом часть страниц будет обновлена, часть нет.
При скачивании одной страницы сначала программа скачивает только сам файл html. Потом идет анализ файла на предмет картинок, на которые он ссылается. Ссылки на картинки собираются в массив, а сам файл изменяется таким образом, чтобы ссылки в файле указывали на локальный диск. После завершения скачивания одной страницы папка, содержащая файл html и подпапку с картинками, копируется на сетевой диск.
Некоторые страницы, к примеру, погода, заменяются новыми, старые версии не хранятся. Некоторые — рецепты, анекдоты, хранятся в отдельной папке, по ссылке доступна только новая версия, старые же просто складываются отдельно и остаются доступны пользователям. В идеале программа может работать полностью автоматически и пользователь может читать сохраненные страницы и за субботу и воскресенье.
Программа работает уже пару лет и сильно облегчает мне жизнь.

 

OstrAIN

OstrAIN – автоматический информатор – автообзвонка.
(здесь постараюсь поподробнее описать программу, потому что ко мне время от времени обращаются пользователи форума http://bbs.vbstreets.ru/)

Программа дозванивается до абонента и голосом сообщает ему сумму долга. Основное отличие от остальных – умный алгоритм.
У нас на работе стоял аппаратно-программный комплекс по автоинформированию абонентов. Это был персональный компьютер на базе 386 процессора, и блок который общался с компьютером и формировал голосовой сигнал в линию. Этот комплекс имел несколько недостатков – очень неудобная в работе программа, капризный аппаратный блок (то работает, то нет, подключить к линии трудно) совершенно бестолковый алгоритм обзвона – звонит по порядку номеров по кругу, плюс невозможность запланировать запуск, ну и другие недочеты.
Решил написать свой вариант этой программы, но с обязательным условием – на обычном железе. То есть обычная персоналка и рядовой модем. Поясню чуть подробнее - эту же задачу - автоматизация общения с абонетом или обработка входящего звонка уже давно решают многие фирмы. В аппаратной части для этого чаще всего используются платы Dialogic (теперь подразделение Intel). Проблема только в том, что самая малельнкая четырехканальная плата стоит 800 долларов. Мне же было интересно написать более дешевое решение, которое могло бы работать почти на любом модеме.
Первая большая проблема была в выборе модема и способе работать с ним. Нужен был голосовой модем. Так получилось (к сожалению, теперь уже понимаю) что под рукой был модем Zyxel Omni Pro 56K и еще были доступны несколько модемов Zyxel: Omni 56K, Omni Neo. В принципе есть два пути работы с голосовыми функциями модема – использовать непосредственно его родные команды для формирования голосового сигнала или использовать сторонний компонент для более удобной работы с голосовыми функциями модема. Вариант работать с модемом напрямую без компонента мне не нравился с самого начала – к каждому модему надо будет использовать свой набор команд, и это достаточно трудоемкая работа. Вроде бы так можно, но я с таким способом разбираться не стал. Не стал также потому, что под рукой было несколько компонентов для работы с голосовыми модемами, прежде всего это ExceleTel и VoiceAngel. ExceleTel посложнее и понавороченнее а VoiceAngel попроще. Теперь уже трудно вспомнить, как именно подробно развивались события, но дело в том что ни один компонент у меня не работал. Совсем. Я уже стал сомневаться в голосовых возможностях модемов, но установленный пакет VentaFax и по-моему Venta voice нормально работал с этим же модемом на этом же компьютере. Выяснилось, что для работы компонента нужно, чтобы в звуковых устройствах Windows было установлено устройство типа «unimodem device».

В процессе чтения форумов, плюс множества экспериментов по установке разных модемов, проб разных компонентов выяснил, что все модемы Zyxel Omni – Omni Pro, Omni 56K, Omni Neo-Duo и прочие, во всяком случае все те, которые у меня были под рукой имеют одну неприятную особенность – голосовая часть, тот самый Unimodem Device в звуковых устройствах корректно работает только под Win9x, а под Win2000 не работает. То есть драйвер нормально ставится, модем работает, но в голосовых устройствах нужного мне устройства нет и сторонние программы и компоненты с голосовой частью не работают. Я даже звонил в техподдержку Zyxel-а в Москве но разговор был очень странный – нормальных драйверов в природе похоже нет и фирма делать их не собирается.
Как только я понял проблему, то нашел взаймы встроенный голосовой модем USRobotics и все сразу заработало.
К январю 2006 года программа автообзвона уже работает более полугода. Серьезных нареканий нет (каюсь, была одна моя ошибка).
Что делает и как работает программа:
Как и другие программы эта рассчитана на полностью самостоятельную работу. Программа автоматически запускается из назначенных заданий и прекращает работу по расписанию (в 9 вечера). Основные параметры хранятся в ini файле – время старта-окончания работы, пути к базе, время последней загрузки файла, количество обработанных записей в файле и проч.
Программа получает данные из текстового файла выгруженные из ИРБИСа. Файл содержит номер телефона и долг. Программа может как принудительно по команде оператора загрузить файл, так и сама в процессе работы в заданный промежуток времени проверять файл и если он изменился то загружать данные в общую базу. Данные из базы всегда берутся из последней загрузки. В базе (файл mdb) хранятся данные обо всех совершенных попытках набрать номер и результаты звонка (все 27 событий которые могут произойти у компонента). Перед каждым звонком идет выбор номера для обзвона, примерный алгоритм такой – сначала отбираем всех кого не обзвонили в этом месяце, потом из них берем тех, кому не звонили последние 4 часа (в случае если было «занято» и будет еще одна попытка через 4 часа), весь список сортируем по убыванию долга. Верхний телефон с самым большим долгом и будет тот, кому будем сейчас звонить (ну и там есть еще несколько условий некритичных).
Вообще алгоритм продуман и более умный, но не реализован. Более умный алгоритм позволит еще быстрее обзванивать абонента. Надо учитывать результат последнего звонка – если занято то перезванивать чаще, еще надо бы смотреть на результат прошлого месяца.
После выбора номера и составления голосовой фразы из кусочков файлов идет набор номера. Далее по ситуации – проиграли до конца, не дослушали, не дождались в течение заданного времени – в любом случае все начинается сначала.
В выходной день программа делает примерно полторы тысячи звонков за 12 часов – с 9 утра до 9 вечера.

Дальше доделывать эту программу я не буду. Вот почему:
15 февраля 2006 года я разобрался с возможностью работы этого компонента с несколькими телефонными линиями. Я запустил работу новой тестовой программы которая сразу на двух телефонных линиях и двух модемах установленных в один компьютер звонит по разным номерам.
Сейчас пишется программа, которая будет обрабатывать максимум 3 линии. Причем оказалось что сейчас даже больший интерес представляют возможности программы по обработке входящих звонков – абонент звонит на номер и общается с программой управляя тональными сигналами.
Конечно, писать буду на основе старой версии, но все заново, теперь уже есть большой практический опыт, и плюс надо помнить что ее надо будет увязать с TX1Auto.


 

 


ConvertCharge

ConvertCharge – простая программа, нужная для конвертации файла, полученного со станции Starex TX1.
С ленточного накопителя станции Starex можно считать через SCSI интерфейс с помощью утилиты tpu.exe файл, содержащий сведения о телефонных звонках. Файл содержит информацию в шестнадцатеричных кодах:

Для загрузки более удобен вот такой вид (вообще это отдельная проблема, но исторически так получилось):

201?00007546138?????????????41430???????????????113023331902113023335705
201?00007542884?????????????48573???????????????113023313104113023344609
201?00007543213?????????????42751???????????????113023152207113023353208
201?00007545969?????????????46690???????????????113023302301113023354800
301?00007547308?????????????34087???????????????113023212703113023285401

Вначале мы конвертировали с помощью утилиты dcu.exe. Параметры конвертации для нее определялись файлами chargeXX.exe. Это оказалось неудобно – часть информации терялась, и мы даже не знали какая именно часть отфильтровывается.
Поэтому была написана своя программа, основной принцип – ВСЕ данные должны быть обработаны. Все что не может быть обработано, откладывалось отдельно для контроля.
Особенность этой программы для меня в том, что для написания ее понадобилось сначала разобраться в формате данных шестнадцатеричного файла. Формат заранее был известен не полностью. Оказалось, что данные идут блоками, блоки бывают двух типов, разной величины.
Программа работает, все данные конвертирует, что особенно важно, транзитные звонки тоже.
Если кому-то на РУЭС-е нужно – вышлю.

 

 

LoadFromTOS

LoadFromTOS – программа автоматизации сбора данных со станций TOS.
Одна из моих ранних программ автоматизации сбора данных. Автоматически снимает данные с Борисоглебских телефонных станций TOS.
Штатно съем данных со станции проводит оператор. Для этого есть пакет DOS-программ, в котором надо установить модемную связь со станцией, выбрать кассету запустить снятие данных. Одна кассета снимается 20-25 минут. Днем делать это плохо из-за большой нагрузки, связь разрывается, кассета сильно загружена. Всего кассет 4. Общее время получается около полутора часов в лучшем случае, если без разрывов. Восстановить докачку нельзя – только перечитывать всю кассету заново.
Вот и родилась мысль делать все это автоматически. Разобрался в dos-пакете, какой экзешник за что отвечает, куда попадает скачанный файл, и написал свою программу.
Программа запускает dos-терминал для работы с модемом, и, имитируя работу оператора, передает в dos-окно (вот с этим были проблемы, VB хорошо передает нажатия клавиш только в win окна) нажатия клавиш, вводя команду дозвона на определенный номер. После установки соединения идет проверка соединения и если все нормально запускается скачивание. После скачивания одной кассеты, идет проверка успешности скачивания, в любом случае затем скачивается другая кассета, неудачно скачанная при необходимости будет скачана заново. Программа работает до тех пор, пока не будут успешно скачаны все кассеты. Все скачанные файлы именуются по дате скачивания и раскладываются по подкаталогам на сетевой диск файлового сервера.
Программа работает уже несколько лет, особенно удобна в случае продолжающихся праздников, потому что данные на кассете нужно регулярно снимать, чтобы они не были затерты новыми. Программа установлена на своеобразном раритете – компьютер Pentium 150, 32Mb RAM под Win2000.

 

 

SPUSed

SPUSed – программа загрузки и обработки данных СПУС (система повременного учета соединений).
Когда к нам в РУЭС пришло распоряжение о введении СПУС я решил написать программу сам. Программу надо было написать к определенному сроку поэтому в некоторых местах все делалось прежде всего из соображений скорости и надежности работы. Как уже писал в описании ConvertCharge данные для обработки получали с накопителя на гибкой магнитной ленты после их конвертации. Конвертация выполнялась несколько раз последовательно одного файла. Полученный файл должен был обрабатываться программой.
Программа загружает все звонки в одну базу данных и потом дает возможность обрабатывать эти данные. Помимо служебных запросов (запрос клиента об исходящих звонках, контроль введенных данных по определенным условиям) основной задачей программы является подготовка файла содержащего суммарную информацию за отчетный период о номере телефона, количестве исходящих с него звонков и общей продолжительностью разговоров.
Сейчас программа загружает данные с двух типов станций трех разных форматов. Все загруженные звонки хранятся в одном файле. При загрузке каждого типа данных особое внимание уделяется проверке данных на правильность, загружаемая запись проверяется на правильность указанного исходящего, входящего номеров и на правильность общего вида записи.
После загрузки данных со всех станций можно выгрузить итоговый файл для передачи его в Воронеж.

Так вот написал – вроде бы и не сложная программа получается. Какие сложности были при написании программы: Во-первых, объем данных. Сейчас уже полегче стало, компьютеры стали мощнее, а раньше данные грузились и по 20 минут. За месяц очень примерно около полутора миллионов звонков, соответственно в базе 1,5 миллиона записей в месяц. Даже просто запрос на суммирование иногда выполняется не быстро. Во-вторых, получаемые со станции TOS данные содержат избыточную информацию. То есть файлы сильно перекрывают друг друга, причем записи могут не совпадать – станционное время могло измениться, пришлось писать алгоритм поиска соответствия похожих строк в разных файлах. В-третьих, из-за большого объема данных один и тот же запрос на сортировку иногда давал правильные результаты, иногда сортировал с ошибкой. Плюс еще обработка такого большого количества записей ограничивалась самим движком MS Jet. Приходится в реестре делать изменения. Плюс, оказалось, что разные станции любят давать разные ошибки, и иногда редкие ошибки попадали в рабочую базу.
В принципе надо было бы перевести работу с базой на SQL-сервер, но это еще проблемы, потребуется еще переделка, а пока пользователи довольны. Пользователи – потому что абонентский отдел имеет у себя эту программу для возможности поиска по базе для выдачи клиенту информации.

Программа работает с самого начала введения повременки. Очень удобно, что все данные хранятся в удобном для работы виде (*.mdb) и можно быстренько написать любой запрос в Accesse.

 

TX1Auto

TX1Auto – нужная всем программа по автоматизации работы с основной телефонной станцией Starex TX1.
Пока в разработке, будет писаться после завершения Ostr3x (многоканальная автообзвонка). Основная идея – автоматизировать работу оператора телефонной станции Starex TX1. Вместо ручного ввода команд использовать внешнюю программу, для автоматической обработки пакетных данных (включение и отключение номеров) а так же самостоятельная работа в ночное время без оператора на основании данных оплаты.

+ задумки

 


 

Сайт управляется системой uCoz