айрхеология
99 бутылок: Старсет
Семьдесят четвёртый выпуск считалочки «песни о пиве», которую я пишу на разных языках программирования, для разнообразия сделаю на языке родом из СССР.
74. Старсет — язык программирования высокого уровня, разработанный в Институте программных систем РАН в 1991 году. К сожалению, мне не удалось обнаружить компиляторов или интерпретаторов этого языка, и даже упоминания, что они вообще
Поэтому программировать пришлось исключительно по описанию языка, почерпнутого из книжки, купленной за двести рублей с рук в интернете.
Язык, кстати говоря, небезынтересный — в наличие имеется развитая работа со множествами и свой язык регулярных выражений («образцов»), который может применяться не только на скалярах, но и на множествах! Кроме того имеются операторы, позволяющие распараллеливать вычисления!
Помимо скаляров и множеств, язык поддерживает «классы» — насколько я понял, своеобразные вычисляемые «срезы» множеств
Например, попробуйте разобраться в этом отрывке («каноническая запись», как утверждается выше процитированного — это когда отброшены все незначащие нули):
Каноническим числовым представлением нуля будем считать слово 0. В частности, каноническим числовым значением слова 1 является оно само, каноническим представлением слова 2 является слово −6, каноническим представлением слова 3 — слово 67000000000000000.
Я, сколько ни пытался, не смог уловить закономерность.
Программы по внешнему виду сильно напоминают «Паскаль» — совпадают некоторые конструкции и принципы, но, конечно же, есть и вещи, которые сильно отличаются.
Выполнение программы выполняется с первой процедуры и завершается с выходом из неё. Возврат значения из функции (тут она называется
/* Считалочка про пиво на языке «Старсет». Написал Евгений Степанищев */
/* https://bolknote.ru */
Func Бутылки(колво)
Word: Бутылки, колво;
Choice
Case колво = 1 Do Бутылки := '1 bottle' End
Case колво = 0 Do Бутылки := 'no bottles' End
Otherwise Do Бутылки := колво^' bottles' End
Endfunc
Proc Песня()
Word: колво, бутылок;
колво := 99;
бутылок := Бутылки(колво);
While колво > 0 Do
Write бутылок^' of beer on the wall, '^бутылок^' of beer.';
колво := колво - 1;
бутылок := Бутылки(колво);
Write 'Take one down and pass it around, '^бутылок^' of beer on the wall.';
Write ''
End
Write 'No more bottles of beer on the wall, no more bottles of beer.';
Write 'Go to the store and buy some more, 99 bottles of beer on the wall.'
EndprocВсе строки заключаются в апострофы, которые в книге имеют непривычный вид (’), я не стал их тут использовать, вряд ли это
Ещё необычно выглядит операция конкатенации — ^ и повторения строки — ^^.
Write 'МА' ^^ '2 раза' /* Будет выведено «МАМА», так как «2 раза» преобразуется к двойке */С удовольствием познакомился с языком, благо он не выглядит, как
ФИДО ★
Не знаю как кратко объяснить что такое Фидонет (Фидо) тем, кто никогда о нём не слышал. Наверное можно сказать, что это одна из первых социальных сетей, некогда связавшая очень специфичных людей — в те времена, когда интернет ещё не был распространён. Сложность подключения была своеобразным тестом на интеллект, а строгие правила требовали владения социальными навыками,
В моём случае так получилось, что высокоскоростной доступ к интернету я получил раньше, чем Фидо смогло заинтересовать меня своими преимуществами, поэтому я
Самое моё значимое участие в жизни Фидо —
Для айтишника старой школы, к которой я себя отношу, отсутствие интереса к легендарному Фидонету
Сегодня заявку одобрили и дали мне поинта (адрес) 2:5020/723.67. Скачал клиента HotdogEd под Андроид, установил ему плагин HotdogEd Fidonet Provider, заполнил настройки из присланного в ответ на заявку письма, и вот я в Фидо.
Для меня названия настроек были настолько не самоочевидны, что я было приуныл, но оказалось, что обязательных всего четыре. Если вдруг тоже захотите подключиться, то указывать надо следующее:
- «Boss 3D FTN address» — адрес ноды (в моём случае — 2:5020/723)
- «Your name» — «имя» из ответного на заявку письма
- «Your 4D FTN address» — ваш
поинт-адрес (в моём случае — 2:5020/723.67) - «Password» — пароль из письма
Потом останется подписаться на интересующие вас «эхи» (каналы) и можете начинать общаться. Я пока подписался на две локальные и на su.talks — всероссийскую болталку.
Пока причастности к легенде не почувствовал, но гештальт, надеюсь, закрыл.
«Chomp!»
С тех пор, в те редкие моменты, когда
Иногда я её пытался нагуглить, но без результата, и уже начал думать, что это
Вчера решил предпринял очередную попытку, гуглил до изнеможения, пока не нашёл
Подумал — не могла ли та игрушка быть частью этого плеера? Скачал его инсталлятор примерно тех времён, распаковал и вздохнул с облегчением — внутри нашлись файлы
У меня на ноутбуке уже есть виртуализация — «Parallels Desktop»
Потом поставил внутрь «Нетскейп Навигатор 4.04», «Космо Плеер 2.1», «DCOM95», «DirectX 8.0a» и универсальный видеодрайвер. Именно с таким набором ПО всё завелось и довольно шустро заработало.
Файлы передавал через образы, монтируя их в виртуальной среде как сидиром. Оказалось «Дисковая утилита» «Мака» умеет такие образы создавать (только надо выбирать гибридный формат без сжатия).
Всё как я помнил — плавает акула,
Интернет-археология: браузер ViolaWWW
★
Пока читал про «
Эта вещь достойна внимания
Автор написал несколько программ на своём языке, например — шахматы. Я пока не нашёл документацию, зато обнаружил несколько примеров. Например, скрипт выводящий синусоиду:
\class {field}
\name {wave}
\parent {}
\children {wave.sb}
\script {
switch (arg[0]) {
case "graph":
f = float(arg[1]);
xx = width();
r = height() / 2.0;
theta = 0;
for (x = 20; x < xx; x += 2) {
theta = theta + 0.1;
y = sin(theta * f) * r + r;
drawLine(x, y, x, y + 1);
}
return;
break;
}
usual();
}
\width {300}
\height {200}
\
\class {slider}
\name {wave.sb}
\parent {wave}
\script {
switch (arg[0]) {
case "_shownPositionV":
usual();
send(parent(), "graph", arg[1]);
return;
break;
}
usual();
}
\x {2}
\y {2}
\width {15}
\height {200}
\shownSizeV {10}К сожалению, позапускать программы пока нечем. Исходный код я нашёл, но под Линуксом он компилироваться не захотел, собственно, судя по коду, он никогда под ним и не собирался. Я сделал минимально необходимые правки, код собрался, но попытка запуска завершилась крахом. Подумаю стоит ли тратить силы дальше.
Даже интересно какой бы веб мы увидели сейчас, если бы этот браузер тогда получил дальнейшее распространение! Получается
Насколько я могу видеть, поддерживалось более десятка форматов графики, в том числе всем знакомый GIF, правда без анимации и в формате 1987 года, а так же сейчас уже экзотический XBM (до относительно недавнего времени поддерживался «Эксплорером», «Сафари» и «Оперой»).
99 бутылок: Cmm, интернет-археология
61. Cmm. Язык «Cmm» был разработан в 1992 году компанией «Nombas». Основной идеей языка было упрощение языка «Си», отсюда и название — C minus minus. Официальное руководство говорит, что это «Си, минус объявление типов, минус указатели». Позже язык был переименован в ScriptEase, так как упоминание «Си» отпугивало людей. Язык существовал для ДОСа, Виндоуз, ОС/2 и операционной системы компании «Новелл».
В конце 1995 года компания создала версию скриптового языка
Язык действительно простой — типы выводятся из использования, массивы без указания размера, нет явного выделения и освобождения памяти, указателей не видно.
Массивы и строки, хоть и являются указателями (есть даже арифметика с ними), но этого не замечаешь — выглядят, как обычные переменные. Все lvalue передаются по указателю, для передачи по значению есть специальный синтаксис. Забавно, кстати, что точка с запятой не обязательна, прямо как в ДжаваСкрипте.
Остальные отличия от «Си» не столь заметны. Языки почти что близнецы, есть даже ограниченный предпроцессор, да и встроенные функции, в основном, сишные. Язык, видимо, претендовал сразу на несколько ниш, на нишу коммандных оболочек в том числе — в составе предпроцессора есть команда, позволяющая импортировать куски программ, указывая с какой по какую строку производить импорт. Насколько я смог заметить, это широко используется, чтобы внедрять «СиЭмЭм» внутрь
// Written by Evgeny Stepanischev, 2017
BottlesPlural(Beer)
{
switch ( Beer )
{
case 0:
return `no bottles`
case 1:
return `1 bottle`
default:
sprintf(Bottles, `%d bottles`, Beer)
return Bottles
}
}
i = 99
Bottles = BottlesPlural(i)
while ( i > 0 ) {
printf("%s of beer on the wall, %s of beer.\n", Bottles, Bottles)
Bottles = BottlesPlural(--i)
printf("Take one down and pass it around, %s of beer on the wall.\n\n", Bottles)
}
printf("No more bottles of beer on the wall, no more bottles of beer.\n")
printf("Go to the store and buy some more, 99 bottles of beer on the wall.\n")Если
Тег HYPE (Netscape HYPE tag sound)
Пятнадцать лет назад, ковыряя исходники браузера «Нетскейп», я наткнулся, в частности, на тег HYPE — в интернете того времени писали, что он воспроизводит
Сегодня за завтраком, по другому случаю наткнувшись на свою же статью об этом теге, я подумав, что
Но времена же изменились! Теперь у нас есть виртуализация, образы виртуальных машин и быстрый интернет!
Файл оказался в формате .snd, который нормально открылся и проигрался уже в современном «Маке». Его содержимое — фраза «What is global hypermedia?» (из документа NCSA Mosaic Demo 1993 года, как объясняется на одной из страниц в интернете).
Я сконвертировал его в обычный МП3 и, если ваш браузер достаточно современный, можете послушать как звучит тот самый секретный тег:
Кстати, жаль, что я не догадался проиграть его на оригинальном «Макинтоше» в музее Эпл, в Москве. Если представиться случай, обязательно попробую!