vak: (Аристипп)
[personal profile] vak
Проект на Гитхабе: tsoding/good_training_language

Классический пример Hello World:
про главная() нч
печать(«Привет, Мир!\н»);
кц
Компилируем, запускаем.
$ хуяк комп примеры/01-привет.хуя
$ ./примеры/01-привет
Привет, Мир!
vak: (Знайка)
[personal profile] vak
Полезные примитивы управления путём PATH. Вставляются в ~/.bashrc. Правятся по вкусу.
append_path() {
    local dir="$1"
    if [[ -d "$dir" ]]; then
        if [[ -d "$dir" && ":$PATH:" != *":$dir:"* ]]; then
            export PATH="$PATH:$dir"
        fi
    fi
}
prepend_path() {
    local dir="$1"
    if [[ -d "$dir" ]]; then
        if [[ -d "$dir" && ":$PATH:" != *":$dir:"* ]]; then
            export PATH="$dir:$PATH"
        fi
    fi
}
remove_path() {
    local dir="$1"
    if [[ ":$PATH:" == *":$dir:"* ]]; then
        local new_path=":$PATH:"
        new_path="${new_path//:$dir:/:}"
        new_path="${new_path#:}"
        export PATH="${new_path%:}"
    fi
}
remove_path /usr/games
remove_path /usr/local/games
remove_path .
append_path /usr/sbin
append_path /usr/bin
append_path /snap/bin
prepend_path /usr/local/bin
prepend_path /usr/local/sbin
prepend_path $HOME/.local/bin

Про нас пишут

Apr. 22nd, 2025 02:38 pm
vak: (Робот 1)
[personal profile] vak
https://www.automotiveworld.com/articles/software-centric-chips-anticipate-the-ai-defined-vehicle/

"SiMa.ai is positioning its unique MLSoC platform as the gateway for unlocking next-generation ADAS/AV performance. Importantly, it has been conceived specifically for automotive applications."

"SiMa.ai’s MLSoC has an ML performance of 50 TOPS and a ResNet-50 (an image classifying architecture) performance of more than 300 FPS per watt. The company claims latency can be reduced by a factor of ten, with all compute in Level 2/3 systems achieved at less than 25W, or less than 100W at Level 4."

"SiMa.ai designed the chip according to three foundation pillars: to be compatible with any computer vision and generative AI application using ML at the edge, regardless of vehicle type; to offer best-in-class performance per watt; and to provide an interface usable by anyone instead of a small demographic of hardware experts."

"In December 2024, SiMa.ai combined its AI/ML capabilities with silicon design and verification firm Synopsys to maximise customisation for automotive-centric IP, subsystems, chiplets, and SoCs."
chuka_lis: (Default)
[personal profile] chuka_lis
Кристи Ноэм, начальница МВД США, назначенка трампа (сейчас в начальстве гос структур только такие), вечером в васкресенье пошла покушать в ресторан The Capital Burger в центре Вашигнтона. Где у нее украли сумочку.. Read more... )
chuka_lis: (Default)
[personal profile] chuka_lis
С наступлением теплой погоды, можно переходить и на легкую, летнюю обувь. Read more... )
vak: (Робот 1)
[personal profile] vak
...Фирма делает чипы. Целенаправленно для искусственного интеллекта и машинного обучения. Но какие нейронные сетки на наших чипах можно гонять, и с какой эффективностью? А вот вам рисунок. По горизонтали количество обрабатываемых изображений в секунду. По вертикали точность распознавания. Точность получается повыше, если модель работает в плавающей точке FP32, и пониже, если она квантована в целые числа INT8.

Подробнее на сайте: https://sima.ai/model-browser/

vak: (бэсм-6)
[personal profile] vak
(Я послал этот текст в список рассылки БЭСМ-6, но сохраню и здесь для памяти.)

Раз уж у нас тут постепенно актуализировалась тема написания компиляторов, я тоже увлёкся и реализовал давнишнюю мечту: портонул Би с PDP-7 на БЭСМ-6.

Исходник компилятора: b-besm.b

Проект на Гитхабе: besm6/b-compiler

История вопроса следующая. В 1969 году Кен Томпсон создал язык Би для машины PDP-7. Компилятор порождал так называемый шитый код, который интерпретировался во время выполнения. Позже в 1971-м Деннис Ритчи портонул Би на машину Honeywell GE 645, но без всякого шитого кода, а уже с нормальной генерацией бинарного кода целевого процессора. А когда Ритчи взялся тащить Би на PDP-11, оказалось, что наличие байтовой адресации существенно меняет дело. Пришлось добавить в Би типы, и он быстро превратился в знакомый нам Си.

Исходники компилятора Би считались потерянными. Но девять лет назад Robert Swierczek чудесным образом сумел восстановить тексты Би из обрывков распечаток в рамках проекта pdp7-unix.

Я взял эти исходники и вместо выдачи шитого кода для PDP-7 вставил генерацию машинных команд БЭСМ-6 для ассемблера Madlen. Добавил минимальную рантайм библиотеку и запихнул в мониторную систему Дубна. Компилятор пишет ассемблерный текст на барабан и, если не случилось ошибок, выполняет как бы команду *READ:1. Дальше обычным образом стартует Мадлен и формирует объектные модули. Компилятор Би и рантайм библиотеку я поместил на отдельную ленту, её можно подключать командой *TAPE:7/B. Покажу пример на симуляторе dubna.

Вот скрипт с исходным текстом классического примера Hello World. Компилятор запускается с ленты командой *TRANS.
*name B compiler
*tape:7/b,40
*library:40
*trans-main:40020
main() {
printf("Hello, B!*n");
}
*execute
*end file
Запускаем. Я не стал убирать таблицу загрузки, чтобы вам было видно размер кода:
$ dubna hello.dub
...
*NAME B COMPILER
*TAPE:7/*,40
*LIBRARY:40
*TRANS-MAIN:40020
OVERLAY OT 20/04/25
B COMPILER FOR BESM-6, VERSION 04/2025
COMPILED 3 LINES OF CODE, FOUND 0 ERRORS

*NO LIST
*CALL BLOCKERR
*MADLEN
MAIN CP 0.0, ST 0.0, RT 1.0*
*READ OLD
*EXECUTE
*LIBRA:40 = B/DIV B/EQ B/GT B/LT B/MUL B/NE B/RET B/SAVE0 B/SAVE
B/TOUT B/TRUE CHAR PRINTD PRINTO PRINTF WRITE WRITEB OUT*CNT OUT*SHFT
OUT*BUFF FLUSH FOUT

MAIN 01000 PRINTD 01413 B/MUL 01757 ISOTCOSY 06002
PROGRAM E 01000 PRINTO 01466 B/GT 01766 ISOTCOS1 E 06053
B/SAVE0 01011 WRITE 01517 FOUT 01771 DRUMTAP* 06073
B/RET 01016 B/TRUE 01622 WRCARD 01772 CHKWORD* C 06124
PRINTF 01023 OUT*CNT 01623 WRWORD E 02014 PRINT8 06125
B/SAVE 01256 OUT*SHFT 01624 WBEGIN E 02033 STOP* 06306
CHAR 01263 OUT*BUFF 01625 WRIEND E 02042 EXIT E 06307
B/NE 01301 FLUSH 01654 B/TOUT 02075 CBOБOДHO 06335
B/EQ 01304 B/LT 01744 WRWORD/ C 04000
WRITEB 01307 B/DIV 01747 XWRITE/ C 06000

HELLO, B!
Вот ещё несколько примеров для Би из разных мест. Все они работают под Дубной:Мандельброт выглядит забавно: mandelbrot.txt

Выводы из всей этой затеи:
  • Би вполне был возможен на БЭСМ-6 уже тогда, в середине 70-х. Увы, никто из аксакалов-бэсмачей про него не знал.
  • Если бы Би тогда состоялся, он мог бы стать важным средством системной разработки. Не судьба. Позже язык ЯРМО пытался занять нишу.
  • Результат примерно соответствует мечте Игоря Григорьевича Пасынкова, когда в 1986 году он позвал меня в курчатник заниматься Си для Эльбруса-Б. Ему хотелось видеть Си не только под юниксом, но и в мониторке.
vak: (Default)
[personal profile] vak
Вот такая програмулина:
main() {
auto cx, cy, x, y, x2, y2;
auto iter;
auto xmin, xmax, ymin, ymax, maxiter, dx, dy;

xmin = -8601;
xmax = 2867;
ymin = -4915;
ymax = 4915;

maxiter = 32;

dx = (xmax - xmin) / 79;
dy = (ymax - ymin) / 24;

cy = ymin;
while (cy <= ymax) {
cx = xmin;
while (cx <= xmax) {
x = 0;
y = 0;
x2 = 0;
y2 = 0;
iter = 0;
while (iter < maxiter) {
if (x2 + y2 > 16384)
goto next;

y = ((x * y) / 2048) + cy;
x = x2 - y2 + cx;
x2 = (x * x) / 4096;
y2 = (y * y) / 4096;
iter++;
}
next:
write(' ' + iter);
cx = cx + dx;
}
write('*n');
cy = cy + dy;
}
return(0);
}
Запускаем mandelbrot.dub, получаем mandelbrot.txt:
$ dubna mandelbrot.dub
...
!!!!!!!!!!!!!!!"""""""""""""####################################""""""""""""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$$%'+)%%%$$$$$#####"""""""""""
!!!!!!!!!!!"""""""#######################$$$$$$$$%%%&&(+,)++&%$$$$$$######""""""
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*5:/+('&%%$$$$$$#######"""
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''),@@@@@@@,'&%%%%%$$$$########
!!!!!!!"""####################$$$$$$$$%%%&'())((())*,@@@@@@/+))('&&&&)'%$$######
!!!!!!""###################$$$$$%%%%%%&&&'+.@@=/<@@@@@@@@@@@@@@@/++@..93%%$#####
!!!!!"################$$$%%%%%%%%%%&&&&'),+2@@@@@@@@@@@@@@@@@@@@@@@@@1(&&%$$####
!!!!"##########$$$$$%%&(-(''''''''''''(*,5@@@@@@@@@@@@@@@@@@@@@@@@@@@@+)-&%$$###
!!!!####$$$$$$$$%%%%%&'(*-@1.+.@-4+))**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4-(&%$$$##
!!!!#$$$$$$$$$%%%%%%'''++.6@@@@@@@@@8/0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3(%%$$$$#
!!!#$$$$$$$%&&&&''()/-5.5@@@@@@@@@@@@@>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?'&%%$$$$#
!!!(**+/+<523/80/46@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4+)'&&%%$$$$#
!!!#$$$$$$$%&&&&''().-2.@@@@@@@@@@@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'&%%$$$$#
!!!!#$$$$$$$$$%%%%%&'''/,.7@@@@@@@@@;/0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0'%%$$$$#
!!!!####$$$$$$$$%%%%%&'(*-:2.,/?-5+))**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4+(&%$$$##
!!!!"##########$$$$$%%&(-(''''(''''''((*,4@@@@@@@@@@@@@@@@@@@@@@@@@@@4+).&%$$###
!!!!!"################$$$%%%%%%%%%%&&&&')<,4@@@@@@@@@@@@@@@@@@@@@@@@@/('&%%$####
!!!!!!""##################$$$$$$%%%%%%&&&'*.@@@0@@@@@@@@@@@@@@@@1,,@//9)%%$#####
!!!!!!!"""####################$$$$$$$$%%%&(())((()**-@@@@@@/+)))'&&&')'%$$######
!!!!!!!!""""#####################$$$$$$$$$$%%%&&&''(,@@@@@@@+'&&%%%%%$$$########
!!!!!!!!!"""""#######################$$$$$$$$$$%%%%&')*7@0+('&%%%$$$$$#######"""
!!!!!!!!!!!"""""""######################$$$$$$$$$%%%&&(+-).*&%$$$$$$######""""""
!!!!!!!!!!!!!"""""""""#######################$$$$$$%%'3(%%%$$$$$######""""""""""
!!!!!!!!!!!!!!!""""""""""""#####################################""""""""""""""""

Angelo Papenhoff

Apr. 21st, 2025 12:01 am
vak: (Default)
[personal profile] vak
Много интересных подробностей про исторический компилятор Би для PDP-7 и про первый юникс.

Brahms: 21 Hungarian Dances, #1

Apr. 20th, 2025 07:47 pm
chuka_lis: (Default)
[personal profile] chuka_lis

1 dance
Johannes Brahms 21 Hungarian Dances  Magyar Szimfonikus Zenekarok · István Bogár
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Вообще, конечно идеальная схема снабжения деревенского дома интернетом должна выглядеть так:

Точка доступа в режиме бриджа, висящая напротив устья печи (так она с гарантией покроет более-менее все места, где может возникнуть желание устроиться с ноутбуком или планшетом, и более того - и сама точка доступа, и источник бесперебойного питания к ней окажутся внутри отапливаемого помещения (сейчас у меня точка доступа она же LTE модем висит на стене неотапливаемой терраски, спасибо хоть на внутренней) и LTE-модем в уличном исполнении с ethernet-интерфейсом, питанием по POE и внешней антенной децибел на 25, выставленной на шесте метров на пять над крышей.

Беда в том, что такие модемы (а они в продаже есть) стоят довольно дорого. Правда, если модем торчит над крышей. то можно над ним прикрутитть имеющуюся внешнюю антенну. Она по-моему правда всего децибелл на 12. Еще при этом почти во все такие модемы встраивают свой wi-fi модуль, который в данном сетапе, вероятно лишний. Если что и может покрыть, то садовые скамейки на участке. Потому как от дома его экранирует шиферная крыша. Шифер очень хорошо глушит что wi-fi, что сотовый сигнал, неоднократно в этом убеждался. Поэтому сейчас у меня антенна висит на первом этаже, ниже шифера. Хотя подними я ее хотя бы на уровень второго эатажа, прием станет лучше. Но надо не просто на уровень второго этажа, а чтобы шифер между антенной и базовой станцией не попал.

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

Недостаток этого решения заключается в том что LTE-модемы с POE и эзернетом стоят заметнро дороже тревел-роутеров и даже устройств вроде Tlink TL MR150 или OLAX MC-60 (которому и UPS не нужен, правда POE-инжектором в отличие от 9-вольтового UPS он работать не умеет).

X-Post to LJ

vak: (Default)
[personal profile] vak
Я затащил компилятор Би под мониторную систему Дубна. Сделал отдельную ленточку 7/b, на которой лежит бинарник компилятора и рантайм библиотека. Вот классический пример Hello World:
*name B compiler
*tape:7/b,40
*library:40
*trans-main:40020
main() {
printf("Hello, B!*n");
}
*execute
*end file
Запускаем:
$ dubna b.dub
...
*NAME B COMPILER
*TAPE:7/*,40
*LIBRARY:40
*TRANS-MAIN:40020
OVERLAY OT 20/04/25
B COMPILER FOR BESM-6, VERSION 04/2025
COMPILED 3 LINES OF CODE, FOUND 0 ERRORS

*NO LIST
*CALL BLOCKERR
*MADLEN
MAIN CP 0.0, ST 0.0, RT 1.0*
*READ OLD
*EXECUTE
*LIBRA:40 = B/DIV B/EQ B/GT B/LT B/MUL B/NE B/RET B/SAVE0 B/SAVE
B/TOUT B/TRUE CHAR PRINTD PRINTO PRINTF WRITE WRITEB OUT*CNT OUT*SHFT
OUT*BUFF FLUSH FOUT

MAIN 01000 PRINTD 01413 B/MUL 01757 ISOTCOSY 06002
PROGRAM E 01000 PRINTO 01466 B/GT 01766 ISOTCOS1 E 06053
B/SAVE0 01011 WRITE 01517 FOUT 01771 DRUMTAP* 06073
B/RET 01016 B/TRUE 01622 WRCARD 01772 CHKWORD* C 06124
PRINTF 01023 OUT*CNT 01623 WRWORD E 02014 PRINT8 06125
B/SAVE 01256 OUT*SHFT 01624 WBEGIN E 02033 STOP* 06306
CHAR 01263 OUT*BUFF 01625 WRIEND E 02042 EXIT E 06307
B/NE 01301 FLUSH 01654 B/TOUT 02075 CBOБOДHO 06335
B/EQ 01304 B/LT 01744 WRWORD/ C 04000
WRITEB 01307 B/DIV 01747 XWRITE/ C 06000

HELLO, B!
Компилятор генерит ассемблерный код и пишет его на барабан, то есть временный файл фактически. И переключает мониторку на чтение этого барабана, как бы командой *READ:1. Вызывается Мадлен и превращает ассемблерный код в бинарные объектные модули.

Ubuntu 25.04

Apr. 19th, 2025 10:02 am
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Вышла ubuntu 25.04. Как-то даже странно, что не надо срочно бежать настраивать сборочные среды для нее, проверять какие пакетировочные файлы нуждаются в правке, пинать QA-щиков чтобы организовали тестирование.

chuka_lis: (Default)
[personal profile] chuka_lis
1) США катится далее вниз по наклонной.Read more... )
vak: (Знайка)
[personal profile] vak
Here is a more detailed elaboration.
  1. Make it work.
  2. Make it right (the code is readable [uses intention revealing names] and every idea is expressed once and only once).
  3. Make everything work.
  4. Make everything right.
  5. Use the system and find performance bottlenecks.
  6. Use a profiler in those bottlenecks to determine what needs to be optimized. See Profile Before Optimizing.
  7. Make it fast. You maintained unit tests, right? Then you can refactor the code mercilessly in order to improve the performance.
-- Guillermo Schwarz

Переходим на Би

Apr. 18th, 2025 10:57 am
vak: (бэсм-6)
[personal profile] vak
Переписал некоторые функции рантайм библиотеки с ассемблера на Би. К примеру, было:
    writeb: ,name,
         12 ,base,*
c
c Append one byte to output buffer.
c
 b/output:lc,block, w_count, b_shift, buffer(22)
c
    flush:  ,subp,
            ,aax, =377
            ,aex, =12       . compare to linefeed
            ,uza, flush
            ,aex, =12
c
            ,utc, w_count
            ,xts,
            ,aex, =26       . 22 words
            ,u1a, putchar
            ,ita, 13
            ,its,
            ,call, flush
            ,sti,
            ,ati, 13
c
 putchar:   ,bss,           . append byte to buffer
            ,sti,
         11 ,vtm, b/output
         11 ,wtc, 1         . b_shift
            ,asn, 64-40     . shift left
         11 ,wtc, 0         . w_count
         11 ,aox, 2         . read word from buffer
         11 ,wtc, 0         . w_count
         11 ,atx, 2         . write word to buffer
c
         11 ,xta, 1         . b_shift
            ,aex, =50
            ,uza, next_w
            ,aex, =50
            ,arx, =10       . increase shift
         11 ,atx, 1         . b_shift
         13 ,uj,
c
 next_w:    ,bss,           . advance to next word
         11 ,atx, 1         . clear b_shift
         11 ,xta, 0         . w_count
            ,arx, =1        . increment word count
         11 ,atx, 0         . w_count
         13 ,uj,
            ,end,
Стало:
/*
 * Append one byte to output buffer.
 */
writeb(b) {
    extrn out_cnt, out_shft, out_buff;
    auto p;

    b = b & 0377;
    if (b == '*n') {
        flush();
        return;
    }

    if (out_cnt == 22) {
        flush();
    }

    p = &out_buff[out_cnt];
    *p = *p | (b << (40 - out_shft));

    if (out_shft == 40) {
        /* next word */
        out_shft = 0;
        ++out_cnt;
    } else {
        /* next byte */
        out_shft = out_shft + 8;
    }
}

out_cnt;
out_shft;
out_buff[22];
Так ведь понятнее выходит, правда?
Page generated Apr. 23rd, 2025 08:12 am
Powered by Dreamwidth Studios