Ломаем proxy от Small HTTP Server, warez, FreeInet

Привет!
Всех с праздником! Хотя я уж и не знаю каким… :) Что празднуем-то? В общем «Мир, Труд, Май!» :))

Как-то, пару месяцев назад, ковырял я Small HTTP Server Макса Феоктистова (подробнее можно почитать тут). Тогда оказалось, что при всех достоинствах этого продукта, у него имеется один недостаток — серьезные проблемы с безопасностью. Что, в общем-то, не мешает использовать его, как платформу для тестов.

Вчера я вспомнил о том, что кроме Веб-сервера в том же дистрибутиве есть еще прокси-сервер и DNS. О протоколе DNS я знаю маловато, так что решил на предмет устойчивости попробовать прокси.

Написал небольшого клиента на Java (под рукой ничего, работающего с сокетами, не оказалось), посмотрел, что именно передает браузер при соединении через прокси, открыл telnet на порт 3128 (порт по умолчанию для SHS proxy) и начал экспериментировать.

Оказалось, что прокси можно заставить бесконечно запрашивать информацию от самого себя, занимая все доступные соединения. Достаточно открыть telnet на тот порт, на который у вас настроен proxy и написать запрос вида:

GET http://127.0.0.1:3128
Host: 127.0.0.1:3128

Причем атаку можно производить удаленно, в запросе для этого менять ничего не нужно. Популярный Squid на такую строчку реагирует менее бурно — просто возвращает «Access denied». Обидно, что SHS proxy после моего исследования можно выкидывать на помойку…

Впрочем, после двух месяцев молчания (о чем я сейчас буду ниже писать) автор все таки исправил большинство указанных мной уязвимостей в веб-сервере. Его можно понять — думаю, SHS он делает в свободное время, но, надеюсь, proxy он подлатает быстрее. Программа-то хорошая.

Быстренько разделаюсь с warez. :)
Итак, вышла новая версия PHP 4.0.5. Событие, не менее ожидаемое мной, чем выход PostgreSQL 7.1. Ссылки на «скачать» и список изменений можно найти на обычном своем месте — внизу страницы. Список внушительный и, лично для меня, значимый. Особенно меня порадовали дополнительные функции для работы с Large Object и багфиксы для Postgres.

Вышел новый (2.04) Small HTTP Server! Автор исправил большинство из указанных мной когда-то уязвимостей. Впрочем, баги с неоконченным «%» и exec присутствуют до сих пор, но, надеюсь, Макс исправит их в ближайшее время. Кроме того, в SSI наконец-то добавлена переменная QUERY_STRING, чему нельзя не порадоваться. Одно обидно — нигде не упомянуто, что баги были найдены мной. Людская неблагодарность. :))

Список числовых значений в окне программы Maanda, где каждое значение сопровождается красной иконкой и заголовком "Status".
Miranda. Скриншот

Из других новостей — вышла финальная ( 0.1.0.0 ) версия альтернативного ICQ-клиента с открытым исходным кодом «Miranda» (на скриншоте). Клиент очень хорош, занимает очень мало (всего 3 мегабайта, сравните с ICQ) места в памяти, в новой версии имеет много настроек, умеет делать импорт контакт листа ICQ, принимать и передавать сообщения и файлы, работать через прокси, есть подключаемые плагины. В общем посмотрите — возможно это именно то, что вы так долго искали. Из интересных особенностей — под W2K Miranda умеет становиться полупрозрачной, причем степень прозрачности настраивается из меню.

Я, кажется, догадался почему автор проекта FreeInet так легко отдавал ворованные пароли. Принцип толпы, перебегающей дорогу на красный свет — «всех не задавит». Т. е. «чем больше народу пользуется этим паролем, тем меньше вероятность, что отвечать придется именно мне». ИМХО, очень простое и разумное объяснение.

А для тех, кто все еще хочет искусить судьбу — внизу скриптик однодневной давности. Возможно, еще не прикрыли.

На сегодня хватит… :)) Пойду отдыхать, остальное допишу завтра. Всех, еще раз, с праздниками.

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

99 бутылок: Miva, Ruby

22. Miva. Доступ к этому языку я получил чисто случайно. Будем считать, что я нашел распечатки парочки программ на этом языке на улице. Это недалеко от истины, ибо документацию по Miva я в глаза не видел.

Итак Miva — это скриптовый полнофункциональный язык, применяемый исключительно в веб-программировании. Синтаксис, на мой взгляд, несколько неуклюж, что, впрочем, легко объяснимо способом его внедрения, и неоправданно многословен. Из интересных особенностей — разделение локальных, глобальных и системных (?) переменных через объекты «l», «g» и «s».

Скрипт, выводящий песню о пиве (beer.mv)

<HTML><MIVA STANDARDOUTPUTLEVEL = "text, html, compresswhitespace">

<MvCOMMENT>
| Beer song. Written by Evgeny Stepanischev
</MvCOMMENT>

<MvFUNCTION NAME="Beer" PARAMETERS="n">
<MvIF EXPR = "{ l.n NE 0 }">&[ l.n ]<MvELSE>No</MvIF>
bottle<MvIF EXPR = "{ l.n NE 1 }">s</MvIF>
of beer</MvFUNCTION>

<MvASSIGN NAME = "g.i" VALUE = 99>

<MvWHILE EXPR = "{ g.i GE 1 }">
<MvEVAL EXPR="{ Beer(g.i) }"> on the wall, <MvEVAL EXPR="{ Beer(g.i) }">.<BR>
Take one and pass around,<BR>
<MvASSIGN NAME = "g.i" VALUE = "{ g.i - 1 }">
<MvEVAL EXPR="{ Beer(g.i) }">
on the wall.<BR><BR>

</MvWHILE>

No more bottles of beer...<BR>
Go to the store and buy some more...<BR>
99 bottles of beer.

</HTML>

23. Ruby. Скриптовый язык, который я посчитал очень похожим на Перл, поэтому писал на нём как на Перле. Отличия есть, и существенные, но тем не менее. Как и предыдущем языке, есть префиксные различия между глобальными (начинаются на «$» или «@») и локальными переменными. Из странностей — конструкцию «1?2:3» не удалось заставить работать с локальными переменными. Возможно это особенность языка, но не ясен её смысл.

Скрипт, выводящий песню о пиве.

# Beer song. Written by Evgeny Stepanischev

def Beer (n)
  if n!=0 then
    print n
  else
    print 'No'
  end

  print " bottle"
  print "s" unless n==1
end

$i = 99

while $i>0 do
  Beer ($i)
  print " on the wall, "
  Beer ($i)
  print "\nTake one and pass around,\n"
  $i-=1;
  Beer ($i)
  print " on the wall.\n\n"
end

print <<EOF
No more bottles of beer...
Go to the store and buy some more...
99 bottles of beer.
EOF


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

Самоновости, warez, Shell, FreeInet spy

Скриншот главной страницы сайта Lenta.ru от Rambler с заголовком «Татьяна Станкевич: «Коллекция — это не просто вещи»» и фотографиями двух женщин.
Скриншот с сайта

Прислали мне вчера ссылочку в аську. Захожу — gazeta.ru, читаю заголовок и не верю своим глазам — «Евгений Степанищев — обладатель золотого болта». Я никаким золотым болтом не обладаю, так что первая мысль была — появился однофамилец-тёзка, лишь после того, как я дочитал статью понял — это прикол. :))

Ларчик открывается просто. Для того что бы понять в чем фокус, достаточно внимательно посмотреть на URL. Если в URL’е содержиться собачка, то все, до последней собачки, относится к строке авторизации пользователя. Таким образом www.gazeta.ru в данном случае, ничто иное, как логин, а 62.118.250.28 — сервер, с которого показывается страничка.

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

Ссылочку прислал Much Foster

Warez. В нескольких словах.
Вышел, наконец-то, FAR 1.70b3. Предварительный список обновлений я уже давал, кто читал — знает, какой он огромный, так что приводить его здесь я не буду.

Обновилась Opera. В новой версии (5.11) из изменений — одни багфиксы, в количестве 4-х штук. А что вы ожидали от версии, отличающейся в сотых долях? :)

И, примерно неделю назад, вышел релиз PostgreSQL 7.1. Ждал я его с нетерпением, а как появился — стало не до него. Так что я его еще не поставил… Но от людей, которые это сделали, слышал о каких-то проблемах с удалённым соединением.

Каждое утро по пути на работу я проезжаю мимо ларька «Shell», если кто не знает — это фирма производит автомобильные масла. Так вот, пару дней назад, проезжая все той же дорогой, я обратил внимание, что трех последних букв в названии фирмы уже нет. Так что ларёк стал называться просто «Sh». Юниксоиды меня поймут, а остальным скажу, что sh — имя самого распространённого командного интерпретатора Unix, общее название для которых — shell.

Примечание: собственно, «sh» — это и есть сокращение от слова «shell». В общем для меня ситуация весьма забавная.

FreeInet меня настолько заинтриговал, что я решил попробовать провести небольшое расследование. Вот что я выяснил. FreeInet — вещь ворованная, доступ идет через сеть X25. Что это такое я не интересовался, но, кажется эту сеть, в свое время активно пользовали, например, банковские структуры. Аккаунт, насколько я понял подбирается простым перебором, для этого есть, например, специальные скрипты, написанные на языке SCP-файлов.

Так что выходить через FreeInet не рекомендую. Я не слышал что бы за это кого-то судили, да и доказать что-либо проблематично (не я, я не знал, я его честно купил вон там), но кому-то, кто этим всем владеет, это все надоест, то парочку, для острастки посадят. Конечно, это при наличии такого единого владельца.

Кому как, а меня от потуг НоНаМыча найти спонсора уже несколько мутит. Стоит ли объяснять человеку, что сайт его классный, спору нет, но спонсоры на посещаемость в 5000 человек в день сами приходят крайне редко. К ним надо приходить, уговаривать и объяснять, убеждать и рассказывать, как это все хорошо и что им это все даст. А так, кому это нужно?

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

Но, в любом случае, удачи тебе, НоНаМыч! Не вздумай закрывать сайт! :)

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

FreeInet, Favicon, ReactOS и E-OS, autocomplete, dlls

Только вчера человек, как его называют в НоНаМе, с неприлично короткой аськой 100077 сообщил о открытии странички FreeInet по новому адресу FreeInet2002.Chat.Ru, а уже сегодня он собрал вещички и съехал с Chat.Ru. В неизвестном направлении. Причем настолько внезапно, что есть мнение. У меня. В общем есть мнение, что скорее его «съехали», чем он это сделал сам. Что ж, следите за новостями.

Знаете что такое favicon.ico? Это иконка 16×16, которую помещают в корне сайта, что бы Internet Explorer (а сейчас еще и Konquer) при добавлении сайта в закладки или просто при его просмотре заменял им свой скучный значок белой бумажки с синей буквой «е». Пример можно посмотреть у DZ.

Так вот. Узнал только вчера. Так получилось. Оказывается эту иконку не обязательно называть favicon и не обязательно помещать в корень сайта. Конечно, о том где она находится и как называется надо как-то сообщить браузеру. Делается это при помощи тега LINK. Вот что-то типа этого:

<HEAD>
<LINK REL="SHORTCUT ICON" HREF="http://www.host.com/icon/favicon.ico">
<TITLE>Page Title</TITLE>
</HEAD>

Когда-то давно фирма PTS решила затмить Microsoft и написать свою собственную DOS. Написала. Назвала PTS-DOS. ОС получилась, по тем временам, очень хорошей. Со встроенным русификатором, занимала гораздо меньше памяти, умела читать работать с битыми дискетами, имела фичи для ускорения вывода и многое, многое другое.

Время шло, DOS теряла популярность, мало-помалу люди узнавали что есть Windows 3.1. Фирма PTS решила написать свою Windows. Не вышло. То ли пупок развязался, то ли поняли, что тягаться с Microsoft не получится.

К чему я? Сегодня, свернув на каком-то баннере, оттуда — по ссылочке, набрел я на некую React OS. NT4-совместимая на уровне драйверов и приложений (!), с открытым исходным кодом.

Разработчики поставили перед собой цель «создать и поддерживать качественную операционную систему. Непрерывно бороться за качество во всем включая надежность, эффективность и внешний вид». Принять участие в разработке может любой. Я только одного не понял… Работа идет до сих пор или проект давно заброшен?

CMD.EXE, «DOS под Windows» (ну, знаете, ярлык «Сеанс MS-DOS» :) еще с времен NT умеет делать auto-complete, т. е. завершение неполного имени файла или папки. Я этой возможностью никогда не пользовался, но, может быть, кому-то пригодится.

Эта возможность по-умолчанию отключена. Что бы ее включить нужно перейти в ветку

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor или<br>
HKEY_CURRENT_USER\Software\Microsoft\Command Processor<br>

и исправить значение параметра CompletionChar на 9 (или добавить его с типом REG_DWORD, если он отсутствует). Теперь, при нажатии клавиши Tab, операционная система будет пытаться сама дописать введённую строку так, как это делается в шеллах Unix.

Ссылки на «DLL-библиотеки», т. е. сайты, где выкладываются различные DLL, которые некоторые программы требуют для своего функционирования, кто уже только не давал. Но я редко их вспоминаю, когда мне становится нужной какая-то DLL’ка. И вот, больше для себя, чем для кого-то другого выкладываю ссылочку на один такой ресурс. Может и еще кому-то пригодится.

Скриншот рабочего стола с зелёным фоном, иконкой «Панель управления» и крупным чёрно-белым логотипом в правом нижнем углу.
E-OS. Скриншот

И, под занавес, порадую ссылочкой «операционной системой на Flash» E-OS. Сама ссылочка внизу, а эта «операционная система» никакая не ОС, конечно, а вовсе даже десктоп.

«ОС на DHTML» уже была, а вот это, если не ошибаюсь, первая ласточка чего-то подобного на флешке. По крайней мере первое, что я увидел.

Загляните, если интересно. Внутри есть своя «кнопка пуск», калькулятор, графический редактор, блокнот и еще пара-тройка «приложений». Только запаситесь терпением, весит все это немало.

Что называется, «когда верстался этот номер» я узнал, что FreeInet жив и здоров. И жив и здоров он по ссылочке внизу. Как говорится, enjoy!

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

Получи свою карту, warez, бей телепузиков, спам

Сайт Mnogo.Ru предлагает всем желающим бесплатно получить именную дисконтную карту, дающую скидку от 3 до 30% в более чем 200 предприятиях по всей России. Есть Интернет-магазины.

Скриншот веб-страницы сайта «Мир Игрушек» с баннером «Дети и Родители», меню навигации, формой поиска и текстовым блоком внизу о правилах использования материалов сайта.
Скриншот с сайта

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

О warez.
Mirabilis выпустила новую версию ICQ 2000b v4.65 build 3281. ( Здравствуйте, баннеры! :). Что в ней нового я не знаю, давно перестал этим интересоваться, но, для интереса ее поставил. Управу на баннеры я нашел минуты за три ковыряния редактором HIEW. Выяснилось, что магические слова звучат так:

1766F: B8 33
17670: A9 C0
17671: 40 C3

Править надо файл ICQCore.dll. Кроме того, очень не помешает следующий ключик в реестре:

[HKEY_CURRENT_USER\Software\Mirabilis\ICQ\DefaultPrefs]
"Auto Update"="No"

Вышел новый FarNavigator (так же известный, как ProxyFTP). В новой версии (1.80b3) изменен диалог настройки прокси-серверов. Теперь вы можете задать одновременно 3 типа прокси-серверов: HTTP, FTP, SOCKS. Ну и, как водится, исправлено несколько багов.

FAR Team, напомню, это группа программистов, занимающихся разработкой популярного файлового менеджера FAR, анонсировала список изменений, которые уже внесены в еще не вышедший FAR 1.70b3. Приводить его здесь не имеет смысла (он занимает почти 30 килобайт), я его выложил в Интернет. Ссылочки, где можно это все скачать, ниже.

Три тини-тини (фиолетовый, красный, зелёный) играют на зелёном холме перед домом-грибом под солнцем; в окнах видны силуэты других персонажей.
Замочи «телепузика». Скриншот

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

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

Ссылочку прислал Булат Каримов aka System 104

Спаммеры в конец обнаглели. Очевидно, до кого из них, наконец, дошло, что спам вида «я хочу поделицца способами быстава зарабатывания 5000$ в Интернете» и «наша компания торгует канализационными трубами, наш адрес…» неэффективен. Я такие письма удаляю даже не читая.

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

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

Вариант номер два — «старый знакомый». Начинается оно, примерно, так: «Привет! Это Софокл. Еще помнишь меня? Недавно был на классном сайте…». Ну и так далее.

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

Вот что неприятно, так это тот факт, что эти письма приходится читать. Предлагаю начать, наконец, бороться со спамом активно. А именно. Пишется письмо на почтовый ящик postmaster того сервера откуда пришло письмо, туда вкладывается письмо от спаммера вместе с заголовком (в TheBAT! — Ctrl+Shift+K, что бы показать заголовок) с просьбой принять меры. Например, на chat.ru и mail.ru реакция наступает очень быстро, особенно, если письмо было не одно — такой почтовый ящик просто блокируют.

Удачи вам! И, как было написано в одном спаммерском письме, «SPAM IS BAD! DON’T SEND IT!».

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

Java ICQ, языковая пузомерка, warez, пара ссылочек

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

Доведут до ума, лично я — буду пользоваться. А пока это не то что бы даже сыро… это пока никак.

Хотите узнать насколько результативен тот или иной язык? В смысле скорости разработки программ? Внизу есть ссылочка на «Programming Languages Table». В таблице два числа «Level» и «Average source statements per function point». Числа взаимозависимы, так что имеет смысл рассматривать только первое.

«Level» (уровень) языка показывается насколько просто написать на этом языке какую-либо программу. Для примера, программа, написанная на языке уровня 6 потребует применения примерно вдвое меньшего количества оператора, против языка уровня 3.

Естественно, в таблице перечислены далеко не все языки (например, PHP там нет), но взглянуть на результаты сравнения, тем не менее, очень интересно. Perl получил level 15, стандартный Pascal получил 3,5, а его вечный противник Си — всего лишь 2,5.

Вообще, как я заметил, на «вершине Олимпа» стоят узкоспециализированные языки, такие, как MATHCAD (level 60) или Excel (51—57), а тот факт, что язык находится у «подножья» вовсе не говорит о том, что он примитивен. Т. е. выбирая по таблице наиболее эффективный язык нужно держать в голове область его применения.

Warez. Э… это уже даже не смешно. Вышел PostreSQL 7.1RC4… Надо мной определенно издеваются. :( Если завтра выпустят RC5 я напишу в Postres конструктивное письмо с убедительной просьбой перевести проект назад, в разряд бет и не морочить честным людям голову.

Вышла Opera 5.10. О новости поторопился сообщить НоНаМыч. Конечно, файл было видно еще три дня назад, но скачать его было нельзя. Итак, новая версия вышла. Whats new?

  • Появилась плохонькая поддержка скинов;
  • Новый индикатор загрузки;
  • APOP в клиенте e-mail;
  • Улучшенная поддержка CSS и DOM;
  • Поддержка regexp и прочие изменения в JavaScript;
  • Поддержка XHTML namespace;
  • Исправления багов.

Ну, и еще несколько мелких пунктов. Я прошелся по РуНету, рендер HTML’а стал определенно лучше, но все еще далек от идеала. Transalte.ru смотрится несколько не так, как должен бы, Ozone.Ru — расползается, а «Казанский Портал» вообще разваливается целиком.

Когда же его доведут до ума? Как-то пятая Opera меня немного разочаровала. Если еще взять в расчет сколько она занимает в памяти (всего на два мегабайта отстает от IE 5.5SP1) вырисовывается что-то недоделано-монстрообразное. Нда…

Как же все-таки некоторые компании умудряются выбирать себе названия звучные и легко запоминающиеся русскоговорящим человеком… Вот и компания Ebates… :) :) Чем она занимается я не знаю, если интересно ссылочку я поместил вниз, на ее обычное место.

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

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

FreeInet, warez, М$ отличился, JS1.5, T-288C, readme

Новостей сегодня — воз и маленькая тележка.

Проект FreeInet, несколько дней был доступен только москвичам. Хорошая новость: список точек доступа вырос до прежней величины. Скрипты и телефоны дозвона можно забрать по следующему адресу: freeinet2001.chat.ru. Заходите, пока опять не закрылся. :)

Информация предоставлена человеком с аськой 100077

Из warez’a. Вышел PostgreSQL 7.1RC3. :)) Меня это все уже немного утомило, но я все еще не теряю надежду на появление релиза. :)

Кроме того, появился (ура-ура) модуль, который делает из Apache streaming MP3-сервер. Модуль еще несколько сыроват, но, тем не менее, работоспособен. Честно говоря, удивительно, что он не появился несколькими годами раньше.

Компания Микрософт заботится о нас… Не так давно (в версии 5-й, кажется) у Internet Explorer появилась замечательная фича — возможность сохранения веб-странички на диск полностью, включая используемые картинки. Делает он это просто — саму страничку пишет с именем «тут_какое-то_имя.htm», а картинки переписывает в папку с именем «тут_какое-то_имя_files».

Такой вот формат хранения контента страничек. Так как формат разделенный, в фирме Микрософт решили все это дело как-то связать. Поступили просто. Решение достойное мелкомягких. В W2K (насчет других операционок не знаю), в API, а точнее в процедурах копирования, удаления, перемещения и прочее воткнули условие: если работаем с HTML-файлом и там же есть папка с тем же именем плюс «_files», то таскаем ее везде с собой.

Поясняю. Попробуйте в Проводнике создать файл, скажем my.htm и папку my_files. А теперь удалите файл (Shift+Delete)… И вот тут срабатывает правило «таскаем везде с собой»… Файл благополучно утащит папку с собой. В могилу.

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

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"NoFileFolderConnection"=dword:00000001

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

Читал книгу по Flash (автор Грибов Д.Е.). Много смеялся. Вот одна цитата:

Роль серверного приложения может играть программа, написанная на любом языке программирования. Она способна работать по множеству технологий: CGI, ASP, API, FastCGI, HPH и т. п.

То, что PHP назвали HPH, это бог с ним, опечатка. Но, что «роль серверного приложения может играть программа, написанная на любом языке программирования» или «она способна работать…» ну и далее по тексту. Ну-ка, ну-ка напишите мне серверное приложение на языке программирования SMETANA или xSSI? :) Или заставьте работать программу на языке Perl «по технологии ASP»? :) А уж о том, что CGI, ASP, API и PHP воткнули в один ряд я вообще молчу. В особенности об API. :)

P.S. Хотя, может быть, «ASP, API» следует читать, как «ISAPI», а HPH — это какая-то абсолютно новая, незнакомая мне технология? :)

Почему-то, приняв постулат о близкой смерти Нетскапы 4.хх, я вообразил, что с ним умрет и JavaScript в трактовании Netscape. Я ошибся. Я забыл, что Netscape 6.xx производится той же самой компанией, просто другими парнями, есть еще и новая Mozilla, близкий родственник… В общем, как оказалось, Netscape JavaScript растет и пухнет. Вот, совсем недавно появилась спецификация на, полностью совместимый с ECMA-262 Edition 3, язык JavaScript 1.5.

Из нового. Кратко. Появилась обработка исключительных ситуаций; класс Number получил 3 новых метода: toExponential, toFixed и toPrecision; в регулярных выражения стало возможным использование расширенного синтаксиса («нежадные» выражения, предосмотр и прочее); возможность определения функции внутри if и выражений; появились константы и многое другое.

Что смущает — некоторые свойства и методы объекта RegExp, а так же объявления внутри строк и регулярных выражений символов в восьмеричной системе объявлены «deprecated», т. е. более не рекомендуются к использованию. Не люблю, когда язык становится несовместимым с предыдущими версиями, а это, как известно, обычная политика Netscape.

Вчера еще несколько модифицировал драйвер для модема TAINET T-288C. Сделал нормальное распознавание скорости соединения и наличия/отсутствия сжатия/коррекции ошибок. Ну и еще кое-что, по мелочи. Ссылочка на «скачать» внизу. Кстати, как оказалось, при сбросе стандартной командой ATZ модем загружает user profile #0. Так что, рекомендую туда записать конфигурацию по-умолчанию.

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

99 бутылок: PasScript, ActionScript

20. PasScript. Можно сказать, что это VIRT со всеми присущими ему особенностями и конструкциями (например, «P << [[ 70, 5], <<P]»), только с синтаксисом Object Pascal. Из глюков интерпретатора я заметил нежелание конструкции «for» работать с переменными типов «byte» и «word», плюс конструкция «writeln» сначала печатает перевод строки и только потом —свой параметр.

Скрипт, выводящий песню о пиве (beer.pas)

// Beer song.  Written by Evgeny Stepanischev

program Beer;
procedure PrintBeer( n: byte );
begin
      if n<>0 then write (n)
      else write ('No');

      write (' bottle');
      if n<>1 then write ('s');

      write (' of beer');     
end;

var
  I: integer;

begin
      for I:=99 downto 1 do
      begin
           PrintBeer (I);
           write (' on the wall, ');
           PrintBeer (I);
           write ('.');
           writeln ('Take one and pass around,');
           writeln ();

           PrintBeer (I-1);
           write (' on the wall.');
           writeln ();
           writeln ();
      end;
      write ('No more bottles of beer...');
      writeln ('Go to the store and buy some more...');
      writeln ('99 bottles of beer.')
end.

21. ActionScript5. Внутренний язык Flash5. По виду очень похож на JavaScript (если не считать «add», обязательные точки с запятой и прочие мелочи), даже многие предопределенные объекты те же, но по идеологии — нет. Например, как в JavaScript осуществляется доступ к каким-либо внешним сущностям? Через коллекции. В ActionScript доступ происходит по имени.

Из интересных особенностей интерпретатора… ActionScript от версии к версии сильно изменяется. Вплоть до несовместимости. Так вот, если интепретатору подсунуть Flash предыдущей версии, он выполняет все необходимые преобразования в ActionScript за программиста, комментируя все свои действия.

Скрипт, выводящий песню о пиве.

// Beer song. Written by Evgeny Stepanischev

function PrintBeer (i)
{
    return (i?i:'No') add ' bottle' add (i-1?'s':'') add
    ' of beer';
}


for (i = 99; i>0; i--)
{
    trace ((b=PrintBeer (i)) add ' on the wall, ' add b add '.');
    trace ('Take one down and pass it around,');
    trace (PrintBeer (i-1) add ' on the wall.\n');
};

trace ('No more bottles of beer...\n' add
'Go to the store and buy some more...\n' add
'99 bottles of beer.');


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

Проект «Изголовье», Cmart, warez

Сегодня на полдня остался без Интернета. К перебоям в местной сети приплюсовались проблемы на М9. У господ из АО «Ростелеком» возникли «непредвиденные проблемы при замене фидеров центрального узла».

Скриншот веб-страницы проекта «Изголовье» с зелёным фоном, навигационным меню слева и текстовым блоком справа.
«Изголовье». Скриншот.

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

Лично со мной такое, происходило неоднократно. От попыток найти мышку у телевизора, до попыток «сохранить» закат, что бы использовать его как «обои» в Windows. :) В общем загляните — не пожалеете, ссылочка — внизу.

Ссылку предоставил Head

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

Сегодня на сайте Кулера появилась ссылочка на один очень неплохо сделанный Flash-сайт. Безусловно, посмотреть есть на что. Сходите, только запаситесь терпением, флешки там размером 120-600 килобайт каждая.

Но мне, все же, больше нравится Flash, сделанный дизайнером Cmart. Сказать что-то про то, что можно увидеть у него на сайте, кроме «это что-то необыкновенное», невозможно. Я не буду и пытаться. Просто зайдите. Надеюсь, вам, как и мне, очень понравится.

Кстати, создание на скриншоте справа будет сопровождать вас при просмотре меню, в движении все это смотрится изумительно. Сайт стоит посетить и тем ем, кто был там раньше. Cmart недавно сменил дизайн.

Теперь, что касается warez’a.

Дело PostgreSQL движется к победному концу. В смысле выпуску релиза. Судя по списку изменений в версии 7.1 Realise Candidate 2, релиз, этот самый, не за горами. Уже который раз, что бы не сомневались, повторю: жду с нетерпением.

Мир Windows порадовал меня, и, возможно, кого-то из вас, свежеприготовленным Netscape 4.77 и WinAmp 2.74. Первый выпущен ради улучшенной поддержки W2K, нового Instant Messenger и исправления багов, во втором так же ничего особо полезного, кроме давли жуков, не предвидится. Да и к последнему, спасибо NoNaMe, нашелся русификатор.

Кстати, меня всегда интересовало, что же такого до сих исправляет в полуразложившимся Netscape 4.xx команда его разработчиков. Хотя бы указывала где-нибудь что ли? Мелким шрифтом… черно-серым по черному… в нижнем углу… ну хоть где-нибудь… мне, как веб-мастеру это совсем не фиолетово. Может у кого-нибудь есть список? :)

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

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

99 бутылок: РАПИРА (КИ) и VIRT

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

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

Программа, выводящая песню о пиве (Panupa для Конструктора Исполнителей).

// Песня о пиве. Написал Степанищев Евгений
фун встр (и)
    старш:= и/10
    младш:= и mod 10

    если старш>0
        возврат симв(48+старш)+симв(48+младш)
    иначе
        возврат симв(48+младш)
    всё
кон фун

фун пиво (и)
    если и=0
        стр:= 'No'
    иначе
        стр:= встр (и)
    всё

    стр:= стр+' bottle'
    если и<>1
        стр:= стр+'s'
    всё

    возврат стр
кон фун

проц старт()
    для и от 99 до 1 шаг -1
        печать пиво (и)+' on the wall, '+пиво (и)+'.'
        печать 'Take one and pass it around,'
        печать пиво (и-1)+' on the wall.'
        печать ''
    кц

    печать 'No more bottles of beer...'
    печать 'Go to the store and buy some more...'
    печать '99 bottles of beer.'

кон проц

19. VIRT. Объекно-ориентированный язык. По синтаксису напоминает Object Pascal, Modula 2, Modula 3 и Oberon. Особенности. Специальные конструкции языка позволяют легко задавать списки и деревья, есть возможность перегрузки операторов «+», «-», «[]» и тому подобных, конструкции обработки исключительных ситуаций, вычисления языковых конструкций и многое другое.

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

На сайте есть компонент (45$) для Delphi, позволяющий использовать интерпретатор в качестве внутреннего языка для какого-либо проекта.

Программа, выводящая песню о пиве (beer.w).

-- Песня о пиве. Написал Евгений Степанищев

function PrintBeer(n)
    s := ''
    if n<>0 then
        s := s+str(n)
    else
        s := s+'No'
    end
    s := s+' bottle'
    if n<>1 then
        s := s+'s'
    end
return s+' of beer'

-- Main program

    P := 99
    While P Do
        Writeln( PrintBeer( P )+' on the wall, '+PrintBeer( P )+'.' )
        Writeln( 'Take one and pass it around,' )
        P := P-1
        Writeln( PrintBeer( P )+' on the wall.'+EOL() )
    End

    Writeln( 'No more bottles of beer...' )
    Writeln( 'Go to the store and buy some more...' )
    Writeln( '99 bottles of beer.')
return


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

Новости от FreeInet, Word, Skin, про нежность, ASP lib

Обновления на странице проекта FreeInet. Изменения коснулись информации по доступу в Интернет из города Москва.

Информация предоставлена человеком с аськой 100077.

Показатели легкости чтения: уровень образования 20.0, легкость чтения 8.0, число сложных фраз 0.0%, благозвучие 100.0.
Статитика удобочитаемости. Слово «физиотерапия»

Мучал сегодня вордовый анализатор текста, тот который выдает статистику удобочитаемости. В частности мне было интересно, как этот монстр оценивает показатели легкости чтения, особенно «уровень образования».

Оказывается считает он все это не абы как, а по особой методике, сплошь состоящей из кучи формул. Заинтересовавший меня «уровень образования», например, «основан на образовательном индексе Флеша-Кинсайда… и показывает, каким уровнем образования должен обладать читатель проверяемого документа».

Сами формулы я не смотрел, но у меня есть сомнения, подтверждаемые опытом, что такие величины вообще как-то можно просчитать по формулам допустимой сложности.

Для примера я взял слова «физиотерапия» и «аааа». Так вот, для того, что бы прочитать первое слово вам (как и мне), по мнению Ворда, нужно обладать уровнем образования 20 (15 — последний курс ВУЗа), а второе — 8,8. ;)

Не ожидал, что, обороненная вскользь, просьба подарить адекватный русскоязычный термин к слову «skin» вызовет такой приток писем и сообщения по аське. Подарили. Шуба, одежда, обои, морда, шкура, носок (нда… :), балахон. Всем спасибо. :) Мне понравились «шкура», ну и еще, пожалуй, «носок». Что-то в этом есть… :)

P.S. Кстати, хорошая загадка придумалась: слово из восьми букв с одной только гласной. (отгадка: вскользь).

Словаpь нежных слов v 3.63 от 17/11/1997 г. 363 нежных слова для вашей любимой. Несмотря на дату (97-й год), слова все так же актуальны. Кидаю идейку. Слабо написать генератор «нежных фраз»? Сейчас весна, есть люди, которым очень бы пригодилось, как мне кажется. :)

Напоследок весьма полезная ссылка. Когда я начал программировать на ASP, с удивлением обнаружил, что в этом, предназначенном для разработки сайтов языке, нет обработки заливки файлов через браузер (FILE-форм). Ну нет и нет, вот в Perl тоже нет, но в последнем, в отличие от детища старика Билли, есть методы работы с бинарными файлами (MidB и присные пробуксовывают на \0). Кроме того, обработка заливки хотя бы и текстовых файлов с порядком 2МБ на ASP занимает оооочень длительное время.

Так вот. Проблема решается при помощи сторонних ActiveX-компонентов. Например, я пользовался ASPUpload. Задачу поиска всего этого добра облегчает следующая ссылочка на небольшой сайтик, где, силами самих посетителей все это хозяйство собирается и копится. А вот, собственно, и сама ссылочка.

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

Очередной FreeInet, warez, regexp для английского мата

Для тех, кому интересно: FreeInet теперь обитает по адресу FreeInet2001.chat.ru. Предлагается заглянуть и обзавестись новыми скриптами доступа.

Похоже на прятки какие-то… :) FreeInet прячется, мы его ищем. Вообще, все, что связано с этим проектом — одна большая загадка. Если проект официальный, то какого черта он хостится неизвестно где, все время переезжает и в официальной прессе о нем ни слова, если нет, то почему это дело еще не прикрыли и как этому человеку удается добывать пароли разных провайдеров?

Ссылка предоставлена человеком с аськой 100077.

Переработал, наверное…

Сидел я вчера на диване, смотрел телевизор, фильм, канал «ВарианТ» (не сочтите за рекламу :). На самом интересном, как водится, влепили рекламу. Когда пошла заставка с красивыми маленькими рыбками, мой засыпающий мозг выдал — «это скринсейвер» и руки, на автопилоте, потянулись к несуществующей мышке… :))

Теперь о свеженьком. В мире *NIX.

PHP 4.0.5 не вышел до сих пор, но тем, кому уже невмоготу, могу предложить 4.0.5RC2. Ссылочка внизу, вес — 2,5 мегабайта. Новые функции обильно описаны в доке.

Вышел новый Webmin. Новая версия (0.85) отличается от предыдущей двумя модулями (NIS Client/Server и Shell Commands), улучшенным переводом и кучей мелких довесков и багфиксов. Кроме того, Webmin портирован на i, Redhat 7.1 и MacOS X 1.3. С чем я искренне поздравляю владельцев этих операционок.

Так же позвольте поздравить поклонников MySQL и тех, кому эту СУБД просто приходится (как мне) использовать. На днях вышла ее очередная, 3.23.26-я, версия. Что там нового пока сказать не могу — еще не скачал.

Тронулся лед в отношении конкурирующей PostgreSQL. 3 дня назад вышел 7.1 Realise Candidate 1. Обильные багфиксы, возможность компиляции под Win32, чистка кода, косметические переделки. Так, что дело, видимо, идет к финалу. Что не может меня не радовать.

В темных подвалах мира Windows, точнее той части, что интересует меня — полное затишье. Если не считать GetRight 4.5 beta 3. Можно и не считать. Беты качалок я не люблю. Из опыта. Два раза ставил беты и оба раза они умудрялись скачивать файл так, что он оказывался битым. Так, что — нафик. Но, специально для любителей азартных игр (скачается нормально или нет…) оставляю ссылочку. Внизу.

Ну и под занавес. Регэксп (regular expression), описывающий весь английский мат. :))

fuc?k|[kc]unt|ar[zs]e?hole?|a[sz]?[zs]hole?|face$|pi[zs]?[zs]|shit|wank|pric?k|to[zs]?[sz]er|vagina|vaginer|pu[zs]?[zs][yi]|breath|mo?oke?[iy]|stink|bit?ch|bar?[sz]tar?d|s[kc]rew|bal?l[sz]|bol?lo[kc]?[ck][zs]|gonads?|idiot|mole[zs]ter|mole[sz]t|pen[iu][sz]|anu[sz]|coc?k|horrible|dirty?|filthy?|dic?k|head$|slime|kille[rd]|puke|vomit|suck|spastic|spaz|bugg?ery?|(you )|( you )|(u )|( u )|( of?f$)|( of?f )|[asz]{3,}

Прислано Булатом Каримовым aka System 104.

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

FreeInet, Taintet T-288C driver, Postgres, WinAMP skin

Так, проект FreeInet опять жив. Очередная реинкарнация произошла на Narod.Ru. Всем интересующимся — ссылочка внизу. Да, чуть не забыл, за ссылочку спасибо проекту NoNaMe.

Устав от общения с собственным модемом (TAINET T-288C) через стандартный драйвер, я решил посмотреть все ли так плохо как кажется. Для начала я залез в INF-файл модема, после чего, взяв довольно объемное руководство пользователя, сделал RTFM. Результатом моей работы стал немного подпатченный драйвер и нормальная скорость соединения. И, что особо радует, как следствие, мои бдения по ночам в Интернете стали менее продолжительными и более насыщенными.

P.S. Галочка «сотовая связь» (или как она там называется) не работает. Мне ее просто лень убирать было. Может быть, позже, я навешу на нее что-нибудь осмысленное.

Нет справедливости в Интернете. Вот уже сегодня двадцать пятое число, в смысле марта, а обещанный Postgres 7.1 не вышел. Ну, то есть, вышел, но не как релиз, а как шестая, дай бог последняя, бета. Ну что за безобразие? Ну разве так можно? Как говорил Stan, который Enimen «ну нельзя так с нами, с поклонниками».

Да и еще, о минувшем. Где-то, да что там «где-то»? Вот тут. Я говорил об ускорялке VNC. Так вот. Сегодня у меня, наконец-то дошли руки опробовать это чудо. Как показали испытания чуда не было. Победила не Tight- и не Zlib compression, а вовсе даже Raw-compression. Так что все укорялки я теперь не люблю и пользоваться ими почти что не буду.

Интерфейс плеера Winamp с воспроизведением трека «RUSSKAYA NIRVANA» от группы AQUARIUM, длительность 3:28, битрейт 128 кбит/с, частота 44 кГц, текущее время 0:49.
Скин для WinAMP

А вот из того, что греет мне душу. Нашел очередной skin (подарите адекватный русскоязычный термин?) для WinAMP. Прошу внимания на скриншот. Называется QNX_RTP_AMP (вслух я бы произнести не решился) и качается по ссылочке ниже.

Иееех… Работа затянула. Всем, кто сюда заглядывает, совет: делать это не чаще, чем раз в неделю. Радовать, тех, кто этому радуется, чаще я не могу. Всем пока, до следующего раза.

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

Unix Inet, PHP doc, warez, Cooler

001, 010, 011, 100, 101, вышел зайчик погулять.
(детская считалочка)

Тяжело, наверное, истинному UNIXоиду ориентироваться в Интернете.

Например, сайт www.vi.ru посвящен не консольному редактору vi, как можно было подумать, а телеиграм «Два рояля», «Устами Младенца», «Своя игра» и «100 к одному». Специально для тех, кто не смотрит телевизор: в последнюю не так давно играл «Яndex».

Cайт www.ls.ru, не клуб фанов популярной Unix-команды ls, а вовсе даже принадлежит рекламному холдингу «Locus Standi». И занимается этот холдинг чем угодно, только не показом листинга текущего директория.

Попав на www.who.ru, я сначала подумал, что сайт посвящается «Черному квадрату», но, когда произошел редирект на www.baja.com я понял, что ошибся. В любом случае, к команде who это все не имеет никакого отношения.

Продолжая ряд, www.cat.ru — страничка кота «Нельсона», www.last.ru — демо-версия новостного спортивного портала, www.cd.ru — видеопортал. www.more.ru — национальное информационное партнерство «Море».

Шутка, конечно. :)

Как много видов «ware» вы знаете? Freeware, shareware, adware, emailware… что-то еще? Вчера, посмотрев на низ своей любимой кружки, я узнал еще один. «Tableware». Причем, кружку мне эту подарили, люди, которые не смогли бы догадываться какие ассоциации у меня возникнут в связи с этим словом. :)

Господа из PHP.net, наверное, прочитав мои стенания по поводу их неудобной документации, исправились. Да как! Сегодня 21-е и на сайте PHP еще никаких следов версии 4.0.5, зато в доке уже есть описания функций из новой версии. Желающие приглашаются убедиться, благо внизу заметки есть ссылочка. PHP — хорошая компания, правильная. :)

В копилку ссылок. ddd.deusexmachina.ru/soul. Хорошо мужик пишет, в том смысле, что хочется ему верить и верится. По всему сайту я еще не прошелся, но, по крайней мере про дизайн прочитать стоит. Даже не дизайнерам.

За ссылочку спасибо Наталие Морозовой.

Вышла новая версия моего наилюбимейшего (после Colorer) плагина к FAR ProxyFTP. Новая версия называется FARNavigator и, кроме всего прочего, теперь умеет еще смотреть списки файлов, возвращаемых Веб-серверами через протокол HTTP. Сейчас я пытаюсь уговорить автора научить новую версию отличать папки от файлов, по крайней мере при работе с настроенными по умолчанию Apache-серверами.

Справка для тех, кто не знает для чего предназначен этот плагин. Он умеет работать с FTP (теперь уже и с HTTP тоже) через FTP/HTTP/SOCKS-proxy, чего стандартный делать не умеет. Так что, если вы пытаетесь работать с FTP и находитесь за чем-то подобным, рекомендую скачать.

Да, и кстати o Colorer. Этот плагин номер один (по крайней мере для меня) тоже обновился. Автор выпустил версию Colorer4ever. Тем, кто сейчас будет меня уверять, что пользуется этой версией «вот уже полгода» сообщаю: то, чем пользуетесь вы — бета-версия, попавшая в Большой Мир по недоразумению, а то, что предлагаю скачать я — релиз. Изменения много и описывать я их не буду. Субъективное мнения, а я его использую под HTML/Perl/PHP/JavaScript/VBScript/ASP — стало лучше. Намного.

Краткая инструкция: ссылочки внизу, качать надо оба файла. Первый ставится в Program Files/Colorer, второй — как обычный плагин, после чего запускается исталлятор (setup.bat).

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

Читаем Excel 2.0

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

Проблема заключалась в чтении данных из формата Excel 2. Обычно, под ASP для доступа к Excel используется ADODB. Загвоздка в том, что драйвер, используемый системой в этом случае работает с форматом Excel версий 3.0 и выше. Так что мне пришлось искать другой путь.

Попытки найти другой драйвер или использовать DDE ничего не дали, я решил поискать в Интернете описание этого формата и попробовать написать собственный парсер (WinCGI). Выручила поисковая машина Google, просмотрев более 500 ссылок, я нашел то, что искал.

Итак, формат Excel 2 a.k.a. Excel BIFF представляет собой набор записей (record) определенного формата:

| Заголовок записи  | Тело записи
Номер байта      | 0    1    2    3  | 0    1   ...
                -----------------------------------
Содержимое       | XX | XX | XX | XX | XX | XX | ...
                -----------------------------------
                 | тип     | длина   | данные

В первых двух байтах записан числовой тип записи, о нём позже, далее идут два байта, это длина данных, далее — сами данные. Записи — это то, чем мы будет оперировать.

Пример на Delphi, читающий одну запись:

...
var F: File of byte;
    Opcode, Len,
    Code: Word;
    Operand: Array of byte;

begin
        AssignFile(F, 'имя_файла.xls');
        FileMode := 0;
        Reset(F);

        BlockRead (F, Opcode, 2);
        BlockRead (F, Len, 2);
        SetLength (Operand, Len);
        BlockRead (F, Operand[0], Len);
        Proccess (Opcode, Operand); // Функция для обработки записи
        CloseFile (F);
end;

Типов записей около 64, но я, для обработки данных, использовал только 7. Заголовок файла (BOF), где описан версия файла и его тип; размер листа Excel (DIMENSION); пустая запись (BLANK); целое число (INTEGER); строка (LABEL); число с плавающей точкой (NUMBER), совмещенное поле — логический тип или поле ошибки (BOOLERR) и поле формата числа (FORMAT).

Семь типов записей:

const xBOF       = 09;
      xDIMENSION = 00;
      xFORMAT    = $1E;
      xBLANK     = 01;
      xINTEGER   = 02;
      xLABEL     = 04;
      xNUMBER    = 03;
      xBOOLERR   = 05;

Запись типа BOF содержит два слова [1]. В первом записана версия файла (в данном случае «2») и тип файла (обычно это $10 [2] — worksheet). Эта запись — первая в любом файле формата Excel, прежде чем заниматься дальнейшим разбором стоит проверить ее содержимое.

Следующий тип, DIMENSION содержит данные о размере листа данных. Запись этого типа содержит четыре слова: номер первой строки, номер последней строки плюс один, номер первого столбца, номер последнего столбца плюс один. Я использую это поле для выделения места под данные, которые будут преобразованы из Excel.

Тип FORMAT содержит в поле данных строку форматирования в виде Pascal string (т. е. в первом байте длина, далее — строка). Строки формата идентифицируются в порядке следования, начиная с нуля. Тут есть одна тонкость: типы, выбираемые в Excel из списка «Формат ячеек», хранятся, как INTEGER или NUMBER. То, как они будут представлены человеку определяется форматными строками. Форматы даты и времени совпадают с принятыми в функции FormatDateTime среды разработки Delphi, а численные форматы могут быть легко сведены к параметрам функции Format.

BLANK — пустое поле. Как и любой из последующих типов, содержит в первом слове строку, а во втором — столбец ячейки на листе Excel.

INTEGER — целое. В 7 и 8-м байте (в 4-м слове данных) содержится обычное двухбайтовое целое. Как я понимаю, знаковое. В первых 6 битах пятого байта записан номер формата число (см. FORMAT).

LABEL — строка. Начиная с 7-го байта записан Pascal string. Пример чтения этого и следующих типов будет ниже.

NUMBER — число. С 7-го байта записано число с плавающей точкой в формате IEEE. Так же, как и для INTEGER в первых 6 битах 5-го байта записан номер формата.

BOOLERR — в 8-м байте указывает используется ли это поле для булевского типа (записан «0») или содержит ошибку (записан «1»). Само значение, как не трудно догадаться, записано в 7-м бите («0» — ложь, «1» — истина). Я обрабатывал только булевскую часть.

Простой пример чтения LABEL, NUMBER и BOOLERR.

...
Procedure Proccess (Opcode: Word; Op: array of byte);
var Str: ShortString;
    Dbl: Double;

Begin
        if (Opcode=xLABEL) Or (Opcode=xBOOLERR) Or (Opcode=xNUMBER) Then
        Begin
                iX:=Op[2]+Op[3]*256;
                iY:=Op[0]+Op[1]*256;
        End;

        Case OpCode of
        xLABEL:   begin
                        Move (Op[7], Str, SizeOf(Str));
                        MBuff[iY][iX]:= Str;
                  end;

        xBOOLERR: If Op[8]=0 Then MBuff[iY][iX]:= IntToStr(Op[7]) Else
                  MBuff[iY][iX]:= '';

        xNUMBER:  begin
                        Move (Op[7], Dbl, 8);
                        MBuff[iY][iX]:= FloatToStr (Dbl)
                  end;
End;

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

[1] слово (здесь) — два байта, записанных в обычном, для процессоров Intel, порядке: сначала младший, потом старший. В Delphi — это тип word.
[2] в Паскале запись вида $00 означает шестнадцатеричную систему счисления.

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

Довесок к TheBAT!, PgSQL 7.1, соединение без хаба

Потрясающая новость! Меня — потрясла. :) Выход релиз новой версии PostgreSQL 7.1 назначен на 15-е число этого месяца. Ну наконец-то! Что ж так долго, ребята? Все, чего я ждал — это неограниченный по размеру тип text. Ну и, конечно, от всего того, что перечисленно в change-log я не отворачиваюсь. Сделали — пусть будет.

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

Чёрная буква «Г» и цифра «1» на белом фоне.

Надеюсь, в ней все кристально ясно. Если нет, то объясню первую строчку. Она означает, что выход «1» первого разъема соединяется с оранжево-белым проводом, а тот же выход второго — с зелено-белым. Найти первую ножку поможет рисунок.

Соединение компьютер-компьютер на 10Mbs

Разводка первого разъема Разводка второго разъема
1 оранжевый с белым 1 зеленый с белым
2 оранжевый 2 зеленый
3 зеленый с белым 3 оранжевый с белым
4 синий 4 синий
5 синий c белым 5 синий c белым
6 зеленый 6 оранжевый
7 коричневый с белым 7 коричневый с белым
8 коричневый 8 коричневый

Кроме того, оказывается, есть способ разрешить подобного рода затруднения, если машин не две, а три. Рецептик заботливо сохранен уважаемым DiBR’ом, где я его, вооружившись Яндексом и нашел. Публикуется без каких-либо изменений.

Соединение 3-х компьютеров через витую пару без хаба.

- (SU.HARDW.SCHEMES) ----------------------------------------------------------
 From : Alex Harthenko           2:5030/561.22
 To   : Timofey Yakushev
 Subj : сеть на витухе без хаба 
 
  
   
    Hello, Timofey !

 Писал(а) как-то Среда 03 Марта 1999 19:21 , Timofey Yakushev к All:
 TY&gt; Слышал я, что существует вариант соединения 3 (если не больше) машин
витухой
 TY&gt; без хаба. Точнее там собирали что-то типа пассивного хаба на резюках... Hи
у
 TY&gt; кого этих схем не завалялось?
Схемы не завалялось, но делается пpимеpно так:

12 pезистоpов 82 ома спаивается в кольцо, RX и TX пеpвой сетевyхи пpипаиваются
к кольцy пеpпендикyляpно дpyг к дpyгy, втоpой сетевyхи - пеpепендикyляpно дpyг
дpyгy и под yглом 30гpад. к пеpвой, тpетьей - соотв. 60 гpад.

 v Среда 17 Марта 1999  18:46
 v Алекс Харченко

... [VFreq] [GPM alpha team]
--- GoldED/2 2.50+.
 * Origin: Keyboard error! Press F1 to continue... (2:5030/561.22)

Чего только не узнаешь. :) Схему я не пробовал — мне без надобности. Если кто-то соберёт — напишите, пожалуйста, на предмет отзывов о работоспособности.

Не прощаюсь,
Евгений Степанищев

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

Кряк к Apache, «русские» домены и нечто на C

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

***

Сегодня, просматривая сайт с кряками (грешен, каюсь :), нашел одну любопытную вещицу. А именно кряк к… Apache Web Server. Я в недоумении. Чего там крякать-то? Он же это… как его… фриварный… Качать и запускать не стал, вдруг троян какой-нибудь. :)

***

С 26 февраля стало возможным зарегистрировать доменное имя в зонах com, net, org в русском написании. Через 3—4 месяца обещают завершить работу «над новой мировой инфраструктурой. До этого момента полноценное использование „русских“ адресов… будет ограничено».

Ссылка предоставлена Jazz The Boot

***

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

#include <stdio.h>
main(t,_,a)
char *a;
{
        return!
0<t?  /* Ternary block #1 start */

t<3?  /* Ternary block #2 start */

main(-79,-13,a + main(-87,1-_, main(-86, 0, a+1 ) +a)):
1,

t<_?
main(t+1, _, a )
:3,

main ( -94, -27+t, a )
&&t; == 2 ?_
<13 ?

main ( 2, _+1, "%s %d %d\n" )

:9:16:
t<0?
t<-72?
main( _, t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#;\
#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;\
q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; \
r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;\
{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:
t<-50?
_==*a ?
putchar(31[a]):

main(-65,_,a+1)
:
main((*a == '/') + t, _, a + 1 )
:

0<t?

main ( 2, 2 , "%s")
:*a=='/'||

main(0,

main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry")

,a+1);}

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

Евгений Степанищев a.k.a. BOLK

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

99 бутылок: Оберон-2, Ox

16. Oberon-2. Язык Оберон был создан автором Паскаля и Модулы-2 Никлаусом Виртом в 1987 году. В 1992 году Вирт и Ханспетер Мёссенбёк добавили в язык ряд новых средств. Так родился Оберон-2.

Считается, что язык это крайне простой и аскетичный. Лично мне он не понравился. Уж не знаю чем. Впечатлил меня транслятор. Использовал я JOB v0.75 С.Свердлова. Интересен он тем, что переводит программу на Оберон-2 в байт-коды Java, т. е. файл с расширением .class, который, в свою очередь, можно запустить на любой Java-машине.

Отсюда и, встречающиеся в листинге, строчки «javalang» и «javalang.PString». Думаю, транслятор этот пригодится Pascal-ориентированным программистам, которым понадобилось написать пару апплетов или классов Java.

Программа, выводящая песню о пиве (Oberon-2).

(* Beer song. Written by Stepanischev E.V.*)

MODULE Beer;

IMPORT javalang, Out;

PROCEDURE PrintBeer( n : INTEGER );
BEGIN
   IF n#0 THEN Out.Int (n,1) ELSE Out.String ("No") END;
   Out.String (" bottle");
   IF n#1 THEN Out.Char ("s"); END;

   Out.String (" of beer");
END PrintBeer;


PROCEDURE main*( VAR args : ARRAY OF javalang.PString );
VAR beer: INTEGER;
BEGIN
   Out.Open;
   FOR beer:=99 TO 1 BY -1 DO
      PrintBeer (beer);
      Out.String(" on the wall,");
      PrintBeer (beer); Out.Char ("."); Out.Ln;
      Out.String ("Take one and pass it around,"); Out.Ln;
      PrintBeer (beer-1);
      Out.String (" on the wall."); Out.Ln; Out.Ln;
   END;
   Out.String ("No more bottles of beer..."); Out.Ln;
   Out.String ("Go to the store and buy some more..."); Out.Ln;
   Out.String ("99 bottles of beer.");

END main;

END Beer.

17. Ox («Окс») — объектно-ориентированный язык с обширными математическими и статистическими библиотеками. Например, в языке, напрямую, можно перемножать две матрицы или производить инверсию. К другим особенностям можно отнести способность языка импортировать некоторые распространённые форматы данных. Например, такие типы, как in7, xls, wks, dht, fmt, можно сразу прочитать в матрицу. Синтаксис Ox, по утверждению авторов, похож на языки Си, Си++ и Java. Интерпретаторы и трансляторы в Си этого языка существуют под Windows, MS DOS, Linux, SunOS, Dec-Unix, Irix, HP-UX и IBM AIX. Лично я пользовался бесплатным консольным интерпретатором версии 2.20 под Windows.

Программа на языке Ox.

// Beer song. Written by Evgeny Stepanischev
#include <oxstd.h>

printbeer (const beer)
{
    print (beer?beer:"No", " bottle", beer-1?"s":"");
}


main()
{
    decl beer;

    for (beer = 99; beer > 0;)
    {
         printbeer (beer);
         print(" on the wall, ");
         printbeer (beer);
         print (".\nTake one and pass it around,\n");
         beer--;
         printbeer (beer);
         print (" on the wall.\n\n");
    }

    print ("No more bottles of beer...\n",
    "Go to the store and buy some more...\n",
    "99 bottles of beer.");
}


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

ЯузОС, прежний FreeInet, «Полиглот»

Яуз О

«ЯузОС» (Кодовое название «Dead Fish») — новейшая операционная система. Как и положено новейшим программам, она полностью 64-х разрядная, т. к. создавшие её программисты были не ниже 64-го разряда квалификации. «ЯузОС» базируется на ядре от Царь-пушки версии 1.02.33…

Нравится? :)) Ссылочка «на почитать» в конце заметки.

***

Ожила страничка о бесплатном доступе в Интернет по своему прежнему адресу. Так что страничек, посвященных этому удивительному явлению, теперь целых две. Ссылочка, как и водится, ниже, в «ссылках по теме».

Ссылка предоставлена Cyber Lirik

***

Как вам такое? Программа, написанная сразу на 7 языках: COBOL, ISO Pascal, ANSI Fortran, ANSI C, PostScript, Shell Script и машинном языке процессора 8086. Все инструкции по запуску — в комментариях листинга. Две пустые в начале программы обязательны для нормального функционирования!

Листинг программы «Полиглот»

(*O/*_/
Cu  #%* )pop mark/CuG 4 def/# 2 def%%%%@@P[TX---P\P_SXPY!Ex(mx2ex("SX!Ex4P)Ex=
CuG #%*                                                                  *+Ex=
CuG #%*------------------------------------------------------------------*+Ex=
CuG #%*   POLYGLOT - a program in seven languages      15 February 1991  *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*   Written by Kevin Bungard, Peter Lisle, and Chris Tham          *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*   We have successfully run this program using the following:     *+Ex=
CuG #%*     ANSI COBOL:            MicroFocus COBOL85 (not COBOL74)      *+Ex=
CuG #%*     ISO  Pascal:           Turbo Pascal (DOS &amp; Mac), Unix PC,    *+Ex=
CuG #%*                            AIX VS Pascal                         *+Ex=
CuG #%*     ANSI Fortran:          Unix f77, AIX VS Fortran              *+Ex=
CuG #%*     ANSI C (lint free):    Microsoft C, Unix CC, GCC, Turbo C++, *+Ex=
CuG #%*                            Think C (Mac)                         *+Ex=
CuG #%*     PostScript:            GoScript, HP/Adobe cartridge,         *+Ex=
CuG #%*                            Apple LaserWriter                     *+Ex=
CuG #%*     Shell script:          gnu bash, sh (SysV, BSD, MKS), ksh    *+Ex=
CuG #%*     8086 machine language: MS-DOS 2.00, 3.03, 4.01, 5.00 beta    *+Ex=
CuG #%*                            VPix &amp; DOS Merge (under unix)         *+Ex=
CuG #%*                            SoftPC (on a Mac), MKS shell          *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*   Usage:                                                         *+Ex=
CuG #%*     1. Rename this file to polyglot.[cob|pas|f77|c|ps|sh|com]    *+Ex=
CuG #%*     2. Compile and/or run with appropriate compiler and          *+Ex=
CuG #%*        operating system                                          *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*   Notes:                                                         *+Ex=
CuG #%*     1. We have attempted to use only standard language features. *+Ex=
CuG #%*        Without the -traditional flag gcc will issue a warning.   *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*     2. This text is a comment block in all seven languages.      *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*     3. When run as a .COM file with MS-DOS it makes certain      *+Ex=
CuG #%*        (not unreasonable) assumptions about the contents of      *+Ex=
CuG #%*        the registers.                                            *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*     4. When transfering from Unix to DOS make sure that a LF     *+Ex=
CuG #%*        is correctly translated into a CR/LF.                     *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*   Please mail any comments, corrections or additions to          *+Ex=
CuG #%*   peril@extro.ucc.su.oz.au                                       *+Ex=
CuG #%*                                                                  *+Ex=
CuG #%*------------------------------------------------------------------*QuZ=
CuG #%*                                                                  *+Ex=
CuG #%*!Mx)ExQX4ZPZ4SP5n#5X!)Ex+ExPQXH,B+ExP[-9Z-9Z)GA(W@'UTTER_XYZZY'CPK*+
CuG #(*                                                                  *(
C   # */);                                                              /*(
C   # *)  program        polyglot (output);                             (*+
C   #     identification division.
C   #     program-id.    polyglot.
C   #
C   #     data           division.
C   #     procedure      division.
C   #
C   # * ))cleartomark   /Bookman-Demi findfont 36 scalefont setfont     (
C   # *                                                                 (
C   #
C   # *                  hello polyglots$
C   #     main.
C   #         perform
C     * ) 2>_$$; echo   "hello polyglots"; rm _$$; exit
              print
C             stop run.
     -*,                'hello polyglots'
C
C         print.
C             display   "hello polyglots".                              (
C     */  int i;                                                        /*
C     */  main () {                                                     /*
C     */      i=printf ("hello polyglots\n"); O= &amp;i; return *O;         /*
C     *)                                                                (*
C     *)  begin                                                         (*
C     *)      writeln  ('hello polyglots');                             (*
C     *)                                                                (* )
C     * ) pop 60 360                                                    (
C     * ) pop moveto    (hello polyglots) show                          (
C     * ) pop showpage                                                  ((
C     *)
           end                                                          .(* )
C)pop%     program       polyglot.                                      *){*/}

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

Яуз ОС
Старый FreeInet

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

JS-FTPD, снова Opera on FD и нечто на Перле

JS-FTPD

Пару дней назад, размышляя на тему PS-HTTPD, я вдохновился написать что-нибудь серверное, причем на каком-нибудь языке, совершенно для этого не предназначенном. И, как всегда, под рукой ничего, кроме JavaScript, не оказалось.

В качестве платформы я выбрал Netscape Commucator. JavaScript, как и PS, не имеет встроенных средств для работы с сокетами. Так что мне их пришлось «заимствовать» у Java, благо, что технология LiveConnect от Netscape позволяет это сделать.

Таким образом, пообщавшись телнетом с War-FTP и убив на всё два вечера, я получил вполне рабочий однопользовательский JS-FTPD.

  • Количество пользователей, обслуживаемых одновременно: 1;
  • Максимальная скорость передачи: 3Кб/сек;
  • Порт для подключения: 40001;
  • Поддержка докачки: есть;
  • Поддержка пассивного режима (RFC 1579): есть;
  • Поддержка OPTS и FEAT (RFC 2389): есть;
  • Поддерживаемые комманды: USER, PASS, QUIT, SYST, PWD, PORT, LIST, CWD, MODE (S), TYPE, RETR, SIZE, REST, OPTS, FEAT, NOOP, STRU (F), PASV, MDTM, CHUP.

Для запуска сервера нужно создать на диске C: каталог «Server» (его содержимое сервер будет показывать) и, открыв страничку под NC 4.xx¹, нажать на кнопку «Start».

Потом, настроив FTP-клиент² на соединение с адресом 127.0.0.1 через порт 40001, можно будет подключиться к серверу.

¹ Испытано под NC 4.7 и NC 4.75.
² Испытано под NC 4.7, 4.75, IE 5.0, 5.5SP1, Opera 5.02, FAR 1.70b2 FTP, FAR ProxyFTP 1.7r2.

Меня попросили выложить мой вариант «Opera on FD» куда-нибудь поближе. Выкладываю на Chat.ru. Качать тут.

На закуску. Программа на языке Perl, выводящая на экран «another Perl hacker». Найдено у DiBR’a.

$\='`'|"'";$\++;$;='/'|'`';$;++;$;++;$;++;$,=$;;$,++;$/=$,;$/++;$:=$/;$:++;
$_='%'|'`';$_.='`'|'#';$_.=$\;$_.='`'|'/';$_.=$".'"';$_.='@'|'*'&~'!';
$_.="$:$,$/".$";$_.='`'|'!';$_.='`'|'.';$_.='/'|'`';$_.=$/.$\;$_.='%'|'`';
$_.=$;.$";$_.='@'|':'&~'*';$_.='`'|'%';$_.=$;;$_.='`'|',';$_.=$".$\;
$_.='`'|'!';$_.='#'|'`';$_.='+'|'`';$_.='`'|'%';$_.=$;.'"'.$".'>&';
$_.=$,&':';`$_`;

Красота, неправда ли? :)

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