JMP: Signup with Cheogram Android
Welcome to JMP.chat! If you are looking for a simple guide on how to sign up for JMP, then you have come to the right place! We will be keeping this guide up-to-date if there is ever a change in how to sign up.
We will first start with signing up from within your Jabber chat application on mobile, where you will never need to leave the client to get set up. I will be using the freedomware Android client Cheogram to do this signup. To star … ⌘ Read more
JMP: Signup with Cheogram Android
Welcome to JMP.chat! If you are looking for a simple guide on how to sign up for JMP, then you have come to the right place! We will be keeping this guide up-to-date if there is ever a change in how to sign up.
We will first start with signing up from within your Jabber chat application on mobile, where you will never need to leave the client to get set up. I will be using the freedomware Android client Cheogram to do this signup. To star … ⌘ Read more
JMP: Signup with Cheogram Android
Welcome to JMP.chat! If you are looking for a simple guide on how to sign up for JMP, then you have come to the right place! We will be keeping this guide up-to-date if there is ever a change in how to sign up.
We will first start with signing up from within your Jabber chat application on mobile, where you will never need to leave the client to get set up. I will be using the freedomware Android client Cheogram to do this signup. To star … ⌘ Read more
JMP: Newsletter: New Employee, Command UI, JMP SIM Card, Multi-account Billing
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone … ⌘ Read more
(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
}
(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
}
hm, testing latest mobile client, seems like replies does not work. hmm.
Just testing my new fancy twtwt client written in C
JMP: Newsletter: Multilingual Transcriptions and Better Voicemail Greetings
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numb … ⌘ Read more
Erlang Solutions: Updates to the MIM Inbox in version 5.1
User interfaces in open protocolsWhen a messaging client starts, it typically presents the user with:
- an inbox
- a summary of chats (in chronological order)
- unread messages in their conversation
- a snippet of the most recent message in the conversation
- information on if a conversation is muted (and if so how long a conversation is muted for)
- other information that users may find useful on their welcome screen
Mongoos … ⌘ Read more
@prologic@twtxt.net: 1. I use classic twtxt client written in Python from console, I like simplicity; 2. Thanks for the feedback about my website! It’s better viewed with old 800x600 monitors, haha
Seems I forgot how to use my twtxt client
Ignite Realtime Blog: Push Notification Openfire plugin 0.9.1 released
The Ignite Realtime community is happy to announce the immediate availability of a bugfix release for the Push Notification plugin for Openfire!
This plugin adds support for sending push notifications to client software, as described in XEP-0357: “Push Notifications”.
[This update](https://www.igniterealtime.org/projects/openfire/plugins/0.9.1/pushnotificatio … ⌘ Read more
JMP: Newsletter: Command UI and Better Transcriptions Coming Soon
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one a … ⌘ Read more
JMP: Newsletter: Togethr, SMS-only Ports, Snikket Hosting
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free … ⌘ Read more
I realized my twtxt client isn’t validating what it pulls once it gets a valid response when a domain started returning js-heavy parking pages for every URL. Oops. Weekend project, I guess. 🤦🏻
O client do twtxt para o Emacs precisa de um upgrade.
JMP: Newsletter: New Staff, New Commands
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; … ⌘ Read more
@prologic moving around servers, managed to break my twtxt client so using literally the first one I could find
Maxime Buquet: Updates from the Poezio ecosystem
Releases have happened recently that revolve around Poezio, a TUI
(Terminal UI) client for XMPP, including Poezio itself, its backend XMPP
library Slixmpp, and also the poezio and
slixmpp plugins for OMEMO.
 through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free … ⌘ Read more
For instance I normally use the same RSA key/pair on all my workstations for my ssh client, because that’s me, no-matter where I am. The only exception to this rule is I usually create a separate key for any “work” / “ company” I am a part of.
Monal IM: Insights into Monal Development
TLDR:
_Info: Monal will stop support for iOS 12, iOS 13 and macOS Catalina!
We are searching for a SwiftUI developer.
We need a new simplified website.
With better continuous funding, our push servers will move from the US to Europe.
We have a new support mail: info@monal-im.org_
Two years ago we decided to rewrite the Monal app almost entirely and improve it gradually in the process, instead of creating another XMPP Client for iOS and macOS. We suc … ⌘ Read more
JMP: Newsletter: JMP is 5 years old today, and now with international calls!
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone … ⌘ Read more
Wallops 1.1 Released
A large update to my Wallops IRC client is available: ⌘ Read more
@benk@kwiecien.us I haven’t actually looked at the original twtxt client, which means the following is ill-conceived speculation, but I believe that it only fetched feeds when you “refreshed”, with a minimum time between feed fetches. Sure, you’ll fetch feed unnecessarily now and then, but not nearly as often as polling every 5 minutes ;)
Wallops 1.0 Released
As teased on Twitter, the first release of my Wallops IRC client is now available: ⌘ Read more
Profanity: Profanity on Pinephone
Hi all,
So far, in my pinephone I used mainly GUI applications, because I was using a touch screen. Terminal applications are not user-friendly when it comes to one-handed operation.
I tested different distributions on my pinephone (mobian, manjaro, archarm), but usually most based on Phosh. In my opinion it is currently the best mobile graphics environment and stable as well.
In Phosh I tested few xmpp clients:
- the default application installed with Phosh is chat … ⌘ Read more
Is the Web made for Computers? Or are Computers made for the Web?
A variation on the debate between Thick Clients and Thin Clients. ⌘ Read more
JMP: Newsletter: Snikket Hosting, Billing Overage Limits
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Fr … ⌘ Read more
@benk@kwiecien.us I meant literally a few minutes 😄 @prologic@twtxt.net told me he’d just implemented it. Btw, which twtxt client are you using now, Ben?
GoCN 每日新闻(2021-12-22)
GoCN 每日新闻(2021-12-22)- 使用 Go 和 SQLite 构建生产应用程序
- 使用 context.Context 模拟 API 客户端https://incident.io/blog/golang-client-mocks
- 一种可嵌入的 Go 脚本语言,实现了逻辑编程语言 Prologhttps://github.com/ichiban/prolog
- SSA:终于知道编译器偷摸做了哪些事[https://mp.weixin.qq.com/s/nOhMsMeP1pUFEXKAMUzbWg](https://mp.weixin.qq.com/ … ⌘ Read more
Ignite Realtime Blog: inVerse plugin for Openfire version 9.0.0.1 released!
The Ignite Realtime community is happy to announce the immediate availability of a an update to the inVerse plugin for Openfire, which makes the Converse.js web client available to your users.
This release updates Converse to version 9.0.0.
Your Openfire instance should automatically display the … ⌘ Read more
DESQview/X : The forgotten mid-1990s OS from the future
X11 client and server. DOS. Windows 3.1. All with preemptive multitasking. ⌘ Read more
JMP: Newsletter: Action required for SIP accounts, new inbound call features, and more!
Hi everyone!
Welcome to the latest edition of your pseudo-monthly https://jmp.chat update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone num … ⌘ Read more
@stackeffect@twtxt.stackeffect.de
I am seeing this characters on your twts: )?â\200¨â\200¨. Which client are you using?
@stigatle@twtxt.net
A twtxt client would be nice! Or a very simple cgi script to print twts to web nicely—not a second Yarn, just something to show twts in a pretty form on the web.
@eldersnake@yarn.andrewjvpowell.com
RSS links are archaic. Clients discover them if properly linked, they do not need to be human visible.
hurrah! xrxs client works~ there is a new blog post about all things xrxs
I am noticing that Yarn doesn’t treat “outside” (that is, twts coming from a client other than Yarn) twts hashes right. Two examples:
There are many more, but those two will give you the gist. Yarn links the hash to the poster’s twtxt.txt, so conversation matching will not work.
@lyse@lyse.isobeef.org Unless you are stripping stuff on your twts, there is no much to implement. Things will be bold , italics , underlined , and so on, on a client that can render them. Since jenny uses Mutt, I can use my own regex in it to color them as I like. That’s pretty much it.
GitHub security update: revoking weakly-generated SSH keys
On September 28, 2021, we received notice from the developer Axosoft regarding a vulnerability in a dependency of their popular git GUI client - GitKraken. An underlying issue with a dependency, called `keypair`, resulted in the GitKraken client generating weak SSH keys. ⌘ Read more
@benk@kwiecien.us I’ve logged in to Monad now (iOS XMPP client) but I’ve gotta be honest: I don’t know if I’ve created a user in the app or logged in to tilde.team 🤔 Do you happen to know how I join a group? And which groups do you recommend?
JMP: Newsletter: Blog, New Registration, New Billing, New App!
Hi everyone!
Welcome to the latest edition of your pseudo-monthly JMP update!
In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client. Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers … ⌘ Read more
Ignite Realtime Blog: JSXC Openfire plugin 4.3.1-1 released!
The Ignite Realtime community is happy to announce the immediate availability of version 4.3.1 release 1 of the JSXC plugin for Openfire, our open source real time collaboration server solution! This plugin can be used to conveniently make available the web-based JSXC client (a third-party developed project) to users of Openfire.
The upgrade from 4.3.0 to 4.3.1 brings a small number of changes from the JSXC project whi … ⌘ Read more
Exploring spartan (spartan.mozz.us)! Also trying to make simple client on netcat
I and @r1k@r1k.tilde.institute developing new client for twtxt: https://tildegit.org/g1n/twtxt-c
Fixed another bug in my finger client: rfc1288 says lines have to end with crlf, but I was just sending lf.
Indeed! I think the first “network protocol client” I ever wrote was something that just did the PING/PONG part and passed everything else raw.
Looking at raw IRC traffic streams to debug a client issue and it’s 1997 again.
Sure. I think search, if it’s going to exist, should be the client’s responsibility. But I also value the readability of the raw twtxt file a lot more than y’all do.
I want read-only iOS client that just does the simplest model: pull a list of feeds, make a timeline.
@xjix@xj-ix.luxe Saw your oldish note about wanting an offline/async twtxt workflow. Do you have something that works for you? My (very young!) client was designed with that in mind.
I agree clients should present things better (part of why I’m writing one!). But that should be additive. There’s a reason we’re not passing json around.
@prologic@twtxt.net Exactly, but that reduces the argument for URLs in the post. The client should figure out how to search based on the hashtag.
My silly Plan 9 rc twtxt client now has a web page: http://txtpunk.com/tw/index.html
@prologic@twtxt.netYes, I think tags should just be #foo, and let the client figure out searching if it cares.
@movq@www.uninformativ.de No argument that threading is an improvement. But I think (#hash) does that, and I think figuring out how to search should mostly be up to the client.
Hah… my silly twtxt client now has “stories” mode.☺
@prologic@twtxt.net deedum for android.
Kristall for OS X
Elaho for iOS
though I can only vouch for the first two.
@prologic@twtxt.net deedum for android.
Kristall for OS X
Elaho for iOS
though I can only vouch for the first two.
what clients support this?
I have a working model for the reader portion of what I want this twtxt client to do.
@ “that’s it. I’m sticking to this txtnish client.” Solid choice.
that’s it. I’m sticking to this txtnish client.
that’s it. I’m finding another twtxt client.
Learn about ghapi, a new third-party Python client for the GitHub API ⌘ https://github.blog/2020-12-18-learn-about-ghapi-a-new-third-party-python-client-for-the-github-api/
Can we not have clients sign their own public keys before listing them on their Pod’s account?
Yeah.. we probably could. when they setup an account they create a master key that signs any subsequent keys. or chain of signatures like keybase does.
Can we not have clients sign their own public keys before listing them on their Pod’s account?
Yeah.. we probably could. when they setup an account they create a master key that signs any subsequent keys. or chain of signatures like keybase does.
Scuttlebutt is an interesting space. I’m using the Patchwork client and so far it works great!
@prologic@twtxt.net (#gqg3gea) ha yeah. COVID makes for a timey-wimey mish-mash. Worked on some WKD and fought with my XMPP client a bit.
@prologic@twtxt.net (#gqg3gea) ha yeah. COVID makes for a timey-wimey mish-mash. Worked on some WKD and fought with my XMPP client a bit.
@prologic@twtxt.net huh.. true.. the email is md5/sha256 before storing.. if twtxt acted as provider you would store that hash and point the SRV record to the pod. .. to act as a client it would need to store the hash and the server that hosts the image.
@prologic@twtxt.net huh.. true.. the email is md5/sha256 before storing.. if twtxt acted as provider you would store that hash and point the SRV record to the pod. .. to act as a client it would need to store the hash and the server that hosts the image.
Ignite Realtime Blog: Client Control plugin 2.1.6 released ⌘ https://discourse.igniterealtime.org/t/client-control-plugin-2-1-6-released/89159
@xandkar@xandkar.net I’m going to give it a shot. always interested in trying new clients
@prologic@twtxt.net to answer some of your previous questions, i’m using txtnish for my timeline and user controls, and plain twtxt for posting. the alternative to that would be setting up a bunch of shell aliases or small scripts. or making my own client in Go. There’s a thought… ;)
i didn’t think clients would be necessary for something like twtxt and yet here we are
@prologic@twtxt.net I will probably stick with command line client just to make sure it keeps working
A fork of twtxtc, a #twtxt client in C: [[https://github.com/neauoire/twtxtc]] #links
Ignite Realtime Blog: Client Control plugin 2.1.5 released ⌘ https://discourse.igniterealtime.org/t/client-control-plugin-2-1-5-released/88550
Ignite Realtime Blog: JSXC web client now available as a plugin for Openfire! ⌘ https://discourse.igniterealtime.org/t/jsxc-web-client-now-available-as-a-plugin-for-openfire/88467
a microblogging creative coding platform like dwitter, but for sound. users would be encouraged to remix, the output of one persons code would become the input of the new code. only text would be stored on the server, with audio rendered client-side. to save on time, there could be caches of frozen audio for remixes. #halfbakedideas
@hjertnes@hjertnes.social are you using emacs as twtxt client or something? does it render the org markup for you into links?
Go and xmpp-client ⌘ https://hack.org/mc/blog/xmpp-client.html
mub - a minimalist IRC client in Go ⌘ https://hack.org/mc/blog/mub.html
mu4e — a powerful Emacs mail client ⌘ https://hack.org/mc/blog/mu4e.html
On Wednesday 10.06.2020 the developer of the #XMPP client conversations will talk about implementing audio/video calls with XMPP during the Berlin XMPP meetup (held online with Jitsi-Meet): https://nl.movim.eu/?node/pubsub.movim.eu/berlin-xmpp-meetup/3e091c00-5e20-4727-a61d-c92a247b106e
Incomplete, not packaged for casual use, and this UI library won’t scroll, but my twtxt client kinda works https://github.com/jcolag/Uxuyu
Disregard this message - I’m testing a GUI client prototype. Hopefully this doesn’t wreck my feed…
First release candidate of android #XMPP client #Conversations is available and working smooth with my server. Hope it will be released soon. 😃
First impression of the VoIP feature for the #XMPP client #Conversations https://nitter.net/iNPUTmice/status/1250309288506974209
I currently have mine set to 5 minutes, but I’ll probably change it to longer than 15 minutes once I’m done playing around with my client.
Due to the same situation, my original twtxt.txt file was also lost, but since I keep various clients, making a new tweet restored part of it.
Due to the same situation, my original twtxt.txt file was also lost, but since I keep various clients, making a new tweet restored part of it.
Testing txtnish on my main laptop, neither the original twtxt client nor the js version worked here.
Testing txtnish on my main laptop, neither the original twtxt client nor the js version worked here.
The TUI #XMPP client #Profanity released 0.8.0 https://profanity-im.github.io/blog/post/release-080/