vak: (Знайка)
[personal profile] vak
Видели мы уже Си++, D, Zig, а вот встречайте новый проект. Язык и компилятор С3: https://c3-lang.org/. Пока не такой развитый как Zig, но тоже представляет интерес. Работает на маке и Линуксе, на Windows я не пробовал.

Компилятор построен на основе LLVM: github.com/c3lang/c3c

Простейший пример:
module hello_world;
import std::io;

fn void main()
{
io::printn("Hello, world!");
}
Основные улучшения C3 по сравнению с обычным C:

Особенность / улучшение Что добавлено в C3 Зачем это нужно / какую проблему решает
Совместимость с ABI C Программы на C3 могут напрямую вызывать функции C и наоборот, без обёрток. Можно использовать существующие C‑библиотеки и постепенно переходить на C3.
Модульная система (namespaces) Код организуется в модули с контролем экспорта и изоляцией имён. В C всё глобально, имена часто конфликтуют, сложное управление зависимостями.
Дженерики (обобщённые модули) Код можно писать для разных типов данных без макросов. В C приходится копировать код или использовать сложные макросы.
Срезы и безопасные массивы Встроенные типы «срезов» (указатель + длина), безопасное индексирование, foreach. В C легко выйти за пределы массива и получить утечку или сбой.
Ошибки и опциональные типы Встроенные типы для ошибок (например, Result, Optional) без накладных расходов. В C обработка ошибок громоздкая и легко забыть проверить код возврата.
defer — автоматическая очистка ресурсов Можно указать действия, выполняемые при выходе из функции. В C приходится вручную дублировать код освобождения или писать goto cleanup.
Контракты (пред- и постусловия) Можно описывать логические условия, проверяемые в отладочном режиме. В C нет встроенных средств проверки инвариантов.
Семантические макросы и код во время компиляции Макросы понимают типы; можно выполнять код на этапе компиляции. В C макросы чисто текстовые, часто приводят к ошибкам.
SIMD и inline‑assembler первого класса Поддержка векторных типов и встроенного ассемблера на уровне языка. В C это делается через нестандартные расширения и платформозависимо.
«Zero‑is‑Initialization» (ZII) Нулевая инициализация создаёт корректное состояние объекта, где это имеет смысл. В C часто встречаются ошибки из‑за неинициализированной памяти.
Расширенная стандартная библиотека Есть готовые динамические массивы, хэш‑карты, строки и другие утилиты. В C стандартная библиотека минимальна, приходится писать всё вручную.
vak: (Знайка)
[personal profile] vak
(отсюда)

В главе 19 руководства к ZX Spectrum 1982 года (PDF) объясняется «BEEP» — команда BASIC, которая заставляла Spectrum издавать звуки. Приводится пример исполнения траурного марша из Первой симфонии австрийского композитора Малера.



Глава заканчивается парой упражнений для улучшения навыков BEEP, второе из которых — «Запрограммируйте компьютер так, чтобы он играл не только траурный марш, но и остальную часть Первой симфонии Малера».



Четыре части симфонии длятся около 50 минут, что делает такую ​​программу нетривиальной. Однако нынешним хакерам семь вёрст не крюк. Для исполнения симфонии потребовалась распределённая система из кучи Спектрумов (Spectra?), где каждый прибор играл свою партию. Интерфейс Spectranet объединил машины в сеть, управляемую Raspberry Pi. В нужный момент каждый Спектрум делает соответствующий BEEP, исполняя свою музыкальную партию.

The Easy Language

Oct. 8th, 2025 01:00 am
vak: (Знайка)
[personal profile] vak
Помните книжку Этюды для программистов? Там в предпоследней главе было крышесносное задание: построить компилятор для паскалеподобного языка.
Easy Does It
                   or...
A COMPILER FOR AN
ALGEBRAIC LANGUAGE

A compiler is always a large program. To write one from scratch, even in a pedagogical environment, is a major undertaking. Although Easy is designed to reduce the pain while providing as much enlightenment as possible, this still is the hardest problem in the book. Do not tackle it unless you (and some helpful friends) have plenty of time and energy.

THE EASY LANGUAGE

Easy is a general-purpose, procedural, algebraic programming language. Its roots lie in ALGOL, ALGOL 68, and PASCAL. Like them, it is designed to be compiled, loaded, and executed on a reasonably conventional computer (the EC-1 described in Chapter 25 is a good example). The syntax is described by a context-free grammar suitable for parsing by LR(1) techniques. The semantics are similar to the languages described above, and we will let an informal description suffice, trusting to the reader’s skill to fill any gaps. In the text below, logically connected portions of the grammar are described with the associated semantics.
Так вот, один гениальный человек ([personal profile] begoon) такой компилятор зафигачил. Исходники проекта: github.com/begoon/easy

Пример кода на языке Easy, игра Жизнь: life.easy

Компилируем, запускаем:
git clone https://github.com/begoon/easy.git
cd easy
node easyc.ts life.easy
cc life.c -o life -I.
./life
Получаем:
** [ EASY LIFE ] ***************************************************************** 
* xx *
* xx xx *
* x x xxx *
* xx x xxx *
* x x x xx *
* xx x x x xx *
* xxx x x *
* x xxx xxx *
* xxxxx xx xx *
* xx x x x *
* x x xx *
* x xx *
* xxx *
* x *
* x xx x *
* xxx xxx x x *
* x x x *
* x x xx *
* x x *
* *
* *
* *
* xx *
* xx xx *
* xx *
**********************************************************************************
GENERATION: 104

coteditor

Oct. 7th, 2025 10:34 pm
vak: (Знайка)
[personal profile] vak
Хороший текстовый редактор должен иметь отношение к котам. 😀 Вызывается командой "cot". Но только на маке. Устанавливается командой "brew install coteditor". Из удобств: легко настраивать расцветку синтаксиса для ранообразных файлов и языков программирования.
Попросил Грока, он мне быстренько наваял описание синтаксиса Алгола 60 для которедактора: Algol 60.yml.

telesyk: (Default)
[personal profile] telesyk
Сегодня утром в центре Донецка на Гладковке население обнаружило коробки с водой



Ватня прочла этикетку и бросилась трезвонить полицаям: Караул! Диверсия!

Read more... )
vak: (Путиномедвед)
[personal profile] vak
Герман Обухов, "Большая ложь маленького человечка: что скрывает Путин"

Официальные источники гласят: Владимир Владимирович Путин родился 7 октября 1952 года в Ленинграде в семье рабочих. Отец — Владимир Спиридонович Путин, родился в 1911 году в деревне Поминово Тверской губернии. Мать — Мария Ивановна Путина (урождённая Шеломова), родилась также в 1911 году в деревне Заречье Тверской губернии, где и познакомилась со своим будущим мужем.

Это чистокровный фейк. На самом деле Володя Путин родился в больнице небольшого городка Очёр, Пермского края. Его настоящая мать жила до недавнего времени в грузинском селе Метехи, её зовут Вера Николаевна Путина - Осепашвили. Она родилась в 1926 году в селе Терехино, рядом с маленьким городом Очёр. В техникуме Очёра она познакомилась с человеком, которого звали Платон Привалов. Позже, будучи беременной, она случайно узнала, что он женат и ей пришлось вернуться к своим родителям в Терехино. Вскоре родился наш Вова, шел 1950 год, а не 1952.

дальше )

Google Pixel Tablet

Oct. 6th, 2025 11:02 pm
vak: (Линукс)
[personal profile] vak
Лайфхак:Получаем симпатичный и удобный в работе компьютер для программиста. Настраиваем вход через SSH и можем пользоваться удалённо. Механическая клавиатура в ретро стиле IBM PC AT добавляет колорита. Через Alt-Tab переключаемся на обычные андроидные приложения.



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

Dhrystone Benchmark, Version 2.1 (Language: C)
...
Nanoseconds for one run through Dhrystone: 21.1    
            Million Dhrystones per Second: 47.394  
                                    DMIPS: 26974.1
Это на 40% быстрее Raspberry Pi 5. Или в 3.5 раза быстрее Raspberry Pi 4.

Сравнительная таблица: vak.dreamwidth.org/1159708.html
spamsink: (Default)
[personal profile] spamsink
Если бы шимпанзе или орангутаны умели говорить и умели бы в метафоры, они в качестве выражения негативного отношения к сородичу говорили примерно так: "Он, конечно, не <кто там в их местности главный хищник, опасный для конкретного вида, или другой какой вид, приносивший на протяжении истории шимпанзе или орангутанов основные неприятности>, но человек порядочный".

Это всё, что вам нужно знать о коннотациях словосочетания "порядочный человек".
vak: (Українець)
[personal profile] vak
Как был сделан козак в формате SVG? Расскажу по пунктам. Этим методом можно векторизовать любое (почти) растровое изображение. Из инструментов понадобятся magick, potrace и Python с пакетом svgutils.

1. Берем растровую картинку, которую будем векторизовать. В моём случае это kozak.png. Желательно чтобы картинка была в мультяшном стиле, то есть нарисована небольшим количеством цветов. Такой стиль ещё называют комиксным, или манга.

2. Определяем количество различных цветов в картинке. У козака четыре цвета: чёрный, белый, красный (шаровары) и бежевый (лицо, руки).

3. Упрощаем картинку, уменьшая количество цветов до 4 и убирая шум отдельных пикселей. Смотрим, какие цвета получились.
$ magick kozak.png -despeckle -colors 4 simple.png
$ magick simple.png -format %c histogram:info: | sort -n -r
1178809: (254,254,254) #FEFEFE srgb(254,254,254)
179431: (6,5,5) #060505 srgb(6,5,5)
117463: (214,91,69) #D65B45 srgb(214,91,69)
97161: (224,192,156) #E0C09C srgb(224,192,156)
4. Зная точные значения цветов, разделяем цветную картинку на три чёрно-белые: каждый цвет отдельно. Фоновым делаем белый цвет.
white="#FEFEFE"
black="#060505"
red="#D65B45"
beige="#E0C09C"
magick simple.png -fill black -opaque $black \
-fill white -opaque $white \
-fill white -opaque $beige \
-fill white -opaque $red black-layer.pbm
magick simple.png -fill black -opaque $red \
-fill white -opaque $white \
-fill white -opaque $black \
-fill white -opaque $beige red-layer.pbm
magick simple.png -fill black -opaque $beige \
-fill white -opaque $white \
-fill white -opaque $black \
-fill white -opaque $red beige-layer.pbm
5. Векторизуем каждый из слоёв в отдельный SVG file, восстанавливая цвета близко к исходным.
potrace black-layer.pbm -s --turdsize 15                   -o black-layer.svg
potrace beige-layer.pbm -s --turdsize 15 --color "#EFAC78" -o beige-layer.svg
potrace red-layer.pbm -s --turdsize 15 --color "#C21919" -o red-layer.svg
6. Объединяем слои в одну картинку. Задействуем Питон и пакет svgutils.
from svgutils.compose import *
from svgutils.transform import fromfile

width, height = fromfile('black-layer.svg').get_size()
Figure(width, height, # Canvas size
SVG('beige-layer.svg'), # Bottom layer
SVG('red-layer.svg'), # Middle layer
SVG('black-layer.svg'), # Top layer
).save("kozak.svg")
Результат можно видеть здесь: kozak.svg. Все скрипты собраны в кучу на Гитхабе: sergev/vak-opensource/tree/master/utilities/vectorize.
vak: (Знайка)
[personal profile] vak
Какой нынче имеется простой способ писать документацию? Чтобы не заморачиваться, и чтобы сразу и HTML вариант и PDF вариант образовывались.

Есть такой метод! Показываю. Ключевые моменты: Pandoc и Tectonic.

Документы пишем в формате Markdown. Выглядит как простой текст, без мудрёных команд. Можно вставлять рисунки, делать таблицы, использовать математические формулы. Вот пример документа:
# Задача

В школьной столовой Петя заметил, что количество котлет на тарелке уменьшается по формуле
$$
K(t) = K_0 - t,
$$
где $K_0$ — начальное число котлет, а $t$ — время в минутах, прошедшее с момента, как Петя сел за стол.

Если у Пети было 5 котлет, то через сколько минут Петя обратится к маме со словами:
*«Мам, а добавки можно?»*

# Таблица умножения

| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 2 | 2 | 4 | 6 | 8 | 10| 12| 14| 16| 18|
| 3 | 3 | 6 | 9 | 12| 15| 18| 21| 24| 27|
| 4 | 4 | 8 | 12| 16| 20| 24| 28| 32| 36|
| 5 | 5 | 10| 15| 20| 25| 30| 35| 40| 45|
| 6 | 6 | 12| 18| 24| 30| 36| 42| 48| 54|
| 7 | 7 | 14| 21| 28| 35| 42| 49| 56| 63|
| 8 | 8 | 16| 24| 32| 40| 48| 56| 64| 72|
| 9 | 9 | 18| 27| 36| 45| 54| 63| 72| 81|

![](kozak.svg){width=100}
Преобразуем это дело в HTML:
pandoc example.md -o example.html --standalone --mathjax
Получаем:


Аналогичным образом соорудим PDF:
pandoc example.md -o example.pdf --pdf-engine=tectonic --template=template.tex
Сравниваем:


Стиль PDF-документа можно задавать, меняя template.tex. Для HTML тоже есть аналогичный флаг --css=style.css.
telesyk: (Default)
[personal profile] telesyk
Десятки тысяч кассетных снарядов - солидная база для изготовления сотен тысяч сбросов для БПЛА

Векторный козак

Oct. 3rd, 2025 10:46 pm
vak: (Українець)
[personal profile] vak
Сварганил козака в формате SVG: пользуйтесь кому надо.

А таке питаннячко

Oct. 4th, 2025 08:31 am
kampfflieger: (Default)
[personal profile] kampfflieger
Шо там за чутки бігали деякий час тому, що благословенна Каліфорнія хоче відділитися і будувати світле майбутнє окремо від Оранж Мен Бед?

Tectonic и SVG

Oct. 3rd, 2025 12:17 pm
vak: (Знайка)
[personal profile] vak
Как нарисовать дерево Штерна—Броко? Задействуем TeX для прикола. Вот такой малопонятный код мне Грок насоветовал.
\documentclass{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
  Stern Brocot/.style n args={5}{%
    content=$\frac{\number\numexpr#1+#3\relax}{\number\numexpr#2+#4\relax}$,
    if={#5>0}{% true
      append={[,Stern Brocot={#1}{#2}{#1+#3}{#2+#4}{#5-1}]},
      append={[,Stern Brocot={#1+#3}{#2+#4}{#3}{#4}{#5-1}]}
    }{}}% false (empty)
[,Stern Brocot={0}{1}{1}{0}{5}]
\end{forest}
\end{document}
Давно не брал я в руки шашки ТеХ. Когда-то по молодости много ним занимался, и всегда с ТеХом было сложно. Но давеча появился новый инструмент: Tectonic. Народ упёрся и наваял (на Rust!) поверх старого доброго кнутовского ТеХа удобную обёртку. Ставится командой brew install tectonic на маке, или sudo snap install tectonic в Линуксе. Превращаем .tex в .pdf:
tectonic tree.tex
Полученный файл PDF можно для удобства превратить в векторный рисунок SVG. Его можно смотреть любым браузером или вставлять в документы:
pdftocairo -svg tree.pdf tree1.svg
svgcleaner tree1.svg tree2.svg
Здесь pdftocairo создаёт SVG, а svgcleaner его оптимизирует, уменьшая размер. Вот такое пятиуровневое дерево получается:



Если в теховском исходнике в третьей строчке с конца заменить {5} на {8}, получим восемь уровней. Кликайте на картинку, зумьте и проворачивайте вправо-влево:

Дроби вам

Oct. 2nd, 2025 11:39 pm
vak: (Знайка)
[personal profile] vak
Оказывается, есть такой алгоритм: Штерна—Броко называется. Простым, но неочевидным способом вычисляет все неприводимые дроби (включая целые числа). Очень остроумно. Мне раньше не попадался почему-то.

1. Создаем список из двух дробей:


Не шарахайтесь от деления на единицу и нуль, так нужно.

2. Берём соседнюю пару дробей и между ними вставляем новую дробь. Пусть исходная пара была:


Новая дробь будет:


3. Повторяем итеративно до бесконечности.

Нетрудно доказать, что всякая неприводимая дробь будет рано или поздно вычислена. При этом никакое значение не повторится дважды.

Google Pixel 7 Pro

Oct. 2nd, 2025 12:51 pm
vak: (Default)
[personal profile] vak
Вдогонку к таблету Fire HD протестирую Термукс на мобильнике. Имеем: fastfetch, cpuinfo и lscpu.
OS: Android REL 16 aarch64
Host: Google Pixel 7 Pro
Kernel: Linux 6.1.134-android14-11-g66e758f7d0c0-ab13748739
Uptime: 23 hours, 32 mins
Packages: 126 (dpkg)
Shell: bashc
WM: WindowManager (SurfaceFlinger)
Terminal:
CPU: GS201 (8) @ 2.85 GHz
GPU: Mali-G710 [Integrated]
Memory: 8.50 GiB / 11.17 GiB (76%)
Swap: 3.00 GiB / 3.00 GiB (100%)
Disk (/): 1021.93 MiB / 1.00 GiB (100%) - ext4 [Read-only]
Disk (/storage/emulated): 89.67 GiB / 109.91 GiB (82%) - fuse
Local IP (rmnet16): 100.65.111.18/32
Local IP (wlan0): 192.168.86.29/24
Locale: en_US.UTF-8
Меряем скорость:
$ dhrystone

Dhrystone Benchmark, Version 2.1 (Language: C)
...
Nanoseconds for one run through Dhrystone: 15.5
            Million Dhrystones per Second: 64.447
                                    DMIPS: 35731.5
Это почти в 5 раз быстрее, чем Raspberry Pi 4. Или почти в 2 раза быстрее Raspberry Pi 5.

Сравнительная таблица: vak.dreamwidth.org/1159708.html

Amazon Fire HD 10 (9th generation)

Oct. 1st, 2025 11:21 pm
vak: (Знайка)
[personal profile] vak
Купил я пять лет назад амазонский таблет, побаловаться с Андроидом. Тогда на распродаже это дело стоило $80. Ставил туда кучу разного софта, всё работало, но "не радовало". 😀 По интернету бродить и фильмы смотреть удобнее с айпада, а книжки читать приятнее на черно-белом Киндле.



Собирался уже выбросить, но решил напоследок глянуть на тему Линукса. Поставить туда полноценный Линукс не удаётся, слишком всё защищено. Однако имеется Termux с входом через SSH. Я собрал там Bash Commander, текстовый редактор, все дела. Компиляторы работают, даже Rust, Golang и Zig. Приятно посмотреть.

Из конфигурации Термукс мало что позволяет смотреть. Всё что имеем: fastfetch и cpuinfo.
OS: Android REL 9 armv8l
Host: Amazon KFMAWI
Kernel: Linux 4.4.146+
Uptime: 19 hours, 7 mins
Packages: 139 (dpkg)
Shell: bashc
WM: WindowManager (SurfaceFlinger)
Terminal: /dev/pts/1
CPU: 2 x MT8183 (8) @ 1.99 GHz
GPU: Mali-G72 MP3 [Integrated]
Memory: 1.15 GiB / 1.75 GiB (66%)
Swap: 230.35 MiB / 512.00 MiB (45%)
Меряем скорость:
$ dhrystone

Dhrystone Benchmark, Version 2.1 (Language: C)
...
Nanoseconds for one run through Dhrystone: 67.7    
            Million Dhrystones per Second: 14.768  
                                    DMIPS: 8405.0
Это на 8% быстрее, чем Raspberry Pi 4. Или 44% от скорости Raspberry Pi 5. Вроде и неплохой девайс. Непонятно только, куда приспособить. Хотя приятная особенность в том, что это 32-битная система. Сам процессор-то ARM64, но работает в 32-битном режиме. Где нынче ещё найдёшь 32-битный Андроид: редкость!

Сравнительная таблица: vak.dreamwidth.org/1159708.html

Lynx SAI50 MLSoC Modalix Module

Oct. 1st, 2025 12:25 pm
vak: (Робот 1)
[personal profile] vak
Наши чипы пошли в продажу в Европе. Заказывайте модули SOM через Энклюстру: enclustra.com/en/products/edge-ai-mlsoc/lynx-sai50/

vak: (Украина)
[personal profile] vak
Рідна Україна переможе!

Profile

ironowl: (Default)
Roman

August 2018

S M T W T F S
   1234
5678 91011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 10th, 2025 02:07 am
Powered by Dreamwidth Studios