Mu/\EHHuyM
Всех с Новым годом, счастьем и всем прочим, с чем принято поздравлять при смене года и тысячелетия. :) Надеюсь, всем удалось отдохнуть.
Прошу прощения за молчание в весь период праздника Нового года, но, в конце концов, могу я расслабиться или нет?
Честно говоря, расслабиться в этот Новый год не получилось, не позволил туго набитый едой живот. Наученные предыдущим горьким опытом прогулок по праздничному городу, мы, с моей женой, решили на этот раз не толкаться на заполненных до отказа народом улицах, а набрать побольше еды (долларов на 50) и, засев перед телевизором, провести весь праздник вдвоем. Можно считать, что праздник удался. :) Жаль только, что наша маленькая кошка Кошмарка уронила бутылку шампанского, которое немедленно вспенилось и мне, успевшему его подхватить, посчастливилось оценить всю красоту шампанского, выстреливающего в крышку стола и льющегося обратно. На ковер. :)
Наверное сделала это специально, чтобы потом вылакать. :)
Хотя вспомнить
Время есть. И пить.
Базы данных. Наведем порядок
Устав бороться со своей и чужой ленью, я решил принять
Естественно, что файл предназначен для описания достаточно небольших баз данных (менее 7—10 таблиц). В этом случае больших баз без хорошо составленной наглядной документации все равно не обойтись. Не надейтесь. :)
Четкий формат представления имеют пока только таблицы, в силу того, что остальными объектами приходится пользоваться достаточно редко, да и синтаксис их описания различается для разных СУБД, но, возможно, в следующих версиях формата появятся правила и их описания тоже.
Вот пример описания двух таблиц, связанных между собой
[/usr/local/pgsql/bin/psql eshop]
items / товары
-----------------------
id serial / идентификатор
gid int4 / категория товара -> group.id
name text / наименование
price real / цена
comment text / описание товара
CREATE INDEX items_price_idx ON items (price)
group / категории
-----------------------
id serial / идентификатор -> items.gid
parent int4 / родитель в дереве. -1, если верхний уровень -> id
name text / наименованиеДумаю из примера и так все понятно, но я
Строчка, заключенная в квадратные скобки, — команда, принимающая данные. Пустые строки и строки, начинающиеся с двух минусов игнорируются. В абзаце, где описывается таблица, первым идет ее имя, ниже — описания ее полей: наименования, через табуляцию тип. В конце каждой значимой строки через пробел и слеш находится ее краткое описание.
Инструкции заведения секвенсоров, представлений и хранимых процедур записываются в одну строку.
Так как формат файла представлений достаточно легко может быть разобран и преобразован в команды мониторов mSQL, PostgreSQL и MySQL я, пару дней назад, выбрав время, написал небольшую программку на Перле. Правда толком ее еще не обкатал, но не думаю, что с ее эксплуатацией возникнут
Интепретатор файлов таблиц: intp.pl
#!/usr/bin/perl
sub StripComment
{
my ($line) = @_;
unless ($line=~s{^([^/]*)\s+/.+}{$1}o)
{
print "Предупреждение: не указан комментарий [ $line ].\n"
unless ($line=~/^CREATE/o);
};
return $line;
};
sub AddData
{
my ($table, @query) = @_;
my $query = join ',', @query;
my $result = '';
if ($todrop)
{
for (@query)
{
if (/([^ ]+) serial$/)
{
$result.= "DROP SEQUENCE ${table}_${1}_seq\\g\n";
last;
};
};
$result.= "DROP TABLE $table\\g\n";
};
$result.= "CREATE TABLE $table ($query)\\g\n";
return $result."\n";
};
sub AddDrop
{
my $table = $_[0];
if ($todrop && $table=~/^CREATE ([^ ]+ +[^ ]+)/o)
{
return "DROP $1\\g\n$table\\g\n";
} else
{
return "$table\\g\n";
};
};
unless (open F, (shift or '.tables'))
{
print <DATA>;
die "\n"
};
@query = ();
$table = '';
$result = '';
$comm = '';
$todrop = shift or 0;
while (<F>)
{
chomp;
next if ($_ eq '' || /^\-\-/);
if (/^\[(.+?)\]$/)
{
$comm = $1;
next;
};
@data = split (/ +/,StripComment $_);
if (@data < 2)
{
$result.= @query?AddData($table, @query):AddDrop ($table)
if ($table ne '');
$table = $data[0];
@query = ();
} else
{
push @query, "$data[0] $data[1]";
};
};
close F;
$result.= AddData ($table, @query) if (@query);
if ($result ne '')
{
if ($comm ne '')
{
open F, "|$comm";
print F "$result\\q";
close F;
} else
{
print "Ошибка: не указана команда для приема данных.";
};
} else
{
print "Ошибка: файл для обработки пуст.";
};
__END__
Интерпретатор файлов таблиц для СУБД.
Написал Евгений Степанищев (2000 год).
Использование: inpt.pl имя_файла [DROP]
DROP - предварительно сделать DROP для таблиц и SEQUENCE
Формат:
-- БД stat комментарий
tablename / описание имя таблицы
--------------------- оформительский элемент
поле1 тип / описание поля таблицы,
поле2 тип / описание описание интепретатор игнорирует
и т.д.
[/usr/local/mysql/bin/mysql stat] комманда, принимающая данныеP.S. Если
P.P.S. Вышеописанное ни в коем случае не претендует на панацею и всеобъемлющий инструмент, а всего лишь на роль мелочи, которая поможет избежать некоторых возможных трудностей.
Хибер. Нате
Жаль, но в то время эта задача была практически невыполнимой, а то бы я, возможно, уже сказочно разбогател. :) Или не я. Вряд ли мне принадлежит первенство в рождении этой идеи. Как показала практика, трудность не в сохранении дампа базовой (как тогда это называлось) памяти и содержимого XMS, да и с сохранением состояния контролера клавиатуры и прерываний (как не странно некоторые игры перепрограммировали и то и другое) я бы справился. Мне помешал защищенный режим и оставшееся оборудование.
Сначала на моем пути встал EMM386, этот менеджер VCPI— и EMS-памяти переводил процессор в защищенный режим (protected mode). Программировать под него я не умел, но из того, что знал, я сделал, может быть ошибочный, вывод — я не смогу после восстановления состояния компьютера сделать «так как было». Я решил на защищенный режим «забить» и загружать содержимое EMS уже после старта DOSа и самого EMM386. VCPI я не трогал, да он нигде и не использовался.
Потом появился DOS4GW. Его требовали DOOM и другие игрушки. Эта библиотека (или как это еще назвать?) так же использовала для своих темных дел защищенный режим. Я узнал слово «DPMI». С DPMI так же легко как с EMS я работать не умел, не было документации. Это стало первым гвоздем в гроб моей идеи.
Вторым, и последующими гвоздями, оказалось оборудование. Слово драйвер тогда рождало несколько другие ассоциации, ни о какой универсализации работы с оборудованием речи не шло. Так что нелегкий труд по опросу и сохранению состояния
Шли годы…
Незаметно появилась и вошла в нашу жизнь ОС Windows. Операционная система встала над защищенным режимом. Слово «драйвер» получило другой смысл, прослойка между операционкой и оборудованием… Слова XMS, EMS и VCPI стали забываться, а DPMI — расшифровываться
Идея «
«Здорово», — подумал я, и отправился в недра настроек своей W2K — искать, где у меня спрятан этот самый режим. Найти с первого раза мне его не удалось. Пришлось идти в большой Интернет и читать. Все оказалось просто. Оказывается, по умолчанию возможность использования этого режима отключена. Так исторически сложилось. А для его включения необходимо выполнение двух условий:
- все оборудование, включая материнскую плату, должно уметь работать с ACPI;
- BIOS, который на этот самой плате стоит так же должен знать, что это такое.
Выяснить, как дело обстоит у вас просто — достаточно зайти на «Панель управления» («Control Panel»), там найти «Управление энергопитанием» («Power») и посмотреть, есть ли у вас закладка «Hibernate». Если есть — включайте режим, в списке «
Мне повезло. У меня машина «белой сборки» IBM-IntelliStation-
Ссылки по теме
Hibernate и Win2000
Hibernate и Windows 98
Технология Hibernate и Win2000
Как звери друг друга били. Найдено в FIDO
Медведь был безобразным, косолапым и грязным животным. Однако, добрее его не было никого во всем лесу. Hо звери замечали только его внешность, на что Медведь жутко обижался, ловил их и жестоко избивал ногами. Поэтому звери его не любили. Хотя он был очень добрым. И веселым. Он любил задорные шутки. За эти шутки звери его скоро жутко возненавидели и били. Да, трудно быть на свете добрым и веселым.
Волк был тоже безобразным и грязным. И еще он был очень злым и жестоким. Hо звери не испытывали к нему ненависти и не били. Потому, что Волк умер еще в раннем детстве. Потому, что Медведь родился раньше Волка. Да, хорошо, когда Добро побеждает Зло.
Заяц тоже был злым и жестоким. И грязным. И еще он был трусливым. Гадостей Заяц никому никогда не делал. Потому, что боялся. Hо его все равно сильно били. Потому, что Зло всегда должно быть наказано.
И Дятел тоже был злым и жестоким. Он не бил зверей, потому, что у него не было рук. Поэтому, он вымещал свою злость на деревьях. Его не били. Потому, что не могли дотянуться. Однажды его придавило насмерть упавшее дерево. Поговаривали, что оно отомстило. После этого звери целый месяц боялись мочиться на деревья. Они мочились на Зайца. Заяц простудился и умер. Всем было ясно, что во всем был виноват Дятел. Hо его не тронули. Поскольку не смогли выковырять
Крот был маленьким и слепым. Он не был злым. Он просто хорошо делал свое дело. Это он подъел дерево, которое упало на дятла. Об этом никто не узнал, и поэтому его не избили. Его вообще били редко. Чаще пугали. Hо его было очень трудно испугать, потому что он был слепой и не видел, что его пугают. Когда не удавалось испугать Крота, звери очень огорчались. И били Медведя. Потому, что им было очень обидно. Однажды Медведь тоже захотел испугать Крота. Hо Крот не испугался. Потому, что Медведь его убил. Нечаянно. Просто Медведь был очень неуклюжим. И звери его очень сильно избили. Даже, несмотря на то, что Медведь сказал, что пошутил. Плохо, когда твои шутки никто не понимает.
Лиса была очень хитрой. Она могла запросто обхитрить кого угодно. Когда ей это удавалось, то ее не били. Hо иногда ей не везло. И ее били. Били всем лесом. И она уже не могла
Кабан был большой, сильный и страшный. Его все очень боялись. И поэтому его били только всем лесом. Или просто кидали в него камнями. Кабан этого очень не любил. И однажды ночью он спрятал все камни в лесу. За это его очень сильно избили. Больше Кабан никогда не прятал камни. Воистину говорят — время собирать камни и время их не трогать никогда.
Козел не был ни злым, ни добрым. Он был просто Козел. Он часто козлил. И его боялись бить. И он своим козловством всех достал. И тогда его избили до смерти. Потому, что иначе он бы умер от старости.
Ежик был маленький и колючий. Он кололся. Он не был злым, он кололся по своей природе.
Скунс был почти таким, как Заяц. Hо только очень вонючим. Он плохо пахнул. Его били только в полиэтиленовом пакете. Тогда запах был не такой сильный. Однажды у Скунса был день рождения. Он пригласил всех зверей, потому, что был жадным и любил подарки. И звери подарили ему новый полиэтиленовый пакет. И сильно избили до потери сознания. И Скунс задохнулся в пакете. Так его и похоронили. В пакете. В Очень Дальнем Лесу. Потому, что мертвый Скунс вонял еще сильнее. Потом пришли жители Очень Дальнего Леса и всех сильно избили. Им не понравился запах мертвого Скунса. Да, с соседями надо жить в мире.
Хомяк был тоже очень жадным. И богатым. Если бы он делился своим богатством, его бы били не так сильно. Hо он был очень жадным. За это его били сильно. И ему все равно приходилось делиться. И он горько плакал. Да, богатые тоже плачут.
Лев был царь зверей. Он правил лесом. Царей бить не положено. Это закон. Hо звери давно забили на закон. Звери били и льва. Hи за что. Потому, что так уж здесь повелось.
Всех с Рождеством. Новый TheBAT! и PostgreSQL
Что поделать? Опять праздники, я, право, не виноват. В конце концов, могу же я отдохнуть еще разок? Рождество — штука странная. Вроде, в Рождество родился Христос, так? Причем, по разным версиям, родился либо
Тем не менее, всех вас с уже неоднократно прошедшим Рождеством, сами уж разберитесь, кого с каким. :)
Кроме того, из приятных (по крайней мере для меня) новостей на сегодня — выход так мной ожидаемой версии 7.1 СУБД всех времен и народов — PostgreSQL (поклонникам Oracle, Informix и прочего просьба не беспокоить). Правда это еще beta3, но скорость, с которой эти самые беты появляются, вселяет надежду на скорый выход релиза. Ждал я выхода этой версии по одной простой причине — в этой версии (уже начиная с beta2) тип поля text
Кстати, о временах и народах.
На этом, разрешите откланяться, у моего хорошего друга сегодня день рождения, люди ждут. :)
PalmOS. Секурность
Похоже, есть вещи, которым люди никогда не научатся. Одна из таких вещей — анализ чужих ошибок. Ну, казалось бы, о безопасности, паролях и необходимости выбора «сильного» алгоритма шифрования уже столько сказано… Так нет, уважаемая мной фирма, производящая операционку PalmOS для «наладонников», допустила такой досадный промах.
В базовых приложениях этой ОС есть возможность пометить часть данных как «Private», закрыв их от любопытных глаз паролем. Само собой, пароль хранится
Такого шока я не испытывал с тех времен, когда обнаружил, что хваленая утилита из комплекта Norton Utilites (DiskReet, кажется), позволяющая создавать диск с доступом по паролю, хранит этот самый пароль также за’xor’енным по константе.
Будем надеяться, фирма Palm хватится за голову или другое место (чем они там придумывали этот алгоритм шифрования?) и выпустит в скором времени патч, предотвращающий дешифрование пароля обратным преобразованием. А пока, владельцам «наладонников» с PalmOS рекомендуется запирать свой Palm и не давать его в руки злым кул хацкерам.
P.S. А вы говорите WindowsCE…
26-й кадр
Ребята, ну не верю я в магическое воздействие на сознание человека штуки, под названием
Что вообще известно об этой «технологии»?
Я сейчас сижу на работе, за монитором
Лично для меня
Теперь о том, что слова, написанные в этом самом кадре, воспринимаются подсознанием, как сигнал к действию.
Первое. Как не удивительно, в бывших союзных республиках есть люди, которые умеют понимать устную речь
Второе. Даже если фраза проскочила мимо сознания в подсознание, не факт, что она воспримется так, как того хотели люди, туда ее внедрившие. Я бы даже сказал, совсем не факт. Знаете почему? Потому что это текст, а не речь, он печатный. Вы
Пример.
Третье. В нашем мире «картинка» перед глазами часто меняется очень быстро. Так, что сознание «зацепить» ее не может. Например, близкостоящие деревья за окном автомобиля, несущегося на солидной скорости. Да, то, что это деревья — видно, а вот какие, сидят ли на них птицы? Информация об этом в сознание не попадает, тогда должна, по той же идее, попасть в подсознание и заставить меня
P.S. Кстати, в фильме «Бойцовский клуб», есть кадр, который появляется на экране только одно мгновение — за спиной человека, сидящего на стуле, появляется девушка (кажется в красном, давно смотрел не помню), держащая руку на плече сидящего, и тут же исчезает. Возможно, в кассетной версии этого момента нет, я не знаю.
Гагаузы
Вчера, просматривая найденные ссылки
Я просмотрел 380 ссылок, выданных мне Yandex’ом, но узнал совсем немного. Гагаузы — небольшой народ, проживающий, в основном, на территории Молдавии (3,5% процента за 1990 г), Украине и Российской Федерации. Общая численность на 1992 год 220 тысяч человек.
Что еще? 99% источников говорят о том, что гагаузы — православные и только сайт Ethnomuseum утверждает, что…
- конфессиональная принадлежность: Ислам: суннизм;
- языковая принадлежность: Алтайская семья: тюркская группа: гагаузский язык.
Правда, у меня к нему доверия мало. Татар (а я живу в Татарстане) сайт относит:
- конфессиональная принадлежность: Христианство: католицизм, протестантизм;
- языковая принадлежность: Индоевропейская семья; славянская группа; польский язык.
Это, конечно, весьма любопытно, учитывая, что национальная религия татар — мусульманство. И, лично мне, непонятно, как язык, построенный на суффиксах (или как там это называется), попал в славянскую группу. Еще более непонятно, причем здесь польский язык. Татары разговаривают на татарском, который больше всего похож на турецкий.
Больше мне ничего найти не удалось, кроме разве что того, что флаг гагаузов — изображение белой полной луны и головы волка на голубом фоне.
P.S. Просматривая информацию о гагаузах, я случайно наткнулся на список национальностей, проживающих на территории бывшего СССР. Он наверняка не полный (например, нет русских :), но все же, очень любопытный. Никому не в обиду, как вам названьица «самоеды» и «зыряне»?
Народы: аварцы, аланы, алеуты, алтайцы, андийцы, армяне, арчинцы, балкарцы, бартангцы, башкиры, белорусы, бужане, булгары, буртасы, буряты, ваханцы, вепсы, вогулы, водяне, волыняне, вотяки, вятичи, гагаузы, греки, грузины, даргинцы, долганы, евреи, зыряне, ижорцы, ингуши, испанцы, ительмены, кабардинцы, казахи, калмыки, камасинцы, камчадалы, карагасы, каракалпаки, карачаевцы, карелы, касоги, кеты, киргизы, китайцы, коми,
Микромечта по Unix
Есть у меня маленькая мечта. Прикупить новый жесткий диск, старый поставить на вторую мою машину, что пылится в кладовке, поставить на нее Linux, соединить это все коаксиалом и делать все проекты исключительно дома.
Все что мне нужно от второй машины — это наличие там Apache, Perl, PHP, MySQL и PostgreSQL. Пока приходится довольствоваться одной, и при каждой переустановке Виндов, все настраивать заново. Занятие весьма утомительное. Или было таковым до вчерашнего дня.
Вчера я узнал о существовании некого проекта, поддерживаемого, как я понял, группой энтузиастов, который позволяет ставить на машину с Windows 95/98/NT/2000, Apache, PHP, Perl и MySQL при помощи одного файла setup.exe. Как я понимаю, там есть
Обойдусь пока тем что имею. Хотя мучаться и соблюдать совместимость с Unix мне порядком поднадоело. Вот сделаю рывок и прикуплю
P.S. Дистрибутив скачался, но оказался битым. :( i опять
Opera: три в одном
Вы любите многофункциональные вещи? Шампунь, бальзам и кондиционер в одном флаконе? Отвертка, плоскогубцы, нож в одном футляре?
Когда я узнал, что в, замечательный по своему потенциалу, браузер Opera будет встроен клиент ICQ, я не понял, зачем это нужно авторам браузера. Тем более, что этот самый клиент там абсолютно мертворожденный, неудобоваримый и, на мой взгляд, не обладающий должной функциональностью. Вдоволь поудивлявшись, я об этом забыл.
Недавно, запустив Opera, я вновь заинтересовался вопросом «зачем», и вспомнил одну вещь. Идея авторов Opera изготовить среду «все в одном» родилась не сегодня. В Opera есть
Стремление затащить «под крышу» удавшегося продукта
Судя по всему, разработчики из Opera corp. пошли по пути расширения количества сервисов продукта, наверное надеясь, что так его будет легче продать. Напоминаю, что
В этом я вижу причину рождения всего «универсального» и «многофункционального», что пытается
И не стоит, кстати, думать, что «бесплатная» Opera начнет в этом вопросе меняться в лучшую сторону. Почему? Потому что.
Из этого следует, что ничего не изменилось.
Подпункт первый. Почему Opera не поддерживала
Подпункт два. Чтобы продать побольше рекламы нужно распространить побольше копий. Вот и подумайте, что проще — распространить «пусть даже самый навороченный и супербыстрый браузер» или… Ну, вы понимаете.
Так что, увы. Opera так и останется навсегда браузером с хорошим потенциалом и кучей «шашочек». Пока
P.S. Кстати, для прикола, зайдите на opera.ru, а потом на opera.com.
Java и JavaScript. Близнецы или братья?
Сегодня, когда мне в триста тысяч двадцать седьмой раз сказали, что Java и JavaScript — это одно и тоже, я не выдержал, и решил высказаться со своей относительно высокой трибуны.
Господа! Java и JavaScript — языки разные, что я намерен сейчас доказать.
Большинство, в качестве защиты своей точки зрения, приводит такой аргумент, буквально: «посмотри на название, если ты не видишь сходства…» и т. д. Странная точка зрения, тем более, что это самое большинство вполне допускает, что C и C++ — языки разные. Разубеждать таких людей бесполезно, у них сформировалась своя точка зрения, менять которую они не собираются, в голове их путаница, и чтобы их еще больше запутать, я скажу, что JavaScript — это не один язык, а три. Есть JavaScript от Netscape, JavaScript от Microsoft, который еще называется JScript, и EMCAScript, который тоже является JavaScriptом. Вот эти три языка весьма похожи, хотя и не совместимы между собой полностью.
А теперь, собственно, перейдем к сути. Начнем с базового языка. Корни этих двух языков уходят
Простой пример на JavaScript:
function somefunct (s)
{
Arr = new Array (2)
var k = parseInt (s) + '99'
alert (k)
}вопрос к знатокам Java — какая из этих строчек, исключая скобки, не вызовет ошибки в интерпретаторе? Правильно, вызовут все. Думаю, лучшего доказательства и не придумаешь. Кстати, обратите внимание: в JavaScript точка с запятой элемент необязательный и ставится лишь там, где действительно нужна (например, после пустого цикла for).
Если кто не понял, тут я создал объект типа Array и переменную k. Преобразовал s в число, а потом сложил со строкой «99». В результате, опять получил строку и при помощи alert вывел на экран. Тут я подхожу к еще одному отличию JavaScript от Java: первый язык с нестрогой типизацией данных. Переменная в разные моменты времени может хранить строку, целое или любой другой объект. Кстати, строка, число и прочие типы в JavaScript являются объектом, а «базовые» функции — методами объекта Global. Чего не скажешь о Java. Да, и кстати, вспомните о том, как выполняется конкатенация в Java. И вот, проделайте мне еще такую штуку в Java:
Регулярные выражения:
function somefunct2 (s)
{
if (/\d+\s+/.test(s)) alert ('Ok!'); else
s = s.replace (/(\d)/g,'\\1!')
}99,9999% людей такое объяснение удовлетворит, а вот самые стойкие, знаю по опыту, приведут мне примеры блоков try и вызовов Java-методов из JavaScript в Netscape. Последовательно.
Блок try — catch поддерживается только JScript 5.0 и Netscape JavaScript 1.4, т. е. введение это довольно недавнее. Кроме того, этот блок имеет синтаксис отличный от принятого в Java. Наверное достаточно будет сказать о наличии у try, по крайней мере в версии от Microsoft, блока else при отсутствии finally, а так же о том, что catch возвращает специальный объект Error с двумя (в 5.5 — тремя) свойствами, что уже совсем никак не похоже на Java.
Теперь относительно вызовов Java-методов. Вызов Java-методов из JavaScript в NC называется LiveConnect и к самому языку непосредственного отношения не имеет. Пользуясь LiveConnect я, теоретически, могу вызвать Java из Flash, Flash из JavaScript, JavaScript и
Ну а самых упорных я отсылаю на сайты фирм Sun и Microsoft, где они, скачав себе документацию, смогут воочию убедиться в разнице между этими языками.
Microsoft is DEAD? А также warez
Новость дня — вся сеть Microsoft лежит в дауне. Не отвечают ни DNS-сервера, не Web-сайты, ни другие сервисы. Насколько я знаю, пока не поступило никаких комментариев от самой Microsoft, по крайней мере, мне не удалось найти ничего об этом в Интернете. Народ выдвигает предположения об атаках хакеров. Моя версия — чисто хардварные проблемы, в любом случае, правды мы все равно не узнаем. Просто интересно, как это объяснит Билл Гейтс и компания. Вот будет смешно, если никак. :)
Ну, а теперь, к менее важным новостям. MySQL 3.23 перешел в разряд стабильных.
А вот новость, которую я каждый раз жду с нетерпением. Вышла очередная версия программы удаленного администрирования через
Вот как раз открылся change log. Что у нас нового? Добавлен модуль PAM Authentication, добавлена поддержка групп в ACL-модуль, изменения в модуле DHCP, пофиксена пара багов. Качать!
А что у нас с FARом? Давненько там не был… А с Фаром у нас… хм… фаровская эха у меня не грузится.. идем на сайт… А с Фаром у нас ничего. На сайте лежит все также без движения вторая бета. Новый FAR не вышел. Зато вышел WinAMP 2.72. Причем уже давненько. Аж 10 дней назад. Хожу я туда редко, поскольку скорость выхода новых версий, после придания проекту статуса бесплатного, упала на порядки.
Итак. Подправлен кодек и пара плагинов. Уменьшен размер WinAMP agent (а я им все равно не буду пользоваться). Пофиксены баги. Ну что же. Можно и скачать. Но семь мегабайт… Кстати, надо бы выяснить чем полная версия отличается от стандартной и «облегченной». Прямо сейчас и выясним. Итак.
Полная версия — это и так понятно. Стандартная не проигрывает Windows Media Audio и
На сегодня с меня хватит, только что докачался VNC, сейчас пойду знакомиться: Хочется узнать, что это за зверь. Всем пока! :)
Quake под PDA, DOOM в фотоаппарате. BSoD
LOL!!! Сейчас будете смеяться! У вас Windows 2000?
Если да, то сделайте вот что:
- Запускаем regedit.exe
- Переходим на KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
- Из меню «Edit» выбираем «New», DWORD
- Вводим CrashOnCtrlScroll, нажимаем Enter
- Кликаем туда мышкой и устанавливаем в «1». Нажимаем «OK»
- Перезагружаемся
Теперь, если дважды нажать комбинацию Ctrl+Scroll Lock, система рухнет с появлением знаменитого «голубого экрана смерти» и сообщением MANUALLY_INITIATED_CRASH (0xE2). По словам тех, кто это нашел на сайте Microsoft — сделано это для разработчиков (наверное, чтобы «не забыли» как выглядит экран смерти aka BSoD :).
Сегодня, определенно, день смеха… Slashdot (устами
Проект все еще в стадии доработки (текущая версия — 0.02 alpha), и когда выйдет первая версия, пока неясно. Остается надеяться, что это не очередной fake. В любом случае, на сайте доступны два файла, общим объемом примерно в 9 мегабайт для скачивания, так что владельцам iPaq стоит на это посмотреть.
P.S. Кстати, для интереса я скачал оба файла. В первом действительно лежит PocketQuake.exe, readme.txt и файл конфигурации. Во втором — pack0.pak. Так что, по крайней мере, с виду, все честно.
P.P.S. На том же DZ, основываясь на анализе цвета, Завалишин сделал вывод, что все это — надувательство. Может быть, а может быть и нет. Есть же Doom под фотоаппарат Kodak
Кстати, о Doom’e и Kodak
Сзади фотоаппарата располагается прямоугольное окошко, где вы сможете просмотреть отснятое, покопаться в полноцветном меню или… а вот тут самое интересное.
Теперь, интересующие меня, технические характеристики. Kodak
Судя по всему, есть тенденция встраивать операционные системы во все, что имеет экран. Наверное, очередь за часами. Вот сверху часы — видеотелефон (фото с Вебтилятора). Подождем когда… :)
Надеюсь BlueTooth пробьет себе дорогу. Это, если
Так вот.
Микрософт жива. mod_cgisock, JScript и CK-22B6
Для начала, о событии, так меня заинтересовавшем в позапрошлом выпуске. Вчера на ZDNet.com я,
Оказывается, во всем был виноват (а я был
А теперь скажите мне, что такое mod_cgisock. Так вот, это модуль Apache, который предоставляет возможность работать с CGI через обычные юниксовые сокеты. CGI в этом случае пишется на языке, способном работать с сокетами, и, насколько я понимаю, выступает в роли сервера, обслуживающего запросы Apache. Утверждается, что такой способ позволяет существенно экономить память и выполнять приложения гораздо быстрее.
Весьма любопытно, тем более, что слышу я об этом впервые, но для PHP (а он у меня скомпилирован как модуль), который мне в последнее время так полюбился, абсолютно бесполезно. :)
Есть у меня телевизор Samsung
Кстати, загляните на сайт Самсунг. Там, у телевизора есть забавная характеристика — кривизна экрана… Я долго смеялся. Тем, кто юмора не понял, объяснять ничего не буду. Не способен. :)
Маленькое продолжение темы недокументированных возможностей. На этот раз порадовал Microsoft Internet Explorer 5.0 и 5.5. Случайно обнаружил, что в JScript интерпретаторе этого браузера есть две, нигде не описанные, но, тем не менее, судя по всему, прекрасно работающие фичи.
А на сегодня это все. :)
Наши браузеры. Какие они?
Пару дней назад мне пришлось поспорить с одним человеком по поводу того, какие браузеры существуют и что они из себя представляют. Похоже, разветвление проекта Netscape сразу на три направления, внесло некоторую путаницу в головы
Internet Explorer
Начну я со своего любимого браузера — детища фирмы Microsoft. Internet Explorer (текущая версия — 5.5SP1) — пожалуй самый навороченный браузер из всех нижеописанных. Выпускается под Windows, Mac, я так же слышал о версиях под Unix.
Из стандартов поддерживает: HTML 4.0, со своими расширениями; CSS 1, (почти полностью) CSS 2, плюс специальные эффекты — фильтры; DirectAnimation; VML (векторный язык); VRML; JScript (как составляющую — JavaScript и ECMAScript); W3C DOM; VBScript; XML; ActiveX; Java; динамическое связывание в HTML; behaviors и многое другое.
В данный момент — это самый популярный браузер в российском Интернете, его доля составляет около 70%—80%, по данным SpyLog. Что,
Netscape 4
Точнее Netscape 4. Выпускается одноименной компанией, текущая версия — 4.75. В прошлом — основной конкурент Explorer, ныне — отмирающая тупиковая ветвь. Совокупная с Netscape 6 доля, по данным SpyLog, — примерно 9—19%. Выпускается под Windows, Unix и Mac.
Сейчас уже практически не развивается, хотя время от времени появляются новые версии с незначительными или некому не нужными (типа добавления к пакету WinAmp) изменениями. Поддерживает HTML 3.2, со своими расширениями; частично CSS1 и CSS2; Java; VRML; JavaScript (в его рамках — EMCAScript). Браузер расширяется в основном за счет так называемых «плагинов» — модулей расширений от сторонних производителей. Был любим среди пользователей Unix, как практически единственный графический браузер в этой среде.
Кстати, о версии HTML. HTML 4.0 не поддерживается этим браузером. Достаточно взглянуть на стандарт от W3C, что бы это понять.
Netscape 6
Надежда всех любителей браузеров от Netscape. Время показало, что ожидания оказались напрасными. Релиз оказался на удивление сырым и с массой глюков.
Ничего о нем сказать не могу, поскольку, с момента появления этого самого релиза, более я им не интересуюсь. Проект развивается настолько вяло, что, думаю, все, включая разработчиков, махнули на него рукой.
Отличительная его особенность — браузер позволяет менять свой внешний вид, т. е. устанавливать так называемые скины. Эта способность, как и новой Мозилле, досталась ему от Netscape 5, так называемом Gecko, который в чистом виде в уже природе не встречается.
Mozilla
Текущая версия — 0.7. По внешнему виду —
О его доле я сказать ничего не могу, но проект, в последнее время (а ему уже 3 года), стал очень динамично развиваться и стремительно завоевывать сердца и мониторы пользователей Unix. Эта хорошая альтернатива, для противников продуктов от Microsoft, морально устаревшему Netscape 4. Насколько я знаю, поддерживает HTML 4.0, CSS 1, частично CSS 2, EMCAScript, W3C DOM, частично DOM II, XML, Java, есть экспериментальная поддержка ActiveX.
Lynx
Этот браузер в данном ряду необычен тем, что он полностью текстовый. Текущая версия — 2.8.3. Выпускается под Unix, Windows, VMS, DOS, OS/2 и Mac. Процент его использования невелик — порядка одной десятой процента, используется, в основном, под текстовой консолью Unix и распространяется вместе операционными системами этого типа, чем и жив.
Поддерживает HTML в рамках разумного. Т. е. практически все, что можно реализовать в текстовом режиме, в нем реализовано. Поддержки CSS, скриптовых языков и XML нет. Зато, в силу невеликих возможностей браузера, за все время существования была найдена только одна дыра в безопасности. :) Вот и все, что можно о нем сказать.
Opera
Очень хороший браузер. Быстрый, относительно легкий. Урезанный дистрибутив умещается на одной дискете. Текущая версия для Windows — 5.02. Выпускается для платформ Windows, EPOC, Unix, Mac и BeOS.
Его доля близка к одному проценту, браузер еще относительно молодой. Жаль, только его создатели так увлеклись накручиванием «шашечек». Но, не смотря на это, Opera — потенциально, довольно серьезный конкурент MSIE и Mozilla.
Из возможностей — поддержка HTML 4.01 с собственными расширениями, CSS 1,2
***
P.S. Я не включил в обзор экспериментальные браузеры (например Arena) и браузеры, не получившие широкого распространения. Их время еще не пришло или не придет никогда. В любом случае, пока серьезно я их не воспринимаю. Докажите мне, что я ошибаюсь и я охотно помещу здесь описание любого из них. :)
P.P.S. Спасибо моему другу, Сергею Шишкину, за время, потраченное на попытки сделать скриншот с Mozilla. К сожалению, я так и не смог его забрать.
CollectGarbage. И все-таки она работает!
Сегодня я решился
Но, чтобы
Скажу сразу — функция работает! Но самое интересное не это. Оказалось, что если в MSIE (ровно, как и в Netscape, позднее я повторил эксперимент и под ним тоже) и есть сборщик мусора, то он очень неторопливый. В одном из экспериментов я прождал около 20 минут, прежде чем мое терпение кончилось!
Более того, если нажать «Create» несколько раз подряд, то память будет выделяться после каждого раза. То есть в программах на JavaScript, постоянно создающих структуры большого объема, вызов этой функции жизненно необходим! Я, например, сегодня же выпущу новую версию JUnix с демоном сборки мусора. К сожалению, как я не старался, мне не удалось найти ничего похожего в версии JavaScript от Netscape. Так что вопрос об высвобождении памяти под этим браузером остается открытым.
Демонстрационный пример:
<SCRIPT>
function Create()
{
Arr = new Array ()
for (i = 0; i<100000; i++)
Arr[i] = '01234567890123456789012345678901234567890'+
'12345678901234567890123456789012345678901234567890'+
'12345678901234567890123456789012345678901234567890'+
'12345678901234567890123456789012345678901234567890123456789'
}
function Drop()
{
delete Arr
}
function Collect()
{
CollectGarbage()
}
</SCRIPT>
<BODY>
<FORM>
<INPUT TYPE=BUTTON onClick="Create()" VALUE=Create>
<INPUT TYPE=BUTTON onClick="Drop()" VALUE=Drop>
<INPUT TYPE=BUTTON onClick="Collect()" VALUE=Collect>
</FORM>
</BODY>JavaScript: Недосказанное Нетскейпом
Не оставляя надежду найти аналог CollectGarbage в Netscape, я сегодня расковырял интерпретатор JavaScript’а своего браузера на предмет наличия всего недокументированного. Ковырять вручную было лениво и я сначала написал небольшую программку, вычесывающую все текстовое из файла, на Перле, а потом небольшой скриптик под JUnix, который проверил, что из найденного относится к JavaScript. Ничего похожего на вызов сборщика мусора я так и не нашел, зато нашел
Script(string) — создает кусок JavaScript-кода, который можно вызвать как обычную функцию. Разница между этим конструктором и Function заключается в том, что из кода, созданного конструктором Script, нельзя получить доступ к arguments и прочим свойствам и методам, специфическим для функций.
Пример использования Script:
AX = new Script ("alert('TEST')")
AX () // Нaпечатает "TEST"Call() — создает пустой объект типа Window. Практической пользы маловато, но, как это можно применить я могу придумать.
Пример того, что можно сделать с Call:
AX = window
AX.BX = "TEST"
alert (window.BX) // Напечатает "TEST"
window.BX = "TEST1"
AX = new Call()
AX.BX = window.BX
window.BX = "TEST2"
alert (AX.BX) // Напечатает "TEST2"
AX.open = window.open
AX.open ("about:blank") // Откроет новое окно
BX = {}
BX.open = window.open
BX.open ("about:blank") // Вызовет ошибкуWith(object) — достаточно странная функция. Копирует объект на новое место. Конструктор не вызывается, операция сравнения без приведения утверждает, что был создан новый объект, но изменения в одном экземпляре вызывают изменения в другом.
Пример вызова функции With:
function probe ()
{
alert ('Create.')
this.let = let
this.val = val
}
function let (n)
{
this.val = n
}
AX = new probe() // Напечатает "Create"
BX = AX
alert (AX===BX) // Напечатает "true"
BX = With (AX)
BX.let ("TEST")
alert (AX.val) // Напечатает "TEST"
alert (AX===BX) // Напечатает "false"Closure(function_object) — очень похожа на With, но с парой отличий.
Пример вызова функции и конструктора Closure:
function let (n)
{
this.val = n
}
Function.prototype.let = let
AX = new Function ("","")
BX = AX
alert (AX===BX) // "true". Объекты одинаковые.
AX.let ("TEST1")
alert (BX.val) // "TEST1". И это логично.
BX = Closure (AX)
alert (AX===BX) // "false". Объекты разные.
AX.let ("OTHER")
alert (BX.val) // "TEST2". И это тоже логично.
BX = new Closure (AX)
alert (AX===BX) // "false". Объекты разные.
AX.let ("TEST2")
alert (BX.val) // "TEST2". И это странно.Arguments(объект) — в принципе можно применять для дублирования массива аргументов. Если применить как функцию, а не как конструктор, то Netscape может обидится и сказать GPF. А вообще во время экспериментов с этим объектом мой NC 4.7 падал настолько часто, что можно сказать — это его больное место, трогать которое не рекомендуется.
Пример вызова конструктора Arguments:
AX = new Function ("", "return new Arguments(arguments)")
alert (AX("TEST1").length) // "1"
alert (AX("TEST1","TEST2").length) // "2"Желающим испытать свое терпение и способности к обобщению, предлагается выяснить, какие функции несет каждый объект, свойство или метод из списка: __count__, __parent__, __proto__, __name__, __length__, __arity__, __call__, __caller__, __callee__.
Мое мнение — все, что я накопал, это усы от внутренней объектной модели браузера. Результат попытки упихать все, что только возможно, в объекты.
P.S. Мучал я Netscape версии 4.7. Как нибудь, надеюсь, руки дойдут
Warez. WinAmp3a2, Opera 5.02, WinRAR 2.8b4
P.S. Подробности — на сайте «Правый щелчок».
Пока
Сайт «Парсера» студии Лебедева растет и пухнет. Парсер обзавелся довольно симпатичной эмблемой, со времени моего последнего появления появились разделы «FAQ», «жаргон», «в действии» и «куда говорить».
Вообще, я думаю, любая более или менее крупная фирма, занимающаяся разработкой
Фирма Opera буквально на днях порадовала нас выходом новой подверсии своего одноименного браузера. В списке «WhatsNew» 5.02 в основном «шашечки»: изменения
Китайское 404, taint в JavaScript, NewOrder и NoNaMe
Вы когда нибудь видели «ошибку 404» (страница не найдена), написанную
Если просмотреть все сообщения о дырах, найденных в браузерах, за последние пару лет, то видно, что большинство, своим наличием, обязано факту поддержки браузером JavaScript. Почему так сложно сделать защищенный интерпретатор мне не ясно.
С моей точки зрения все просто. Каждый объект в JavaScript (переменная, функция и т. д.) должен иметь два флага защиты. Возведением и снятием каждого из них заведует сам интерпретатор. Если установлен первый флаг, то это говорит о том, что объект принадлежит к классу «внутренних», возведение второго — причисляет его к классу «внешних». Естественно, что флаги эти взаимоисключаемы. Выражение, в котором присутствует объект с возведенным флагом, получает статус этого объекта.
Никакое «внутреннее» значение не может быть присвоено объекту с флагом «внешний». За этим следит строгая, но справедливая система безопасности. Других ограничений нет. Таким образом, буфер обмена получает статус «внутренний», объект location и методы, позволяющие передать информацию во внешний мир (open, replace и т. д.), становятся «внешними», а вот свойства объекта navigator никакого особого статуса не заслуживают.
Единственная сложность — решить к какому классу отнести информацию, полученную от «сторонних» источников — Java-апплетов, приложений ActiveX и проч. Я бы отнес их к классу «внутренних» объектов. Передавать информацию от них во внешний мир через JavaScript я нужды не вижу. Если их собственная система безопасности это позволит, то они прекрасно справятся с этой задачей сами.
Сегодня, в который раз обращаясь за помощью к Astalavita, я нашел там ссылку на сайт, услугами которого я теперь намерен пользоваться достаточно часто. Речь идет о сайте «NewOrder» (наверное можно перевести, как «Новый Порядок» :). Это обширный и, судя по всему, обновляемый довольно часто, каталог всего того, что может понадобится любому человеку, который тесно общается с компьютерной техникой.
Думаю, разделы скажут сами за себя: «Security», «Privacy», «Virii», «Exploits», ну и так далее. Информации и программ очень много, ценно, что все это, вот так вот, собрано в одном месте и разложено по полочкам. На сайте публикуются новости из мира хака, проводятся голосования, есть форумы. Теперь о ложке дегтя (хотя лично для меня она — чайная) — все это на _английском_. Надеюсь, вы ничего другого и не ожидали.
Людям, в силу
Я, например, уже обзавелся «довеском» к Win 2.80b4, скачанным по ссылке с этого сайта и узнал, что сайт LevelZero, следы которого оборвались на закрытом, с недавних пор, lz.knet.ru, оказывается переехал на другой адрес. Так что очень рекомендую посетить.