Обратная связь:

 

 

Оптимизируй это!

или как нам обустроить компьютер

Главная Часть I Часть II Часть III Часть IV Часть V Часть VI

 

Часть IV

Актуализация

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

Начнём с синхронизации. Ни для кого не секрет, что в интернете есть множество серверов времени, с которыми можно синхронизировать часы домашнего компьютера. Windows может делать «это» раз в неделю по расписанию. Мы же остаёмся в душе молодыми, раз в неделю – это для пенсионеров, нам же хочется почаще, и не по унылому расписанию, а когда «накатит», - так гораздо романтичнее!

Напомню, что мы рассматриваем вариант не с постоянным, а с эпизодическим подключением к Сети, и не хотелось бы, чтобы наш домашний комп проворонил синхронизацию только потому, что в запланированное время не было коннекта. А вы о чём подумали?

Недавно перечитывал ранних Стругацких и вспомнил термин «эффектор», который мне понравился больше «манипулятора». Итак, первый рассматриваемый «эффектор» выполняет синхронизацию часов нашего компьютера с сервером времени (который, в свою очередь, синхронизируется с атомными часами).

 

#( Синхронизация

NoLog

NoDel

RunOnce

Time: 34 12 1 1 * 2007

Action:

SWHide   NormalPriority

 

  HOST-EXIST: "psu.edu"

  IF

    TP-SYNC: clock.psu.edu

    TP-SYNC-RESULT 0<>

    IF

      CLEAR-ONCE

    ELSE

      BALLOON: "Часы компьютера" "синхронизированы с атомными часами"

      PLAY-SOUND: "%windir%\Media\chimes.wav"

    THEN

  THEN

)#

Листинг 1

 

Второе задание (листинг 2) обновляет вирусные базы антивируса DrWeb. Действительно, пусть наш дружок не только запускает и останавливает защиту, когда это нужно, но и следит за обновлениями. Если помните, от «родного» планировщика DrWeb мы отказались в процессе инсталляции, а обновлять антивирус вручную неспортивно; nnCron не забудет сделать это, не расстроится из-за медленного соединения или разрыва, его не позовёт ужинать жена и не отвлекут дети…

 

#( UpdateDrWeb

RunOnce

Time: 41 16 18 10 * 2007

NoLog

NoDel

AsLoggedUser

LoadProfile

CREATE file_name 258 ALLOT

Action:

SWHide   NormalPriority

 

  HOST-EXIST: "drweb.com"

  IF

    PROC-EXIST: "drwebupw.exe" NOT

    IF

      START-APPW: c:\progra~1\drweb\Drwebupw.exe /GO /QU

      BALLOON: "Антивирус" "Обновлён в %hh%:%mm%:%ss%"

    THEN

)#

Листинг 2

 

Модули, обезвреживающие шпионское и прочее вредоносное ПО, есть как в антивирусе DrWeb, так и в «Agnitum Outpost Firewall», и базы вредоносного ПО каждая система, естественно, обновляет.

Но для вящего спокойствия не грех иногда воспользоваться и специализированной утилитой, заточенной на поиск и удаление именно вредоносного ПО, не вирусов. Я для этих целей использую мобильную версию «Ad-Aware se», которая может запускаться с флешки без инсталляции.

По умолчанию лежит она в папке «C:\Program Files\Ad-Aware» и хлеба не просит, а при запуске честно ищет всякие бяки и предлагает удалить найденное. Софтинка бесплатная, русский интерфейс наличествует. Файл её базы данных, содержащей описания нехорошего ПО, называется «defs.ref» и находится в той же папке. База данных, естественно, нуждается в периодическом обновлении, и его, конечно же, можно выполнять вручную из интерфейса программы.

Но это не наш метод. Задание «UpdateAdAware» определяет, были ли обновления на сайте разработчика с момента последней проверки. Если были, скачивает ZIP-архив с сайта разработчика, распаковывает его, полученную базочку подсовывает программе, а архивчик удаляет.

Если у антивируса и файрволла есть собственные планировщики для автоматического обновления, пусть и анемичной наружности, то у Ad-Aware такового нет в принципе. И здесь уже невооружённым глазом видно преимущество использования своего собственного планировщика.

В этом задании впервые вышли на сцену две утилитки: wget и pkunzip. И если со второй всё ясно, то первую представлю в двух словах. Wget – утилита, предназначенная для скачивания файлов, управляемая командной строкой. Именно то, что нам нужно! Каждый желающий может найти её Windows-дистрибутив в интернете.

nnCron, конечно, имеет собственное средство для скачивания файлов, реализуемое плагином «http.spf», но у него есть два недостатка: невысокая скорость и некоторая глючность. Например, архив с программой ТВ этот плагин ни за что не желает скачивать. Слишком сурьёзный товарищ, а нам всё же ничто человеческое не чуждо… В-общем, совершенно не вижу, почему благородным донам не использовать Wget.

 

#( UpdateAdAware

RunOnce

Time: 41 16 18 10 * 2007

NoLog

NoDel

AsLoggedUser

LoadProfile

Action:

SWHide   NormalPriority

 

  HOST-EXIST: "lavasoft.com"

  IF

    HTTP-CHANGED: "http://download.lavasoft.com/public/defs.zip"

    IF

      START-APPW: wget -O "%TEMP%\defs.zip" http://download.lavasoft.com/public/defs.zip

     

      FILE-EXIST: "%TEMP%\defs.zip"

      IF

        START-APPW: pkunzip.exe -o "%TEMP%\defs.zip" "%TEMP%"

        FILE-MOVE: "%TEMP%\defs.ref" "C:\Program Files\Ad-Aware"

       

        FILE-DELETE: "%TEMP%\defs.zip"

       

        1 BalloonIcon !

        BALLOON: "Ad-Aware" "Обновлён в %hh%:%mm%:%ss%"

      THEN

    THEN

  THEN

)#

Листинг 3

 

Боясь показаться назойливым, рискну всё же напомнить, что мы рассматриваем случай с непостоянным – периодическим – подключением к Сети. Поэтому всякие виджеты, которые только и умеют, что показывать погоду в доме и биржевые сводки – не про нас. К тому же, они жрут кучу ресурсов.

Но благ всё же хочется, и ярлычок на рабочем столе, который покажет погоду на завтра даже при отсутствии коннекта, вовсе не буржуазное излишество, а вполне разумное удобство. Особенно актуально это для пользователей dial-up из села Разгуляево, у которых каждая копеечка на счету.

Итак, обновляет прогноз задание «UpdateWeather». Нужно только заменить адрес «http://weather.rambler.ru/?id=3627» на соответствующий вашему населённому пункту.

 

#( UpdateWeather

NoLog

RunOnce

Time: 13 20 17 4 * 2008

NoDel

AsLoggedUser

LoadProfile

VARIABLE SEM_WEATHER

Action:

SWHide   NormalPriority

 

  HOST-EXIST: "rambler.ru"

  IF

    SEM_WEATHER GET

      START-APPW: wget -O "%USERPROFILE%\Рабочий стол\Прогноз погоды.html" http://weather.rambler.ru/?id=3627

      BALLOON: "Прогноз погоды" "Обновлён в %hh%:%mm%:%ss%"

    SEM_WEATHER RELEASE

  THEN

)#

Листинг 4

 

Если не у всех ваших любимых сайтов есть RSS-ленты, а отслеживать обновления ресурсов всё же хочется, интернет может предложить на выбор сотни утилиток, которые займутся этим. Но то же самое может делать и nnCron, поэтому нужда в сторонних утилитах отпадает. Задание из листинга 5 иллюстрирует эту способность планировщика.

 

#( Отслеживание_новостей_на_сайтах

RunOnce

Time: 41 16 18 10 * 2007

NoLog

NoDel

AsLoggedUser

LoadProfile

0 VALUE LET_DOWNLOAD

Action:

SWHide   NormalPriority

 

  HTTP-CHANGED: "http://www.israelshamir.net/ru.htm"

  IF

    BALLOON: "Исраэль Шамир" "написал что-то новое"

  THEN

)#

Листинг 5

 

Также было бы удобно получать уведомления о новой почте в вашем ящике, даже если почтовый клиент не запущен. И вовсе не обязательно для этого засорять память утилитками типа «Mail.ru Agent». В листинге 6 приведён пример задания для планировщика, которое каждые 5 минут (при наличии коннекта) проверяет почтовый ящик и сообщает о новых письмах. Проверяемых ящиков может быть несколько, и не только на MAIL.RU, но и на других почтовых серверах.

 

#( Проверка_почты

NoLog

AsLoggedUser

LoadProfile

Time: */5  * * * * *

0 VALUE number_of_messages

VARIABLE SEM_POST

Action:

 

  SEM_POST GET

    HOST-EXIST: "mail.ru"

    IF

      S" pop.mail.ru" S" имя_усера_до_@mail.ru" S" пароль_усера" POP3-CHECK

      TO number_of_messages

     

      number_of_messages 0 >

      IF

        BALLOON: "Новая почта" "кол-во сообщений: %number_of_messages%"

      THEN

    THEN

  SEM_POST RELEASE

)#

Листинг 6

 

«Эффектор» из листинга 7 обновляет с сервера www.teleweb.ru ТВ-программу и копирует её в папку, для этого предназначенную, по умолчанию – «C:\Program Files\BeholdTV\TVGuide»; вы можете изменить целевую папку. Теперь не придётся  держать в оперативной памяти «агента» Beholder’а только для того, чтобы обновлять ТВ-программу. Ещё несколько освобождённых мегабайт в RAM… В этом задании также используются утилиты Wget и Pkunzip.

 

#( Update_TV_prog

RunOnce

Time: 41 16 18 10 * 2007

NoLog

NoDel

AsLoggedUser

LoadProfile

Action:

SWHide   NormalPriority

 

  HOST-EXIST: "teleweb.ru"

  IF

    FILE-EXIST: "C:\Program Files\BeholdTV\TVGuide\BBC.ndx"

    IF

      CUR-DATE

      FILE-WRITE-DATE: "C:\Program Files\BeholdTV\TVGuide\BBC.ndx"

      DATE- 7 >

      IF

        START-APPW: wget -O "%TEMP%\jtv.zip" http://teleweb.ru/files/jtv.zip

        FILE-EXIST: "%TEMP%\jtv.zip"

        IF

          START-APPW: pkunzip.exe -o "%TEMP%\jtv.zip" "%TEMP%"

         

          FILE-DELETE: "C:\Program Files\BeholdTV\TVGuide\*.ndx"

          FILE-DELETE: "C:\Program Files\BeholdTV\TVGuide\*.pdt"

         

          START-APP: move "%TEMP%\*.ndx" "C:\Program Files\BeholdTV\TVGuide"

          START-APP: move "%TEMP%\*.pdt" "C:\Program Files\BeholdTV\TVGuide"

         

          FILE-DELETE: "%TEMP%\jtv.zip"

         

          0 BalloonIcon !

          BALLOON: "ТВ-программа" "Обновлена в %hh%:%mm%:%ss%"

        THEN

      THEN

    THEN

  THEN

)#

Листинг 7

 

Наконец, задание «UpdateFromInternet», запускаемое каждый час, выполняет весь комплекс обновительных мероприятий, что благотворно сказывается как на удобстве использования нашего железного друга, так и на его способности не ломаться под ударами судьбы, то бишь, атаками извне.

 

#( UpdateFromInternet

NoLog

NoDel

AsLoggedUser

LoadProfile

Time: 1 */1 * * * *

VARIABLE SEM_UPDATE

Action:

SWHide   NormalPriority

 

  SEM_UPDATE GET

    Синхронизация                   RUN

\   Проверка_почты                  RUN

    Отслеживание_новостей_на_сайтах RUN

   

    UpdateDrWeb                     RUN

    UpdateAdAware                   RUN

    UpdateWeather                   RUN

    Update_TV_prog                  RUN

  SEM_UPDATE RELEASE

)#

Листинг 8

 

Таким образом, у нас автоматически обновляется широкий ассортимент ПО; список его можно расширять на ваше усмотрение. Нельзя не упомянуть о важности своевременного обновления собственно Windows. Этим может заниматься как сама операционная система через «автоматическое обновление», так и пользователь компьютера – вручную.

Оптимизация ввода-вывода

Со спокойной душой, раз и навсегда решив для себя вопросы автоматических обновлений, обратим своё внимание на дисковый ввод-вывод. Понимая основные принципы работы дисковой подсистемы, мы сможем так её подкрутить и подтянуть, чтобы сделать компьютеру благо, а себе обеспечить комфортную работу.

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

Второй метод ускорения – распараллеливание ввода-вывода. Для этого можно использовать RAID-массивы, два и более различных физических диска, технологию вроде «Ready boost» Windows Vista.

Пойдём потихоньку от простого к сложному.

 

Очистка временных файлов

Этим полезным делом у нас займутся два задания. Первое из них – «Очистка диска» - листинг 9. Рассмотрим его повнимательнее. Во первых его строках производится удаление файлов, шаблоны которых вручную описаны в файле «tmp_files_for_del.lst» (см. листинг 10). Расширять его можно почти до бесконечности, но делать это должен только грамотный товарищ, отдающий себе отчёт в своих действиях.

Второй блок начинается с комментария «очистить корзину»; это действие не вполне однозначное, поэтому собственно действие закомментировано. Если вы считаете регулярную очистку корзины делом достойным и вельми полезным, раскомментируйте следующую строку. Эх, где-то теперь наш приснопамятный Бейсик с его нумерацией строк? Как удобно было ссылаться на строчки в программе!..

Ну да ладно, смотрим на то, что есть. А есть у нас следующий откомментированный блок: «Почикать старые ненужные ярлыки». Windows, как вы помните, запоминает запускавшиеся нами программы и ярлыки самых часто используемых приложений добавляет в меню «Пуск». К сожалению, команда Билли не озаботилась при этом очищать историю запуска, и там можно увидеть такое! Полюбопытствуйте, будете неприятно удивлены злопамятностью системы…

Именно этот недостаток мы и исправляем: вначале удаляются все ярлыки с датой создания старше одного месяца, а затем таким же образом удаляются устаревшие ссылки на открывавшиеся когда-либо файлы.

Следующий блок очищает неиспользуемые системой библиотеки из буферной (временной) папки «%SystemRoot%\system32\dllcache». Если к каким-либо файлам из этой папки не было обращения два и более месяцев, они точно не нужны в повседневной деятельности.

А значит, эти файлы можно с чистой совестью удалить: объём этой папочки доходит до нескольких сот мегабайт. Кстати, ничего страшного при этом не произойдёт: при нужде в этих файлах Windows попросит у вас диск с дистрибутивом, и вопрос решится к взаимному удовольствию.

Наконец, последний блок удаляет временные файлы, созданные MS Word’ом (~$*.doc, ~$*.rtf). Сделайте поиск по диску, и вы этих мусорных файлов насчитаете десятки и сотни.

 

#( Очистка_диска

VARIABLE DISK_CLEAR

VARIABLE file0

CREATE str0 258 ALLOT

NoLog

RunOnce

NoDel

Time: 30 18 30 9 * 2006

Action:

SWHide   NormalPriority

 

  DISK_CLEAR GET

    S" Начало очистки диска" CRON-LOG

     

      \ Удалить ненужные файлы

      S" C:\Program Files\nnCron\tmp_files_for_del.lst" R/O OPEN-FILE-SHARED THROW file0 !

      BEGIN str0 1+ 255 file0 @ READ-LINE THROW WHILE

       str0 C!

   

       RECURSIVE WITHDIRS

       PURGE-OLD: "%str0 COUNT%" -1

      REPEAT

     

      DROP

      file0 @ CLOSE-FILE DROP

     

      \ Очистить корзину

      \ START-APP: "C:\Program Files\nncron\nncron.exe" -wp -runfile "C:\Program Files\nnCron\plugins\clearbin.spf"

     

      \ Почикать старые ненужные ярлыки

      PURGE-OLDW: "C:\Documents and Settings\%USERNAME%\Recent\*.*" 30

      START-APPW: attrib -H "C:\Documents and Settings\%USERNAME%\Recent"

     

      \ Почикать устаревшие ссылки на когда-либо открывавшиеся файлы

      PURGE-OLDW: "%USERPROFILE%\Application Data\Microsoft\Office\Последние файлы\*.*" 30

      START-APPW: attrib -H "%USERPROFILE%\Application Data\Microsoft\Office\Последние файлы"

   

      \ Почикать старые драйвера

      RECURSIVE WITHDIRS

      PURGE-OLDA: "%SystemRoot%\system32\dllcache\*.*" 60

   

      \ -------- Очистка временных файлов после MS Word --------

       RECURSIVE SKIPERRORS FILESONLY

       FOR-FILES: "C:\~$*.*"

         RE-MATCH: "%FOUND-FILENAME%" "/(\.doc)|(\.rtf)$/i"

         IF FILE-DELETE: "%FOUND-FULLPATH%" THEN

       ;FOR-FILES

      \ ----------------------------------------------

     

    S" Конец очистки диска" CRON-LOG

   

    BALLOON: "Временные файлы" "удалены в %hh%:%mm%:%ss%"

  DISK_CLEAR RELEASE

)#

Листинг 9

 

C:\TEMP\*.*

C:\Documents and Settings\Администратор\Local Settings\Temp\*.*

C:\Documents and Settings\Администратор\Local Settings\Temporary Internet Files\*.*

C:\Program Files\DrWeb\*.drw

C:\Program Files\DrWeb\*.tmp

C:\*.mdmp

Листинг 10

 

Плавно переходим к следующим рассуждениям. В Windows есть приложение «Очистка диска», в котором есть опция «Сжатие старых файлов». Система отслеживает частоту обращения к файлам, и позабытые-позаброшенные старается сжать (средствами NTFS).

Я предлагаю похожий механизм, с одним только отличием. Сжиматься будут не забытые файлы, а файлы хорошо сжимаемых типов: DOC, RTF, XLS, TXT, и т.д.

Соответствующий «эффектор» приведён в листинге 11. Запустите его и почувствуйте разницу! На ваших дисках высвободятся сотни мегабайт. Подробно описывать это задание не буду, всё и так ясно из описания и комментариев в тексте.

 

#( Глубокая_очистка_дисков

VARIABLE DISK_CLEAR_ADV

NoLog

NoDel

RunOnce

Time: 34 12 1 1 * 2007

0 VALUE FileAttributes

VARIABLE file1

VARIABLE file2

CREATE str2 258 ALLOT

VARIABLE _free_space

Action:

SWHide   IdlePriority

 

  DISK_CLEAR_ADV GET

    S" Начало глубокой очистки дисков" CRON-LOG

      S" C:\Program Files\nnCron\disks.lst" R/O OPEN-FILE-SHARED THROW file1 !

      BEGIN str1 1+ 255 file1 @ READ-LINE THROW WHILE

       str1 C!

      

       \ -------- Очистка дерьма после MS Word --------

        RECURSIVE SKIPERRORS FILESONLY

        FOR-FILES: "%str1 COUNT%:\~$*.*"

          RE-MATCH: "%FOUND-FILENAME%" "/(\.doc)|(\.rtf)$/i"

         

          IF

           FILE-DELETE: "%FOUND-FULLPATH%"

          THEN

        ;FOR-FILES

       \ -------- Сжатие сжимаемого -------------------

       FILE-EXIST: "%str1 COUNT%:\"

       IF

        \ ~~~~~~~~~~ Определяем свободное место на диске ~~~~~~~~~~

          str1 \ на стэк кладём адрес строки

          1+ \ смещаемся на 1 символ, так-как у нас строка со счётчиком

          C@ \ берём 1 символ строки - это имя диска

          FREE-SPACE _free_space !

        \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        S" Перед сжатием файлов на диске %str1 COUNT%: своб.места: %_free_space @%" CRON-LOG

       

        FILE-DELETE: "%FOLDER-TEMP%\Файлы нулевого размера.lst"

       

        RECURSIVE SKIPERRORS FILESONLY

        FOR-FILES: "%str1 COUNT%:\*"

          RE-MATCH: "%FOUND-FILENAME%" "/(\.doc)|(\.dot)|(\.vsd)|(\.rtf)|(\.xls)|(\.xsd)|(\.bmp)|(\.txt)|(\.htm)|(\.html)|(\.mht)|(\.sql)|(\.dbf)|(\.ndx)|(\.idx)|(\.ib)|(\.bak)|(\.log)|(\.hlp)|(\.gid)|(\.cnt)|(\.pdf)|(\.xml)|(\.fdb)|(\.fbk)|(\.mdb)|(\.ms)|(\.rep)|(\.key)|(\.mde)|(\.xlt)|(\.pas)|(\.usa)|(\.ini)|(\.tmp)|(\.gif)|(\.old)|(\.err)|(\.mnu)|(\.lst)|(\.pst)|(\.frf)$/i"

         

          IF

            0. FILE-SIZE: "%FOUND-FULLPATH%" D=

           

            IF

              \ Почикать файлы нулевого размера

              START-APP: echo "%FOUND-FULLPATH%" >>"%FOLDER-TEMP%\Файлы нулевого размера.lst"

              FILE-DELETE: "%FOUND-FULLPATH%"

            ELSE

              \ Сжать сжимаемое

              S" %FOUND-FULLPATH%" EVAL-SUBST DROP GetFileAttributesA

              2048 <

             

              IF

               \ Не стоит атрибутов "сжатый", "зашифрованный", "неиндексируемый"

               START-APPW: compact /c "%FOUND-FULLPATH%" >NUL

              ELSE

               S" %FOUND-FULLPATH%" EVAL-SUBST DROP GetFileAttributesA TO FileAttributes

              

               \ Стоит атрибут "неиндексируемый"

               FileAttributes

               8192 >

              

               IF

                FileAttributes

                10240 <

               

                IF

                 START-APPW: compact /c "%FOUND-FULLPATH%" >NUL

                THEN

               THEN

              THEN

            THEN

          THEN

        ;FOR-FILES

       

        \ ~~~~~~~~~~ Определяем свободное место на диске ~~~~~~~~~~

          str1 \ на стэк кладём адрес строки

          1+ \ смещаемся на 1 символ, так-как у нас строка со счётчиком

          C@ \ берём 1 символ строки - это имя диска

          FREE-SPACE _free_space !

        \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        S" После сжатия  файлов на диске %str1 COUNT%: своб.места: %_free_space @%" CRON-LOG

       THEN

       \ ----------------------------------------------

      REPEAT

     

      DROP

      file1 @ CLOSE-FILE DROP

     

    S" Конец глубокой очистки дисков" CRON-LOG

  DISK_CLEAR_ADV RELEASE

)#

Листинг 11


Главная Часть I Часть II Часть III Часть IV Часть V Часть VI

 

Специальная сборка nnCron

 

    Чтобы вдохновить читателя на подвиги, сообщу, что в природе существует созданный мною дистрибутив nnCron, обладающий многими достоинствами:

 

·         nnCron устанавливается со всеми необходимыми плагинами и параметрами, его не придётся настраивать вручную

·         в состав дистрибутива уже входят все скрипты, описанные в этом цикле статей

·         планировщик устанавливается уже зарегистрированным. Это не наносит ущерба автору – как уже упоминалось, для жителей б.СССР это удовольствие бесплатное

·         также дистрибутив содержит утилиты Wget и Pkunzip, которые будут инсталлированы вместе с nnCron

·         дистрибутив выполняет некоторую оптимизацию Windows: создаёт папку для временных файлов с коротким именем «C:\TEMP»; отключает общиe ресурсы «Admin$», «С$», и т.д.; отключает встроенный отладчик «Dr.Watson»; запрещает выгружать ядро системы в файл свопинга, чем отсекает потенциальные «тормоза», просит Windows выгружать из памяти неиспользуемые приложениями библиотеки: это гораздо практичнее использования всяких левых «оптимизаторов оперативной памяти»

·         инсталлирует бесплатный дефрагментатор «JkDefrag», работающий в режиме экранной заставки

 

Главная | Часть I | Часть II | Часть III | Часть IV | Часть V | Часть VI

По вопросам, связанным с этим веб-узлом, обращайтесь по адресу
© ASK Software, 2004. Все права защищены.
Последнее изменение: 30.06.2010.