Windows 2000. Впечатления

С появлением Windows 2000 все как будто сошли с ума. Даже те, кто до сих пор морщился при слове Microsoft, как будто надели на глаза розовые очки. Я, проработавший на этой системе со времени ее появления, совершенно не замечаю плюсов ее использования перед гораздо более стабильной Windows 95 OSR2.

Что же приводится в качестве аргументов? Система сделана по технологии и на ядре NT. Это не аргумент. Это сообщение, причем несущее очень мало информации. Один тот факт, что первое сделано по технологии второго или с использованием его части, еще ни о чем не говорит.

Монтирование. Первое, что люди вспоминают. Лично мне, наличие этого самого монтирования глубоко фиолетово. Тем более, что эта «новая возможность» на самом деле довольна бородата. В UNIX’ах и прочих *INIX’ах эта возможность была с рождения, так же как и в MS-DOS’е (правда, не на уровне ядра и версии так до 5-й). Помните маленькую такую утилитку JOIN?

Стабильность. Об этом я мог бы сказать много. Матерных слов. Но не буду. Windows 2000 зависает по самым невероятных причинам. Мне, как человеку работающему еще и с Linux Slackware, где крутится Apache, Postgres, MySQL, miniSQL, Sendmail, FTP и т. д., есть с чем сравнивать.

Многопользовательская система. Это вы зря. Для безопасности нужно ограничить запись в реестр. Без возможности записи многие приложения (Photoshop, например) работать не будут. Приходится разрешать запись в некоторые ветки. Вы просто не представляете во сколько разных веток пишут свои данные некоторые приложения. Случается так, что программы буквально прячут свои данные в этом необъятном дереве. Например, серийный номер. Таким образом получается, что нормально работать под ней можно только с правами администратора.

Что еще? Защита от DLL Hell? Не смешите. Через пол-года эксплуатации на мою систему перестали инсталлироваться некоторые нужные мне программы. TheBAT!, WinAMP, Netscape инсталлируются через версию. Появился странный глюк. Есть файлы, открыть которые на моем компьютере стало невозможно. Система сообщает, что файл уже открыт. Чего я только не пробовал. Перезагружал систему, пробовал переписать через FTP и сетевой диск. Две вещи которые сделать получается — переименовать и удалить. Только толку от этого мало.

Microsoft в очередной раз сделала рывок. Только опять не вперед, а в сторону.

Оставить комментарий

99 бутылок: SHS SSI, Price Convertor Small Talk

Эпопея о бутылках с пивом продолжается. Сегодня вашему вниманию предлагается тексты программы, выводящие песню о бутылках на языках Small HTTP Server SSI и Price Convertor Short Talk 2.00rc2.

7. Small HTTP Server SSI. Вариант реализации SSI для SHS, написанного Максом Фиоктистовым. Файл должен называться index.shtm.

<!--#if expr="$b=No" -->
<BODY BGCOLOR=BLACK TEXT=WHITE>
No more bottles of beer...<BR>
Go to the store and buy some more...<BR>
99 bottles of beer.</BODY>
<!--#break -->
<!--#endif -->
<!--#set var="" value="" -->
<!--#set var="N" value="No" -->
<!--#set var="9" value="8" -->
<!--#set var="8" value="7" -->
<!--#set var="7" value="6" -->
<!--#set var="6" value="5" -->
<!--#set var="5" value="4" -->
<!--#set var="4" value="3" -->
<!--#set var="3" value="2" -->
<!--#set var="2" value="1" -->
<!--#set var="1" value="0" -->
<!--#set var="0" value="9" -->

<!--#if expr="!$a" -->
<!--#set var="a" value="9" -->
<!--#set var="b" value="9" -->
<!--#set var="s" value="bottles" -->
<!--#set var="m" value="$s" -->
<!--#endif -->
<!--#set var="t" value="$a" -->

<!--#if expr="$b=0" -->
<!--#set var="c" value="$a" -->
<!--#elif expr="$a>0" -->
<!--#set var="c" value="t" -->
<!--#endif -->
<!--#set var="d" value="$b" -->

<!--#if expr="$a=||$a=0||$c=1" -->
<!--#set var="c" value="" -->
<!--#endif -->

<!--#if expr="$d=1&&$c=" -->
<!--#set var="d" value="N" -->
<!--#elif expr="$d=2&&$c=" -->
<!--#set var="m" value="bottle" -->
<!--#endif -->

<HEAD>
<META HTTP-EQUIV="Refresh" Content="1;URL=index.shtm?a=<!--#echo var="$c" -->
&b=<!--#echo var="$d" -->&m=<!--#echo var="m" -->
&s=<!--#echo var="m" -->">
</HEAD>
<BODY BGCOLOR=BLACK TEXT=WHITE>
<!--#echo var="a" --><!--#echo var="b" -->
<!--#echo var="s" --> of beer on the wall,<BR>
Take one and pass it around,<BR>
<!--#echo var="$c" --><!--#echo var="$d" -->
<!--#echo var="m" --> of beer on the wall.
</BODY>

8. Price Contertor Small Talk 2.00rc2. Этот язык я придумал сам, реализован он был примерно в 1998 году, как внутреннее средство управления программой обработки прайсов, представленных виде файлов Excel.

BEGIN
    "99"
    mov a "bottle(s) of beer on the wall."
END
WORK    "*"
    eq "No"
    if
        echo "No more bottles of beer..."
        echo "Go to the store and buy some more..."
        echo "99 bottles of beer."
        break ""
    endif

    else
        delete
        mov Y a
        .
        echo
        echo "Take one and pass it around,"
        mov Y "1"
        -
        eq "0"
        if
            mov Y "No"
        endif

        delete
        mov Y a
        .
        echo
    endelse
    prev
END


Оставить комментарий

Инструмент Веб-верстальщика

Иногда Веб-мастеру приходится резать и верстать страницу в расчете на то, что ее рабочее разрешение (минимальное разрешение необходимое для ее просмотра) меньше того, что выбрано им в данный момент. Фраза сложная, а означает она вот что: у меня, например, разрешение установлено в 1024×768, а заказчик хочет, что бы страница также хорошо смотрелась и на 640×480. Что бы во время верстки проверить, так ли это, мне приходится либо уменьшать окно браузера, что неудобно, так как точно в размер попасть трудно, либо переключаться между разрешениями (именно переключаться, резать при 640×480 для меня, мягко говоря, уже проблематично), что вызывает еще бо́льшие неудобства — устают глаза, да и общий дискомфорт…

Мне это все порядком поднадоело и я решил узнать, нет ли какого-то более человечного способа. Способ, который я нашел — инсталлирование внешней программы и переключение из нее размера окна браузера меня не устроил. Т. е. способ не плох, но неудобен по двум причинам: инсталляция громоздкой программы, которая вдобавок еще и занимает место в памяти, плюс необходимость каждый раз переходить в ее окно для переключения.

Я решил посмотреть, как это можно сделать проще, а заодно, если получится, осчастливить какую-то часть человечества. В итоге, получился инсталлятор, занимающий примерно килобайт. После инсталляции в меню, появляющемся при нажатии на вторую кнопку мыши в окне браузера, появятся новые пункты, название которых говорит само за себя (например, «Переключиться в 800×600»).

Естественно, при таком наличии меда не обошлось без ложки дёгтя. Во-первых, вся эта красота работает только под Internet Explorer (в принципе я, как и многие другие, Netscape запускаю редко — только чтобы посмотреть все ли нормально под ним).

Во-вторых, работает не под всеми Эксплорерами, но под многими. Точнее мне выяснить не удалось. Единственно надежный способ узнать, работает ли под вашим — установить программу. Более быстрый способ — посмотреть в реестр. Для этого запустите программу regedit.exe из каталога Виндовз, в ветке HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer должна быть секция MenuExt. Если ее нет, скорее всего (90%) исталляция моей программы не даст никакого эффекта.

Программа представляет из себя батник с вкраплениями из ассемблерных подпрограмм. После запуска программа все сделает сама, кроме перезапуска. Его надо сделать самостоятельно. Скачивается очень быстро — всего 991 байт в архиве, сжато ZIP’ом.

P.S. Позже IE resizer был переписан на Windows Script Host. Запускается под Windows 98/ME/NT Option Pack/200x.

Оставить комментарий

Кот Экслера (aka Бублик)

Как вы думаете, до какого размера может вырасти кот? Особенно если его надлежащим образом кормить? Ну? Два, четыре, восемь килограмм? Когда-то, я думал, что мой 5-тикилограммовый Мурзик (так звали моего ныне покойного кота), эта гора мускул, запросто прыгающая с пола на шкаф, — абсолютный рекордсмен по весу среди себе подобных.

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

Но когда сегодня я, зайдя на сайт Экслера, увидел во что превратился его кастрированный кот Бублик, раздобревший на сочинских харчах, я чуть не упал в обморок. По-моему эта скотина (в хорошем смысле этого слова :) не просто даст отпор, а просто напугает до смерти любую собаку. :)

Кот Бублик
Кот Бублик

Поначалу, увидев эти фотографии, я подумал, что тут не обошлось без фотошопа, но, приглядевшись внимательно к фото, и вспомнив, что Экслер не знает даже, где в фотошопе стёрка, а где карандаш, все-таки поверил, что они настоящие.

Вот, что делает с животными хороший уход и кастрация. :)

Оставить комментарий

Интернет версия 2.0. Beta

Мегабайт — американское название килобайта.
(народная мудрость)

Люблю я маленький софт.

Думаю, если бы Microsoft делала программы, отвечающие ее названию, она была бы моей любимой фирмой. А пока, все с точностью наоборот.

Между тем, на Microsoft свет клином не сошелся. К счастью, есть люди, заботящиеся не о наличии красивых иконок и анимированных пиктограмм, а о функциональности и размере программы. Удивительно, но факт: существует Веб-сервер размером в 17Кб (вместе с DNS и HTTP-Proxy — 40), полноценный браузер Opera со встроенным news-ридером «весом» всего в 2Мб, графическая операционная система, умещающаяся на одной дискете и анонимный прокси в 100 строк на Perl’е (вместе с комментариями).

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

Во-первых, Сеть должна быть абстрагирована от носителя информации. Видео, текст, цвет, свет, запах и т. д. — различий быть не должно. В том смысле, что поиск должен адекватно вестись по любому носителю. Например, сейчас поиск по видеоизображению или звуку провести затруднительно. Было бы неплохо иметь возможность преобразования из одного носителя в другой. О равноценном, естественно, речь не идет, согласен на адекватное. :) А еще лучше — заиметь некий информационный порт для ее восприятия в отрыве от органов чувств. Даже не знаю, возможно ли такое в ближайшие лет 100. Человеческий носитель информации (aka память) целиком и полностью завязан на чувства.

Во-вторых, любая информация, попадающая в Сеть, должна быть сертифицирована сторонними организациями или виртуальными сущностями (aka ИИ aka AI). Таких организаций (сущностей) должно быть несколько, для того, чтобы невозможно было их купить. Жить все это хозяйство должно на деньги государства (aka налоги) и жестоко внутри себя конкурировать.

Я не призываю ввести цензуру в Сети, просто нужен механизм подтверждения подлинности информации. Если сертификата нет — пользователь сам решает, верить информации или не верить. Да и сертификату, в конечном счете, тоже. Право на выбор традиционно остается за пользователем.

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

А пока все останется по-старому. У девяноста процентов людей на их PC будет стоять Microsoft Windows, текст они будут набирать в Word и постоянно тратить деньги на новый винт, видеокарту, процессор, память и т. д. Ну, или, если более приближенно к жизни, утолять голод батончиком «Mars», считать, что «Nivea» — лидер в области косметики и покупать стиральные машины «LG» с номинальной загрузкой 7 килограмм.

Оставить комментарий

Мышь EzBrowser+

Примерно полгода назад, я вздумал проапгрейдить свой старенький Pentium-166 (разогнанный до 200) с 32-мя метрами на борту, до чего-то, более приличного. С играми я завязал около 2-х лет назад, монитор меня устраивал, так что я решил прикупить системный блок с Celeron-466/128Mb внутри. Дома, соединяя вышеозначенное с периферией, я обнаружил сзади корпуса сюрприз: два PS/2-ских разъема, ни в один из которых моя старенькая клавиатура ессно не полезла.

Мышь EzBrowser

На следующий день я твердо решил прикупить новую клавиатуру. Зашел я за клавиатурой, а вышел, держа в руках новую мышь EzBrowser и переходник PS/2 ⭤ AT для клавы. :)

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

Первая половина дня ушла на полевые испытания и рассказы всем встречным — поперечным, чем хороша моя новая любимица…

Прошло полгода. Знакомые моих знакомых рассказали своим знакомым, что знакомый знакомых их знакомых приобрел мышь c камерой в пузе и может бесплатно проконсультировать по поводу ее плюсов, минусов, стоимости в разных уголках планеты и вообще обо всем, с ней связанном. Получив на этой неделе. примерно, трехсотое письмо, я решив, что так больше нельзя, решил написать небольшую заметку, так сказать, FAQ и давать всем желающим ссылку.

Итак.… EzBrowser, так же как и ее сородич из Microsoft, действительно, может нормально ездить по чему угодно: ноге, столу, стене, бумаге, по всему, у чего есть фактура. А вот по моему новому коврику, сделанному из переработанных шин и, раскрашенному австралийскими школьниками, она ездить отказалась.

Эта мышь не засоряется, не начинает пробуксовывать со временем, и нормально реагирует на прямой свет от лампы, фонарика, солнца, луны и прочих источников света.

Как с ней играется в Quake я не знаю. Я не играю в Quake, так же как и в HalfLife, Motorhead 2 и прочие фантики на раздевание. Но замечено, что мышь иногда может вести себя очень неадекватно, особенно, во время резкого старта после долгого простоя. Выражается это в беспорядочном скакании курсора по всему экрану. Для меня это не страшно, для игрока в Quake, наверное тоже. Там нет долгих простоев.

Дешевле всего купить ее можно в Москве. Где именно? Не знаю. Зайдите на Price.ru, и посмотрите. Цены в других городах я также не знаю. Позвоните в магазин, и спросите. Жители Москвы, Санкт-Петербурга, Новосибирска, Екатеринбурга, Минска могут зайти на тот же Price.ru, жители Казани — на «Казанский Портал», раздел «Где купить?». Купить — рекомендую.

Смотрится она очень здорово и необычно. Гостей можно развлекать подсветкой дна, которая отключается через некоторое время, если мышь не двигается. Третьей кнопки у нее нет, зато есть колесико, на которое тоже можно нажимать, как кнопку, или использовать его по прямому назначению — прокрутки окна.

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

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

Оставить комментарий

Поиск в Сети

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

Наконец, все это мне надоело и я решил сегодня порыться в закромах сетевых обозревателей, собственной памяти, своих закладках и собрать все найденные ссылки на одной странице.

Итак, начну я со всем известных поисковых машин по Веб-ресурсам Yandex и Aport. Ссылки на них я вряд ли забуду, поскольку основной объем информации нахожу именно в них. Они стоят упоминания только за одно это. Трудно сказать, какая из этих двух поисковых машин лучше, но начинаю я поиск с Yandex — грузится быстрее.

Эквивалентом этим поисковым машинам в англоязычных ресурсах я считаю не AltaVista с Yahoo!, а менее известные (но более мощные, как я имел время убедиться) AllTheWeb и Google. В среднем, эти машины ищут быстрее и находят бо́льший объем информации. Особенно рекомендую вторую.

Переходим к поиску программ и прочих файлов, расположенных на FTP. А точнее к FTP-поисковикам. Из рунетовских особенно рекомендую Files.ru и FileSearch, из забугорных, кроме Lycos FTPsearch, ничего не вспоминается.

Тесно к FTP-поисковикам примыкают более специализированные — поисковики бесплатных программ. Раньше я чаще всего пользовался, теперь сдающим уже свои позиции, ListSoft. Сейчас предпочтение отдаю конкурирующим FreeSoft и FreeWare. Обозреватели упоминают еще какой-то SoftSeek. Я там не разу не был, так что ничего про него сказать не могу.

Большое спасибо создателям поисковых машин, специализирующихся на поиске драйверов для всевозможных видеокарт, модемов и проч. В Рунете из таких мне вспомнился Drivers.ru, из англоязычных, не раз меня выручавший, DriverZone.

Самая многочисленная группа — растущие как грибы MP3-искалки. Поскольку пользуюсь ими редко, ничего определенного сказать не могу, просто перечислю: Oth Net, Music Lycos, Italia On-line, Audiofind, Audiophilez, 2000 MP3 и WinMP3Locator.

Как можно тише и незаметнее упомяну о Crack.ru, Cracks.ru и небезызвестной Astalavista. :) Что они ищут — ясно из названия первых двух.

Поиск картинок. С этой задачей справятся, уже вышеупомянутые, Yandex и Aport, а также, выуженный из моих закладок CreativePro.

Так, что у нас осталось? Осталось упомянуть о сайте с говорящим названием Referats.ru и двух словарях сокращений — Sokr.ru (на русском) и AcronymFinder (на английском).

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

Нашел поисковик по схемам: «РадиоЛоцман». Поисковики по товарам в различных городах Price.ru (Москва, С.П., Екатеринбург, Новосибирск, Минск) и «Где купить?» (Казань).

Оставить комментарий

HTA (HTML application)

После появления на свет WebICQ, я получил множество писем с просьбами рассказать, что такое HTA и WScript. О WScript как-нибудь в другой раз, а сегодня я расскажу о том что такое HTA.

HTA (или HTML Application) — так называемые «безбраузерные приложения», выполнение которых — одна из возможностей браузера Internet Explorer 5.0. С точки зрения пользователя, такая программа ничем (кроме, разве что, расширения) не отличается от любой другой: имеет заголовок окна, свою иконку, отображается в панели задач и т. п.

С точки зрения программиста, HTA — обычная Веб-страничка: для ее создания используются все те же HTML, CSS, JScript и VBScript. Единственное, что ее отличает от всего того, что можно увидеть на любом сайте, это наличие заголовочного тега (в общем случае он может отсутствовать) и полное отсутствие системы безопасности (как и в любом нормальном приложении).

Тег заголовка позволяет программисту управлять некоторыми параметрами созданного приложения. Выглядит он, как простой XML-тег, расположенный внутри тела программы (обратите внимание пробел перед «/>» обязателен!): <HTA:APPLICATION... />.

Параметры перечисляются внутри тега, например, так, как это показано ниже:

<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="myApp"
VERSION="1.0"
WINDOWSTATE="maximize" />

Хотя параметров довольно много (все они перечислены в Таблице 1), мне, например, очень не хватает еще двух: WIDTH и HEIGHT, которые позволили бы задавать размер окна, не вызывая методов JScript или VBScript.

Таблица 1

Параметр В JavaScript Назначение Значения
APPLICATIONNAME applicationName Имя приложения строка
BORDER border Тип бордюрa thin, dialog, none, thin
BORDERSTYLE borderStyle Стиль бордюра внутри HTA normal, complex, raised, static, sunken
CAPTION caption Наличие заголовка yes, no
commandLine Содержимое командной строки
CONTEXTMENU contextMenu Управляет наличием меню правой кнопки мыши yes, no
ICON icon Задает иконку приложения URL (строка)
INNERBORDER innerBorder Внутренний бордюр yes, no
MAXIMIZEBUTTON maximizeButton Управляет кнопкой «развернуть» yes, no
MINIMIZEBUTTON minimizeButton Управляет кнопкой «свернуть» yes, no
NAVIGABLE (только для IE 5.5) navigable Переход по ссылке произойдет в окне HTA no, yes
SCROLL scroll Наличие scroll bars yes, no, auto
SCROLLFLAT scrollFlat Управление стилем scroll bars no, yes
SELECTION selection Управляет возможностью выделения текста внутри HTA yes, no
SHOWINTASKBAR showInTaskBar Отображать ли в панели задач yes, no
SINGLEINSTANCE singleInstance Запретить запуск второго экземпляра? no, yes
SYSMENU sysMenu Управляет наличием системного меню yes, no
VERSION version Версия HTA строка
WINDOWSTATE windowState Начальный размер окна normal, minimize, maximize

Как видно из таблицы, все параметры приложения (большинство в режиме read-only) доступны из скриптовых языков. Что бы было понятно, как это делается, приведу небольшой пример для applicationName: oHTA.applicationName (oHTA — ID, заданный в заголовке).

Отсутствие системы безопасности означает, что разработчику предоставлена полная свобода доступа к ActiveX, а значит файловой системе и WScript. Кроме того, программист имеет возможность, при помощи атрибута APPLICATION, явно указать содержимое какого из внутренних фреймов может получить доступ к объектам приложения: <IFRAME SRC=content.htm APPLICATION=yes>.

Исходя из концепции безбраузерного приложения, Microsoft исключила из HTA функцию автозаполнения (AutoComplete of form) и закрыла доступ к объекту external.

Более подробно о HTA (на английском языке) можно почитать на сайте Microsoft MSDN.

Оставить комментарий

Хедэйк

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

Как работает естественный отбор? Кто не убежал — того съели, потомства не осталось, какой-то набор признаков, разнящихся из-за мутаций, не сохранился. Так скажите мне, ради всего святого, неужели головная боль абсолютно не мешала древнему человеку убегать от своих врагов и охотиться? А может это беда только современного человека?

Интересно, а у животных болит голова? Глядя на мою кошку Кошмарку, я начинаю в этом сомневаться. По-моему, у нее всего 2 состояния: сон и активный бег за всем, что движется. Не было ни одного случая, когда бы моя кошка, в мерзком настроении ходила по квартире, боясь пошевелить головой и мерзко мяуча, мучаясь головной болью.

Медики утверждают, что в головном мозге, ровно как и в костях черепа, нет нервной ткани, так что сама голова болеть не может. Головная боль должна означать, что у вас что-то не в порядке в каком-то другом месте организма.

Тогда мне тем более не понятно, зачем нужен этот маппинг боли на голову. Если верить в высший разум, сваявший человека, можно предположить, что «это не баг, это фича», предназначенная для мониторинга (слежения за) состояния человека.

Жаль, что меня все равно не удовлетворит ни одно объяснение, в смысле, что легче-то все равно не станет. Кто-то может сказать — «да выпей ты, наконец, таблетку». Спасибо за совет, но принцип «здесь лечим, там калечим» меня не устраивает. В том смысле, что головную боль сегодня я перетерплю, а вот завтрашнюю операцию на язве желудка я могу и не пережить. Да и если переживу, жить с усеченным желудком или, вовсе без него, радости мало.

Так что, буду терпеть. Главное не шевелить головой…

Оставить комментарий

Виртуальная пьянка

Многие слышали о такой вещи, как виртуальный секс. А кто-то даже утверждает, что занимается им регулярно. Остается только недоумевать, почему наряду с виртуальным сексом, в Сети не стали обычными вещами виртуальные пьянки, виртуальное курение, виртуальная наркомания, проституция (за WebMoney или CyberCash) и т. п. Ведь такой способ реализации своих потребностей имеет множество плюсов перед традиционными: никакого тебе похмелья, вредного воздействия на организм, СПИДа и прочей гадости.

Вот только представьте себе такой разговор:

MegaDestroyer: с какой начнем?
SuperCrasher: давай с «Пшеничной».
MegaDestroyer: с «Пшеничной», так с «Пшеничной». Разливай.
SuperCrasher: BlackKiller, ты чего молчишь? Опять dial-up отвалился?
BlackKiller: Тут я.
SuperCrasher: ОК. Не торопясь, достаю бутылку, срезаю ножом пробку и разливаю.
\^/ \^/ \~/
BlackKiller: Стоп! А почему меня обделили?
SuperCrasher: Pardon, \^/ \^/ \^/
MegaDestroyer: Ну, выпьем. За нас!
SuperCrasher: \_/
BlackKiller: \_/ Хорошо пошла…
MegaDestroyer: \_/ Угу…

Представили? Ну не красота? Заметьте, утром никакого похмелья или пищевого отравления, драки по пьяни с привлечением мебели или порчи оной. Как максимум — выяснение отношения в Quake или VirtuaFigter, да и то, при условии наличия выделенки. В связи со стремительно приближающимся Новым Годом (вы, кстати, уже купили мандарины?), вышесказанное становится еще более актуальным.

Так что, все на освоение безграничных возможностей Интернета и, возможно, для кого-то, утро без похмелья наконец-то станет реальностью!

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

P.P.S. Специально для господ из оффлайновых изданий: все сказанное в предыдущем абзаце не более чем шутка.

Оставить комментарий

Что происходит?

Кто-нибудь мне объяснит, что происходит?

Почему на протяжении последней недели ко мне в ICQ стучатся какие-то Тани, Светы, Оли и утверждают, что хотят со мной познакомиться? С первыми пятью я был настолько агрессивен, что они быстро исчезли из моего поля зрения. Пару раз я порывался выяснить, кто это решил пошутить таким странным образом. Одну звали , я проследил ее айпишку, оказалось она выходит через того же провайдера что и я. Я туда позвонил и выяснил какой пользователь сидит сейчас на этом IP-е. Имя совпало, дальше я копать не стал, просто пригрозил, что узнаю, где она живет и перевел ее в Ignore List. Дольше всего я проговорил с девушкой по имени Света. Она дала мне свой номер пейджера и я, воспользовавшись кое-какими своими связями, узнал какие сообщения приходят на этот номер. Имя совпало. Значит эти девушки — не одно лицо. Дошло даже до того, что она мне позвонила и мы с ней немного поговорили. Сегодня она пропала.

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

Так что же происходит? Случайность? Верится. С трудом. Розыгрыш? Ни у одного из моих знакомых нет одновременно двух ресурсов для этого необходимых: терпения и времени.

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

Сегодня в моем контакт-листе появились Таня №2 и Катя.

P.S. Что называется «когда верстался этот номер».

Только что мне позвонила Света и сказала, что скоро доедет до компьютерного класса и выйдет в Инет. Хочет со мной поговорить.

Оставить комментарий

О безопасности в Unix

О безопасности Unix-систем.

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

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

Примерно через 5—10 минут (я как раз вбивал какое-то нечитаемое наименование с коробки из-под монитора), система меня пустила… Думаете я подобрал пароль? Если бы. СИСТЕМА МЕНЯ ПУСТИЛА, но, как будет видно ниже, Я НЕ НАБРАЛ ПРАВИЛЬНЫЙ ПАРОЛЬ.

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

Так что единственное разумное объяснение, которое пришло мне в голову, заключается в следующем. Похоже разработчики включили в свой продукт одну недокументированную особенность — система пускает человека, который в течение долгого времени вводит парольные последовательности, некоторая часть которых совпадает по буквенному составу и/или длине с правильным паролем. «Cчитая», что хозяин забыл пароль.

Остается только догадываться, сколько еще таких «недокументированных возможностей» зашито в софт, которому мы привыкли доверять безопасность нашего компьютера.

4 комментария

Разгон. S3. MCLK

Я снимаю с себя всю ответственность за любые последствия подобного разгона.

Почему-то, принято считать, что видео карты типа S3 Trio32 или Cirrus Logic GD-5420 вымерли как класс, а у пользователей стоят сплошь навороченные Riva TNT2 и Voodoo-6500. Думаю, такая точка зрения далека от истины. Лично я знаю очень мало людей с Riva и очень много с теми же S3. Между тем, многие знают как выжать последнее из первых и очень мало о том, как разогнать вторые.

Речь пойдет о небольшой, по современным меркам (113Кб), утилите MSLK. Она предназначена для разгона видео карт Cirrus Logic (GD-542X, 5430, 5436, 5440/M40, 5446, 7543), S3 inc. (864/866/868 с SDAC RAMDAC, Trio 32/64/64V+, Virge, Virge VX, Virge DX), Trident (9440/96xx) и Tseng Labs (ET-4000, generic ET-6000). Не знаю, насколько у меня последняя (0.90с/093c) версия, возможно в более поздних есть поддержка и других карт.

Программа работает под управлением DOS или Windows (в полноэкранном режиме) и позволяет увеличить быстродействие на пять, а если повезет, то и на 10%. После своего запуска она сообщит вам информацию о производителе, модели и доступных настройках вашей видео карты. Вот для примера та информация, которая утилита вывела на моем домашнем компьютере:

Video card MCLK utility v0.90с 07/28/96, chips_lib v093с 05/04/97
FAMILY= S3 ... CHIP= PCI Virge DX/GX ... REVISION= 01
1-cycle EDO RAM

Adjustable settings:
0 S3 Trio/Virge MCLK programming
1 Trio64V+/Virge memory page-mode control
2 S3-864/964/Trio CAS', OE' strech time, WE' delay
3 S3Trio RAS' timing control (2 parameters)
4 S3Trio 2MCLK/3MCLK timing controls
5 function NOT available

Это означает, что на своей старенькой карточке я смогу изменить пять настроек. Список возможных значений параметра и его текущее значение можно посмотреть, запустив программу с цифрой параметра (от 0 до 5), например, так: MCLK /0.

Если программа неправильно определила вашу карту, ее тип можно задать вручную при помощи параметра /F. Для примера. Предположим у вас S3 — 968.

Набираем MSLK /F, получаем:

Supported families
------------------
0 Generic VGA
1 Cirrus Logic
2 S3, Inc.
3 Tseng Labs
4 Trident Microsystems

Выбираем третьего по счету производителя (MSLK /F 2), получаем:

S3 accelerator
0 S3-801/805
…
7 S3-968
8 S3-325 (Virge)
9 S3-988 (Virge/VX)

Наша карта — под номером 7. Набираем MSKL /F 2 7 Примечание: при использовании параметра /F он должен стоять первым!

Настройка параметров карты осуществляется вызовом программы с указанием настраиваемого параметра и его нового значения или значений. Например, так: MCLK /0 1 1 1 или с выбором видеокарты, так: MCLK /F 1 1 /0 32

Если пожадничать, и слишком разогнать карту, то изображение может пропасть. В этом случае помогает только перезагрузка. Советую войти под «голым» DOS’ом и поэкспериментировать. После подбора оптимальных параметров, вызов программы с соответствующими параметрами можно вставить в AUTOEXEC.BAT.

Более подробная документация (правда, на английском) распространяется вместе с программой.

Оставить комментарий

Недокументированные… Окончание.

Вместо предисловия.

Сегодня Google выдал мне все-таки страницу, URL которой я так жаждал получить. На нем, английским по белому, написано, что теги NSCP_CLOSE, NSCP_OPEN, NSCP_REBLOCK, MQUOTE, CELL, SUBDOC, CERTIFICATE, INLINEINPUTTHICK, INLINEINPUTDOTTED, COLORMAP, HYPE, SPELL и NSDT более не поддерживаются.

Так что в списке подозреваемых на полезную нагрузку остались: CHARLES, JEAN, UNKNOWN и INPUT TYPE=JOT.

Внимательное изучение этой самой страницы увеличило вышеприведенный список еще на два экземпляра: INPUT TYPE=READONLY и INPUT TYPE=OBJECT. Что означает первый, стало понятно после полевого испытания — создается текстовое поле, которое нельзя редактировать. Для чего служит второй, станет понятно ниже. Кроме того, на той же странице я с удивлением узнал, что у тега INPUT есть атрибут HEIGHT.

Все вышеперечисленное вдохнуло в меня новые силы и я, с утроенной энергией, взялся за поисковые машины…

Через пару минут поиска, видимо найдя все-таки с Google общий язык, я нашел остальную интересующую меня информацию, перевод и компиляцию которой я размещаю ниже.

Атрибут JOT предназначен для вывода поля перьевого ввода произвольного размера (атрибут SIZE="xsize,ysize"), размер по умолчанию 200×50, перешел в Netscape, судя по всему, из браузера Mosaic. Используется совместно с атрибутом SRC.

OBJECT создает невизуальный элемент формы для сбора данных от заданного Java-компонента, расположенного на странице. Java-компонент задается при помощи атрибута NAME, который должен быть равен атрибуту ID предыдущего объявления компонента. Его данные попадут на сервер когда пользователь нажмет на кнопку SUBMIT (немного сумбурный перевод, но, думаю, смысл ясен).

Чтение исходников (спасибо AllTheWeb) показало, что тег UNKNOWN — никакой не тег, а абстрактное обозначение любого неизвестного тега, встречающегося в заголовке документа. Сделан этот финт ушами для пропуска контента неизвестных контейнеров. CHARLES и JEAN — это не что иное, как загадочные, но уже не поддерживаемые «теги» INLINEINPUTDOTTED и INLINEINPUTTHICK.

Теги, начинающиеся с букв NSCP были предназначены для внутренних целей браузера, в частности, NSCP_CLOSE закрывал все незакрытые теги, что позволяло «сливать» воедино два незавершенных документа.

Из тех же исходников, кстати, видно, что побочным действием тега HR является закрытие блочного тега P, что действительно имеет место.

Что касается тега COLORMAP, то тут не все так кристально ясно. Это, безусловно, тег, что подтверждает чтение исходников, у него есть атрибут SRC и нет закрывающей пары. Судя по комментариям в коде, этот тег задает карту цвета, которая будет использоваться для всех картинок страницы. Но для чего это нужно, и каков формат этой карты ссылок — неясно. Кроме того сама, процедура обработки тега стоит под #IFNDEF, так что непонятно, работает он в текущей версии Netscape или отключен.

Тег HYPE был введен «just for fun» и работает (-ал), судя по исходникам, только на Mac и Unix-платформах.

Из других любопытных открытий — существование атрибута SUPPRESS, который заставляет (его значения — TRUE и FALSE) тег LAYER игнорировать свое содержимое до закрывающей пары и того же атрибута у тега A (anchor), только с другим значением — его использование ведет к появлению рамки вокруг ссылки в момент нажатия, как в MSIE. Только непонятно, исходники какой из версий я смотрел — одной из будущих, или какой-то из прошлых, потому что в текущей это не работает.

В общем, я остался доволен сегодняшним результатом поиска. :) И хотя, остались еще кое-какие мелкие вопросы, я уже порядком подустал, так что объявляю свое виртуальное расследование завершенным.

Оставить комментарий

Недокументированные возможности

Если не всем, то многим, известно, что в практически в любом устройстве есть ,так называемые, «недокументированные возможности». Первое мое знакомство с ними состоялось еще на примере команд Ассемблера к компьютеру ZX-Spectrum. Владение командами типа LD IYh,10 приятно грело душу. Позже, я еще неоднократно сталкивался с такого рода возможностями в Intel Assembler (LOADALL, SETALC), MS-DOS (системные структуры, 2F и т. п.), Windows (некоторые функции API), телевизорах (встроенные меню) и т. д. Теперь пришлось столкнуться и в Вебе. Точнее в браузере. А еще точнее в Netscape Navigator.

Время от времени я просматриваю exe-файлы браузеров и их dll-ки, в надежде узнать что-то новое. Иногда мои усилия вознаграждаются, чаще — нет. Интересно, кто, кроме разработчиков, знает о существовании тегов NSCP_OPEN, CHARLES, JEAN, SUBDOC, CELL? О типе JOT тега INPUT? Единственный тег, в тайну которого я смог проникнуть самостоятельно — это INLINEINPUT. Как я понял, единственное его назначение заключается в подчеркивании текста прерывистой линией. Конечно, те же телевизионные сервисные меню не стоит делать достоянием общественности, но вот дополнительные теги браузера можно и открыть — ничего страшного не произойдет (раз уж все равно сделали, теперь выбрасывать что ли?). Зато это добавит в скудную палитру «украшательств» верстальщика под Netscape пару новых возможностей.

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

  • SUBDOC — «определяет субдокумент с собственным окружением. Может быть вложен.» Что бы это значило? Эксперименты ни к чему не привели.
  • HYPE — Судя по косвенным ссылкам раньше воспроизводил какой-то звук. Оставлен как заглушка.
  • MQUOTE — Средство для цитирования почтовых сообщений.
  • COLORMAP — упоминается как параметр (PRIVATE|DITHERED|YES|NO) тега EMBED. Похоже используется в каком-то плагине.

На большее моего терпения не хватило. Так вопрос о том, что такое CELL, CHARLES, JEAN, NSCP_CLOSE, NSCP_OPEN, NSCP_REBLOCK, UNKNOWN и т. д. остается открытым.

Оставить комментарий

Как мне кажется. Генетика

Больной, испуганно, доктору:
— Доктор, что это у меня?!
— АаААааааа!!! 8-O Что это у вас?!

(анекдот)
 
Глядя на визжащее, скулящее, повизгивающее сосредоточие страха, раболепно ползающее у ног своей хозяйки — бабки неопределенного возраста, невольно задумываешься, что может сотворить человек, если дать ему в руки генетику. Я говорю о болонках (или как там называются эти маленькие, визгливо потявкивающие трусливые комочки?) и их прародителей — волках.

Становится страшно.

Канадский сфинкс

Если человек, имея возможность изменять животное лишь косвенно, наворотил такое, представляю что будет, когда человечеству удастся расшифровать ДНК, когда оно научится дешево изменять генотип и выращивать жизнеспособных особей заданной конфигурации. У меня есть множество знакомых, которые завели себе какую — нибудь уродливую породистую кошку или собаку только для того, чтобы было «не как у всех». Теперь представьте себе скажем… гигантскую муху с человеческими глазами, того же пушного таракана размером с ладонь. А кто-то, наверное найдет жутко милыми летающих вечных котят с белым пухом вместо шерсти.

Конечно, придется издать некий закон, запрещающий, или как-то регулирующий эту деятельность. Как всегда найдутся страны, которые этот закон не примут и люди, которым будет на него наплевать. В канализациях будут размножаться жуткие, и не очень, твари, которым оставили возможность размножения. У мафиози появится новое развлечение «изготовь клон своего врага в виде писсуара». Шучу, конечно. У кого-то, возможно, появится идея улучшить человеческую породу. Например, ввести более продуманную имуннозащиту. Баги в реализации приведут к каким нибудь страшным последствиям лет так через 50, когда потомство несколько смешается с «обычными» людьми. Скажем, проявится неожиданная агрессия в подростковом периоде.

Людям, которые живут по правилу «после меня хоть потоп», советую почитать литературу о генетически измененных продуктах. В этих самых продуктах я ничего плохого не вижу, просто хочу сказать — начало положено.

Оставить комментарий

Плохая дока или ее отсутствие?..

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

Поясню: как много людей, программирующих на PHP, знают о существовании в нем конструкции <?=$variable?>? Я о ее существовании узнал вчера. Из чужого листинга. Для хохмы попытался найти ее через «Table of Contents» родной доки. Не удалось. Пришлось набирать в командной строке магическое grep '[%\?] *= *\$' * чтобы узнать, что эта, довольно полезная фича, упоминается в доке аж два раза, но эпизодически, и в разделе «Escaping from HTML». Кто бы мог подумать? Там, кстати, говорится, что это shortcut к echo. Тогда такой вопрос: почему бы этот самый shortcut не поместить рядом с echo (раздел « String function») или хотя бы дать ссылку на него в «see also…»?

Еще хуже дело обстоит с PostgreSQL. Для интереса зайдите в Postgres monitor (psql) и наберите: \dd regexeqjoinsel. — «O!», — думаете вы — «новая функция!». Не спешите искать информацию по ней в официальной доке. Там эта функция даже не упоминается. Кстати, это далеко не единственный пример. По-моему, дока для Постгреса — худшая в мире.

Это что касается софта под Unix. Документация для платформы Windows обычно составлена лучше. По крайней мере та ее часть, что от Microsoft. Конечно, мало кто знает, что такое HTA или WScript, но информации по ним вполне достаточно, просто эти вещи мало кому нужны.

У Microsoft другая крайность — описывать все тщательно, но с опозданием. Меня вот интересует вполне конкретный вопрос: в чем с точки зрения разработчика разница между Jet4.00SP5 и Jet 3.00? Боюсь, придется подождать пару месяцев, до выхода 5-й версии, прежде чем я смогу получить на него ответ.

Кстати, с начинающим наступать Миллениумом вас!

Оставить комментарий

26/XI-00

Удалён самоуничижительный вводный абзац — примечание.

У меня в квартире живут: я,.. <удалено — примечание>, кошка Кошмарка и куча насекомых, называемых муравьями <у нас тогда жили бытовые рыжие муравьи — примечание>. Иногда пробегают тараканы, но они здесь скорее гости. Муравьи — жильцы незаконные.

Я,.. <удалено — примечание> и, в меру своих сил, кошка нещадно их истребляем. Удивительно, почему я давлю мурав’ёв? Рефлекс какой-то. Увидел — раздавил. Если подумать, они мне не мешают. Довод, что они ползают чёрт знает где и разносят чёрт знает что на своих лапках возникает только из необходимости оправдываться.

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

Если я рядом с ним раздавлю его товарища, поймёт ли первый от чего его «друг» (а может и друг) вдруг перестал шевелится? Думаю — нет. Наверное единственное, что он поймёт, что тут стало опасно.

А вдруг и люди умирают точно так же? Из-за чьей-то рефлекторной тяги к убийству? Но понять и осознать этого не могут из-за убогости своего внутреннего отражения внешнего мира?

• Другое

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

На этом мои бумажные дневники кончаются, возможно я вёл бы их и дальше, но помешал интернет — к нему я получил доступ примерно в 1997 году, на втором курсе университета. Всё больше текстов я печатал, всё меньше писа́л ручкой, а потом, в ноябре 2000-го завёл свой собственный сайт, который мало-помалу превратился в блог. Тяга писать что-то в тетради-дневники пропала окончательно.

2 комментария

99 бутылок: PostgreSQL, MySQL, xSSI, CMD, PHP, JUnix Shell

Есть такой прелюбопытный сайт «99 Bottles of Beer on The Wall». Это сборник листингов программ, написанных на разных языках, но выводящих один и тот же текст — «песню про пиво». Как ни странно, но я обнаружил, что могу пополнить список из 227 языков, представленных на сайте, еще своими 6 экземплярами. Что я без промедления и сделал. Но, так как владелец сайта занят переездом на новый адрес и ему пока не до меня, я решил выложить эти образцы здесь, чтобы широкая общественность могла полюбоваться делом рук моих.

1. PostgreSQL (СУБД) https://www.postgresql.org/

YourTable — это ваша таблица с числом строк более 100.

-- Written by Evgeny.Stepanischev at ksu.ru
-- 
CREATE SEQUENCE temp_beer_seq INCREMENT -1 MINVALUE 0 MAXVALUE 99 START 99;
CREATE FUNCTION temp_b() RETURNS text
AS 'SELECT \' bottle\'||CASE WHEN last_value=1 THEN
\'\'::text ELSE \'s\'::text END||\' of beer\' FROM temp_beer_seq'
LANGUAGE 'sql';
        
CREATE FUNCTION temp_b_out() RETURNS text
AS 'SELECT s.last_value||temp_b()||\' on the wall, \'||
s.last_value||temp_b()||\'.\\n Take one and pass it around,\\n \'||
CASE WHEN NEXTVAL(\'temp_beer_seq\')=0 THEN \'No\'
 ELSE text(s.last_value-0) END||
temp_b()||\' on the wall.\\n\'
FROM temp_beer_seq s'
LANGUAGE 'sql';

SELECT CASE WHEN temp_beer_seq.last_value=0
THEN 'No more bottles of beer...\n Go to the store and buy some more...\n
 99 bottles of beer.' ELSE temp_b_out() END
FROM YourTable LIMIT 100,1;
                    -- 

DROP SEQUENCE temp_beer_seq;
DROP FUNCTION temp_b();
DROP FUNCTION temp_b_out();
-- END

2. MySQL (СУБД) https://www.mysql.com/
YourTable — это ваша таблица с числом строк более 100.

/* Program by Evgeny.Stepanischev at ksu.ru*/
SET @beer:=100;
SET @w:=' on the wall';
SELECT IF(@beer<2,'\nNo more bottles of beer...\n\
Go to the store and buy some more...\n99 bottles of \
beer.',CONCAT(CONCAT('\n',@str:=CONCAT(@beer:=@beer-1,\
@bot:=CONCAT(' bottle',IF (@beer>1,'s',''),' of beer')),\
@w,', ',@str,'.\nTake one and pass it around,\n'), IF \
(@beer-1=0,'No more ',@beer-1),@bot,@w,'.')) as beer
FROM YourTable LIMIT 100;


3. xSSI для Apache https://httpd.apache.org/
Знаком «█» обозначено место, где перевод строки не нужен,
просто строчки такие длинные, что пришлось их разбить.

<!-- Written by Evgeny.Stepanischev at ksu.ru -->
<!--#if expr="$D=A || $D=B" -->
        <!--#if expr="$K=/${D}8/" -->
        <!--#set var="D" value="8" -->
        <!--#set var="M" value="7" -->
        <!--#elif expr="$K=/${D}7/" -->
        <!--#set var="D" value="7" -->
        <!--#set var="M" value="6" -->
        <!--#elif expr="$K=/${D}6/" -->
        <!--#set var="D" value="6" -->
        <!--#set var="M" value="5" -->
        <!--#elif expr="$K=/${D}5/" -->
        <!--#set var="D" value="5" -->
        <!--#set var="M" value="4" -->
        <!--#elif expr="$K=/${D}4/" -->
        <!--#set var="D" value="4" -->
        <!--#set var="M" value="3" -->
        <!--#elif expr="$K=/${D}3/" -->
        <!--#set var="D" value="3" -->
        <!--#set var="M" value="2" -->
        <!--#elif expr="$K=/${D}2/" -->
        <!--#set var="D" value="2" -->
        <!--#set var="M" value="1" -->
        <!--#elif expr="$K=/${D}1/" -->
        <!--#set var="D" value="1" -->
        <!--#set var="M" value="0" -->
        <!--#elif expr="$K=/${D}0/" -->
        <!--#set var="D" value="0" -->
        <!--#else -->
        <!--#set var="D" value="9" -->
        <!--#set var="M" value="8" -->
        <!--#endif -->

<!--#else -->

        <!--#set var="D" value="A" -->
        <!--#set var="K" value="$QUERY_STRING" -->
        <!--#include virtual="$DOCUMENT_NAME" -->
        <!--#set var="A" value="$D" -->
        <!--#set var="Am" value="$M" -->

        <!--#set var="D" value="B" -->
        <!--#include virtual="$DOCUMENT_NAME" -->
        <!--#set var="B" value="$D" -->
        <!--#set var="Bm" value="$M" -->

        <!--#if expr="$A=0 && $B=0" -->
                <BODY BGCOLOR="BLACK" TEXT="WHITE"><B>
                No more bottles of beer...<br>
                Go to the store and buy some more...<br>
                99 bottles of beer.
                </BODY>
        <!--#else -->

                <HEAD>
                <!--#if expr="$B=0" -->
                        <!--#set var="A1" value="$Am" -->
                        <!--#set var="B1" value="9" -->
                <!--#else -->
                        <!--#set var="A1" value="$A" -->
                        <!--#set var="B1" value="$Bm" -->
                <!--#endif -->
                <META HTTP-EQUIV="Refresh" Content="1;█
URL=http://<!--#echo var="HTTP_HOST" --><!--#echo var="DOCUMENT_URI" -->?A█
<!--#echo var="A1" -->B<!--#echo var="B1" -->">
                </HEAD>

                <BODY BGCOLOR=BLACK TEXT=WHITE><B>
                <!--#if expr="$A>0" --><!--#echo var="A" --><!--#endif -->█
<!--#echo var="B" -->
                bottle<!--#if expr="$A$B>1" -->s<!--#endif -->
                of beer on the wall, <!--#if expr="$A>0" -->█
<!--#echo var="A" --><!--#endif --><!--#echo var="B" -->
                bottle<!--#if expr="$A$B>01" -->s<!--#endif --> of beer.<br>
                Take one and pass it around,<br>

                <!--#if expr="$A1$B1>00" -->
                        <!--#if expr="$A1>0" --><!--#echo var="A1" -->█
<!--#endif --><!--#echo var="B1" -->
                        bottle<!--#if expr="$A1$B1>01" -->s█
<!--#endif --> of beer on the wall.
                <!--#else -->
                        No more bottles of beer on the wall.
                <!--#endif -->
                <!--#set var="C" value="" -->
                <BR>
                </B></BODY>
        <!--#endif -->
<!--#endif -->


4. Win2000 batch file (CMD)

@ECHO OFF
REM Evgeny.Stepanischev at ksu.ru

FOR /L %%B IN (99,-1,1) DO CALL :PROG %%B
ECHO No more bottles of beer...
ECHO Go to the store and buy some more...
ECHO 99 bottles of beer. 
GOTO :EOF

:PROG
ECHO %1 bottle(s) of beer on the wall, %1 bottle(s) of beer.
ECHO Take one and pass it around,
SET /A S=%1-1
IF %S% EQU 0 SET S=No
ECHO %S% bottle(s) of beer on the wall.
ECHO.


5. PHP https://www.php.net/

<?
for ($s='s' and $beer=99;$beer;)
{
    echo "$beer bottle$s of beer on the wall, $beer bottle$s of beer.<br>",
    "\nTake one and pass it around,<br>";
    $beer--;
    $s = $beer==1?'':'s';
    if ($beer) echo "$beer bottle$s of beer on the wall.<br><br>";
};
?>
No more bottles of beer on the wall.<br><br>
No more bottles of beer...<br>Go to the story and buy some more...<br>
99 bottles of beer.


6. JUnix SHell junix.kzn.ru https://github.com/bolknote/junix
Предупреждаю: JUSH работает настолько медленно, что вы вряд ли дождетесь результата работы. Для испытания лучше уменьшить константу «beer» до 4-х.

set beer=99
set s=s
while ($beer gt 0)
echo $beer bottle$s of beer on the wall, $beer bottle$s of beer.
echo Take one and pass it around,
set beer--
if ($beer==1) set s=
if ($beer) echo $beer bottle$s of beer on the wall.\n
end
cat <<T
No more bottles of beer on the wall.

No more bottles of beer...
Go to the store and buy some more...
99 bottles of beer.
T


Оставить комментарий

1/IX-00

Удалён абзац личного текста — примечание.

Прошло 2 года. Я изменился, стал более серьёзным и скрытным, может быть менее пугливым и доверчивым. Одно точно: я решил никогда больше не брать в руки д/ж. И никому никогда его не показывать, а как-нибудь «собраться» и уничтожить его совсем. События последних 2-х недель насколько выбили меня из колеи, что я, больше не зная на кого переложить груз случившегося, опять взял его в руки.

Но вот проблема: теперь я не настолько верю себе и бумаге, чтобы так просто взять и изложить здесь всё то, что меня так беспокоит… удалён глубоко личный текст — примечание.

Оставить комментарий