@movq@www.uninformativ.de Is there a good way to get jenny to do a one-off fetch of a feed, for when you want to fill in missing parts of a thread? I just added @slashdot@feeds.twtxt.net to my private follow file just because @prologic@twtxt.net keeps responding to the feed :-P and I want to know what he’s commenting on even though I don’t want to see every new slashdot twt.
@prologic@twtxt.net Yeah, I’ve noticed that as well when I hacked around. That’s a very good addition, ta! :-)
Getting to this view felt suprisingly difficult, though. I always expected my feeds I follow in the “Feeds” tab. You won’t believe how many times I clicked on “Feeds” yesterday evening. :-D Adding at least a link to my following list on the “Feeds” page would help my learning resistence. But that’s something different.
Also, turns out that “My Feeds” is the list of feeds that I author myself, not the ones I have subscribed to. The naming is alright, I can see that it makes sense. It just was an initial surprise that came up.
@prologic@twtxt.net Fair enough! I just added some metadata.
@prologic@twtxt.net The old options are still valid, so “Show latest post per feed” should just be added as a 3th.
Radio advertisements slapping away sustained thought on the coffeeshop stereo. I’d like a real-life ad blocker.
# follow = dbucklin@www.davebucklin.com https://www.davebucklin.com/twtxt.txt?nick=dbucklin
I fixed it by adding (?<!\S)
to the regex filter. But what is going on with the ?nick=dbucklin
anyhow?
The wording can be more subtle like “This feed have not seen much activity within the last year” and maybe adding a UI like I did in timeline showing time ago for all feeds
I agree that it good to clean up the Mastodon re-feeds, but it should also be okay for anyone to spin up a twtxt.txt just for syndicating they stuff from blog or what ever.
The “not receiving replies” could partly be fixed by implementing a working webmentions for twtxt.txt
And now added #filter for replies too:
Added support for #tag clouds and #search to timeline. Based on code from @dfaria.eu@dfaria.eu🙏
Live at: http://darch.dk/timeline/?profile=https://darch.dk/twtxt.txt
https://github.com/lwthiker/curl-impersonate added support for Edge and Safari a while ago and I didn’t realize. Very cool!
@lyse@lyse.isobeef.org its a hierarchy key value format. I designed it for the network peering tools i use.. I can grant access to different parts of the tree to other users.. kinda like directory permissions. a basic example of the format is:
@namespace
# multi
# line
# comment
root :value
# example space comment
@namespace.name space-tag
# attribute comments
attribute attr-tag :value for attribute
# attribute with multiple
# lines of values
foo :bar
:bin
:baz
repeated :value1
repeated :value2
each @
starts the definition of a namespace kinda like [name]
in ini format. It can have comments that show up before. then each attribute is key :value
and can have their own #
comment lines.
Values can be multi line.. and also repeated..
the namespaces and values can also have little meta data tags added to them.
the service can define webhooks/mqtt topics to be notified when the configs are updated. That way it can deploy the changes out when they are updated.
@lyse@lyse.isobeef.org i made my own :D
I do prefer toml for the old school ini style with added support for object lists.
my second would be hjson or any other json with comments style.
Twtxt spec enhancement proposal thread 🧵
Adding attributes to individual twts similar to adding feed attributes in the heading comments.
https://git.mills.io/yarnsocial/go-lextwt/pulls/17
The basic use case would be for multilingual feeds where there is a default language and some twts will be written a different language.
As seen in the wild: https://eapl.mx/twtxt.txt
The attributes are formatted as [key=value]
They can show up in the twt anywhere it is not enclosed by another element such as codeblock
or part of a markdown link.
Google Chrome Gains AI Features Including a Writing Helper
Google is adding new AI features to Chrome, including tools to organize browser tabs, customize themes, and assist users with writing online content such as reviews and forum posts.
The writing helper is similar to an AI-powered feature already offered in Google’s experimental search experience, SGE, which helps users draft emails in various tones and lengths. W … ⌘ Read more
I’ve added myself to the registries at registry.twtxt.org and twtxt.tilde.institute. I wonder if there’s a list of registries. #meta
Okokok, I added my twtxt link on my sites social media icon section
I have added a webmention endpoint to https://darch.dk using https://webmention.io - let see if it work from neotxt.dk to @sorenpeter@darch.dk
@lyse@lyse.isobeef.org I’m also on the e-mail wagon here. On http://darch.dk/timeline/conv/oe3howa I have added a “Comment via email” botten if uses are not logged in. This feature could be extend to other places in the various UIs. Like we already got the “Does not follow your” / “Follow you” on the profile page in yarnd, so this detection could be used to sugget the user to email that person, when mentioning them.
So Youtube rea really cracking down on Ad-blockers. The new popup is a warning saying you can watch 3 videos before you can watch no more. Not sure for how long. I guess my options are a) wait for the ad-blockers to catch-up b) pay for Youtube c) Stop using Youtube.
I think I’m going with c) Stop using Youtube.
@prologic@twtxt.net I’ve even added the twthash message hash to my Twtxt bash CLI script so I can properly answer here.
@lyse@lyse.isobeef.org I wish more standardization around distributed issues and PRs within the repo ala git-bug was around for this. I see it has added some bridge tooling now.
This is some cool development for the go 1.22 standard http mux. Its adding the ability to have path vars and define methods for handlers. Also the errors are quite helpful if you have conflicting paths!
https://eli.thegreenplace.net/2023/better-http-server-routing-in-go-122/
@prologic@twtxt.net I have seen these screen shots. But have not yet seen them in actuality. I use ublockOrigin. Maybe it gets these too unlike adblock.
For android I have revanced.. The only place I get ads is on TV. I haven’t found a replacement there.
Oh okay, so Youtube is cracking down on “Ad Blockers”. Rightio. 🤔 And paying for Youtube Premium costs $14/month?! 🤯
Get fucked 🤣 I guess I won’t be using Youtube anymore. #Youtube #Ads #Premium #Suck
Li-Fi, light-based networking standard released
Today, the Institute of Electrical and Electronics Engineers (IEEE) has added 802.11bb as a standard for light-based wireless communications. The publishing of the standard has been welcomed by global Li-Fi businesses, as it will help speed the rollout and adoption of the data-transmission technology standard. Where Li-Fi shines (pun intended) is not just in its purported speeds as fast as 224 GB/s. Fraunhofer’s Dominic Schulz points ou … ⌘ Read more
I’ve made smart and added a backup copy of my twtxt file to Storj cos my internet keeps on dying
An official FBI document dated January 2021, obtained by the American association “Property of People” through the Freedom of Information Act.
This document summarizes the possibilities for legal access to data from nine instant messaging services: iMessage, Line, Signal, Telegram, Threema, Viber, WeChat, WhatsApp and Wickr. For each software, different judicial methods are explored, such as subpoena, search warrant, active collection of communications metadata (“Pen Register”) or connection data retention law (“18 USC§2703”). Here, in essence, is the information the FBI says it can retrieve:
Apple iMessage: basic subscriber data; in the case of an iPhone user, investigators may be able to get their hands on message content if the user uses iCloud to synchronize iMessage messages or to back up data on their phone.
Line: account data (image, username, e-mail address, phone number, Line ID, creation date, usage data, etc.); if the user has not activated end-to-end encryption, investigators can retrieve the texts of exchanges over a seven-day period, but not other data (audio, video, images, location).
Signal: date and time of account creation and date of last connection.
Telegram: IP address and phone number for investigations into confirmed terrorists, otherwise nothing.
Threema: cryptographic fingerprint of phone number and e-mail address, push service tokens if used, public key, account creation date, last connection date.
Viber: account data and IP address used to create the account; investigators can also access message history (date, time, source, destination).
WeChat: basic data such as name, phone number, e-mail and IP address, but only for non-Chinese users.
WhatsApp: the targeted person’s basic data, address book and contacts who have the targeted person in their address book; it is possible to collect message metadata in real time (“Pen Register”); message content can be retrieved via iCloud backups.
Wickr: Date and time of account creation, types of terminal on which the application is installed, date of last connection, number of messages exchanged, external identifiers associated with the account (e-mail addresses, telephone numbers), avatar image, data linked to adding or deleting.
TL;DR Signal is the messaging system that provides the least information to investigators.
I’m not super a fan of using json. I feel we could still use text as the medium. Maybe a modified version to fix any weakness.
What if instead of signing each twt individually we generated a merkle tree using the twt hashes? Then a signature of the root hash. This would ensure the full stream of twts are intact with a minimal overhead. With the added bonus of helping clients identify missing twts when syncing/gossiping.
Have two endpoints. One as the webfinger to link profile details and avatar like you posted. And the signature for the merkleroot twt. And the other a pageable stream of twts. Or individual twts/merkle branch to incrementally access twt feeds.
@prologic@twtxt.net I get the worry of privacy. But I think there is some value in the data being collected. Do I think that Russ is up there scheming new ways to discover what packages you use in internal projects for targeting ads?? Probably not.
Go has always been driven by usage data. Look at modules. There was need for having repeatable builds so various package tool chains were made and evolved into what we have today. Generics took time and seeing pain points where they would provide value. They weren’t done just so it could be checked off on a box of features. Some languages seem to do that to the extreme.
Whenever changes are made to the language there are extensive searches across public modules for where the change might cause issues or could be improved with the change. The fs embed and strings.Cut come to mind.
I think its good that the language maintainers are using what metrics they have to guide where to focus time and energy. Some of the other languages could use it. So time and effort isn’t wasted in maintaining something that has little impact.
The economics of the “spying” are to improve the product and ecosystem. Is it “spying” when a municipality uses water usage metrics in neighborhoods to forecast need of new water projects? Or is it to discover your shower habits for nefarious reasons?
here’s a question: when do NNs generalize, and how hard? as in adding two specific numbers together vs. n-digit integer addition vs. addition in general vs. simple arithmetical operations
I don’t use twtxt anymore, but I keep accidentally adding logs to it because the command I use to use !say is so similar to the shortcut I use to make !zet messages. So, some of my logs make no sense because they are out of context.
I think I’m going to create some boilerplate code for !gestku that isn’t ad-hoc. I think I’m ready for this. Gestkus need less code because of how quickly I want to make them.
@abucci@anthony.buc.ci see here in the okta docs: https://developer.okta.com/docs/reference/api/webfinger/ they are adding a prefix to the acct
I learned how to make gopls syntax highlight go templates in VSCodium.
By adding the following to my config
i could go from into
i added some disclaimers
@prologic@twtxt.net duud use an ad block on youtube.
@eaplmx@twtxt.net This exact thing happened to me last night. I happened to be watching some random Youtube video, then this Ad came on, normally they are short 3-5s ads and I just tolerate them (sometimes) – But this particular ad was 20+ mins long! Somehow I kept listening to it too, despite my daughter telling me I could hit that “Skip Ad” button.
What was it you ask?! 😅 It was one of those testimonial-style, hyped up marketing videos of some product called “Gemini 2” (a currency trading app, allegedly), I kept watching all the way through, it was fantastic! 🤣
Then I went and read up on it! …
Short answer: TOTAL FUCKING SCAM 🤣
@lyse@lyse.isobeef.org @prologic@twtxt.net yeah that was how i did it too. I think ill start using the debug version in new stuff since its been added. My comment was around assigning the result of an anonymous function to a a variable.
I was inclined to let this go so as not to stir anything up, but after some additional thought I’ve decided to call it out. This twt:
is exactly the kind of ad hominem garbage I came to expect from Twitter™, and I’m disappointed to see it replicated here. Rummaging through someone’s background trying to find a “gotcha” argument to take credibility away from what a person is saying, instead of engaging the ideas directly, is what trolls and bad faith actors do. That’s what the twt above does (falsely, I might add–what’s being claimed is untrue).
If you take issue with something I’ve said, you can mute me, unfollow me, ignore me, use TamperMonkey to turn all my twts into gibberish, engage the ideas directly, etc etc etc. There are plenty of options to make what I said go away. Reading through my links, reading about my organization’s CEO’s background, and trying to use that against me somehow (after misinterpreting it no less)? Besides being unacceptable in a rational discussion, and besides being completely ineffective in stopping me from expressing whatever it is you didn’t like, it’s creepy. Don’t do that.
@mckinley@twtxt.net really the language authors should have added those to the standard spec by now. That is just obscene.
Right now I have to setup jenny for my timeline. Just added myself to the Registry so that part is done.
(cont.)
Just to give some context on some of the components around the code structure.. I wrote this up around an earlier version of aggregate code. This generic bit simplifies things by removing the need of the Crud functions for each aggregate.
Domain ObjectsA domain object can be used as an aggregate by adding the event.AggregateRoot
struct and finish implementing event.Aggregate. The AggregateRoot implements logic for adding events after they are either Raised by a command or Appended by the eventstore Load or service ApplyFn methods. It also tracks the uncommitted events that are saved using the eventstore Save method.
type User struct {
Identity string ```json:"identity"`
CreatedAt time.Time
event.AggregateRoot
}
// StreamID for the aggregate when stored or loaded from ES.
func (a *User) StreamID() string {
return "user-" + a.Identity
}
// ApplyEvent to the aggregate state.
func (a *User) ApplyEvent(lis ...event.Event) {
for _, e := range lis {
switch e := e.(type) {
case *UserCreated:
a.Identity = e.Identity
a.CreatedAt = e.EventMeta().CreatedDate
/* ... */
}
}
}
Events
Events are applied to the aggregate. They are defined by adding the event.Meta
and implementing the getter/setters for event.Event
type UserCreated struct {
eventMeta event.Meta
Identity string
}
func (c *UserCreated) EventMeta() (m event.Meta) {
if c != nil {
m = c.eventMeta
}
return m
}
func (c *UserCreated) SetEventMeta(m event.Meta) {
if c != nil {
c.eventMeta = m
}
}
Reading Events from EventStore
With a domain object that implements the event.Aggregate
the event store client can load events and apply them using the Load(ctx, agg)
method.
// GetUser populates an user from event store.
func (rw *User) GetUser(ctx context.Context, userID string) (*domain.User, error) {
user := &domain.User{Identity: userID}
err := rw.es.Load(ctx, user)
if err != nil {
if err != nil {
if errors.Is(err, eventstore.ErrStreamNotFound) {
return user, ErrNotFound
}
return user, err
}
return nil, err
}
return user, err
}
OnX Commands
An OnX command will validate the state of the domain object can have the command performed on it. If it can be applied it raises the event using event.Raise() Otherwise it returns an error.
// OnCreate raises an UserCreated event to create the user.
// Note: The handler will check that the user does not already exsist.
func (a *User) OnCreate(identity string) error {
event.Raise(a, &UserCreated{Identity: identity})
return nil
}
// OnScored will attempt to score a task.
// If the task is not in a Created state it will fail.
func (a *Task) OnScored(taskID string, score int64, attributes Attributes) error {
if a.State != TaskStateCreated {
return fmt.Errorf("task expected created, got %s", a.State)
}
event.Raise(a, &TaskScored{TaskID: taskID, Attributes: attributes, Score: score})
return nil
}
Crud Operations for OnX Commands
The following functions in the aggregate service can be used to perform creation and updating of aggregates. The Update function will ensure the aggregate exists, where the Create is intended for non-existent aggregates. These can probably be combined into one function.
// Create is used when the stream does not yet exist.
func (rw *User) Create(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil && !errors.Is(err, ErrNotFound) {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
// Update is used when the stream already exists.
func (rw *User) Update(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
I have updated my eventDB to have subscriptions! It now has websockets like msgbus. I have also added a in memory store that can be used along side the disk backed wal.
@win0err@kolesnikov.se I agree with @prologic@twtxt.net about the text size. Adding content="width=device-width"
to your viewport meta tag will help massively with scaling on different device widths.
Eg. The first screenshot is the current site with a device width of 440px and the second is with the updated viewport meta tag.
Other than that, I like the aesthetic of it 😊 It gives me early-ish internet vibes, which I wasn’t online for (I’m a ‘90s baby) but I’ve seen some pretty early websites.
@chronolink@chrono.tilde.cafe Replies are not part of the original twtxt format. They were added later as an extension by Yarn.social: https://dev.twtxt.net/doc/twtsubjectextension.html (only the section “Machine-Parsable Conversation Grouping” is used these days)
All this time spent being grumpy about how adding my Now updates directly into the html page is uncomfortable, and it just occurred to me I can chug it into a text file and use cat.
I started adding a list of books that changed my life to my tilde at http://tilde.club/~melyanna/library/
Alright, check this out. I just kinda completed today’s project of converting a jeans into a saw bag. It’s not fully done, the side seams on the flap need some more hand sewing, that’s for sure. No, I don’t have a sewing machine. Yet?
At first I wanted to put in the saw on the short side, but that would have made for more sewing work and increased material consumption. As a Swabian my genes force me to be very thrifty. Slipping in on the long side had the benefit of using the bottom trouser leg without any modification at all. The leg tapers slightly and gets wider and wider the more up you go. At the bottom it’s not as extreme as at the top.
The bag is made of two layers of cloth for extra durability. The double layers help to hide the inner two metal snap fastener counter parts, so the saw blade doesn’t get scratched. Not a big concern, but why not doing it, literally no added efforts were needed. Also I reckon it cuts off the metal on metal clinking sounds.
The only downside I noticed right after I pressed in the receiving ends of the snap fasteners is that the flap overhangs the bag by quite a lot. I fear that’s not really user-friendly. Oh well. Maybe I will fold it shorter and sew it on. Let’s see. The main purpose is to keep the folding saw closed, it only locks in two open positions.
Two buttons would have done the trick, with three I went a bit overkill. In fact the one in the middle is nearly sufficient. Not quite, but very close. But overkill is a bit my motto. The sides making up the bag are sewed together with like five stitch rows. As said in the introduction, the flap on the hand needs some more love.
Oh, and if I had made it in a vertical orientation I would have had the bonus of adding a belt loop and carrying it right along me. In the horizontal layout that’s not possible at all. The jeans cloth is too flimsy, the saw will immediately fall out if I open the middle button. It’s not ridgid enough. Anyways, I call it a success in my books so far. Definitely had some fun.
Here’s a preview of some themes I’m adding to https://mkws.sh https://files.mills.io/download/plain.jfif, https://files.mills.io/download/mono.jfif !
I have uBlockOrigin on desktop and https://vancedapp.com/ on android. I never see ads on YouTube.
On SmartTV however this would be a nice addition.
You’re right @ullarah@txt.quisquiliae.com I just watched Australia Post Outrage: Did She Need To Go? and I do believe I’ll start adding this to my “watchlist” – I don’t use Youtube specifically (because privacy eroding garbage); but the content this guy produces is awesome! 👌
Scotty from marketing really needs to be fired! Can we even fire Prime Ministers besides calling an election? 🤔 The more you dig into our #Australian #Government the more you realize just how fucking corrupt they all are and have been over so many years. How?! 🤦
My nutritional supplements aim should be:
- 1 or 1.5 cups of lentils (or any beans you might like better).
- 2 or 2.5 cups of bitter greens.
- 1 cup of your favourite protein (or an egg), grilled, or fried with a little of olive oil.
- 1 or 2 tomatoes, or a handful if of the cherry type.
- No added sugars. If it is sweet, make it have fibre.
- No added salt (or very little and ionised), as salt is everywhere.
Related, I tried wild rice for the first time yesterday. It was different, in a good way.
@movq@www.uninformativ.de Yup. Added all the language ones, and bam, working like a charm!
@quark@twtxt.netbros.com Answering to myself: it doesn’t. @movq@www.uninformativ.de, would that be something that it could be added?
@quark@twtxt.netbros.com I have removed the cron job, and added jenny -f
to the small script that starts mutt with the .muttrc-jenny
file. That way when I open, it refresh the feed before. Let’s see how it goes.
No, I’m still doing them manually. 🤣🤦🏻 But I do think they are a good idea and will be adding them, I just haven’t gotten around to finding a compatible implementation of the hash yet.
Added to the fun.
new recipe added to the !food page: !brownies.
added a !projects page. it’s dynamically generated :)
added some more words to the !LIL page.
@(frogorbits.com) “@niplav Seems like most of the (radical) life extension people are interested in adding years to their lives, but agnostic about adding life to their years. “Be old longer” doesn’t appeal to a lot of people.” -> I disagree, the people who i know that are interested in life extension look to me more engaged in life than the ones who are not (though that hinges on definitions of ”adding life to their years”). i agree that “adding life to your years” is underappreciated, though.
added a new algo to sndkit @!(sndkitref “scale”)!@.
added biramp to sndkit: @!(sndkitref “biramp”)!@.
added recipe I use for brown sugar cinammon poptarts: !poptarts #food #breakfast #baking
@prologic@twtxt.net the meta info on the top I added manually. it’s following what I have seen from some other twtxt feeds. the new parser will read them.
@xuu@txt.sour.is Btw… I noticed your pod has some changed I’m not familiar with, for example you seem to have added metadata to the top of feeds. Can you enumerate the improvements/changes you’ve made and possibly let’s discuss contributing them back upstream? :D
@prologic@twtxt.net in theory shouldn’t need to let users add feeds.. if they get mentioned by a tracked feed they will get added automagically. on a pod it would just need to scan the twtxt feed to know about everyone.
lots of links added to overview page on monolith wiki: @!(monolithref “overview”)!@.
@prologic@twtxt.netdd ooh I am adding that to my test suite
@prologic@twtxt.net Testing if this will be added to the thread just adding the hashtag. #utwnv7q
added a !meta page. this proof of concept integrates with the weewiki !zettelkasten I am developing to produce something similar to this !feed.
@prologic@twtxt.net def would be a wider discussion on preventing the pod from adding its own key to a users device list. Or using device keys to authenticate instead of user/pass.
added some pages on #permissive #publicdomain licenses that I often reach for: !CC0 and !unlicense.
@prologic@twtxt.net an added benefit of the avatar:
would be the user could put their gravatar/libravatar image url like https://key.sour.is/avatar/01bc6186d015218c23dec55447e502e669ca4c61c7566dfcaa1cac256108dff0
added an initial !bitwrite page #updates
added channels page to !monolith wiki: [[/proj/monolith/wiki/channels]]. #updates
added a few notes on woven program output on the !monolith wiki page #updates
added @!(sndkitref “bezier”)!@ to !sndkit today. coupled with @!(sndkitref “oscf”)!@, it is capable of making some really weird wet FM-y sounds. Me like! #updates #sndkit
initial ugens page added to !monolith wiki, with link to woven ugens scheme file. the first non-C woven file in monolith. [[/proj/monolith/wiki/ugens]]. #docs #updates
new words added to the !index
added a twtxt activity section on the !monolith page
I added scripts to my bash so it cheers me up with friendly greetings and messages
The master plan is to export the !worgle bits of !monolith to a !weewiki, then begin adding user-level documentation that is able to dynamically reference bits of source code as another wiki page.
some example graphics added onto my !btprnt page.
Thank you @kas@enotty.dk, I would like to be added to @we_are_twtxt
Added a header to the twtxt file
Added clients and articles sections and added domgoergen’s twtxt.txt to https://indieweb.org/twtxt
Added myself to the user list at https://github.com/mdom/we-are-twtxt
added paragraph blocks and code blocks to weewiki HTML output. things look decent.
/meta @ckipp@chronica.xyz About images, sure, I understand it’s useless for CLI-only use. But if we added our own format, maybe something like Markdown
would work?The New York Times sells premium ads based on how an article makes you feel – Poynter https://www.poynter.org/business-work/2019/the-new-york-times-sells-premium-ads-based-on-how-an-article-makes-you-feel/
Facebook Ad Algorithm Is a Race and Gender Stereotyping Machine https://theintercept.com/2019/04/03/facebook-ad-algorithm-race-gender/
Ads Written By the Guy From Your Poetry MFA Who’s In Marketing Now - McSweeney’s Internet Tendency https://www.mcsweeneys.net/articles/ads-written-by-the-guy-from-your-poetry-mfa-whos-in-marketing-now
“hey did you hear the one about…” “yea the pink laser told me that back in ‘73… or last week… or maybe 50 AD….”
Banner Ads Considered Harmful (Here) - Gwern.net https://www.gwern.net/Ads
Amazon is using purchase data to sell targeted ads, which is creepy, but not because they’ve invented a mind-control ray / Boing Boing https://boingboing.net/2019/02/06/trivial-insights.html
What a brandless brand is selling you | The Outline https://theoutline.com/post/6698/brandless-brands-instagram-ads-capitalism
Teletext graphics characters among those added to Unicode – Teletext Art http://teletextart.co.uk/teletext-graphics-characters-among-those-added-to-unicode