vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-10 01:39 am

Рефал тоже

Раз со Сноболом дело хорошо пошло, давайте и Рефальный алгоритм сопоставления тоже сбацаем на Gisp.

Вот здесь сам алгоритм и пять демонстрашек: refal_patterns.gisp

Запускаем:
$ gisp refal_patterns.gisp
== Word split with s/w variables ==
Subject: (greetings from gisp world)
Pattern description: [s.first w.middle 'world]
Pattern data: ((var s first) (var w middle) world)
Matches: 1
#1
s.first = greetings
w.middle = (from gisp)

== Bracket structure with s/e variables ==
Subject: (sum (x plus y) done)
Pattern description: ['sum (s.lhs 'plus s.rhs) e.rest]
Pattern data: (sum (br ((var s lhs) plus (var s rhs))) (var e rest))
Matches: 1
#1
s.lhs = x
s.rhs = y
e.rest = (done)

== Repeated s-variable enforces equality ==
Subject: (dup x x)
Pattern description: ['dup s.sym s.sym]
Pattern data: (dup (var s sym) (var s sym))
Matches: 1
#1
s.sym = x

== Repeated variable mismatch ==
Subject: (dup x y)
Result: no match (as expected)

== Backtracking across e-variables ==
Subject: (a middle middle b)
Pattern description: [e.head 'middle e.tail]
Pattern data: ((var e head) middle (var e tail))
Matches: 2
#1
e.head = (a middle)
e.tail = (b)
#2
e.head = (a)
e.tail = (middle b)

== Clause evaluation (factorial skeleton) ==
fact(0) => (1)
fact(3) => (* 3 (fact 2))
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-10 12:58 am

Сопоставление строк

Перепишем на Gist алгоритм сопоставления строк с шаблоном из Снобола-4.

Реализация и три демонстрашки: snobol_patterns.gisp

Запускаем:
$ gisp snobol_patterns.gisp
== Snobol-style syllable split ==
syllable:
  prefix: 
  matched: strand
  suffix: 
  captures:
    onset => str
    nucleus => a
    coda => nd

== Configuration pairs with ARBNO/BREAK ==
pairs:
  prefix: 
  matched: name = Alice; age=34; city=Rlyeh;
  suffix: 
  captures:
    key => name
    value => Alice
    key => age
    value => 34
    key => city
    value => Rlyeh
  pairs:
    name => Alice
    age => 34
    city => Rlyeh

== Log line with LEN/POS/RPOS ==
log:
  prefix: 
  matched: ERROR 2025-11-10 parser: unexpected token ';'
  suffix: 
  captures:
    level => ERROR
    year => 2025
    month => 11
    day => 10
    date => 2025-11-10
    module => parser
    message => unexpected token ';'
  decoded date: 2025-11-10
  module: parser
  message: unexpected token ';'
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-10 12:44 am

Генерим лабиринты

Исходный код на Gisp: maze.gisp

Запускаем:
$ ./maze.gisp
┌───────────────────────────────────────┐
│ │
│ ┌───────┬───────┐ ┌───────╴ ╷ │
│ │ │ │ │ │ │
├───┘ ┌───┘ ╷ └───┘ ┌───┬───┘ │
│ │ │ │ │ │
│ ╶───┤ ┌───┴───────────┘ │ ┌───┤
│ │ │ │ │ │
├───┐ │ └───┐ ╷ ╶───┐ │ ╵ │
│ │ │ │ │ │ │ │
│ ╵ ├───╴ │ └───┐ │ ├───╴ │
│ │ │ │ │ │ │
│ ┌───┘ ┌───┴───┐ │ └───┤ ┌───┤
│ │ │ │ │ │ │ │
│ │ ╶───┤ ┌───┘ ├───╴ │ ╵ │
│ │ │ │ │ │ │
│ ├───╴ │ │ ╶───┤ ┌───┴───┐ │
│ │ │ │ │ │ │ │
│ ╵ ┌───┘ └───╴ │ ╵ ╷ ╵ │
│ │ │ │ │
└───────┴───────────────┴───────┴───────┘
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-09 10:17 pm

Игра пятнашки на Гиспе

Взял исходники игры 15 puzzle game на языке Scheme с rosettacode и перепёр на Gisp. Вроде ясный и понятный код получается. Всё в 200 строчек уложилось.
func playGame() {
var board = createStartPosition()
var movesTaken = 0
while true {
if finished(board) {
newline()
display("COMPLETED PUZZLE in ")
display(movesTaken)
display(" moves\n")
return
}
displayBoard(board)
var moves = findMoves(board)
display("Enter a move: ")
display(moves)
newline()
var move = read()
if moveAllowed(moves, move) {
makeMove(board, move)
movesTaken = movesTaken + 1
} else {
display("Invalid move - try again\n")
}
}
}
Весь текст: puzzle15.gisp

Поиграем. В качестве хода надо вводить слова up/down/left/right.
$ gisp puzzle15.gisp 

7 3 4
2 11 8 12
1 13 6 15
5 9 14 10
Enter a move: (down right)
down

2 7 3 4
11 8 12
1 13 6 15
5 9 14 10
Enter a move: (up down right)
down

2 7 3 4
1 11 8 12
13 6 15
5 9 14 10
Enter a move: (up down right)
right

...

1 2 3 4
5 6 7 8
9 10 11
13 14 15 12
Enter a move: (up down left)
down

COMPLETED PUZZLE in 50 moves
Полный протокол здесь: gist.github.com/sergev/2f8a65b7a11ea23a1693346a68a065d0

Мне с молодости импонировал Лисп (и Scheme) своим изяществом. Когда-то я даже стряпал эспериментальные реализации. Но глядеть на код со скобочками мало удовольствия. С удобным синтаксисом получается совсем другая песня.
"Элементы": новости науки ([syndicated profile] elementy_news_feed) wrote2025-11-10 07:33 am

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

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

vak: (Знайка)
Serge Vakulenko ([personal profile] vak) wrote2025-11-08 09:46 pm

Go + LISP -> Gisp

В качестве проекта выходного дня залудил интерпретатор в стиле Scheme, но с синтаксисом типа Go. Получился весёлый язычок программирования:
func fact(n, acc) {
if n == 0 {
return acc;
}
return fact(n - 1, acc * n);
}
Полный тьюториал здесь: Gisp-Tutorial.md

Исходники: github.com/sergev/gisp
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-07 11:38 am

Асинхронная логика на Go

Полезная особенность языка Go - на нём отлично моделируется асинхронная логика. Суть там в 4-фазном протоколе. Подробности в моём старом посте.



На Go всякий такой сигнал от одного гейта к другому делается в виде пары каналов:
type Handshake[Treq any, Tack any] struct {
Req chan Treq
Ack chan Tack
}
По каналу запроса передаются значения в одну сторону, по каналу ответа - в обратную. Если нужен только сигнал, без всякого значения - передаём struct{} (аналог void). Вот пример реализации сложения двух чисел:
func AsyncAdder(a, b, sum *Handshake[int, struct{}]) {
for {
// Wait for inputs to arrive
var x, y int
haveA, haveB := false, false

for !(haveA && haveB) {
select {
case x = <-a.Req:
haveA = true
case y = <-b.Req:
haveB = true
}
}

// Compute sum
s := x + y

// Send result downstream (Req↑)
sum.Req <- s

// Wait for output Ack↑
<-sum.Ack

// Only now acknowledge inputs (completing 4-phase handshake)
a.Ack <- struct{}{}
b.Ack <- struct{}{}
}
}
Полный текст здесь: add.go



Интересно было бы сдизайнить цельный асинхронный процессор в таком виде, скажем riscv32. А потом засунуть в FPGA.
pechkin: (Default)
pechkin ([personal profile] pechkin) wrote2024-05-31 08:41 pm
Entry tags:

(no subject)

 Мы с Нетой идем из Гана-Юваль, должно быть, выгуливали Лиса.

-- Видишь вон те скалы за забором?

-- Ага. Я один раз там был, когда еще можно было пролезать под ворота. Еще не было камер, и можно было просто подлезть под ворота. И я несколько раз туда вылезал и там гулял.

-- А знаешь, кто такой вервольф?

-- Знаю. Это такие люди...

-- Нет, не эти - а у меня. Вервольф это старший сын Земли.И Бога - я же тебе рассказывала. У него голова волка ...

-- Не может быть! Волк с головой волка!

-- ... хвост, как у дракона...

-- Какого дракона, у них же разные...

-- Ну, открой телефон, посмотри там "хвост дракона". И на хвосте такой наконечник, как у льва. Кисточка, да. Он бог всех зверей. И они живут вот на тех скалах.

В девять и десять лет у Неты была очень развесистая и объемистая теогония, главными фигурами которой были мужской Бог и женская Природа. У них было несколько поколений детей, охватывающих весь мир, от самых больших богов до самых мелких духов каждого куста, скалы и дерева. Я, кажется, несколько раз включал диктофон, когда Нета начинала это рассказывать - бог даст, дойдут руки расшифровать.




pechkin: (Default)
pechkin ([personal profile] pechkin) wrote2025-10-06 08:37 pm
Entry tags:

(no subject)

Нете подарили двух драконов, распечатанных на 3D-принтере.

-- Этого дракона зовут Кристалл. Потому что он похож на кристалл. А этого дракона зовут Бекон...

-- Но ведь он совсем не похож на...

-- Нет! Это потому, что он белый, и у него не хватает кусочка хвоста - как у того геккона, которого мы нашли в саду за шкафом.

Может быть, слишком много аналитического мышления - тоже плохо, задумался я?
vak: (Daemon)
Serge Vakulenko ([personal profile] vak) wrote2025-11-07 10:13 am
Entry tags:

Об успехах BSD в бизнесе

Стефано Маринелли делится 20-летним опытом внедрения и сопровождения юниксных систем и сервисов.

vak: (Daemon)
Serge Vakulenko ([personal profile] vak) wrote2025-11-06 04:49 pm

DEC PDP-11 в хорошем состоянии

Дэйв Пламмер выставил на продажу один из своих PDP-11/73. Установлен юникс BSD 2.11, интернет, все дела. Гляньте, вдруг кому сгодится.

(фейсбук)
I'm selling one of my PDP-11/73s with "all my good parts" to cover the costs of the 11/24 I'm building. Basically, it's an infallible system as long as I stay one PDP ahead of things 🙂

Plug it in, turn it on - boot 211BSD UNIX already custom configured, serve WWW pages, FTP, Telnet, and more. This is your chance to own a maxed-out and completely turnkey, ready-to-run PDP-11 UNIX Workstation. You could also install and run RT-11 or RSX-11, but this machine has been carefully set up and configured with 211BSD UNIX, including all networking features.

This machine represents a collection of my very best PDP-11 components, including:

• DEC M8190 CPU
• DEC M8637 Fast PMI Memory (x2) for a total of 4M installed, the max permitted
• DEC M3104 Eight Port Serial Multiplex - Connect up to 9 total terminals (plus Ethernet sessions)
• DEC M7555 MFM and Floppy Controller
• Emulex UC07 SCSI Controller - Supports tapes, drives, jaz, and more, up to 6 devices - Boot multiple systems
• DEC M7516 Ethernet Adapter - The faster/better DELQA NIC
• DEC RX50 Dual Floppy Drive - Tested and mounted as /mnt/flopppy0 and /mnt/floppy1 for each file interchange
• Seagate ST43400N - 3GB SCSI Drive - Contains /root, /swap, /usr, and /data partitions

It's all housed in a rare and very nice DEC BA23 chassis and tower pedestal case with front cover plate.
vak: (Знайка)
Serge Vakulenko ([personal profile] vak) wrote2025-11-06 01:45 pm

Скорость дисков

Вся история магнитных, а потом и твердотельных накопителей - всего 70 лет. Но была она бурной.


1950-е: Скромные килобайты в секунду

Пример: IBM 305 RAMAC (1956)
  • Носитель: 24-дюймовые пластины, общая ёмкость 5 МБ (50 дисков)
  • Скорость передачи: ~100 КБ/с (0.1 МБ/с)
  • Время доступа: среднее время поиска ~600 мс
Каждое чтение/запись требовало огромного механического действия. Накопители были размером с холодильник, а скорость передачи данных ограничивалась скоростью вращения (~1200 об/мин) и аналоговой электроникой. Чтение одной записи могло занимать секунды.

1960-е: Первые "быстрые" диски — скорость аж 1 Мбайт/сек

Пример: IBM 2311 (1964), IBM 2314 (1965)
  • Скорость передачи данных: 156 КБ/с → 1 МБ/с
  • Ёмкость: до 29 МБ на сменный блок
  • Время доступа: ~50 мс
Мэйнфреймы теперь передавали данные непрерывно для пакетной обработки. Появилась концепция дисковых каналов и DMA — предшественников современных контроллеров.

1970-е: Мини-ПК и ранние ПК — несколько сотен кбайт/сек

  • IBM 3330 (1970): ~800 КБ/с
  • Shugart SA1000 (1979, ранние жёсткие диски для ПК): ~500 КБ/с
  • Флоппи диски: ~31 КБ/с (8 дюймов, 360 об/мин)
С появлением компактных компьютеров диски уменьшились до 14, 8, а затем и до 5.25 дюймов. Появились интерфейсы, такие как ST-506. К концу десятилетия появились первые персональные жёсткие диски.

1980-е: Жёсткие диски для ПК — от 0.5 до 3 Мбайт/сек

  • Seagate ST-412 (1981): ёмкость 10 МБ, 625 КБ/с
  • Накопители MFM/RLL (середина 80-х): ~1–2 МБ/с
  • Накопители ESDI и ранние SCSI (конец 80-х): типичная скорость 2–3 МБ/с
  • Высокопроизводительные мэйнфреймы: до 5 МБ/с
Логика контроллера была перенесена с центрального процессора на встроенную электронику. Диски всё ещё были медленными, но уже надёжными. Чтение всего диска объёмом 10 МБ занимало около 10–20 секунд.

1990-е: IDE, SCSI и гигабайты — от 3 до 20 Мбайт/сек

  • Ранние диски ATA (1990): ~3–5 МБ/с
  • Быстрый SCSI-2 (1993): 10 МБ/с
  • Поздний IDE (1998): 15–20 МБ/с (постоянная)
  • Серверный RAID (1999): до 40 МБ/с (суммарная)
Плотность пластин резко возросла; скорость вращения достигла 5400–7200 об/мин. Последовательная пропускная способность росла быстрее, чем улучшалось время доступа. DMA и кэширование стали стандартом.

2000-е: SATA и высокоплотные пластины — от 40 до 100 Мбайт/сек

  • IDE/ATA100 (2000): 50–70 МБ/с
  • SATA 1.5 Гбит/с (2003): интерфейс до 150 МБ/с, постоянная скорость ~70 МБ/с
  • SATA 3 Гбит/с (2005+): типичная скорость 100–120 МБ/с для дисков со скоростью вращения 7200 об/мин
  • Raptor/SCSI со скоростью вращения 10 000 об/мин: 120–150 МБ/с
"Мегабайты в секунду" стали настоящим узким местом для видео и баз данных. Первые прототипы SSD появились в середине десятилетия, но всё ещё оставались нишевыми.

2010-е: Революция SSD — от 200 до 3500 Мбайт/сек

  • SSD-накопители SATA (2010): 200–550 МБ/с (ограничено SATA 3)
  • SSD-накопители PCIe/NVMe (2015): 1000–3000 МБ/с
  • Enterprise NVMe (2019): до 6000 МБ/с
Время произвольного доступа резко сократилось с миллисекунд до микросекунд. Впервые задержка, а не последовательная пропускная способность, стала основным фактором, определяющим выбор.

2020-е: NVMe — 7000 Мбайт/сек и выше

  • PCIe 4.0 x4 NVMe (2021): 5000–7500 МБ/с
  • PCIe 5.0 x4 NVMe (2024): 10 000–14 000 МБ/с
  • Жесткие диски по-прежнему демонстрируют скорость около 150–250 МБ/с (большие накопители со скоростью 7200 об/мин)
Жесткие диски теперь используются для хранения больших объемов данных; твердотельные накопители (SSD) доминируют в активных рабочих нагрузках. Современные корпоративные SSD даже выдерживают более 1 миллиона операций ввода-вывода в секунду с кэшированием DRAM.

Сводная таблица:
Эпоха Типичное устройство               Мбайт/с  Доступ   Примечания
-----------------------------------------------------------------------------
1956 IBM RAMAC 0.1 600 мс Первый жёсткий диск
1965 IBM 2314 1 50 мс Канально-подключённые жёсткие диски
1975 Shugart SA1000 0.5 35 мс Ранние 5-дюймовые жёсткие диски
1985 Seagate ST-225 1.5 28 мс Накопители PC XT
1995 Quantum Fireball 10 12 мс IDE, 5400 об/мин
2005 WD Caviar 70 8 мс SATA 3 Гбит/с
2010 Твердотельный накопитель Intel X25 250 0.1 мс Первый массовый SSD
2015 Samsung 950 Pro NVMe 2500 0.03 мс PCIe 3.0 x4
2024 Samsung 990 EVO PCIe 5.0 13000 0.02 мс Лучший потребительский SSD
vak: (Аристипп)
Serge Vakulenko ([personal profile] vak) wrote2025-11-05 01:14 am

Версии DOS для PC/XT

🧭 1981–1983: Ранняя эра IBM PC и XT

PC DOS 1.0 / 1.1 (1981–1982) — поставлялась с первым IBM PC (5150).
  • Базовое управление файлами и дисками, только односторонние дискеты.
  • Функционально идентична MS-DOS 1.x для совместимых компьютеров.
PC DOS 2.0 / 2.1 (1983) — появились подкаталоги и поддержка жёсткого диска.
  • 2.1 поставлялась с IBM PC/XT (1983).
  • Стала стандартной версией DOS для ранних клонов XT примерно до 1984 года.
  • Многие ПК сторонних производителей поставлялись с MS-DOS 2.1 или 2.11.
Самая популярная версия в то время: DOS 2.1 — стабильная, поддерживала жёсткие диски объёмом 10 МБ, широко клонировалась.

🧭 1984–1986: Зрелое поколение XT

MS-DOS 3.0 / 3.1 / 3.2 — представила жёсткие диски большего объёма и поддержку сети.
  • 3.2 (1986) поддерживала дискеты объёмом 720 КБ и стала широко использоваться на клонах класса XT.
  • Многие PC/AT использовали DOS 3.3, но машины класса XT в основном оставались на версии 3.2.
Самая популярная версия: MS-DOS 3.2, иногда 3.1 на более ранних клонах.

Это был пик популярности оригинальных машин XT, всё ещё использующихся в повседневной работе.

🧭 1987–1990: клоны XT и турбо XT

Хотя массовыми стали системы класса AT (286), многие недорогие совместимые с «Turbo XT» системы продолжали существовать.

MS-DOS 3.3 (1987) — очень стабильная, поддерживала разделы 32 МБ и дискеты 1,2 МБ.
  • Поставлялась в комплекте с большинством клонов машин той эпохи.
  • Стала фактическим стандартом DOS в конце 1980-х годов.
MS-DOS 4.0 / 4.01 (1988) — добавлена ​​поддержка дисков объёмом более 32 МБ, но была глючной и тяжёлой для XT.
  • Многие пользователи оставались с версией 3.3, поскольку она была быстрее и совместимее.
Самая популярная версия: MS-DOS 3.3 — вероятно, самая распространённая версия DOS на оборудовании класса XT вплоть до начала 1990-х годов.

🧭 1990–1994: Пользователи устаревших XT

Даже когда ПК 386/486 стали стандартом, множество старого оборудования XT сохранилось в лабораториях, на заводах и в школах.

MS-DOS 5.0 (1991) — добавлен полноэкранный редактор EDIT.COM, драйвер HIMEM.SYS, улучшенное управление памятью.
  • Всё ещё может работать на XT с 640 КБ ОЗУ.
  • Используется энтузиастами и как вариант обновления с версии 3.3.
PC DOS 5.02 – аналогичная версия IBM.

Самая популярная версия позднего периода: MS-DOS 5.0 (для сохранившихся машин XT).

Сводная таблица:
  Период   Типичное оборудование  Версии DOS  Самые популярные
--------------------------------------------------------------
1981–1983 IBM PC, PC/XT 1.0 – 2.1 2.1
1984–1986 Клоны PC/XT 3.0 – 3.2 3.2
1987–1990 Клоны Turbo XT 3.3 – 4.01 3.3
1991–1994 Устаревшие системы XT 3.3 – 5.0 5.0
Итог: для настоящих IBM PC/XT и совместимых машин в ранний период доминировала MS-DOS 2.1, а MS-DOS 3.3 стала долгоживущей и самой популярной версией. Позже энтузиасты и те, кто воздержался от обновления, часто переходили на DOS 5.0, но 3.3 оставалась классической XT DOS.
vak: (Daemon)
Serge Vakulenko ([personal profile] vak) wrote2025-11-04 10:46 pm

GCC для 8086

Оказывается, для 16-битной архитектуры Intel 8086 имеется компилятор GNU Си/Си++, и активно поддерживается. Раньше я слышал про bcc и OpenWatcom, но они имеют ограниченный функционал. С таким известием затея по восстановлению Юникса v7 (Venix) для писишки не выглядит безнадёжной.

Исходники: github.com/tkchia/gcc-ia16
Зеркало: gitlab.com/tkchia/build-ia16/-/releases

На интеловской Ubuntu компилятор ставится следующим образом:
sudo apt install software-properties-common
sudo add-apt-repository ppa:tkchia/build-ia16
sudo apt-get update
sudo apt-get install gcc-ia16-elf
На Ubuntu ARM64 аналогично, но из другого места:
sudo add-apt-repository ppa:catacombae/gcc-ia16-arm64
Глянем на сгенерённый код:
$ ia16-elf-gcc -S -O hello.c
$ cat hello.s 
	.arch i8086,jumps
	.code16
	.att_syntax prefix
#NO_APP
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"Hello, World!"
	.text
	.global	main
	.type	main, @function
main:
	movw	$.LC0,	%ax
	pushw	%ax
	call	puts
	addw	$2,	%sp
	movw	$0,	%ax
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 6.3.0"
По умолчанию линкуется бинарник для MS-DOS:
$ ia16-elf-gcc hello.c 
$ file a.out
a.out: COM executable for DOS
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-04 01:10 pm

Microdrive

В конце 90-х начале 2000-х народ в IBM придумал делать жёсткие диски крошечного размера. Так появились Microdrive, позже превратившиеся в CompactFlash. Мне от коллеги достался один экземпляр. В 2004 году продавался за $499 баксов. С такими дисками шаттлы в космос летали.



Меряю скорость под Линуксом.



Для сравнения возьмём CompactFlash примерно того же времени.



pechkin: (Default)
pechkin ([personal profile] pechkin) wrote2025-11-04 09:11 am
Entry tags:

(no subject)

 Сегодня во сне катал на автобусе и водил экскурсией Дональда Трампа по Васильевскому острову. Во снах у меня география Питера отличается от явственной, но я ее уже хорошо изучил и узнаю. Это был Васильевский из снов, где вместо Голодая Крестовский остров, и особняки, дачи и загородные дворцы переходят в верфи и заводы, заброшенные после 1990-х.

Трампу я бессовестно лил в уши, какой он замечательный, и как я сразу проникся его гением, как только узнал о нем - потому что ничего другого он тупо не слышал, а мне надо было его водить. Миру нужны экономисты, повторял я, великие экономисты, а the politics will do itself. Сам он говорил быстро, тихо и неразборчиво.

Потом, уже возле самой резиденции, которую ему отвели, он вдруг сказал, что устал, и повалился на тротуар. Я тут же раздобыл где-то стульчик и усадил его - поднять его с пола оказалось не трудно. Ханурики, на средиземноморский манер сидевшие возле входа в разливочную, сказали: Дед-то у тебя совсем доходит. Э, сказал я, он еще всех нас похоронит. Ему лет уже под восемьдесят, а он в теннис играет только так. Да ладно, усомнился один, безносый. Тебя точно обыграет, сказал я. А он, между прочим, добавил я, Ленина видел. Ну, и чо? - не сдавался синяк. Да больше ничего, этого хватит, ответил я. Правда, добавил я, не очень-то это ему помогло. Кому? - уточнил ханурик. Да обоим, если вдуматься.

Уже проснувшись, понял, что не мог Трамп видеть Ленина, что опять я мерил время своим детством - вот в нем восьмидесятилетние вполне могли Ленина видеть. А этот - максимум Сталина.
vak: (Знайка)
Serge Vakulenko ([personal profile] vak) wrote2025-11-03 09:45 pm

СGA работает

Приехали новозеландские адаптеры для видеосигнала EGA/CGA и для клавиатуры XT. Подсоединил к писишке - задышало!

При включении показывает имеющуюся периферию и тестирует память.



После чего выдаёт версию прошивки.



Контроллер диска я вынул, поэтому желает грузиться с флопика.



Упаковка пятидюймовых флопиков у меня припасена, но их же надо ещё записать. Какой-нибудь древний MS-DOS отыскать. В следующий раз. И с дисковым контроллером пора вопрос решать.
"Элементы": новости науки ([syndicated profile] elementy_news_feed) wrote2025-11-03 03:48 pm

Нобелевская премия по химии — 2025

В 2025 году Нобелевскую премию по химии получили Сусуму Китагава, Ричард Робсон и Омар Яги — «за открытие металл-органических каркасных структур». Эти вещества с порами, размер и свойства которых ученые могут «настраивать» весьма точно, уже используются для захвата воды и углекислого газа из воздуха, а на подходе еще множество вариантов применения.

vak: (Бодхидхарма)
Serge Vakulenko ([personal profile] vak) wrote2025-11-02 11:07 pm

Китайцы шпионят через пылесосы

Производитель выдал команду на удалённое отключение для отключения умного пылесоса после того, как инженер заблокировал ему сбор данных. Пользователь восстанавливает его с помощью специального оборудования и скриптов Python для автономной работы.

Умный пылесос был удалённо заблокирован из-за отсутствия сбора данных.

Инженер заинтересовался работой своего умного пылесоса iLife A11 и начал отслеживать сетевой трафик, исходящий от устройства. Тогда он заметил, что тот постоянно отправляет производителю журналы и данные телеметрии, на что он не давал своего согласия. Пользователь, Харишанкар, решил заблокировать IP-адреса серверов телеметрии в своей сети, оставив прошивку и серверы OTA открытыми. Его умный гаджет работал какое-то время, но вскоре перестал включаться. После долгого расследования он обнаружил, что устройству была выдана команда на удалённое отключение.

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

Поскольку A11 был умным устройством, он был оснащен чипсетом AllWinner A33 с операционной системой TinaLinux, а также микроконтроллером GD32F103 для управления множеством датчиков, включая лидар, гироскопы и энкодеры. Он подключил разъёмы к печатной плате и написал скрипты на Python для управления ими с помощью компьютера, с целью индивидуальной проверки каждого компонента и выявления неисправностей. Затем он собрал джойстик на Raspberry Pi для ручного управления пылесосом, доказав, что с оборудованием всё в порядке.



После этого он изучил его программное обеспечение и операционную систему, и именно здесь он обнаружил мрачную правду: его умный пылесос был кошмаром безопасности и чёрной дырой для его личных данных. Прежде всего, Android Debug Bridge, предоставляющий ему полный root-доступ к пылесосу, не был защищён никаким паролем или шифрованием. Производитель добавил импровизированный протокол безопасности, убрав важный файл, из-за чего пылесос отключался вскоре после загрузки, но Харишанкар легко обошёл его. Затем он обнаружил, что пылесос использует Google Cartographer для построения трёхмерной карты его дома в режиме реального времени.

В этом нет ничего необычного. В конце концов, это умный пылесос, и ему нужны эти данные для навигации по дому. Однако беспокоит то, что он отправлял все эти данные на сервер производителя. Вполне логично, что устройство отправляет эти данные производителю, поскольку его встроенная система на кристалле недостаточно мощна для обработки всех этих данных. Однако, похоже, iLife не согласовала это со своими клиентами. Более того, инженер сделал одно тревожное открытие: в логах своего неработающего умного пылесоса он обнаружил команду с меткой времени, точно совпадающей со временем остановки устройства. Это была явно команда на завершение работы, и после того, как он отменил её и перезагрузил устройство, оно снова ожило.



Итак, почему A11 работал в сервисном центре, но отказывался работать дома? Техники переустанавливали прошивку умного пылесоса, удаляя код отключения, а затем подключали его к открытой сети, восстанавливая нормальную работу. Но как только он снова подключался к сети, в которой были заблокированы серверы телеметрии, он удалённо блокировался, поскольку не мог связаться с серверами производителя. Поскольку он заблокировал сбор данных устройства, производитель решил просто полностью отключить его. «Кто-то — или что-то — удалённо дал команду на отключение», — говорит Харишанкар. «Будь то намеренное наказание или автоматическое принуждение к «соблюдению правил», результат был один и тот же: потребительское устройство напало на своего владельца».

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