@prologic@twtxt.net aha, thank you, that got me unjammed.
Turns out I thought I had an SSH key set up in github, but github didnāt agree with me. So, I re-added the key.
I also had to modify the command slightly to:
ssh -p 2222 -i PRIVATE_GITHUB_KEY GITHUB_USERNAME@cas.run help
since I generate app-specific keypairs and need to specify that for ssh
and I havenāt configured it to magically choose the key so I have to specify it in the command line.
Anyhow, that did it. Thanks!
@prologic@twtxt.net so what is the command to use? I did ssh -p 2222 GITHUB_USERNAME@cas.run help
but that gives the same error. Thereās something missing here.
# ssh -p 2222 cas.run help
The authenticity of host '[cas.run]:2222 ([139.180.180.214]:2222)' can't be established.
RSA key fingerprint is SHA256:i5txciMMbXu2fbB4w/vnElNSpasFcPP9fBp52+Avdbg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[cas.run]:2222' (RSA) to the list of known hosts.
abucci@cas.run: Permission denied (publickey).
My proof-of-concept Container as a Service (CAS or CaaS) is now up and running. If anyone wants to have a play? š¤ Thereās still heaps to do, lots of āfeaturesā missing, but you can run stuff at least š
ssh -p 2222 cas.run help
Pinellas County - Long run: 10.70 miles, 00:11:36 average pace, 02:04:13 duration
had a lot going against me today (all self inflicted). got about 4h30m of sleep with too much to drink late in the evening. no hangover or anything, but probably didnāt help my rest nor hydration. also it was supposedly 80F with a feels like of 93F when i started and 89F with feels like of 111F when i finished. the legs felt heavy and didnāt have the energy to up the cadence and sustain it. it was definitely nice to get out but just one of those days.
#running
I just received this email and I have some questions:
Thisāemailāis fromāaātrustedāsĪæurce.
You received this abucci@bucci.onl because you have been disconnected from sending and receiving emails.
To continue using this email address we urge you to re-confirm if your account is still active on bucci.onl to officially unlock it to our default settings.
Re-confirm account (a link; removed)
ā» This process is very important to help us protect your internet and fight malicious activities.
Since I administer bucci.onl myself, Iām a little confused. I donāt recall disconnecting myself from sending and receiving emails. I donāt even know how you disconnect someone from that. I also have never created the email address this email appears to be coming from, but maybe I should trust it anyway since they told me itās a trusted source? Most puzzlingly, Iāve been sending and receiving emails just fine all morning, so I do not appear to be disconnected from anything? I want to help protect the internet and fight malicious activities, but what should I do??? š¤š¤š¤š¤š¤
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
@prologic@twtxt.net hmm, Iād be up for thinking about that. At least at the protocol and design levelāIām afraid I canāt help much with Go programming.
@prologic@twtxt.net I think those headsets were not particularly usable for things like web browsing because the resolution was too low, something like 1080p if I recall correctly. A very small screen at that resolution close to your eye is going to look grainy. Youād need 4k at least, I think, before you could realistically have text and stuff like that be zoomable and readable for low vision people. The hardware isnāt quite there yet, and the headsets that can do that kind of resolution are extremely expensive.
But yeah, even so I can imagine the metaverse wouldnāt be very helpful for low vision people as things stand today, even with higher resolution. Iāve played VR games and that was fine, but Iāve never tried to do work of any kind.
I guess where Iām coming from is that even though Iām low vision, I can work effectively on a modern OS because of the accessibility features. I also do a lot of crap like take pictures of things with my smartphone then zoom into the picture to see detail (like words on street signs) that my eyes canāt see normally. That feels very much like rudimentary augmented reality that an appropriately-designed headset could mostly automate. VR/AR/metaverse isnāt there yet, but it seems at least possible for the hardware and software to develop accessibility features that would make it workable for low vision people.
@stigatle@yarn.stigatle.no @prologic@twtxt.net @eldersnake@we.loveprivacy.club I love VR too, and I wonder a lot whether it can help people with accessibility challenges, like low vision.
But Metaās approach from the beginning almost seemed like a joke? My first thought was āare they trolling us?ā Thereās open source metaverse software like Vircadia that looks better than Metaās demos (avatars have legs in Vircadia, ffs) and can already do virtual co-working. Vircadia developers hold their meetings within Vircadia, and there are virtual whiteboards and walls where you can run video feeds, calendars and web browsers. What is Meta spending all that money doing, if their visuals look so weak, and their co-working affordances arenāt there?
On top of that, Meta didnāt seem to put any kind of effort into moderating the content. There are already stories of bad things happening in Horizon Worlds, like gangs forming and harassing people off of it. Imagine what thatād look like if 1 billion people were using it the way Meta says they want.
Then, there are plenty of technical challenges left, like people feeling motion sickness or disoriented after using a headset for a long period of time. I havenāt heard announcements from Meta that theyāre working on these or have made any advances in these.
All around, it never sounded serious to me, despite how much money Meta seems to be throwing at it. For something with so much promise, and so many obvious challenges to attack first that Meta seems to be ignoring, what are they even doing?
Machine learning model sheds light on how brains recognize communication sounds
In a paper published today in Communications Biology, auditory neuroscientists at the University of Pittsburgh describe a machine learning model that helps explain how the brain recognizes the meaning of communication sounds, such as animal calls or spoken words. ā Read more
š Q: How do we feel about forking the Twtxt spec into what we love and use today in Yarn.social in yarnd
, tt
, jenny
, twtr
and other clients? š¤ Thinking about (and talking with @xuu@txt.sour.is on IRC) about the possibility of rewriting a completely new spec (no extensions). Proposed name yarn.txt
or āYarnā. Compatibility would remain with Twtxt in the sense that we wouldnāt break anything per se, but weād divorce ourselves from Twtxt and be free to improve based on the needs of the community and not the ideals of those that donāt use, contribute in the first place or fixate on nostalgia (which doesnāt really help anyone).
On LinkedIn I see a lot of posts aimed at software developers along the lines of āIf youāre not using these AI tools (X,Y,Z) youāre going to be left behind.ā
Two things about that:
- No youāre not. If you have good soft skills (good communication, show up on time, general time management) then youāre already in excellent shape. No AI can do that stuff, and for that alone no AI can replace people
- This rhetoric is coming directly from the billionaires who are laying off tech people by the 100s of thousands as part of the class war theyāve been conducting against all working people since the 1940s. They want you to believe that you have to scramble and claw over one another to learn the āAIā that theyāre forcing onto the world, so that you stop honing the skills that matter (see #1) and are easier to obsolete later. Donāt fall for it. Itās far from clear how this will shake out once governments get off their asses and start regulating this stuff, by the wayāmost of these āAIā tools are blatantly breaking copyright and other IP laws, and some day thatāll catch up with them.
That said, it is helpful to know thy enemy.
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.
I needed something to help with a morning schedule for two kiddos. It highlights the current 5-minute block as it goes. I think this was my first time reaching for JavaScript for a personal project. https://sidequest.club/stages.html
@eldersnake@we.loveprivacy.club Several reasons:
- Itās another language to learn (SQL)
- It adds another dependency to your system
- Itās another failure mode (database blows up, scheme changes, indexs, etc)
- It increases security problems (now you have to worry about being SQL-safe)
And most of all, in my experience, it doesnāt actually solve any problems that a good key/value store can solve with good indexes and good data structures. Iām just no longer a fan, I used to use MySQL, SQLite, etc back in the day, these days, nope I wouldnāt even go anywhere near a database (for my own projects) if I can help it ā Itās just another thing that can fail, another operational overhead.
pass
on my machine:
@abucci@anthony.buc.ci So.. The issue is that its showing the password by default? Would making an alias to always include the -c help? We can probably engage Jason with a PR to enable a more hardened approach when desired. Iāve spoken to him before and is generally a pretty open to ideas.
I found this app that was created by the gopass author that does copy by default and has a tui or GUI mode https://github.com/cortex/ripasso
@prologic@twtxt.net see where its used maybe that can help.
https://github.com/sour-is/ev/blob/main/app/peerfinder/http.go#L153
This is an upsert. So I pass a streamID which is like a globally unique id for the object. And then see how the type of the parameter in the function is used to infer the generic type. In the function it will create a new *Info and populate it from the datastore to pass to the function. The func will do its modifications and if it returns a nil error it will commit the changes.
The PA type contract ensures that the type fulfills the Aggregate interface and is a pointer to type at compile time.
A Modest Robot Levy Could Help Combat Effects of Automation On Income Inequality In US, Study Suggests
An anonymous reader quotes a report from MIT News: What if the U.S. placed a tax on robots? The concept has been publicly discussed by policy analysts, scholars, and Bill Gates (who favors the notion). Because robots can replace jobs, the idea goes, a stiff tax on them ⦠ā Read more
Twitter has a new āsocial platformsā policy⦠is it maddening? Hilarious? Ridiculous? All of the above? I laughed, but to be clear, I donāt think āfunnyā is a good way to describe it.
yarns
will get reused directly into yarnd
, except that I'll use the bluge indexer instead.
@prologic@twtxt.net, search for āquarkā and you will get quack, quart, quirk, and all possible iterations. Not too helpful.
@prologic@twtxt.net Error handling especially in Go is very tricky I think. Even though the idea is simple, itās fairly hard to actually implement and use in a meaningful way in my opinion. All this error wrapping or the lack of it and checking whether some specific error occurred is a mess. errors.As(ā¦)
just doesnāt feel natural. errors.Is(ā¦)
only just. I mainly avoided it. Yesterday evening I actually researched a bit about that and found this article on errors with Go 1.13. It shed a little bit of light, but I still have a long way to go, I reckon.
We tried several things but havenāt found the holy grail. Currently, we have a mix of different styles, but nothing feels really right. And having plenty of different approaches also doesnāt help, thatās right. I agree, error messages often end up getting wrapped way too much with useless information. We havenāt found a solution yet. We just noticed that it kind of depends on the exact circumstances, sometimes the caller should add more information, sometimes itās better if the callee already includes what it was supposed to do.
To experiment and get a feel for yesterdayās research results I tried myself on the combined log parser and how to signal three different errors. Iām not happy with it. Any feedback is highly appreciated. The idea is to let the caller check (not implemented yet) whether a specific error occurred. That means I have to define some dedicated errors upfront (ErrInvalidFormat
, ErrInvalidStatusCode
, ErrInvalidSentBytes
) that can be used in the err == ErrInvalidFormat
or probably more correct errors.Is(err, ErrInvalidFormat)
check at the caller.
All three errors define separate error categories and are created using errors.New(ā¦)
. But for the invalid status code and invalid sent bytes cases I want to include more detail, the actual invalid number that is. Since these errors are already predefined, I cannot add this dynamic information to them. So I would need to wrap them Ć la fmt.Errorf("invalid sent bytes '%s': %w", sentBytes, ErrInvalidSentBytes")
. Yet, the ErrInvalidSentBytes
is wrapped and can be asserted later on using errors.Is(err, ErrInvalidSentBytes)
, but the big problem is that the message is repeated. I donāt want that!
Having a Python and Java background, exception hierarchies are a well understood concept Iām trying to use here. While typing this long message it occurs to me that this is probably the issue here. Anyways, I thought, I just create a ParseError
type, that can hold a custom message and some causing error (one of the three ErrInvalid*
above). The custom message is then returned at Error()
and the wrapped cause will be matched in Is(ā¦)
. I then just return a ParseError{fmt.Sprintf("invalid sent bytes '%s'", sentBytes), ErrInvalidSentBytes}
, but that looks super weird.
I probably need to scrap the āparent errorā ParseError
and make all three āsuberrorsā three dedicated error types implementing Error() string
methods where I create a useful error messages. Then the caller probably could just errors.Is(err, InvalidSentBytesError{})
. But creating an instance of the InvalidSentBytesError
type only to check for such an error category just does feel wrong to me. However, it might be the way to do this. I donāt know. To be tried. Opinions, anyone? Implementing a whole new type is some effort, that I want to avoid.
Alternatively just one ParseError
containing an error kind enumeration for InvalidFormat
and friends could be used. Also seen that pattern before. But that would then require the much more verbose var parseError ParseError; if errors.As(err, &parseError) && parseError.Kind == InvalidSentBytes { ⦠}
or something like that. Far from elegant in my eyes.
Health Data
ā Read more
started adding follows, decided to keep my list in the header here, hope it helps with discoverability and making new connections :)) #twtxt #community
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.
#!/bin/sh
# Validate environment
if ! command -v msgbus > /dev/null; then
printf "missing msgbus command. Use: go install git.mills.io/prologic/msgbus/cmd/msgbus@latest"
exit 1
fi
if ! command -v salty > /dev/null; then
printf "missing salty command. Use: go install go.mills.io/salty/cmd/salty@latest"
exit 1
fi
if ! command -v salty-keygen > /dev/null; then
printf "missing salty-keygen command. Use: go install go.mills.io/salty/cmd/salty-keygen@latest"
exit 1
fi
if [ -z "$SALTY_IDENTITY" ]; then
export SALTY_IDENTITY="$HOME/.config/salty/$USER.key"
fi
get_user () {
user=$(grep user: "$SALTY_IDENTITY" | awk '{print $3}')
if [ -z "$user" ]; then
user="$USER"
fi
echo "$user"
}
stream () {
if [ -z "$SALTY_IDENTITY" ]; then
echo "SALTY_IDENTITY not set"
exit 2
fi
jq -r '.payload' | base64 -d | salty -i "$SALTY_IDENTITY" -d
}
lookup () {
if [ $# -lt 1 ]; then
printf "Usage: %s nick@domain\n" "$(basename "$0")"
exit 1
fi
user="$1"
nick="$(echo "$user" | awk -F@ '{ print $1 }')"
domain="$(echo "$user" | awk -F@ '{ print $2 }')"
curl -qsSL "https://$domain/.well-known/salty/${nick}.json"
}
readmsgs () {
topic="$1"
if [ -z "$topic" ]; then
topic=$(get_user)
fi
export SALTY_IDENTITY="$HOME/.config/salty/$topic.key"
if [ ! -f "$SALTY_IDENTITY" ]; then
echo "identity file missing for user $topic" >&2
exit 1
fi
msgbus sub "$topic" "$0"
}
sendmsg () {
if [ $# -lt 2 ]; then
printf "Usage: %s nick@domain.tld <message>\n" "$(basename "$0")"
exit 0
fi
if [ -z "$SALTY_IDENTITY" ]; then
echo "SALTY_IDENTITY not set"
exit 2
fi
user="$1"
message="$2"
salty_json="$(mktemp /tmp/salty.XXXXXX)"
lookup "$user" > "$salty_json"
endpoint="$(jq -r '.endpoint' < "$salty_json")"
topic="$(jq -r '.topic' < "$salty_json")"
key="$(jq -r '.key' < "$salty_json")"
rm "$salty_json"
message="[$(date +%FT%TZ)] <$(get_user)> $message"
echo "$message" \
| salty -i "$SALTY_IDENTITY" -r "$key" \
| msgbus -u "$endpoint" pub "$topic"
}
make_user () {
mkdir -p "$HOME/.config/salty"
if [ $# -lt 1 ]; then
user=$USER
else
user=$1
fi
identity_file="$HOME/.config/salty/$user.key"
if [ -f "$identity_file" ]; then
printf "user key exists!"
exit 1
fi
# Check for msgbus env.. probably can make it fallback to looking for a config file?
if [ -z "$MSGBUS_URI" ]; then
printf "missing MSGBUS_URI in environment"
exit 1
fi
salty-keygen -o "$identity_file"
echo "# user: $user" >> "$identity_file"
pubkey=$(grep key: "$identity_file" | awk '{print $4}')
cat <<- EOF
Create this file in your webserver well-known folder. https://hostname.tld/.well-known/salty/$user.json
{
"endpoint": "$MSGBUS_URI",
"topic": "$user",
"key": "$pubkey"
}
EOF
}
# check if streaming
if [ ! -t 1 ]; then
stream
exit 0
fi
# Show Help
if [ $# -lt 1 ]; then
printf "Commands: send read lookup"
exit 0
fi
CMD=$1
shift
case $CMD in
send)
sendmsg "$@"
;;
read)
readmsgs "$@"
;;
lookup)
lookup "$@"
;;
make-user)
make_user "$@"
;;
esac
Tractor Beam
ā Read more
Startup Aims To Help Software Companies Shift To Usage-Based Pricing Models
The startup Metronome āclaims to have developed a billing and data infrastructure platform that is capable of āreliablyā processing data at scale so that usage-based companies can iterate on business models without code changes,ā reports TechCrunch. āIt does this by providing businesses with real-time APIs for their customer ⦠ā Read more
@lyse@lyse.isobeef.org this might be of help https://wordle.at/
Netflix Raises Monthly Subscription Prices in US, Canada
Netflix has raised its monthly subscription price by $1 to $2 per month in the United States depending on the plan, the company said on Friday, to help pay for new programming to compete in the crowded streaming TV market. From a report: The standard plan, which allows for two simultaneous streams, now costs $15.49 per month, up from $13.99, in the Unite ⦠ā Read more
Jerome Powell Says the Fed is Prepared To Raise Rates To Tame Inflation
Jerome H. Powell, the Federal Reserve chair, told lawmakers on Tuesday that a rapidly healing economy no longer needed as much help from the central bank and that keeping inflation in check ā including by raising interest rates ā would be critical for enabling a stable expansion that benefits workers. From a report: Mr. Powell, ⦠ā Read more
@movq@www.uninformativ.de
No worries, I understood you perfectly. My reply was merely a commentary, because some hereāspecially the youth, and I have a 20 years old sonāthink that the vaccine makes the 100% impervious, and thus behave pretty stupidly.
I am the one in charge of bringing food, and helping the elderly in the family, so I take super extra precautions⦠for their sake.
@prologic@twtxt.net I knew you were short sided from day one I saw Yarn. On desktop everything is huge, and I assumed it was to cater short-sightedness. Also, you have enabled underlines on buttons on iOS, bold and bigger fonts, etc., so that was also a give away. Sorry if I digress, but, glasses wouldnāt help? I have to wear mine all the time, otherwise I am also near blind myself!
@movq@www.uninformativ.de 12,342 twts, totalling 6.2 MB. Would deleting help, or will they come back? I guess there is one way to find out! š
@xuu@txt.sour.is yikes the style sheet for blogs needs help.
Anyone here good with Go and feel like helping me build our a āDirect Messagesā feature? I was going to pay someone on Upwork to do this, but Iāve received very few applicants (just one!) and they arenāt that good (stock standard crappy Bootstrap experience and no evidence of any experience with Go).
@prologic@twtxt.net @twtxt@txt.sour.is I have noticed that I will get some duplicate web mention notifications. some kind of dedup would be helpful.
Donated 500ml of my own blood today at the Uniklinik in Düsseldorf to help others in need.
@von@tilde.town Understanding you. For me: keeping a bullet-journal on a paper notebook helped me herd my chaotic mind into manageable streams. See https://bulletjournal.com
Created an Indieweb.org wiki article about twtxt - help expand it please - https://indieweb.org/twtxt
I usually tell people to read The Goal by Eli Goldratt. Itās weird in a lot of ways, but it really helped me understand the roots of modern agile development process.