Программа для помощи в проявке плёнки

On 2012-01-27, in bada, nnsoft, by Николай Немцев
Есть идея сделать такую же программу для платформы bada.
 

crontab.f

On 2007-07-06, in nnsoft, by Николай Немцев
(
Устройство кронтаба:

)
 

Прощай vista!

On 2007-07-05, in nnsoft, by Николай Немцев
Утомили глюки. Снёс и поставил снова XP.
 

event.f

On 2007-06-21, in nnsoft, by Николай Немцев


class: EventClass

;class
 

main.f

On 2007-06-20, in code, nnsoft, by Николай Немцев

QUEUE QEVENT
: MAIN
     INIT-CRON
     BEGIN
        QEVENT Get PROCESS-EVENT
        TIME-TO-EXIT @
     UNTIL
     EXIT-CRON
;
 

nnCron 2.02

On 2007-06-20, in nnsoft, by Николай Немцев
Общие беспорядочные соображения

  • Ядро планировщика, которое не зависит от апп. платформы и максимально вписывается в стандарт Forth ANS 94. То, что невозможно реализовать в этих рамках, реализуется в виде заглушки (виртуального метода), который определяется потом в зависимости от платформы.

  • Первичной становится версия для мобильных устройств (Pocket PC), т.е. минимальная функциональность, не избыточность средств, а для PC формируется в виде дореализации, наращивания.

  • Каждая задача хранится в отдельном файле с именем ИМЯ_ЗАДАЧИ.txt (или какое-то нормализованное имя, а в тексте задачи TaskName: НЕНОРМАЛИЗОВАННОЕ_ИМЯ_ЗАДАЧИ) в подкаталоге, который определяется переменной TASK-STORE (TaskStore: - для nncron.ini). Каталог может содержать подкаталоги. В каждом каталоге хранилища задач есть подкаталог INFO, в котором в файлах с именами, соотв. файлам задач хранится информация о задаче (время создания, время последнего запуска (или целая история), время останова, статус (успех,неуспех и код ошибки), планируемое время выполнения (для проверки просроченности)).

  • TaskStore: может содержать макропеременные, например %USERNAME% для разделения кронтабов по пользователям (PC).

  • Для скорости загрузки плагины компилируются заранее. При изменении любого подключённого плагина происходит перекомпиляция всех плагинов и сохранение в виде нового exe-файла.

  • Все event-name, cond-name, act-name и отдельные opt-name определяются в плагинах.

  • Плагин состоит из минимум двух файлов: текст плагина и структурированное описание средств (events,conds,actions,options), которые он добавляет в планировщик (это для GUI).

  • Каждая задача компилируется во время загрузки программы в отдельный форт-словарь (VOCABULARY). При изменении файла отдельной задачи перезагружается только изменившаяся задача в новую область памяти. Память старой задачи высвобождается в общий пул.

  • Средста для отслеживания активности задачи. Получение списка выполняющихся задач. Завершение заданной задачи и т.д.

  • Может запускаться несколько экземпляров планировщика. Планировщик может запускаться как служба и/или как простое приложение в контексте безопасности текущего пользователя. Возможно несколько служб, которые работают под разными пользователями. Для различения служб переменная SERVICE-NAME, которая или содержит имя сервиса, под которым озапущен планировщик, или ничего не содержит (пустая строка) для планировщика, запущенного как простое приложение.



Задача

  • Поля:

    • TaskName: task-name

    • Wait: "event-name" ["event-pars"] (Примеры: Wait: time 0 18 * * *, Wait: file filename.ext)

    • Opt: "opt-name" "opt-value" (Примеры: Opt: loglevel 0, Opt: active no, Opt: runmissed ...) (кроме опций, общих для всех задач, есть опции, которые разрешены только для заданного в выражении Wait: event-a. Опций может быть несколько.

    • Cond: [not] "cond-name" ["cond-pars"]. (Примеры: Cond: interval 08:00-17:00, Cond: fileexist filename.ext)Условий может быть несколько и они объединены логическим И. Допустимы только зарегистрированные cond-name. Произвольные условия можно задавать в теле скрипта.

    • Action: "act-name" ["act-pars"]. (Пример: Action: startapp notepad.exe, Action: script )



 

eserv2pop3ext

On 2006-12-21, in nnsoft, by Николай Немцев
Что-то утомило обилие рекламы виагры, которая упорно идёт к нам корпоративный ящик, и я решил немного увеличить функциональность модуля pop3ext, а заодно объединил его с pop3rules в один архив. Новый билд можно взять здесь: eservpop3ext.zip
Нужно положить его в каталог eserv2 и распаковать оттуда. Пути в архиве относительно корня eserv2.
Добавил поддержку регекспов в pop3ext.
 

nnCron2

On 2006-11-08, in nnsoft, by Николай Немцев
  1. Хранение пользовательских данных. Варианты: реестр (HKCU\software\nnsoft\nncron\), файлы (var/user/<username>/* в каталоге программы или nncron/*.* в каталоге пользователя), лучше всего сделать набор объектов для доступа к пользовательским данным не конкретизируя способ хранения, оставив это плагинам, реализующим хранение, и разрешить администратору выбирать конкретный способ.
  2. Пользовательские данные: настройки, кронтаб(ы), скрипты, параметры окон и т.д.
  3. Задача строго структурирована. Набор элементов ограничен, но расширяем. Все программистские изыски только в скриптах.

 

 

 

Thunderbird стоит на страже

On 2006-07-27, in nnsoft, by Николай Немцев

В следующем посте расскажу, чем хороша эта программа.
 

Нумерация документов в 1С

On 2006-06-07, in , nnsoft, by Николай Немцев
Задача
Сделать свою нумерацию документов для каждого магазина. На одной базе (периферийной или центральной) может быть несколько магазинов, т.е. привязка только к ИБ не проходит.
Решение
Создаём справочник "НомераДокументов"
Реквизиты: Магазин (Справочник "Магазин"), ВидДокумента (Строка),
Есть справочник "Магазин".
 

Список приложений, которыми я пользуюсь

On 2006-03-30, in nnsoft, by Николай Немцев

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

  • Firefox
  • Far
  • Vim
  • Photoshop
  • BibleQuote
  • eMule
  • Download Master
  • IrfanView
  • KDiff3
  • Miranda
  • NcFTP
  • Simple FTP Monitor
  • Skype
  • Winamp
  • Zoom Player

 

Firefox

On 2006-03-29, in nnsoft, soft, used_soft, by Николай Немцев
Думаю, не так много осталось людей, которым нужно объяснять, что такое Firefox. Хотя, если верить статистике посещений сайта http://www.nncron.ru/, то Firefox'ом пользуются 18% посетителей. И это второе место. Кто на первом - угадайте с одного раза. На третьем с 17% - Opera, которая недавно тоже стала бесплатной. Т.е. людей, которые не знают что такое Firefox ещё много, тем более, что наш сайт посещает специфическая часть публики, гуляющей по интернету (у нас далеко не развлекательный портал, хотя, конечно, я допускаю мысль, что моими программами могут пользоваться и простые пользователи, но смотрю сегодня на этих простых пользователей и сомнения меня обуревают). Но эту заметку я затеял совсем не для того, чтобы просветить незнающих. Просто хочу рассказать какими программами я пользуюсь и, если получится, сформулировать ответ на вопрос "а почему?"
Полтора года назад я работал в фирме, где Windows был только на одной тестовой машине (нужно было отлаживать веб-проект и на Windows). А на всех остальных был Linux (Mandrake, ныне Mandriva). Там я пользовался вначале Opera. А дома IE, но не голым конечно, а под управление Maxthon (раньше, кажется, назывался MyIE). Opera вполне справлялась со своими обязанностями, хотя иногда падала, но замены ей что-то не наблюдалось. Когда появился Firefox 1.0.1, я его попробовал и на Linux больше ничем другим и не пользовался. А вот на Windows Лис прижился не сразу. По сравнению с Maxthon, он был бедноват возможностями и очень неповоротлив на моей хиленькой домашней машине, которая и так едва едва кряхтела под тяжестью Windows XP. Но время шло, я устроился на новую работу и стал потихоньку отвыкать от Linux'а. Скачал и поставил новую версию Maxthon. Вот ведь бывает. Всё так хорошо начиналось. Maxthon был лёгким и быстрым. А стал таким тяжёлым и неповоротливым. Огромное море возможностей, попрятанных по разным закладкам и панелькам, о многих из которых я не и не подозревал даже и в которых нисколько, самое главное, не нуждался. На не самой слабой машине он еле ворочался, зависал и просто глючил. Тогда я и вспомнил про Firefox. Версия у него к тому времени была уже далеко не 1.0.1 и программа оказалась вполне пригодной заменить заматеревший Maxthon вкупе с IE. Больше года пользуюсь практически только Firefox, за исключением каких-то особых случаев, когда не очень понятно, что нужно сделать в Firefox, что бы в нём это заработало (онлайн платежи при помощи webmoney, скачивание обновлений с microsoft.com, да иногда на помойках с краками не всегда всё скачивается). Недавно оценил возможность Firefox создания и подключения профайлов. Я уже давно перенёс расположение профайла из папки пользователя в "Documents and Settings" в другое, более безопасное место. Но оценить последствия этого переноса смог только недавно, когда после смены железа решил немного по другому переразбить винчестер. После установки Firefox я создал новый профайл (firefox.exe -P, причём запускать такую команду надо когда нет ни одного запущенного экземпляра Firefox) и выбрал существующую папку для него, там где лежал мой профайл, перед переразбивкой бережно сохранённый вместе с другими моими рабочими папками и файлами (можно было бы конечно сохранить и дефолтный профайл из "C:\Documents and Settings\<username>\Application Data\Mozilla\Firefox\Profiles", но он имеет каждый раз какие-то левые случайные имена, да и ничего я практически не храню на системном диске (были времена, когда я часто переустанавливал ОС с предварительным форматированием системного раздела и каждый раз дёргать файлы туда сюда не очень-то хотелось). И о чудо! Не только все пароли, куки, закладки и история восстали из пепла, но и все расширения оказались готовыми к бою со всеми своими настройками. Поставил, настроил профайл и вперёд по мутным водам интернета без каких либо задержек. Это очень классно, скажу я вам, по мутным водам и без задержек.


Такое удобное управление профайлами, конечно, не единственное достоинство этого чудного браузера. Одно из первых достоинств, которое замечаешь при переходе с IE и без которого точно никак прожить не сможешь при переходе с MyIE, это конечно вкладки. Поначалу они кажутся не такими удобными, как в MyIE, но тут на помощь приходят расширения, которые можно скачивать и устанавливать с сайта https://addons.mozilla.org/extensions/ (причём, можно либо запустить установку прямо со странички, либо скачать, сохранить в укромном месте, а потому уже устанавливать сколько влезет и друзьям раздавать). Начнём по алфавиту. Первым в списке расширений у меня находится All-in-one Gestures. Это расширение позволяет навесить выполнение разных действий на движения мыши. У меня они настроены на правую кнопку мыши. Нажимаешь правую кнопку над ссылкой и не отпуская дёргаешь вниз. Страничка, на которую указывает данная ссылка, открывается в новой фоновой (неактивной, невидимой) вкладке. То же самое, но дёргаешь вверх - открывается в новой вкладке и эта вкладка делается активной. Все эти движения можно произвольно настроить. Комбинаций движений получается много, только все запомнить - не всякому под силу. Мои движения практически и ограничиваются теми, что я привёл выше. Как я уже сказал выше, перечислять расширения я начал по алфавиту и отходить от этого порядка не буду, хотя на очереди практически бесполезное расширение Colorful Tabs. У этого расширения нет никаких настроек и всё, что оно делает, это раскрашивает ярлычки вкладок в разные цвета. Может в этом какая и практическая польза есть, но я не понял. Потом идёт, компенсируя бесполезность предыдущего, очень полезное расширение Flashgot. Оно позволяет интегрировать всевозможные скачивающие программы типа Reget, Download Accelerator, Net Ants, Download Master и т.д. Я пользуюсь последним (имеется в виду, конечно же Download Master, а не "т.д.") Конечно у DM и свои интеграционные возможности есть, но Flashgot поудобнее будет да и позволяет использовать другие download менеджеры, какие у вас там окажутся под рукой. Кроме интеграции менеджера в браузер у расширения есть и другие приятные функции, которыми я почему-то не пользуюсь, а потому ничего и рассказывать про них не буду. Следующее расширение Gmail Manager. Оно садится в виде характерного значка в правую часть статусной строки браузера и своим цветом и всплывающими подсказками сообщает о новой почте, которая свалилась в ваш gmail ящик. Можно следить за несколькими ящиками. При клике на значке или на подсказке открывается веб-интерфейс для текущей учётной записи. HideTabBar - позволяет скрывать ярлычки вкладок автоматически (через заданное время) или по горячей клавише. Web Developer - очень мощный инструмент, но я использую только некоторые возможности. Даёт быстрый доступ ко всяким возможностям браузера (запретить/разрешить кэш, картинки, java, javascript и т.д., обвести ячейки таблиц, показать куки, показать стили и т.д. и т.п.). Для разработчиков, думаю, незаменимая вещь. Но я, хоть и редко что-то там веб-программирую, тоже частенько пользуюсь этим расширением.

С выходом версии 2.0 я узнал о том, что в Файрфокс встроили spellcheker. Русский модуль находится <a href="https://addons.mozilla.org/firefox/3058/">здесь</a>
 
Задача вначале была частной: синхронизация справочников номенклатуры Торговли (Торговля и склад) и Бухгалтерии (Бухгалтерский учёт) в одностороннем порядке (из Т в Б, в дальнейшем я так и буду именовать конфигурации: Т - Торговля (или исходная), Б - Бух. учет (или приёмная)). Потом, по ходу дела, стало понятно, что более продуктивно будет сделать универсальные обработки, которые могли бы синхронизировать любой справочник. Если бы дело начиналось с нуля (с пустого каталога), то и проблема была не очень сложной. А так получилось, что существует две программы с очень сильно рассинхронизированными каталогами. Нужно было сделать так, чтобы каталог в Б стал полностью соответствовать в каталогу в Т. Нужно заметить, что задача несколько упрощена тем, что синхронизируются только имена, коды и иерархия групп, тогда как все остальные реквизиты справочников остаются вне рассмотрения. Но в моём случае этого оказывается достаточно. Сейчас, конечно, уже есть идеи по поводу того, как сделать обработки ещё более универсальными, но пока так идеями пусть и остаются.
  1. Справочник выгружается при помощи обработки ВыгрузкаСправочника.ert Выгружается в виде дерева. Дерево реализовано через объект типа ТаблицаЗначений.
    тз=СоздатьОбъект("ТаблицаЗначений");
    тз.НоваяКолонка("Наименование","Строка");
    тз.НоваяКолонка("Код","Строка");
    тз.НоваяКолонка("Группа"); // для элемента =0, для группы = тз

    Группа с именем "КОРЗИНА" игнорируется (и в Т, и в Б эта группа используется для хранения виртуально удалённых элементов справочника)
    Дерево выводится в файл:
    ЗначениеВФайл(КаталогВыгрузки+"\"+ИмяСправочника+".txt",тз,1);
  2. Синхронизация производится обработкой СинхронизацияСправочника.ert. Самое интересное происходит при первой синхронизации, когда каталоги сильно отличаются (и коды и наименования товаров могут отличаться, а могут и совпадать). Для поиска соответствия между именами элементов в каталогах используется специальная компонента для нечёткого сравнения строк (Автор: Ракунов Александр, должен заметить, что очень мощная вещь - огромное спасибо автору). Вначале весь справочник Б загружается в кэш. Потом загружается дерево, которое мы сформировали в Т (см. предыдущий пункт):
    ЗначениеИзФайла(СокрЛП(ВыбИмяФайла),тз,1);
    Затем производится проход по дереву Т и синхронный проход по дереву справочника Б. В первую очередь синхронизируются группы (папки). Делается это только по имени. Если папки нет, она создаётся без лишних поисков всяких там соответствий. Когда происходит спуск до элементов, то соотв. ищется в таком порядке (переход к следующему пункту производится при неудаче в текущем):
    • поиск по имени в текущей папке (если нашли, то проверяем равенство кодов, если не равны - меняем и записываем, равны - ничего не делаем)
    • поиск по коду в текущей папке (если нашли и имена равны, имя из Б является подстрокой имени из Т или близки (код возвращаемый нечётким сравнением строк больше 100 (это число выбрано методом тыка)), то меняем наименование и записываем)
    • ищем по имени в кэше имен Б. (если нашли и элемент ещё не обработан, то берём его меняем при необходимости имя и код, а если ничего не нашли, или элемент уже обработан, то создаём новый элемент). Если первые две попытки осуществлялись только в пределах подчинения (в текущей папке), то последняя попытка производится по всему справочнику игнорируя структуру подчинённости.

    Когда соответствия найдены, новые (не найденные элементы) добавлены, осталось удалить устаревшие (лишние) элементы из справочника Б. Для этого производится проход по дереву справочника Б и синхронный проход по дереву Т (теперь справочник Б в качестве ведущего) и все те папки и элементы, которых в соотв. месте в Т не оказалось, перемещаем в специальную папку "КОРЗИНА".
  3. Теперь можно автоматизировать эти процедуры. Я сделал это следующим образом. В Т (выгрузка справочника) при запуске 1С выполняется код в глобальном модуле, который проверяет наличие специального файла, в котором перечислены имена справочников, которые надо выгрузить. С этими именами и вызывается первая обработка. В Б производится похожая процедура: при загрузке проверяется наличие файлов и, если они есть, запускается обработка с последующим удалением обработанных файлов. Создание первого файла-флага с именами справочников, перемещение выгруженных файлов, запуск 1С производится, естественно, при помощи nnCron (ну как себя не пропиарить лишний раз)


Ссылки:
Архив с моими обработками: sync_ref.zip
Компонента для нечёткого сравнения строк (Автор: Ракунов Александр): strmatch.zip
Сайт программ nnSoft: nnSoft
 
Предполагается здесь публиковать информацию
  • о софте nnSoft (разработка) и т.д.
  • о программах которыми приходится мне пользоваться (и nnsoft можно интерпретировать как "софт, которым пользуется nn"
  • о тех программах и алгоритмах, которые мне приходится по долгу службы писать.

 

Планировщик jnncron

On 2006-03-14, in nnsoft, by Николай Немцев
Речь идёт о планировщике, который написан на java.
Спорные моменты

  • Требования к ресурсам. Если планировщик используется в standalone режиме, т.е. сам по себе, как отдельное приложение, то конечному пользователю нужно будет ставить jre (сейчас для jre 1.5.0 это 16мб). Известны большие требования к памяти и процессору. Т.е. на слабую перегруженную рабочую станцию не поставишь. При использовании планировщика в составе сложных java-приложений (web-приложения, и т.д.) требования к ресурсам уходят на второй план, но востребован ли планировщик для больших систем?

  • Проблема доступа к системной информации и к системным событиям Доступ очень зависит от ОС. Нужно будет писать специальные адаптеры для доступа к системной информации (информация о процессах, окнах, соединениях и т.д.) и к событиям (создание, удаление окна, процесса, соединения и.д.)

 

nnCron2 concepts

On 2005-10-05, in nnsoft, by Николай Немцев
Компоненты: служба (cron), скриптовый язык (forth), GUI (tm).
cron
1. Запуск задач
2. Обслуживание мониторов (менеджер, детекторы)
forth
1.строки
2. файлы
3. окна (манипуляции)
4. окна (создание, ввод данных и т.д.)
5. эмуляция ввода мыши
6. эмуляция ввода с клавиатуры
7. RAS
8. клипборд
GUI
1. Список задач по кронтабам и юзерам и манипуляции с задачами (запуск, удаление и т.д.).
2. Редактирование задач (в текстовом редакторе со спец. средствами)
 

Switch to our mobile site