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.");
}


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

Кряк к 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

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

Довесок к 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)

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

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

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

Читаем 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 означает шестнадцатеричную систему счисления.

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

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).

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

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 (вслух я бы произнести не решился) и качается по ссылочке ниже.

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

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

Очередной 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.

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

← сюда туда →