<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vega/README.md, branch master</title>
<subtitle>Surface runtime projecting Pure views across pixel, terminal, CLI, and web.
</subtitle>
<id>http://git.yeowoo.org/vega/atom?h=master</id>
<link rel='self' href='http://git.yeowoo.org/vega/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/'/>
<updated>2026-09-27T18:42:23Z</updated>
<entry>
<title>Add a messenger between two nodes, sealed end to end</title>
<updated>2026-09-27T18:42:23Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T18:42:23Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=c20c8fa13c77d08d093aede126a1ec7646da0905'/>
<id>urn:sha1:c20c8fa13c77d08d093aede126a1ec7646da0905</id>
<content type='text'>
examples/messenger.aup keeps the lines typed here and sends each to the
other node, and keeps the other's. The check runs Alice's and Bob's
nodes, each with a key of its own, sealing to the other's and taking
lines only from the other (pure-serve --key, --send, --seal, --sender),
each drawn by Vega in the node, with a relay between them: a line typed
on Alice's display reaches Bob's node and is drawn on his, Bob's answer
posted by a program is drawn on hers, each last frame is the one the
vega command draws from that node's store, and the relay saw no line's
text nor a field's name, only one sealed session each way naming the
sender's key.
</content>
</entry>
<entry>
<title>Show a Pure node's app on its display, as a surface in the node</title>
<updated>2026-09-27T18:37:33Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T18:37:33Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=5fe8104744d3e0a48674b1368db6fd104a10bdd4'/>
<id>urn:sha1:5fe8104744d3e0a48674b1368db6fd104a10bdd4</id>
<content type='text'>
The vega host builds a second way, as build/vega-surface.so, which
pure-serve maps and runs beside its connection threads (pure-serve
--surface vega-surface.so -- display ..., Pure's design 010). There the
app it draws is a reader of the node's last save, read where it is,
and what people type goes to the node's owner: a key press as the key
input's event, the typed line as the text input's, each applied and
saved with the node's requests. It waits on its input devices and the
node's changes descriptor together, leaves timers and signals to the
node, and stops with it. The library calls the app model pure-serve
exports and links none of its own; it exports pure_surface_run alone.
Without --live or --input it takes no input: the node's saves alone draw
it.

The check gives a node an item over HTTP, then runs the display in the
node with recorded keys (an item, Enter, Tab, Space): the last frame is
the one vega tui draws for the same state and keys, it came back from
the display controller as drawn, and the node's views show both items.

</content>
</entry>
<entry>
<title>Take keyboards, mice and touch screens on the display (evdev)</title>
<updated>2026-09-27T14:03:45Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T14:03:45Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=ad3eb77af098f34c1ea8cb50f468a8b75fb7d61c'/>
<id>urn:sha1:ad3eb77af098f34c1ea8cb50f468a8b75fb7d61c</id>
<content type='text'>
vega display --live reads the kernel's input events with no library:
keys become Pure's key names and the text they type on a US layout, going
through the TUI's own handling (the input line takes text, else the app
takes keys); a mouse moves an outlined pointer and clicks, a touch screen
presses where it is touched, scaled from the device's range; the line
pressed is the row. --input FILE reads recorded events to their end and
prints the last frame, which is how this screenless Pi checks it: after
typing two items with Shift, Enter, Tab, Space and a touch on a row, the
display's last frame is the TUI's after the same keys and click, and came
back from the display controller as drawn.

</content>
</entry>
<entry>
<title>Put the frames on a display through KMS, checked by writeback</title>
<updated>2026-09-27T13:59:54Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T13:59:54Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=5313285bbfedf6154d2611c4923cff458d7ef271'/>
<id>urn:sha1:5313285bbfedf6154d2611c4923cff458d7ef271</id>
<content type='text'>
vega display draws the same frames on a display with the kernel's mode
setting and no library between: a connected connector's mode on a CRTC, its
primary plane flipped between two dumb buffers by atomic commits, the grid
as many cells as fit. Frames are drawn in cached memory and copied over,
since blending over write-combined buffers read them back slowly (a 1080p
frame took 370 ms; now 20.6 ms with a vertical sync and the check below).

This Pi has no screen but its display controller has writeback connectors:
--writeback sets a mode on one and takes every frame back as the controller
put it out. Each came back exactly as drawn, and the new check finds it the
pixel surface's frame for the same grid, pixel for pixel.

</content>
</entry>
<entry>
<title>Draw the TUI's cells as pixels with the symbols' glyphs</title>
<updated>2026-09-27T13:54:53Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T13:54:53Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=993871c6dfa19cf4e0bd4a16c9aad26cb0025d70'/>
<id>urn:sha1:993871c6dfa19cf4e0bd4a16c9aad26cb0025d70</id>
<content type='text'>
vega pixels runs the same scripts as tui --dump and writes each frame as
an image: the view's cells (only those on screen are evaluated) become
glyphs, each drawn once per size with the exact area of its curves, in its
tone's colour on its row's background. No page, no scene in between. A
1920x1350 grid takes 12 ms a frame here, writing the image included.

Symbol files carry the font's line now (format 3: ascent and descent where
format 2 kept zeros), the cell height and baseline; and the build tool takes
fonts in order, later ones filling the codes earlier ones lack: a CJK font
alone drew ambiguous-width arrows two cells wide in a one-cell grid, which
the new check caught, so a monospace Latin font comes first and Hangul after.

</content>
</entry>
<entry>
<title>Name Vega's parts: lib/, surfaces/ and symbols/</title>
<updated>2026-09-27T12:45:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:45:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=2920e389f624263efe515d9a5f33f6b822efff5e'/>
<id>urn:sha1:2920e389f624263efe515d9a5f33f6b822efff5e</id>
<content type='text'>
src/ held two parts, the surfaces that show modules to people and the
symbol format with its CPU and GPU drawing. As in Pure (design 009), top
level directories are now the parts, and the README says what each builds.

</content>
</entry>
<entry>
<title>Link Pure's libpure.a instead of compiling its sources</title>
<updated>2026-09-27T12:14:46Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:14:46Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=e650c341704e1b7f4c9d5a05bfa745c54002a599'/>
<id>urn:sha1:e650c341704e1b7f4c9d5a05bfa745c54002a599</id>
<content type='text'>
Pure builds the app model and the tree store as one library with headers in
core/; Vega no longer lists Pure's files, so a new one there cannot break it.

</content>
</entry>
<entry>
<title>Draw glyphs and icons from one symbol format, by exact pixel area</title>
<updated>2026-09-27T07:44:42Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T07:44:42Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=523b810d6a9c60342c7f5d74f36fe66f3f2057e9'/>
<id>urn:sha1:523b810d6a9c60342c7f5d74f36fe66f3f2057e9</id>
<content type='text'>
Symbol files (VEGASYM1) hold glyphs and icons as quadratic curves, verified
once per symbol and then read in place. vega-symbols builds them from fonts
(through FreeType, losslessly: twice the font's units keeps TrueType's
implied points whole) and from solid SVG paths (arcs included), refusing by
name what an icon asks for that symbols cannot hold.

The reference rasterizer computes each pixel's covered area exactly: every
curve's integral of clamp(1 - x) dy inside the pixel, split where it crosses
the pixel's sides. The Slug-style two-ray average first tried missed FreeType
by 15.4 levels on average at 12 px; exact area is within 1.2-3.5 at 8-16 px,
and where it differs most it matches 64x64 supersampling, not FreeType.

Reaching an outline costs 4.6-29x less than through FreeType, but the files
are 2.1-6.6x larger than glyf or CFF: design 002 has the numbers and the next
question (points shared along contours, lines without control points).

</content>
</entry>
<entry>
<title>Add a board used by people and programs alike</title>
<updated>2026-09-26T17:04:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T17:04:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=9c2d1eb1d423625672cb469af6bf708a48d3cb71'/>
<id>urn:sha1:9c2d1eb1d423625672cb469af6bf708a48d3cb71</id>
<content type='text'>
examples/board.aup is a kanban board: people add and move cards on
Vega's surfaces, programs post JSON to the same module served by
pure-serve, with no routes written. The checks write cards with the CLI
into a store, serve that store over HTTP where a program moves one and
adds another, and read it again with the CLI, the focus still on the
card it was on.

</content>
</entry>
<entry>
<title>Swap a running app's module: --watch and the swap command</title>
<updated>2026-09-26T10:54:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-26T10:54:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=8e2b3ffadcf83dba74d58dbf9ee2c57cef5f1ad5'/>
<id>urn:sha1:8e2b3ffadcf83dba74d58dbf9ee2c57cef5f1ad5</id>
<content type='text'>
vega tui|web MODULE --watch replaces the running app's module when its
file is written again (aup watch writes it); states keep their values by
name through pure_app_replace and every web page hears of it. The file is
compared by the digest of its bytes, at most five times a second, so a
module of the same size written within the same second is not missed; a
module that does not load leaves the app as it was and is not tried
again. Modules alternate between two slots so a failed load never touches
the running one. Scripts get swap MODULE; whether a module runs frames is
now a property of the screen.

</content>
</entry>
</feed>
