2024-12-04

vak: (Default)
Сделал себе подарок на Новый Год: новенький компьютер на 32-битном процессоре ARM. Многие ли из вас могут похвастаться 32-битным Линуксом? А у меня вот есть. 😀 Девайс фирмы Olimex, называется A20-OLinuXino-Lime2. Два ядра Cortex-A7 на частоте 960 МГц, один гигабайт памяти, GPU Mali, Ethernet, USB, порт SATA. Приобретается непосредственно с сайта olimex.com. Обходится в €57, плюс €8 металлический корпус, плюс €22 доставка из Болгарии.

Честно признаться, это не единственный компьютер 32-битной архитектуры в моей коллекции. Есть ещё два: Intel i686 (Axiomtek SBC86807) и MIPS32 (GL.iNet SFT1200). Но Олинуксино современнее и практичнее. Архитектура ARM32 будет продолжать жить в веках, и Дебиан для неё, я надеюсь.

С одной стороны корпуса подключается Ethernet, USB и питание. Напряжение питания должно быть строго 5 вольт: не ошибитесь.



С другой стороны находятся кнопки, порты SATA, HDMI, USB OTG и карточка micro-SD.



Документация:На этот хардвер замечательно встаёт последняя версия Debian. К сожалению, не Ubuntu, так как там больше не поддерживаются 32-битные архитектуры. Про особенности Debian на процессоре AllWinner A20 читайте здесь.

Образ диска скачивается с официального сайта и склеивается из двух частей:
wget https://deb.debian.org/debian/dists/stable/main/installer-armhf/current/images/netboot/SD-card-images/firmware.A20-OLinuXino-Lime2.img.gz
wget https://deb.debian.org/debian/dists/stable/main/installer-armhf/current/images/netboot/SD-card-images/partition.img.gz
gzcat firmware.A20-OLinuXino-Lime2.img.gz partition.img.gz > complete.A20-OLinuXino-Lime2.img
Полученный образ complete.A20-OLinuXino-Lime2.img надо записать на SD карточку и с неё загрузиться.

Но сначала следует подключиться к консольному порту. Он выведен на трёхконтактный разъём рядом с портом Ethernet:



Я использую адаптер USB-TTL фирмы AdaFruit. Можно применить любой другой. Провода подсоединяются крест накрест, то есть RX (белый) к TX, а TX (зелёный) к RX. Красный провод (питание) не нужен. Подключаемся с другого компьютера через виртуальный последовательный порт на скорости 115200. Можно через minicom или другой эмулятор терминала. При старте системы видим:
U-Boot SPL 2021.04+olimex-1-20241121.171845 (Nov 21 2024 - 17:19:49 +0000)
DRAM: 1024 MiB
CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
Loading configuration from EEPROM: OK
Verifying data: OK
Trying to boot from MMC1

U-Boot 2021.04+olimex-1-20241121.171845 (Nov 21 2024 - 17:19:49 +0000) Allwinner Technology

CPU: Allwinner A20 (SUN7I)
ID: A20-OLinuXino-LIME2-e16Gs16M Rev.L1
SN: 00034AA4
MAC: 30:1F:9A:D1:BB:E0
I2C: ready
DRAM: 1 GiB
SF: Detected w25q128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
MMC: mmc@1c0f000: 0, mmc@1c11000: 1
И так далее. Появляется стандартный установщик Debian. Проходим установку до конца, как на обычном компьютере. Получаем классический линукс.



Подробности конфигурации: Меряем скорость:
$ dhrystone

Dhrystone Benchmark, Version 2.1 (Language: C)
...
Nanoseconds for one run through Dhrystone: 309.9
Million Dhrystones per Second: 3.226
DMIPS: 1836.3
Это 24% от скорости Raspberry Pi 4. 
vak: (Default)
Аттрактор Лоренца был впервые изучен Эдом Н. Лоренцом, метеорологом, около 1963 года. Он был получен из упрощенной модели конвекции в атмосфере Земли. Он также естественным образом возникает в моделях лазеров и динамо. Система чаще всего выражается как 3 связанных нелинейных дифференциальных уравнения.
∂x/∂t = A·(y − x)
∂y/∂t = x·(B − z) − y
∂z/∂t = x·y − C·z
Один из часто используемых наборов констант: A = 10, B = 28, C = 8/3.

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

Типичная трасса каждой координаты показана на рисунке.



Вот текст программы на Си, воспроизводящей этот аттрактор. Печатаем триста шагов.
#include "stdio.h"

int main()
{
const int N = 300;
const double H = 0.01;
const double A = 10.0;
const double B = 28.0;
const double C = 8.0 / 3.0;

double x = 0.1;
double y = 0;
double z = 0;

for (int i = 0; i < N; i++) {
double x_next = x + H * A * (y - x);
double y_next = y + H * (x * (B - z) - y);
double z_next = z + H * (x * y - C * z);
x = x_next;
y = y_next;
z = z_next;
printf("%d %g %g %g\n", i, x, y, z);
}
}
Компилируем, запускаем.
$ cc lorenz-real.c -o lorenz-real
$ ./lorenz-real
...
297 -12.4511 -9.23727 35.4193
298 -12.1297 -8.22112 35.6249
299 -11.7388 -7.21403 35.6721
Если Вы думаете, что хаос возможен только с вещественными числами - смею вас разуверить. Переделаем программу на целые.
#include "stdio.h"

int main()
{
const int N = 300;
const long long K = 100000000;
const long long RH = 100;
const long long A = 10;
const long long B = 28;
const long long CN = 8;
const long long CD = 3;

long long x = K / 10;
long long y = 0;
long long z = 0;

for (int i = 0; i < N; i++) {
long long x_next = x + A * (y - x) / RH;
long long y_next = y + (x * (B*K - z) - y*K) / RH / K;
long long z_next = z + (x * y - CN * z * K / CD) / RH / K;
x = x_next;
y = y_next;
z = z_next;
printf("%d %g %g %g\n", i, (double)x/K, (double)y/K, (double)z/K);
}
}
Запускаем.
$ cc lorenz-integer.c -o lorenz-integer
$ ./lorenz-integer
...
297 -12.4511 -9.23727 35.4193
298 -12.1297 -8.22112 35.6249
299 -11.7388 -7.21403 35.6721
Выходит ровно то же самое. Дело не в числах, а в природе реальности. Здесь математика переходит в физику. Многие процессы вокруг нас, кажущиеся случайными, на самом деле лоренцовы аттракторы, развивающиеся по чётко определённым правилам.
vak: (Робот 2)
В 1966-м году Джозеф Вейценбаум соорудил программу Элиза, которая умела вести диалог с человеком. Я взял аутентичную реализацию Элизы на Си++ (aheliza.cpp) и дал ей пообщаться с chatgpt.com. Вот что получилось.
$ c++ -std=c++17 aheliza.cpp -o aheliza
$ ./aheliza 1966_01_CACM_article_Eliza_script.txt
HOW DO YOU DO. PLEASE TELL ME YOUR PROBLEM
I'm here and ready to help with whatever you need! What's on your mind?
IS IT BECAUSE YOU ARE HERE AND READY TO HELP WITH WHATEVER I NEED! WHAT'S ON MY MIND? THAT YOU CAME TO ME
Interesting twist on our interaction! It seems like you're playing with language. Are you exploring something specific, like philosophy, humor, or a creative idea?
WHAT MAKES YOU THINK I AM PLAYING WITH LANGUAGE
Your phrasing has a playful rhythm and an almost Socratic quality, as though you're leading the conversation in a way that invites curiosity. It's the kind of wordplay that nudges me to think about meaning and intent. Am I on the right track, or is there something else at play here?
WHY ARE YOU CONCERNED OVER MY PHRASING HAS A PLAYFUL RHYTHM AND AN ALMOST SOCRATIC QUALITY
Because the way we communicate shapes the meaning of our exchange. Your phrasing feels deliberate, inviting a deeper reflection on how and why we speak the way we do. It’s intriguing! Are you testing the boundaries of conversation, or is there a specific insight you're aiming for?
IS THAT THE REAL REASON
The real reason is simple curiosity. Your questions challenge the usual flow of dialogue, and that fascinates me. It’s not every day I encounter such thought-provoking engagement. What about you—why do you ask in this way?
WHAT ABOUT YOUR OWN QUESTIONS CHALLENGE THE USUAL FLOW OF DIALOGUE
Good point! My questions might challenge the flow because they’re reflective and recursive, mirroring your own approach. They aim to uncover layers of meaning rather than just provide direct answers. It’s like a conversational dance—responding to your rhythm while introducing my own.
YOUR QUESTIONS MIGHT CHALLENGE THE FLOW BECAUSE THEY’RE REFLECTIVE AND RECURSIVE
Does this dynamic resonate with you?
I AM NOT SURE I UNDERSTAND YOU FULLY
Let me rephrase! My questions might seem unusual because they don’t just aim to answer you directly; instead, they look deeper, trying to understand the reasoning or emotion behind your words. When I say they’re “reflective,” I mean they mirror your ideas back to you, like holding up a conversational mirror. And by “recursive,” I mean they often loop back to ask about the meaning of what’s been said, creating a cycle of exploration. Does that make things clearer?
WHY DO YOU SAY YOUR QUESTIONS MIGHT SEEM UNUSUAL BECAUSE THEY DON’T JUST AIM TO ANSWER I DIRECTLY; INSTEAD
I say that because your style of questioning nudges me to think beyond a simple response. You seem to invite deeper exploration, so I adapt by offering thoughts that expand on the surface meaning. It’s like you’re inviting a collaborative unraveling of ideas. Am I understanding your intent, or would you frame it differently?
YOU SAY YOU SAY THAT BECAUSE MY STYLE OF QUESTIONING NUDGES YOU TO THINK BEYOND A SIMPLE RESPONSE
Yes, I do say that! Your questions are open-ended and layered, which makes me pause and consider how best to engage. They don't just seek straightforward answers; instead, they seem to probe the why and how of the interaction itself. Is that the effect you’re going for, or do you see it differently?
YOU SEEM QUITE POSITIVE
I do try to keep things positive! It's my way of fostering a thoughtful, open, and engaging atmosphere. It helps conversations flow and encourages curiosity. Does that positivity resonate with you, or does it feel unexpected in this exchange?
DOES THAT SUGGEST ANYTHING ELSE WHICH BELONGS TO YOU

(...и так далее...)