Паксоблог

27 січня 2006

Colorer в Linux

В этой заметке я поведаю о замечательной системе подсветки синтаксиса(syntax highlighting) под названием Colorer. Мое знакомство с этой системой произошло еще когда я учился в ARIU. Я хотел чтобы в редакторе Far появилась подсветка синтаксиса, как в DOS Navigator'е. Первого помощника в этом деле плохо памятую, кажется, это был highlight, а вот colorer я использую и по сей день, а это более четырех лет. Расскажу немного про автора, и его работы. Автором Colorer является наш соотечественник Игорь Русских, он является автором супер-расширяемого калькулятора под Far. Кроме того, он создал шустрый и маленький SGML-парсер(XML он тоже парсит, т.к. XML-подмножество оного), и не менее шуструю библиотеку для работы с регулярными выражениями(regexp), я ее даже использовал:

//v 1.1 by areus 03.03.03
#include <stdio.h>
#include <regexp\cregexp.h>
#include <string.h>

void filterStdIn(char *sRegExp){

SMatches match;
PRegExp re;
bool isOK;
char text[255];
char *sMatch;

re = new CRegExp();
sMatch = new char[255];
int len, i;
if (!re->SetExpr(sRegExp)){
printf("Error in regexp: %s\n", sRegExp);
return;
}
puts(sRegExp);
while(!feof(stdin)) {
fgets(text, 255, stdin);
isOK = re->Parse(text, &match);
for(i=0; i<match.CurMatch && isOK ; i++){
if(match.s[i] > -1){
len = match.e[i] - match.s[i];
strncpy(sMatch, text + match.s[i], len);
sMatch[len] = '\0';
printf("%s ", sMatch);
}
}
if(isOK)printf("\n");

}
delete re, sMatch;
}

main(int argc, char **argv){
if(argc>1){
filterStdIn(argv[1]);
}else{
printf("RegExpFilter 1.0 [using Colorer's rx-lib]
\r
\nusage:\r\ndir | %s /regexp/[gmi]", argv[0]);
}
}


Все перечисленное - opensource(см. исходники Colorer), и кроссплатформенно!. Colorer также доступен как плагин для платформы Eclipse. Про использование Colorer в Far я позже напишу в статье "Far - универсальная IDE", а вот как я использую colorer под Linux, опишу уже сейчас. Скачаем пакет colorer для linux, и установим, замечу, что это самый короткий configure-скрипт:

$./configure
loading cache ./config.cache
checking how to run the C preprocessor... (cached) cc -E
checking whether ln -s works... (cached) yes
checking whether make sets ${MAKE}... (cached) yes
checking for main in -ldl... (cached) yes
checking for main in -lm... (cached) yes
checking for main in -lc... (cached) yes
checking for working const... (cached) yes
checking for inline... (cached) inline
creating ./config.status
creating Makefile
$make
$su -c 'make install'

Список подсвечиваемых синтаксисов довольно обширен, их 156(!):

$colorer -l|wc -l

Colorer-take5 Library beta4 01.12.2004
Copyright (c) 1999-2005 Igor Russkih


loading file types...
156

Использвание консольной colorer подробно описано тут. Я же ограничусь небольшими примерами.

Создадим маленький исходник на языке C:

$echo -e '#include\n\nmain(){\nprintf("hello colorer\\n");\n}' > hc.c
Посмотрим на него:
$cat hc.c
#include

main(){
printf("hello colorer\n");
}

Сгенерируем HTML с подсветкой в файле hc.html:

$colorer -h hc.c -o hc.html

Заметим что Colorer автоматически определил тип файла, и соответственно подсветил синтаксис. Автоопределение происходит как по расширению, так и по magic-байтам(это можно менять, правя соотв. *,hrc файлы). Такое поведение можно изменять, жестко указав тип(ключ -t).

Если мы не указываем имя выходного файла (ключ -o), и указываем отключить HTML заголовки (ключ -dh, что значит disable headers), то получаем на STDOUT html-разметку для вставки(html-snippet):


Я копирую и вставляю эту разметку в html-код этого поста:

#include<stdio.h>

main(){
printf("hello colorer\n");
}

Теперь, если обьединить это с функцией clip:


html-snippet "ляжет" прямо в буфер обмена(clip -p перенаправит вывод в буфер), после чего остается только вставить код в редактируемый пост. Для удобства я написал следующую функцию:


function chl {
colorer -dh -h $* | clip p
}


положил ее в ~/.alias и использую ее так: chl
Например:

chl print_ora_users_ldif.pl

Можно передавать Colorer'у ключи, например для нумерации строк:

chl -ln print_ora_users_ldif.pl

Можно перенаправлять STDOUT:

cat print_ora_users_ldif.pl |chl


Замечу, что код подсветки зачастую занимает довольно большой объем. За его сокращение "отвечает" ключ -ht, но в этом случае нам нужно сперва определить соответствующие css-классы(def_Comment,def_Syntax, и т.д.).

Очень жаль, что недоступна страница Midnight Commander integration page, ссылка на которую есть на офсайте, потому как других упоминаний о такой интеграции, мне найти не удалось.

Система генерации HTML Colorer'ом доступна в online.

Дополнительные ссылки:



KDE 4 Screenshots

Поглядел на коллекцию скриншотов KDE4.
Красиво, особенно понравился вот этот шот:


Категории:

25 січня 2006

Wine 0.9.5 vs Windows XP SP2

MadDog’s Blog » Wine 0.9.5 vs Windows XP SP2
При проведении серии тестов производительности последний релиз свободной реализации WinAPI с открытым кодом — Wine 0.9.5 — в половине случаев показал более высокие результаты, чем Windows XP SP2.


Скоро wine перегонит native-среду. Все возможно!


Категории:

inforedesign » новички-21

inforedesign » новички-21
Денис Перехрест включил меня в свой регулярно обновляемый раздел "новички" в 21 выпуск, было это 31 октября. В 21 век - со своим блогом.

Это первый пост, который я пишу под виндой у себя дома, используя расширение для firefox под названием perfomance. Классная вещь, интегрируется с сервисами technocrati и del.icio.us, шлет trackbacks, да еще много чего умеет. Кроме того, я плавно перехожу на firefox 1.5, и сейчас работаю в portable firefox 1.5, который не требует установки, т.е. достаточно скопировать папочку со всеми расширениями и моими настройками. Вскоре я намереваюсь опубликовать небольшой дистрибутив на основе именно portable firefox, где соберу все полезные расширения, выбранные в течение года использования огнелиса.


Technorati Tags: , ,

Xming - бесплатный X-сервер под Win32

freedesktop.org - Xming - это порт X Window System под Microsoft Windows. В отличие от Cygwin/X, он не зависит от Cygwin окружения.
Как использовать:
  1. Скачаем , установим и запустим Xming. Он будет висеть в трее:

  2. Скачаем и запустим(он не требует установки) Putty - лучший win32 ssh-клиент.
  3. Настроим сессию в Putty:



  1. Соединимся с X-клиентом, нажав у Putty "open" (замечу, что в терминах X-ов это именно клиент, а машина под windows - сервер), аутентифицируемся и запустим произвольное X-приложение:



Как видно все очень просто: я запустил на удаленном linux-сервере конфигуратор Oracle(dbca), а работаю с его окном под windows.

Категории:

Работа со строками в Bash из 'Tips от Madskull'a: bash'

Замечательнейший документ!!
Содержание документа Tips от Madskull'a: bash:
"
* Ожидание запущенных в фоне задач
* прерывание по таймеру (SIGALRM)
* параметры в скриптах и функциях
* массивы
* trap: ловим прерывания (updated)
* Прогрессбар в bash-скриптах
* Чтение конфигов в скрипте
* Работа со строками
* Подстановка параметров
* getopts
* Переменные
* Цвета ECHO
* Спецсимволы
* Некоторые команды
"


Сворую только один раздел:

Работа со строками



Длина строки

${#string}


Извлечение подстроки


${string:position}
# с position до конца

${string:position:length}
# с position длиной length символов

${string: -length}
# последние length символов


Удаление части строки


${string#substring}
# до первого с начала

${string##substring}
# до последнего с начала

${string%substring}
# до первого с конца

${string%%substring}
# до последнего с конца


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


${string/substring/replacement}
# первое вхождение

${string//substring/replacement}
# все вхождения

${var/#Pattern/Replacement}
# Если в переменной var найдено совпадение с Pattern,
# причем совпадающая подстрока
# расположена в начале строки (префикс),
# то оно заменяется на Replacement.
# Поиск ведется с начала строки

${var/%Pattern/Replacement}
# Если в переменной var найдено совпадение с Pattern,
# причем совпадающая подстрока
# расположена в конце строки (суффикс),
# то оно заменяется на Replacement.
# Поиск ведется с конца строки


Замечачание к разделу "чтение конфигов в скрипте":
Есть в bash змечательный оператор включения в скрипт другого скрипта/файла("."). Его наличие практически сводит на нет такое "хитрое" чтение конфигов.
Вот пример:

#!/bin/bash
#set-route

. ./route.conf

#change this in /etc/iproute2/rt_tables
TABLE=sirius

echo `date +'%s %y/%m/%d %T'` $@ >> $0.log

ip route delete default table $TABLE
ip route add default via $UKRTEL_GW dev $UKRTEL_IF table $TABLE

cat ./route.conf:

#!/bin/bash
#P2 - utel
P2_NET=192.168.1.0/24
UKRTEL_NET=$P2_NET
IF2=sirius
UKRTEL_IF=$IF2
P2=192.168.1.31
UKRTEL_GW=$P2
P2_TBL=ukrtel
IP2=192.168.2.31

#P1 -point
#net-id=44, net-hosts:45-46, bcast:47

#$P1_NET be the IP network $P1
P1_NET=192.16.101.44/30
POINT_NET=$P1_NET
#$IF1 be the name of the first interface
IF1=eth1
POINT_IF=$IF1
#$P1 be the IP address of the point-gateway
P1=193.16.101.45
POINT_GW=$P1
P1_TBL=point
#$IP1 be the IP address associated with $IF1
IP1=193.16.101.46

Таким образом мы храним общие параметры в отдельном файле и "инклюдим" их по надобности.

Дополнительные ссылки:


Категории:

yole.ru / Structorian

Весьма интересный проект.
yole.ru / Structorian:
Язык описания структур, используемый Структорианом, достаточно мощен и по синтаксису напоминает C. Описывать простые структуры в Структориане не сложнее, чем вводить их описания на C. В то же время, для более сложных структур Структориан позволяет задавать иерархию данных, использовать циклы, условия, мощный механизм вычисления выражений и другие возможности. В идеале, Структориан должен позволять адекватно описывать любой реально существующий формат данных или сетевой протокол.


Структура, описывающая формат zip-файла(см. Strs/zip.strs) представлена ниже:


// ZIP archive structures
// Compiled by Dmitry Jemerov
// Based on .ZIP File Format Specification Version 4.5

enum ZipCompressionMethod
{
"Stored", "Shrunk", "Reduced1", "Reduced2", "Reduced3", "Reduced4",
"Imploded", "Tokenized", "Deflated", "Deflate64'ed",
"PKWARE Data Compression Library Imploded"
}

enum ZipFlags
{
Encrypted
}

[filemask="*.zip"]
struct LocalFileHeader
{
u32 Signature;
assert (Signature == 0x04034b50);
u16 VersionToExtract;
set16 Flags [enum=ZipFlags];
enum16 CompressionMethod [enum=ZipCompressionMethod];
dosdatetime LastModification [timefirst];
x32 CRC32;
u32 CompressedSize;
u32 UncompressedSize;
u16 FileNameLength;
u16 ExtraFieldLength;
str FileName [len=FileNameLength];
nodename FileName;
if (ExtraFieldLength > 0)
{
blob ExtraField [len=ExtraFieldLength];
}

skip CompressedSize;
[hidden] u32 _nextSignature;
skip -4;
if (_nextSignature == 0x04034b50)
{
sibling LocalFileHeader;
}
elif (_nextSignature == 0x02014b50)
{
sibling CentralFileHeader;
}
}

struct CentralFileHeader
{
u32 Signature;
assert (Signature == 0x02014b50);
u16 VersionMadeBy;
u16 VersionToExtract;
bits16 Flags;
enum16 CompressionMethod [enum=ZipCompressionMethod];
dosdatetime LastModification [timefirst];
x32 CRC32;
u32 CompressedSize;
u32 UncompressedSize;
u16 FileNameLength;
u16 ExtraFieldLength;
u16 FileCommentLength;
u16 DiskNumberStart;

}

Теперь загрузим ее и "натравим" на zip-дистрибутив самого structorian'a:

Структура(см. Strs/exe.strs) PE-файла(коими являются почти все *.dll, *.exe и даже *.sys) определяет следующее дерево:

Скриншоты немного "кривоваты" - это из-за Wine'а.
В комлекте идут множество готовых структур(27):

dron@tserver:~/work/mny/ib/structorian/Strs> ls -gG
-rw-r--r-- 1 422 2002-06-26 23:00 bmp.strs
-rw-r--r-- 1 622 2004-05-15 12:42 DocFile.strs
-rw-r--r-- 1 1028 2004-07-31 19:45 Escher.strs
-rw-r--r-- 1 16777 2002-07-14 22:13 exe.strs
-rw-r--r-- 1 1009 2004-08-07 12:55 Fido.strs
-rw-r--r-- 1 255 2002-11-07 23:45 HomePlanet.strs
-rw-r--r-- 1 48148 2004-08-17 09:23 infinity.strs
-rw-r--r-- 1 1523 2003-04-17 21:09 Java.strs
-rw-r--r-- 1 3875 2004-07-31 19:10 MicrosoftWord.strs
-rw-r--r-- 1 3243 2003-06-04 00:05 MIDI.strs
-rw-r--r-- 1 2763 2003-08-05 09:02 Miranda.strs
-rw-r--r-- 1 6587 2002-07-16 15:45 Morrowind.strs
-rw-r--r-- 1 399 2002-08-01 21:30 Neocron.strs
-rw-r--r-- 1 1912 2003-10-25 16:48 oedbx.strs
-rw-r--r-- 1 184 2003-05-09 16:21 PDB.strs
-rw-r--r-- 1 1593 2002-07-15 19:29 Python.strs
-rw-r--r-- 1 1384 2003-05-01 23:43 Quake2.strs
-rw-r--r-- 1 5040 2002-08-08 22:21 Quake3.strs
-rw-r--r-- 1 2399 2003-12-21 14:56 Quake.strs
-rw-r--r-- 1 2381 2002-10-15 21:10 rar.strs
-rw-r--r-- 1 3210 2002-12-28 20:16 SMS.strs
-rw-r--r-- 1 2082 2003-04-26 13:03 TADS3.strs
-rw-r--r-- 1 1472 2002-08-19 22:57 TheBat.strs
-rw-r--r-- 1 330 2003-04-12 17:04 titbit.strs
-rw-r--r-- 1 3270 2002-07-06 16:18 t-mail.strs
-rw-r--r-- 1 144 2002-07-16 08:25 vssver.scc
-rw-r--r-- 1 1716 2002-10-15 22:58 zip.strs

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

--

Автор проекта - Дмитрий Жемеров. Он имеет прямое отношение к моему любимому файловому менеджеру Far: "Я входил в состав группы разработки FAR Manager с весны 2001 года и до выхода FAR 1.70 beta 5. Я отвечал практически за всю документацию, входящую в поставку FAR, переводил её на английский, вёл файл справки по API плагинов (plugins.hlp). Кроме того, я поддерживал плагин Network Browser и участвовал в разработке собственно FAR." Он является создателем библиотеки FarPlus, которая в разы упрощает написание плагинов для Far'а(посмотрите на его исходники для FarUinst или на StartMgr). Он же является автором супер-приложения omea, с ней я не работал, но анонс впечатлил. Да много чего еще он написал. Дмитрий ведет блог на английском языке, а также ЖЖ.

Категории:

23 січня 2006

Изучим за 10 минут Python c Пороменосом

Learn Python in 10 minutes | Poromenos' Stuff: "This tutorial will attempt to teach you Python in 10 minutes"
Смелое завление, но автор выполнил обещание! Написано на английском, но материал будет понятен и русскми и китайцам :). Питон действительно простой язык!
--
А drupal я сразу узнал..
Категории:

Сказ про DCOP и Klipper

DCOP(Desktop COmmunication Protocol) - один из интерфейсов межпроцессного взаимодействия(IPC), который был разработан в рамках проекта KDE.
Модель взаимодействия довольно проста. Каждое приложение, использующее DCOP называется клиентом. Приложения связываются друг с другом через DCOP-сервер, который отвечает за доставку сообщений или вызовов в правильном направлении. DCOP поддерживает два вида действий: неблокирующие сообщения вида "послать и забыть"(send and forget), и блокирующие "вызовы" (calls), которые ожидают возврата некоторых данных. Существует одноименная консольная утилита dcop, которая позволяет "разговаривать" с приложениями, поддерживающими DCOP, а это почти все KDE-приложения.
Упрощенный синтаксис следующий(подробней - man dcop):

dcop [ application [object [function [arg1] [arg2] [arg3] ... ] ] ]

Для начала вызовем dcop без аргументов:

dron@tserver:~> dcop
kwin
kicker
konqueror-4989
kded
kmix
knotify
suseplugger
kio_uiserver
kcookiejar
konsole-7156
mldonkeyapplet
klauncher
khotkeys
sim
konqueror-11604
kdesktop
klipper
ksmserver

Мы получили список приложений с которыми можем наладить коммуникации через DCOP. Чтобы получить интерфейсы по конкретному приложению мы вызываем dcop с аргументом-приложением, пример для k3b:

$dcop k3b
qt
K3bInterface (default)
K3bMainwindow
K3bProject-0
K3bProject-1
KBookmarkManager-/home/dron/.kde/share/apps/k3b/bookmarks.xml
KBookmarkManager-/home/dron/.kde/share/apps/konqueror/bookmarks.xml
KBookmarkNotifier
KDirNotify-1
KIO::Scheduler
MainApplication-Interface
k3b
ksycoca

Опросим дальше:

$dcop k3b MainApplication-Interface
QCStringList interfaces()
QCStringList functions()
void disableSessionManagement()
QCString startupId()
QCString caption()
void quit()
void reparseConfiguration()
void updateUserTimestamp(ulong time)
dron@tserver:~> dcop k3b K3bInterface
QCStringList interfaces()
QCStringList functions()
DCOPRef createDataCDProject()
DCOPRef createAudioCDProject()
DCOPRef createMixedCDProject()
DCOPRef createVideoCDProject()
DCOPRef createMovixCDProject()
DCOPRef createDataDVDProject()
DCOPRef createVideoDVDProject()
DCOPRef createMovixDVDProject()
DCOPRef currentProject()
DCOPRef openProject(KURL url)
QValueList projects()
void copyCd()
void copyDvd()
void eraseCdrw()
void formatDvd()
void burnCdImage(KURL url)
void burnDvdImage(KURL url)
void addUrls(KURL::List urls)
void addUrl(KURL url)
bool blocked()

Но мы немного удалились от темы: причем тут klipper?? А при том что он тоже из комплекта KDE и тоже поддерживает DCOP:

dron@tserver:~> dcop klipper klipper
QCStringList interfaces()
QCStringList functions()
QString getClipboardContents()
void setClipboardContents(QString s)
void clearClipboardContents()
void clearClipboardHistory()
QStringList getClipboardHistoryMenu()
QString getClipboardHistoryItem(int i)
int newInstance()
void quitProcess()

Так мы выведем на экран содержимое буфера обмена:

dcop klipper klipper getClipboardContents

А так определим свое содержимое буфера обмена:

dcop klipper klipper setClipboardContents myText

Просто, а впечатляет. Мне часто приходится копировать тексты в виртуальную машину(VMWare) и в терминальные подключения(rdesktop), при этом многострочные тексты не копируются. Я решаю проблему через сетевой диск - создавая файл и копируя в него содержание буфера. Вот моя функция-обертка для взаимодействия с буфером обмена(klipper):

function clip() {
#dron@bcsp 20060113
case "$1" in
e|--echo)
dcop klipper klipper getClipboardContents
;;
d|--dump)
dcop klipper klipper getClipboardHistoryMenu
;;
h|--history)
[ -z $2 ] && {
echo Need Numeric Index [0..N]
return 1
}
dcop klipper klipper getClipboardHistoryItem $2
;;
t|ts|tempsave)
FN=`date +%s`.`hostname`.clp
dcop klipper klipper getClipboardContents > /temp/$FN
echo saved as "t:\\$FN [/temp/$FN]"
;;
p|--pipe)
dcop klipper klipper setClipboardContents "$(cat)"
;;
--help)
echo usage: clip ['echo|dump|history|tempsave|pipe']
;;
*)
dcop klipper klipper getClipboardContents
esac

}


она лежит у меня в ~/.bash_rc, точнее в ~/.alias, который "инклюдится" в ~/.bash_rc.

Использование:

Просто выдать содержимое буфера:

$clip


Выдать историю буфера(--dump):

$clip d

Это бывает очень полезным при том, что вывод можно фильтровать, например:

$clip d|grep 'http://'

В результате мы получим строки с URL, которые "проходили" через буфер. Всякий раз, выделяя текст, klipper копирует его в буфер(мне уже и в win этого не хватает), это, равно как и размерность истории определяется в настройках:

Перенаправление STDOUT(--pipe):

$clip p < /etc/passwd
$ls -la|clip p
$echo "Hello"|clip p

Пользуюсь этим очень часто, решение подсмотрел.
Сохранение содержания буфера во временный файл(--tempsave):

$clip ts
saved as t:\1138011151.tserver.clp [/temp/1138011151.tserver.clp]

После сохранения, я открываю этот файл с сетевого диска под Windows(простым выделением мышкой в konsole), а после в Far уже: Shift+F4,Shift+Ins - для открытия.

Еще примеры использования dcop

Выйти из системы(logout):

$dcop kdesktop default logout

Переключить на другой десктоп:

$dcop kwin default setCurrentDesktop 2

Вывести список интерфейсов для окна k3b:

$dcop k3b K3bMainwindow

Скрыть окно k3b(show - для показа):

$dcop k3b K3bMainwindow hide

Переключить обои на рабочем столе:

$dcop kdesktop KBackgroundIface currentWallpaper 1

Отключить поддержку Java в табе konqueror:

$dcop konqueror-11604 html-widget1 setJavaEnabled false

Пример-сценарий c использованием k3b:

#!/bin/bash
PROJECT=`dcop k3b K3bInterface createDataCDProject`
dcop $PROJECT createFolder folderlvl0
dcop $PROJECT createFolder folderlvl1 /folderlvl0
dcop $PROJECT addUrl /tmp /folderlvl0/folderlvl1
dcop $PROJECT burn

Добавлено в 15:08 - пример от EnErGy[CSDX]:

$dcop amarok nowPlaying
ASTRIX - FREESTYLE CAFE

От себя:
player является дефолтным интерфейсом для amarok, поэтому мы можем писать dcop amarok и любой из нижеследующих аргументов:

$dcop amarok player
QCStringList interfaces()
QCStringList functions()
bool dynamicModeStatus()
bool equalizerEnabled()
bool isPlaying()
bool randomModeStatus()
bool repeatPlaylistStatus()
bool repeatTrackStatus()
int getVolume()
int sampleRate()
int score()
int status()
int trackCurrentTime()
int trackPlayCounter()
int trackTotalTime()
QString album()
QString artist()
QString bitrate()
QString comment()
QString coverImage()
QString currentTime()
QString encodedURL()
QString engine()
QString genre()
QString lyrics()
QString lyricsByPath(QString path)
QString nowPlaying()
QString path()
QString setContextStyle(QString)
QString title()
QString totalTime()
QString track()
QString type()
QString year()
void configEqualizer()
void enableDynamicMode(bool enable)
void enableOSD(bool enable)
void enableRandomMode(bool enable)
void enableRepeatPlaylist(bool enable)
void enableRepeatTrack(bool enable)
void mediaDeviceMount()
void mediaDeviceUmount()
void mute()
void next()
void pause()
void play()
void playPause()
void prev()
void queueForTransfer(KURL url)
void seek(int s)
void seekRelative(int s)
void setEqualizer(int,int,int,int,int,int,int,int,int,int,int)
void setEqualizerEnabled(bool active)
void setEqualizerPreset(QString name)
void setLyricsByPath(QString url,QString lyrics)
void setScore(int score)
void setScoreByPath(QString url,int score)
void setVolume(int volume)
void showBrowser(QString browser)
void showOSD()
void stop()
void transferDeviceFiles()
void volumeDown()
void volumeUp()
void transferCliArgs(QStringList args)


Дополнительные ссылки:



Категории:

20 січня 2006

Утилиты командной строки для Windows 2003 и Windows XP

Windows IT Pro::Windows NT/2000/XP/2003::Утилиты командной строки для Windows 2003 и Windows XP:
"В состав систем Windows Server 2003 и Windows XP Professional Edition входит ряд утилит командной строки, которые позволяют сэкономить время и силы при выполнении таких типичных операций, как создание и управление журналами событий, настройка страничного файла и файла Boot.ini, управление процессами и определение свободного дискового пространства. "

Узнал много нового из данной стати, и весьма удобного. Для работы многих WSH-сценариев, нужно выполнить
 c:\>cscript //h:cscript //nologo //s

что укажет серверу сценариев использовать консольный(CLI) интерпретатор cscript.exe вместо GUI-собрата - wscript.exe, и подавить вывод баннера(версию сервера)
Примеры
Осмотр event-логов(CLI заменитель для GUI eventvwr.exe) может осуществляться и, подключаясь, к удаленным системам (ключ /S). Это может быть и контроллер домена.

EVENTQUERY.vbs
EVENTQUERY.vbs /L system
EVENTQUERY.vbs /S system /U user /P password /V /L
EVENTQUERY.vbs /R 10 /L Application /NH
EVENTQUERY.vbs /R -10 /FO LIST /L Security
EVENTQUERY.vbs /R 5-10 /L "DNS Server"
EVENTQUERY.vbs /FI "Type eq Error" /L Application
EVENTQUERY.vbs /L Application
/FI "Datetime eq 06/25/00,03:15:00AM-06/25/00,03:15:00PM"
EVENTQUERY.vbs /FI "Datetime gt 08/03/00,06:20:00PM"
/FI "Id gt 700" /FI "Type eq warning" /L System
EVENTQUERY.vbs /FI "Type eq error OR Id gt 1000 "


Работа с триггерами(обработчиками) событий. Интересно, где система хранит такую информацию, консоль ведь "отпускает". Где-то в недрах WMI..
Будет время, разберу исходный тект.

EVENTTRIGGERS /Create /?
EVENTTRIGGERS /Create /TR "Очистка диска" /L SYSTEM /T ERROR
/TK c:\windows\system32\cleanmgr.exe
EVENTTRIGGERS /Create /S <система> /U <пользователь> /TR "Мало места"
/EID 4133 /T WARNING^
/TK \\<сервер>\<ресурс>\dsk.cmd
EVENTTRIGGERS /Create /S <система> /U <домен>\<пользователь> /P <пароль>
/TR "Архивация" /EID 4133 /L SYSTEM
/T ERROR /TK \\<сервер>\<ресурс>\ntbackup.exe
EVENTTRIGGERS /Create /RU <пользователь> /RP <пароль> /TR "Архивация"
/TK \\<сервер> \<ресурс>\ntbackup.exe /EID 4

c:>Eventtriggers /Create /TR "Очистка диска" /L SYSTEM /T ERROR /TK
C:\windows\system32\cleanmgr.exe
ПРЕДУПРЕЖДЕНИЕ: Создан новый триггер событий, но он может не работать...
УСПЕХ: Создан триггер событий "Очистка диска".


Работаем с процессами - tasklist/taskkill. Знал и раньше, но про такую продвинутую фильтрацию слышу впервые.

tasklist /FI «SERVICES eq RemoteRegistry»
taskkill /FI «WINDOWTITLE eq Безымянный — Блокнот»

Особенно понравилась утилита forfiles.exe, но ее нет в WinXP
Но самая-самая команда вот:

hh %SystemRoot%\Help\Ntcmds.chm

И без нее никуда.
Что можно сказать? Microsoft не стоит на месте и развивает,иногда, направление CLI.
Они реализовали и развивают технологии WSH, ADSI, WMI, а теперь еще и Monad, которые превращают жизнь админа в сущий рай :), где уже давно находятся админы-юниксоиды.

Категории:

Про блондинок

Шутки про блондинок довольно популярны, но ТАКОГО я, признаться, давно не встречал. И так давно уже не смеялся... см. ссылку: Лучшая шутка про блондинок - Sell Me

Стив Павлина: Как стать собой настоящим

В первый раз узнал о трудах Steve Pavlina, читая у Дениса Перехреста inforedesign: как стать “ранней пташкой”-2. Недавно "встретил" еще русские переводы его статей.

Приведу некоторые цитаты:

flash_usb: Как стать собой настоящим:
"Одна из трактовок этой медитации состоит в том, что моё подсознание создало эту воображаемую личность как проекцию того, кем я мог стать — идеализированным вариантом меня. Но, может быть, на каком-то уровне эта личность действительно существует. Каким образом появилась эта модель, однако, не так важно для меня, как то, каким образом она помогает мне расти."

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

rafo: Прекращаем откладывать дела на на потом:
"Если ты говоришь себе – 'Я должен подготовить бумаги сегодня' или 'Я должен завершить создание этого отчёта' – скорее всего ты ввергаешь себя в состояние стресса и откладываешь задачу на потом. Решение заключается в том, чтобы думать о начале работы над небольшим участком задачи, вместо того, чтобы представлять что тебе надо завершить всю задачу целиком."

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


Благодарю за переводы, и за оригинал(ы). Очень впечатляет, радует еще, что не меня одного..

Ссылки по теме:

Категории: