Паксоблог

28 березня 2006

Ликбез: Folksonomies – Cooperative Classification and Communication Through Shared Metadata по-русски

Фолксономии - что же стоит за этим замысловатым названием? Примем участие в развитии семантической сети будущего.. :)
Folksonomy — народ у руля классификации:

Ограничения фольксономий



  1. Неоднозначность. За словом ANT может скрывать полтора десятка разных акронимов или безобидный муравей. Или Apache Ant Project. Фильтрация может касаться очистки водки, а может быть про Байеса. Совершенно разные предметные домены смешиваются в одном «таге» — слове.
  2. Пробелы и фразы. Оба сервиса работают с односложными тагами. Делишез даже пробелы запрещает. Чтобы ввести как бы иерархию пользователь может писать понятия через слэши, но эта иерархия глубоко условна.

  3. Синонимы. Их нет. В смысле, в обоих сервисах нет никакого контроля за синонимами. mac, macintosh, apple — три совершенно несвязанных тага.

Преимущества фольксономий


  1. Навигация против поиска. Как навигацию я здесь перевёл browsing. Есть два фундаментально разных подхода к поиску информации, и мы говорим о навигации путём последовательного перемещения по ссылкам, которое здесь оказывается «интуитивно-понятным». Система позволяет обнаруживать интересную информацию в совершенно неожиданных местах, пользоваться опытом людей с совершенно другими мозгами, но которые искали примерно то же.

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

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



  1. Барьер на вхождение, когнитивная стоимость. Барьеры на вхождение снимаются, поскольку для начала работы (классифицирования) не нужно обладать знанием о существующем классификаторе. Участвовать может каждый, потому что это просто.
  2. Обратная связь и асимметричная коммуникация. Обратная связь от пользования фольксономией мгновенна. После того, как вы назначили объекту таг, вы тут же видите, что ещё помечено другими людьми тем же тагом, сколько людей пометили этот объект и как ваши таги пересекаются. Вы можете подогнать свои таги — или наоборот повлиять на групповую норму в отношении тагов или объектов. Такая обратная связь пыриводит к асимметричной коммуникации между пользователями посредством метаданных.




Про фолксономии уже писал, испульзую обе системы более полугода: и букмарки, и картинки. Тэгролл слева, равно как и flickr-badge являются результатом этого использования(генерятся автоматически, - потребовалось лишь подправить шаблон blogger).


Technorati Tags: , ,

24 березня 2006

Выдержка из .bashrc

Приведу выдержку из ~/.bashrc с internet-сервера под управлением fc4:


alias hg='history|grep'
alias hgi='history|grep -i'
alias tm='tail -f /var/log/messages'
alias tmg='tail -f /var/log/messages|grep -i'
#squid
alias tsal='tail -f /var/log/squid/access.log'
alias tsalg='tail -f /var/log/squid/access.log|grep '
#qmail
alias tql='tail -f /var/log/qmail/smtpd/current |/usr/local/bin/tai64nlocal'
alias tpl='tail -f /var/log/qmail/qmail-pop3d/current |/usr/local/bin/tai64nlocal'
#iptables
alias iptw='watch iptables -nvL '
alias iptL='iptables -nvL'
alias iptS='iptables-save'
alias iptSs='iptables-save > ~/iptables.before.`date +%s` && ll ~/iptables.before.`date +%s`'
alias iptSg='iptS|grep -i'
alias iptR='iptables-restore'
complete -W "{point,sirius,local}{_in,_out} INPUT OUTPUT FORWARD PREROUTING POSTROUTING" iptables iptL iptw
complete -W "`chkconfig --list|awk '{print $1}'`" service
#для сохранения даты и времени
export HISTTIMEFORMAT="%F %T "
#сколько строк хранить в истории
export HISTSIZE=100000
export HISTFILESIZE=100000


Почти все придумано мною, после прочтения материалов, написанных мудрыми юниксоидами..

Technorati Tags: , , ,

23 березня 2006

Far - швейцарский нож админа

Многие плагины могут быть вызваны из командной строки, используя соответсвующий префикс, немного примеров:

plist:\\win_server - ProcList(std)
reg:\\win_server - FarReg
svc:\\win_server - FarSvc
net:\\win_or_samba_server - Network(std)
ftp://user:passwd@ftp_server - FTP(std)


Комментарий от 200603241341:
Для успешного подключения к удаленным хостам, используя префиксы plist: и reg: , требуется запущенная "Служба удаленного управления реестром"(RemoteRegistry). Опросить удаленно статус службы, равно как и запустить ее, можно с помощью утилиты sc(Service Control). В моем случае:

F:\Program Files\Far>sc \\bspserver query remoteregistry

SERVICE_NAME: remoteregistry
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,
IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0




Это весьма удобно(мы имеем возможность быстро подсоединяться к любой машине домена, имея права, конечно же), но будет еще более удобней, если определить синонимы, используя Named Folders:
Команда cd::abc::x
позволяет создать псевдоним x для директории эмулируемой
файловой панели другого плагина.
abc - префикс, который открывает этот плагин,
например, "ftp://ftp.rarlab.com/", "reg:" и т.д.)

Как я использую:

Определил:
psbsp->plist:\\bspserver
psi5->plist:\\ivc005
regbsp->reg:\\bspserver
scbsp->svc:\\bspserver
sci5->svc:\\ivc005
bspc->\\bspserver\c$
bspe->\\bspserver\e$
bspsc->svc:\\bspserver
bspps->plist:\\bspserver
...
Вызываю следующим образом:
cd:ps - выпадает меню
cd:scbsp - управляю службами на \\bspserver
cd:bsp - снова меню, но уже помощнее..
cd:bspd\home\dron - аналог команды cd \\bspserver\d$\home\dron
...


Хотелось бы заметить, что использую я NamedFolders версии 1.48, потому как размер актуальной версии (365 Kб) меня пугает(вероятно, размер определяется используемым компилятором, а новая M$VS увеличила его на порядок - с 39Кб до 365 Кб), к тому же версия опубликованная на far-plugring, у меня не работала в принципе, фар выругался на ошибку загрузки модуля.


Technorati Tags: , , ,

Мои скрипты: Squid Cache Client(scc.pl)

Это мой втрой по счету сценарий написанный на тогда еще не знакомом perl.

#!/usr/bin/perl -w
#@description: simple squid-cache client v1.0b
#@author: areus/at/users.sf.net
#@date: 20030719
use strict;
use IO::Socket;
use Getopt::Std;

#main
unless (@ARGV) {
&do_print_usage;
exit 0;
}

my %option = ();
getopts("hs:alDo:", \%option);
my $verbous = 1 if $option{D};
$option{o} = "-" unless defined $option{o};
open(STDOUT, "> $option{o}") or
die "Can't open $option{o} for output: $!\n";

if($option{a}) {
&do_print_all_stat;
exit 0;
}
if($option{l}) {
&do_enum_stat_names;
exit 0;
}
if($option{"s"}) {
print do_squid_cache_request($option{"s"});
exit 0;
}
if($option{"h"}) {
&do_print_usage;
exit 0;
}

#end of main
sub do_get_request {
my ($sock, $query) = @_;
die "Fatal: no open socket" unless($sock);
$query = "GET $query HTTP/1.0\r\n\r\n";
my $response;
warn "Sending request [$query]" if $verbous;
print $sock "$query";
$response.=$_ while(<$sock>);
my ($header, $content) = split("\r\n\r\n", $response);
return ($content);
}

sub do_squid_cache_request {
my $sock = open_socket(3128, "localhost", "TCP");
die "Fatal: Couldn't connect to squid" unless($sock);
my $resp =
do_get_request($sock, "cache_object://localhost/$_[0]");
close $sock;
return $resp;
}

sub open_socket {
my ($port, $dest, $proto) = @_;
my $remote_sock = IO::Socket::INET->new(
Proto => $proto,
PeerAddr => $dest,
PeerPort => $port,
#TimeOut => $timeout
) or print "Can't open connection to
$dest port $port because: $!\n";
$remote_sock->autoflush(1) if $remote_sock;
return($remote_sock);
}

sub do_print_all_stat {
my $items = do_squid_cache_request "menu";
my @cols;
foreach my $row (split("\n", $items)) {
@cols = split "\t", $row;
$_ = $cols[0];
if ($cols[2] =~ m/public/i) {
print "\r\n".("*" x 20)."\r\n*";
print "*$_\t$cols[1]\r\n";
print(("*" x 20)."\r\n*");
s/\s//g;
print do_squid_cache_request($_);
}
}
}

sub do_enum_stat_names {
my $items = do_squid_cache_request "menu";
my @cols;
foreach my $row (split("\n", $items)) {
@cols = split "\t", $row;
$_ = $cols[0];
print "$_\t$cols[1]\r\n" if ($cols[2] =~ m/public/i);
}
}

sub do_print_usage {
print( "Usage: $0
-h: this help
-s <stat_name>: print info only for <stat_name>
-l: list all avaible stat_names
-a: print all stats
-D: turn on debug-messages
-o <outfile>: output file
Examples:
$0 -a -o all_cache_stat.txt
$0 -s client_list
$0 -s info
--
bugs and suggestions to areus/at/users.sf.net
");
}


Если вывод команды scc.pl "запайпить" на следующий сценарий:

#!/usr/bin/perl -w
#rate_squid_clients.pl
use Socket;

my ($addr, $name, $http_req_count, $cur_conn_count) = ();
my %clients;

while(<>) {
if(/^Address:\s+(\d+\.\d+\.\d+\.\d+)/) {
$addr = $1;
$_ = <>;
if(/^Name:\s+(.*)/) {
$name = $1;
$_ = <>;
if(m/Currently\s+established\s+connections:\s+(\d+)$/) {
$cur_conn_count = $1;
$_ = <>;
$_ = <>;
if(/HTTP\s+Requests\s+(\d+)$/) {
$http_req_count = $1;
$_ = <>;
$iaddr = inet_aton($addr);
$host = gethostbyaddr($iaddr, AF_INET);
$addr=$host if $host;
#warn $addr;
@{$clients{$name}} =
(
$addr, $http_req_count, $cur_conn_count);
}
}
}
}
}
foreach my $n ((sort {
${$clients{$b}}[2] <=> ${$clients{$a}}[2]
||
${$clients{$b}}[1] <=> ${$clients{$a}}[1]
} keys %clients)) {
printf("%16s %16s %10d %4d \r\n", $n,
${$clients{$n}}[0],
${$clients{$n}}[1], ${$clients{$n}}[2])
;
}

то получим примерно следующее:

$ssc.pl -s client_list|./rate_squid_clients.pl |head -n 10
192.168.100.183 snab006.bstp 11544 4
192.168.100.223 admin002.bstp 28865 1
192.168.100.29 ivc009.bstp 12291 1
192.168.100.83 snab01.bstp 4473 1
192.168.100.25 ivc005.bstp 31936 0
192.168.100.103 peo004.bstp 17186 0
192.168.100.162 gmssb002.bstp 11771 0
192.168.100.11 pc10666.bstp 10812 0
192.168.100.6 pc10052.bstp 7589 0


т.е. top-10 активно работающих машин.


Technorati Tags: , , ,

Мои скрипты: Folders Chart (fcex.js)

Этим постом открываю рубрику "Мои скрипты".
Идея данного сценария родилась еще во время учебы в ariu в 2001 году, тогда сценарий выглядел так:

Set fso = CreateObject("Scripting.FileSystemObject")
set fld=fso.getFolder(".")
Set objXL = WScript.CreateObject("Excel.Application")
objXL.Workbooks.Add
objXL.Cells(1,2).Value = 10
objXL.Cells(1,3).Value = 15
i=1
for each f in fld.subfolders
objXL.Cells(i,1).Value = f.name
objXL.Cells(i,2).Value = f.size
i=i+1
next
objXL.Range("A:B").Select
objXL.Selection.Sort objXL.Range("B1")
Set objXLchart = objXL.Charts.Add()
objXLchart.Type = 5
objXL.Visible = True

Для удобства вызова я создал сценарий-обертку:

::chartex.cmd
cscript.exe "%ProgramFiles%\Far\bin\fcex.js"

Положил его в папку, которая находится в списке %PATH%. Теперь чтобы получить распределение занятого места в текущей папке, я набираю в командной строке chartex. Итак код сценария:

//Folders Chart
//dron@bcsp v1.1 200501121713
//description: draws folder chart
var nLevel=0;
var bDebug = true;
function debug(sStr){
if(bDebug)WScript.echo(sStr);
}

var MB = 1024*1024;
var MARGIN = 1/4

function drawFolderChartEx(oExcel, oFold, oFSO, oSh){
debug(oFold.Path);
var wb;
var sh;
var oFld;
var sName="";


with (oExcel) {
wb = (Workbooks.Count == 0)?Workbooks.Add():ActiveWorkbook;
sh = wb.WorkSheets.Add();
sName = oFold.Path.replace(/[\\:]/g,"_");
if(sName.length > 30) {
sName = sName.replace(/.*(.{27})$/,"...$1");
debug(sName);
}
sh.Name= sName;
Application.DisplayAlerts = 0;
Visible = 1;
var s=0;
var i=1;
Cells(i,1).Value = "'Checking.";
for (var e = new Enumerator(oFold.Files);
!e.atEnd();
e.moveNext())
{
s+=e.item().Size;
Cells(i,1).Value += ".";
}
Cells(i,1).Value = "'."
Cells(i,2).Value = /*parseInt(*/s/MB/*)*/;
Cells(i++,3).FormulaR1C1 = "=R[0]C[-1]/R1C4";
//i = 2;
for (var e = new Enumerator(oFold.SubFolders);
!e.atEnd();
e.moveNext())
{
try {
Cells(i,1).Value = "'" + e.item().Name;
debug(Cells(i,1).Value);
Cells(i,2).Value = /*parseInt(*/e.item().Size/MB/*)*/;
Cells(i++,3).FormulaR1C1 = "=R[0]C[-1]/R1C4";
s+=e.item().Size;
} catch(ex) {}

}
Cells(1,4).Value = s/MB;
sh.Range("A:B").Select();
Selection.Sort(sh.Range("B1"), 2);
var oChart = Charts.Add();
oChart.Type = 5;
debug(i);
for (var j=1;j<i;j++){
if(sh.Cells(j,3).Value > MARGIN && sh.Cells(j,1).Value != ".") {
debug("recursive call: " + sh.Cells(j,1).Value +
" level: "
+ ++nLevel);
oFld = oFSO.GetFolder(oFold.Path + "\\" + sh.Cells(j,1).Value);
sh.Cells(j,5).Value = oFld.Path;
drawFolderChartEx(oExcel,oFld,oFSO);
nLevel--;
}
}
}
}

var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFold = oFSO.GetFolder(".");
var oExcel = new ActiveXObject("Excel.Application");

drawFolderChartEx(oExcel, oFold, oFSO);


Сценарий рекурсивно будет чертить график распределения по текущей и каждой дочерней подпапки, размер которой составляет более MARGIN % родительской папки.

У меня это выглядит так:


Technorati Tags: ,

И снова про Far

Сегодня день моего увольнения из Бердянского Морского Торгового Порта. Позавчера решил все-таки установить Windows(не пропадать же лицензии), к слову, как раз в это время, год назад, я установил SLES9, после месячной работы, заказал ALT-Linux на lafox.net, и вскоре окончательно снес Windows. Окончательный мой выбор пал на Novell Suse Linux - до сих пор считаю его лучшим пользовательским дистрибутивом. Работая в разных дистрибутивах, я выяснил для себя, что возможность тотальной перенастройки/настройки всего и вся в linux весьма губительна, по крайней мере для меня... К тому же, ceteris paribus, огнелис работает в РАЗЫ медленнее(уповаю на субъективность) при одинаковых наборах расширений. Чего мне всегда не хватало, так это Far'а, точнее даже его редактора, с colorer'ом true-templatе'ом extsearch'ем, c Ctrl+[, с Shift+Enter, и многими другими выдающимися способностями(типа сдвигов вертикальных помеченных блоков). Да, я познакомился с emacs, имею базовые понятия в elisp, но лучшим для меня по сей день является именно редактор Far. Некоторое время назад я уже описывал свое использование colorer в Linux, в частности для генерации html кода, подсвечивающего синтаксис. Ранее я не замечал большинства возможностей супер-плагина, идущего в стандартной поставке - FAR Commands. Так вот, сегодня представляю "порт" скрипта генерации подсветки под windows:

clip:<colorer.exe -dc -dh -h "filename"

Добавив команду в пользовательское меню(по F2),
я немного упростил его вызов, к тому же так проще создать макрос.

Technorati Tags: , ,

22 березня 2006

Microsoft Windows Management Interface (WMI)

Весьма содержательный ресурс, посвященный Microsoft Windows Management Interface (WMI).


Technorati Tags: , ,

Нарисуйте мне bootchart, нарисуйте

Bootchart'ы, которые чертились мною в недавнее время:

С ноута (SuSE 9.3 Pro):

bootchart.paxn, originally uploaded by andreipak.



Моей рабочей машины (SuSE 9.3 Pro):

bootchart.tserver 18.10.2005, originally uploaded by andreipak.



"Рендерилось" все это с помощью следующей "магической" команды:

curl -vv --form format=png \
--form log=@/var/log/bootchart.tgz \
http://render.bootchart.org:8080/bootchart/render \
> bootchart.`hostname`.png

curl рулит :).

20 березня 2006

Cypress - блог о dotnet и других технологиях, включая monad

.Cypress
Блог одного человечка, который считает себя программистом!
Довольно молодой и в то же время содержательный блог, посвященный Microsoft .Net и в частности C#. В одном из постов с ссылками на ресурсы о революционном командном интерпретаторе от microsoft, была обнаружена интересная ссылка на русскоязычный  материал - Обзор Windows Monad Shell (часть 1)
К слову, в конце февраля вышла уже beta-3, не за горами релиз, да и возможности shell под кодовым названием monad, действительно впечатляют - особенно тесная интеграция с ADSI, WMI и COM.

Дополнительные ссылки по теме:
Technorati Tags: , , ,

08 березня 2006

"Промениста Мрійкотвірка" від Psyshine


18.03.06 (Суббота) "Промениста Мрійкотвірка" від Psyshine - PsyZone.ru

Після тривалого часу зануреного самоспоглядання повний наснаги Psyshine Records розпочинає свій новий сезон 2006. Приєднуйтесь до нашого свята весни і тепла на вечірці "Промениста Мрійкотвірка".
...
Діджеї:
...
Dimitro (Euphoria Promo, Бердянськ)
gree_shanti (Euphoria Promo, Бердянськ)
...
Майте на увазі: Перші 50 осіб отримають на вході безкоштовно концентрований заряд бадьорості і піднесення
(схвалено Міністерством охорони здоров'я України).


- цiкаво, що ж це за концентрований заряд?? :)

А ще хлопець, що презентував цей лінк , надiслав лінк на дуже цiкаву книжку - МАЙКЛ ТАЛБОТ - "Голографическая вселенная":

Если соединить теории Бома и Прибрама, мы получим радикально новый взгляд на мир: наш мозг математически конструирует объективную реальность путем обработки частот, пришедших из другого измерения – более глубокого порядка существования, находящегося за пределами пространства и времени. Мозг – это голограмма, свернутая в голографической вселенной.

Для Прибрама данный синтез означал, что объективный мир не существует – по крайней мере в том виде, к которому мы привыкли. За пределами привычного мира находится огромный океан волн и частот, в то время как реальность выглядит вполне конкретной только благодаря тому, что наш мозг преобразует голографические пятна в палки, камни и другие знакомые объекты, составляющие наш мир. Как мозгу (который сам состоит из частот материи) удается из таких нематериальных сущностей, как частотное пятно, синтезировать нечто, кажущееся твердым на ощупь? «Математический процесс, который Бекеши смоделировал с помощью своих вибраторов, является основополагающим для понимания того, как наш мозг конструирует образ внешнего мира», – утверждает Прибрам [17]. Другими словами, гладкая поверхность фарфоровой чашки и ощущение песка на берегу под ногами на самом деле всего лишь утонченная версия синдрома фантомных болей.

Согласно Прибраму, это не означает, что не существует фарфоровых чашек или песка на берегу. Это просто означает, что фарфоровая чашка имеет два совершенно различных аспекта своей реальности. Когда она пропускается через линзы вашего мозга, она проявляет себя как чашка. Но если снять эти линзы, мы ощутим ее как интерференционный паттерн. Какой из этих образов истинный, а какой ложный? «Истинны оба, – говорит Прибрам, – или, если хотите, оба ложны»
...
Если бы каждый из нас имел доступ к знаниям, накопленным всем человечеством и запрятанным в подсознании, мы все были бы ходячими энциклопедиями. Психолог Роберт Андерсон из Ренслерского политехнического института в г. Трой (штат Нью-Йорк) считает, что мы можем получать только ту информацию импликативного порядка, которая непосредственно связана с нашей памятью. Андерсон называет этот селективный процесс персональным резонансом и сравнивает его с вибрацией камертона, который будет входить в резонанс с другим камертоном, только если второй камертон имеет подобную структуру, форму и размеры. «Благодаря персональному резонансу сравнительно малое число из почти бесконечного набора "образов" импликативной голографической структуры вселенной доступны персональному сознанию человека, – говорит Андерсон, – поэтому, когда просветленные личности достигали единого сознания много столетий назад, они не писали теорию относительности, как Эйнштейн, а использовали свой опыт» [2].


читаю із превеликим захопленням.. До того ж на сайті ще багато цікавих книжок.

Technorati Tags: , , , , ,

07 березня 2006

Создан продукт Accelerated Knoppix, отличающийся значительно уменьшенным временем загрузки.


OpenNews: Вышла версия Knoppix нацеленная на уменьшение времени загрузки
На базе LiveCD Knoppix создан продукт Accelerated Knoppix, отличающийся значительно уменьшенным временем загрузки.

Оптимизировав скрипты для автоопределения типа оборудования и проведя корректировку блоков данных для файловой системы cloop, удалось сократить время загрузки до 60 секунд, что в два раза меньше стандартного Knoppix.


Вижу связь с другим японским приложением bootchart'a к knoppix'у:
kernel2.6 (512MB, BootTime 3:48)

kernel2.6 + readahead (512MB, BootTime 2:45)


Японцы ускоряют knoppix, и изощряются с xen, создавая Xenoppix'ы, которые позволяют грузить даже несколько гостевых ОС(NetBSD, Plan9) или грузить Knoppix из windows, используя coLinux в связке с cygwin/X.

Technorati Tags: , ,