vak: (Default)
Сергей Романенко отсканировал и выложил ценнейшую книжку по языку программирования Рефал. Скачать можно здесь: PDF, DJVU.



Современные реализации Рефала можно отыскать на Гитхабе, к примеру: https://github.com/cmc-msu-ai/refal
vak: (Default)
Война с путинизмом всё еще продолжается, и конец пока не виден, но украинцы с оптимизмом смотрят в будущее.

Британские солдаты танцуют сегодня на улицах Киева в поддержку свободной Украины.

vak: (Default)
Астрономией я увлёкся лет с двенадцати: мы с друзьями мастерили телескопы, наблюдали переменные звёзды и метеорные потоки, томик "Астрономия" детской энциклопедии зачитали до дыр. Увидеть солнечное затмение, да еще полное, было недостижимой мечтой. С годами увлечение рассеялось, но насчёт затмения 2017 года вопрос даже не возникал: понятно было, что мы едем всей семьёй, и нам нужно именно полное затмение.

Поизучав карты, я определился с местом: штат Орегон, плоскогорье около города Madras. На такой высоте в пустынном климате облачность маловероятна. Местность малонаселённая, много второстепенных дорог: мы решили просто остановиться в нужное время на обочине и глазеть. Надо только добраться вовремя.



Гостиницы мы начали резервировать за два месяца, и то еле успели: был всего один свободный номер в мотеле в Портленде. Путь от нас неблизкий: десять часов ехать не останавливаясь, если без пробок. Для промежуточной ночёвки выбрали Grants Pass, нам очень понравился этот городок в предыдущую поездку. После Портленда на обратном пути решили заночевать в Klamath Falls и посетить парк Lava Beds.

День первый, суббота.

Едем из Санта Клары в Грантс Пасс. Пьём кофе в старбаксе в Willows. Купаемся в озере Siskiyou. Ужинаем в городке Ashland, самый юг штата Орегон. Ашланд известен ежегодным шекспировским фестивалем, который длится полгода, с февраля по октябрь, и где на сценах трёх городских театров идут 11 спектаклей. Вероятно, это самое театральное место во всей америке. Ресторан Larks тоже не разочаровал.



Над озером Siskiyou стоит сильная дымка: задувает дым от пожаров в лесах со стороны океана. Зато солнце не так припекает. Впрочем, жара стоит изрядная.



День второй, воскресенье.

Двигаемся из Грантс Пасс в Портланд. Пополняем запасы еды по пути в городе Eugene. В Портланде бросаем вещи в гостинице и торопимся посмотреть город. Успеваем на экскурсию на кораблике по реке Willamette, с показом и подробным рассказом про историю всех мостов Портланда. Мостов всего мы насчитали десять штук. Прогуливаемся по центральной набережной. Здесь же ужинаем в прикольном ресторанчике Bottle+Kitchen, где знакомимся с пожилой американской парой из Лос Анджелеса, и рассуждаем с ними об отличиях между Путиным и Трампом.



На столбах попадаются протестные наклейки против Трампа и белых супремистов.



По реке плавает "пивоход": пассажиры пьют пиво и крутят педали, как на велосипеде.



День третий, понедельник.

В шесть утра выдвигаемся из гостиницы и направляемся к Мадрасу, чтобы успеть занять стратегическую наблюдательную позицию. Красивейшая дорога (шоссе 26) проходит через могучие леса, мимо горы Mount Hood, и дальше по плоскогорью заповедника Warm Springs.



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





Тень Луны на поверхности Земли имеет диаметр 70 миль. Вот как это выглядело в окрестностях Мадраса. Точка, с которой мы наблюдали, находится на шоссе №26 ровно посередине между Warm Springs и Madras.



Полная фаза затмения - вещь короткая, всего две с лишним минуты, но очень красивая. Солнечная корона поражает! Как только скрывается последний лучик солнца, появляется изумительное белое сияние вокруг чёрного круга Луны. К сожалению, наши фотоаппараты и телефоны не смогли её запечатлеть. Вот фотография с сайта обсерватории Старшей школы Мадраса:



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



Дальше наше везение кончилось. Расстояние в шесть миль на юг через Мадрас мы осилили за четыре часа. Чтобы разместить всех желающих заночевать, местные власти развернули вокруг города несколько временных посёлков для автомобилистов. Сразу после затмения все эти люди выехали на шоссе в надежде уехать побыстрее - увы. Вот так это выглядело:



После Мадраса дело пошло лучше, и в городе Bend мы завалились подкрепиться в забавный ресторан в здании бывшей кузницы, с соответствующим антуражем. Оригинально и весьма вкусно. Дальше опять начались приключения. Еще несколько часов мы провели в пробке на 97-м шоссе. Заправка в Chemult нас спасла от голодной смерти. До гостиницы в Klamath Falls мы добрались уже в половине первого ночи.

День четвёртый, вторник.



Задача оказаться к вечеру дома в Санта Кларе. У дочки в среду первый день занятий в университете, так что задерживаться никак нельзя. Но по пути решили осмотреть парк Lava Beds: нам про него рассказывали много интересного.

At Lava Beds

Lava Beds это часть вулкана Medicine Lake, самого большого в Каскадных горах. Вулкан пыхтел полмиллиона лет и за это время залил лавой территорию 35x50 километров. Горячая лава растекалась реками горизонтально, и оставила под землёй гигантскую сеть туннелей и пещер. Представьте себе зал шириной в станцию метро и в два-три раза выше. Вот эта фотка даёт представление о масштабе.



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



Сейчас вулкан уже неактивный, но некоторые кратеры довольно молодые. Вот этому (Black Crater) всего три тысячи лет.



А еще тамошние места имеют печальную славу: здесь в 1872-1873 годах шла Модокская война, единственный вооружённый конфликт между индейцами и переселенцами на территории Калифорнии.

Обратная дорога была не особенно примечательной, но очень длинной. Остановки на кофе в Реддинге и Вакавилле несколько скрашивали однообразие.
vak: (Default)
В понедельник ожидается полное солнечное затмение. На видео показан путь тени по территории Америки. Вот данные по времени для города Салем в Орегоне:

Latitude: 44°56'34"N
Longitude: 123°02'06"W
Duration of Totality: 1m 54s
Partial phase start: 9:05:26AM (PDT)
Totality Start: 10:17:21AM (PDT)



Орегонские гаишники сделали полезный сайт для отслеживания трафика, с дорожными камерами.

vak: (Default)


Последнее интервью Андрея, 2014 год: «Жизнь сводится к набору микростимулов-похлопываний».

Предыдущее интервью, 2010 год: «Сущности контроля».

Я его больше вот таким помню.

vak: (Default)
Вчера произошло знаменательное событие: заработал восстановленный Паскаль-компилятор для БЭСМ-6. Вот сообщение от Леонида Брухиса [personal profile] spamsink в списке рассылки:

"Дорогие товарищи! Многоуважаемые гости!

Сегодня, ровно через 35 с половиной лет после даты имеющейся версии
(и, что знаменательно, в День археолога), достигнуто оживление Паскаль-компилятора
на уровне исходного текста:

РАSСАL СОМРILЕR 15.0 (15.02.82)
8435 LINЕS SТRUСТURЕ 1 305 0 0 11 10349 0 576 185 86
*САLL *РАSСОМ
РАSСАL ВАСК ТО LIFЕ (15.08.2017)
00001 1 0 РRОGRАМ МАIN(ОUТРUТ);
00007 2 2 ВЕGIN
00010 3 2 WRIТЕLN(’ С ДНЕМ АРХЕОЛОГА!’)
00025 4 0 ЕND.
*NО LО
*ЕХЕСUТЕ
С ДНЕМ АРХЕОЛОГА!
КОНЕЦ ЗАДАЧИ
Leo"

Несколько лет назад Лёня высказал "сумасшедшую" идею попробовать воспроизвести исходный текст компилятора, исходя из сохранившегося объектного файла. Сначала детранслируем бинарник в ассемблерный текст, и дальше полуручным методом восстанавливаем элементы языковых конструкций. Процесс небыстрый и крайне трудоёмкий, но вчера он завершился успехом: полученный паскалевский код был откомпилирован (старой версией компилятора от 15.02.82), и полученный компилятор версии 15.08.2017 смог странслировать и выполнить простую программу.

Подробные комментарии от Лёни:

"Технология следующая:

1. Детранслируем объектный модуль почти как это делал DTRAN, но превращая все обращения по регистру 8 в представления литеральных констант (с некоторыми догадками, где числа, а где текст) и рассылки данных - в присваивания.

2. С помощью скрипта на Перле итеративно улучшаем полученный код:
- превращаем обращения по регистру 1 в имена глобальных переменных и переводим их в мнемонические по списку
- переводим метки в мнемонические по списку
- находим границы процедур, их уровень вложенности, количество их параметров и локальных переменных по образцу вызова библиотечной функции сохранения фрейма,
восстанавливаем последовательность заголовков.
- превращаем обращения к памяти, индексированные по регистрам 1-6, в имена локальных переменных и псевдопеременных для результата функции.
- превращаем последовательности команд вида "сравнение/переход" в псевдокоманды выработки условного результата и перехода
(условно, НТЖ+ПО = "равно", ВЧ+ПЕ = "меньше", и т.п.).
- превращаем косвенную адресацию в индексный вид (например, МОД А+СЧ Б = СЧ Б[А])
- превращаем последовательности команд "стековой машины", работающих с сумматором, (т.е. начиная со СЧ и пока виртуальный стек не опустошится командами записи, перехода или вызова процедуры) в инфиксную форму; операции, использующие вызов служебных процедур (например, целочисленное деление или работа с битовыми множествами) тоже распознаются.
- еще много всяких мелочей в процессе, например деоптимизация "УИА куда(13)+ПБ проц" в "ПВ проц(13)+ПБ куда", и пр.
- распознаем границы операторов case

Выражения восстанавливаются практически полностью; например, в результате выполнения скрипта было [minel(l4var5z-intZero)+1..47];

В результате получается последовательность процедур, состоящая из линейных участков, состоящих из операторов присваивания и вызовов процедур, перемежаемая адресными метками и конструкциями вида
if (выражение) goto адрес

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

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

Еще пригодны для декомпиляции программа PASHELP (она тривиальна, но полезна для понимания работы с объектными модулями) и программа PASDD1 - интерактивный отладчик."

Есть ощущение, что бэсмовский Паскаль-компилятор некоторым образом происходит от версии 1974 года для CDC-6000. Сравните:





Исходные тексты восстановленного Паскаль-компилятора можно посмотреть здесь: https://github.com/besm6/pascal-re/blob/master/pascompl.b6

Описание языка Паскаль-Монитор для БЭСМ-6: https://github.com/besm6/besm6.github.io/blob/master/wiki/pascal-monitor.txt
vak: (Default)
Кто сказал, что программа должна выглядеть, как смесь прозы с математикой? Вовсе необязательно! Вот вам язык программирования, на котором программу можно просто рисовать буковками и циферками. На видео показана программа, увеличивающая и печатающая целочисленный счётчик. Вот здесь можно посмотреть больше примеров и скачать исходные тексты: https://github.com/aaronduino/asciidots

vak: (Default)
Если у вас не открывается ссылка типа http://foo.bar.net/ по причине блокировки провайдером, попробуйте http://anonymouse.org/cgi-bin/anon-www.cgi/http://foo.bar.net/
vak: (Default)
В Прилуках на лавочке у родного подъезда, с полным комплектом детей и племянниц. Сейчас уже всех и не соберёшь в кучу.

vak: (Default)
Сегодня на фестивале древних компьютеров выступал Пол Лафтон, автор первой операционной системы для компьютеров Apple. Его пригласил Брюс Дэймер, хранитель частного компьютерного музея Digibarn, по инициативе которого некоторое время назад удалось восстановить и выложить в свободный доступ исходный код Apple DOS. Скачать можно здесь: ZIP 264 кбайт.

Стартовый экран Apple DOS 3.1:



Пол Лафтон:



Прикольно выглядит контракт на разработку:

vak: (Default)
Два года назад Би-Би-Си объявила амбициозный проект: одноплатный компьютер для обучения младших школьников программированию и электронике. Конечно, я тут же подписался на новинку. Три дня назад я наконец получил долгожданную платку.



На видео есть неплохой подробный обзор для начинающих:



Все эти навороты с Джаваскриптом, Питоном и Blocks забавные, конечно, но для для старпёров типа меня есть традиционный способ программировать на классическом C++, под обычным Линуксом. Установка на Ubuntu делается следующим образом.
$ sudo apt-get install python-setuptools cmake build-essential ninja-build python-dev libffi-dev libssl-dev srecord
$ sudo easy_install pip
$ pip install yotta
$ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
Скачиваем с Гитхаба примеры:
$ git clone https://github.com/lancaster-university/microbit-samples
$ cd microbit-samples
$ yt target bbc-microbit-classic-gcc
Компилируем пример "Hello world":
$ yt build
Загружаем прошивку в плату, подключенную через USB:
$ cp ./build/bbc-microbit-classic-gcc/source/microbit-samples-combined.hex /media/$USER/MICROBIT/
Исходный код примера "Hello world" выглядит так:
#include "MicroBit.h"

MicroBit uBit;

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();

    // Insert your code here!
    uBit.display.scroll("HELLO WORLD! :)");

    // If main exits, there may still be other fibers running or registered event handlers etc.
    // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then
    // sit in the idle task forever, in a power efficient sleep.
    release_fiber();
}
vak: (Default)
(Я имел наслаждение слышать этот венок сонетов в исполнении автора [personal profile] lxe. Размещу у себя, для постепенного осмысления.)

Чуть дымка. Одуванчик за стеклом
На ниточке порхает, несгораем.
Последняя равнина пред горами –
Уж тени прячут слабый, но уклон,

Уж лампа ярче неба за углом.
Я вдоль дверей иду, не отпирая.
Земля какая – первая? Вторая? –
Чей профиль мне принять за эталон?

Как прежде зодчих скалы-образцы
Рисуют вал, ристалище и рынок,
Как почва начинается с пыльцы,

Ржавеет рельс, но полон лес тропинок,
И скрипка у подножия стены,
И темные века населены.

Полный текст )
vak: (Default)
Я наконец осилил back annotation в Верилоге. Это когда синтезируется прошивка для Xilinx FPGA, и на этапе, когда уже известно точное расположение всех элементарных примитивов, образуется файл с описанием всех задержек для каждого провода и логического вентиля. Даже есть такой стандартный формат SDF, или Standard Delay Format. После этого синтезированная схема преобразуется обратно в Верилог (структурный) и симулируется, загружая SDF-файл как набор параметров тайминга. Предполагается, что временная диаграмма такой симуляции будет примерно соответствовать реальному железу.

Вот что я получил для упомянутого сигнала цикла вычисления наибольшего общего делителя. Цикл в 20 итераций должет выполняться за 99500 пикосекунд, или почти ровно 100 нсек.



В реальности на осциллографе имеем 500 нсек.



Как-то точность времянки не особо радует. Плюс-минус порядок получается.
vak: (Default)
Вот такую ящерицу встретили сегодня на тропе Wilder Ridge Loop. Интересно, что при перемещении она почти не пользуется лапами, а вместо этого извивается всем телом, как змея.

vak: (Default)
"Иногда летишь в электрическом небе
и думаешь - скорее бы я упал.
Иногда проснёшься в кресле президента
и плачешь, сам не зная, как сюда попал."

Эта строчка из гребенщиковской песни "Феечка", оказывается, отсылает к хайку Владимира Шинкарёва, известного зачинателя движения митьков.

"Проснулся Федор с сильного похмелья
лежит в саду японском под сакурой,
и плачет, сам не зная, как сюда попал."

vak: (Default)
До сих пор существует мнение, что язык VHDL является обязательным для военных разработок в США. На самом деле с 1997 года это не так.

"In early 1995, DoD standard MIL-STD-454L was replaced and the use of VHDL was no longer mandated. Instead, the new wording stated that ASIC designs “should be documented” by means of VHDL. By 1997 even this suggestion was removed."

"Who is still using VHDL? In 2015, the US appeared to be 80–90% Verilog/SystemVerilog. There are certain US military and aerospace vendors continuing to use VHDL, despite the lack of a DoD mandate. Europe used to be a huge VHDL supporter, but this is a legacy issue now and there is very little new VHDL being written. There’s little VHDL usage in India/Asia, as these are historically Verilog. When VHDL was mentioned to the Broadcom team in Israel, there were chuckles."

Вот хорошая статья про историю языков и текущее состояние: http://trilobyte.com/pdf/golson_clark_snug16.pdf