Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sending messages to offline contact. #199

Closed
vi opened this issue Jun 22, 2014 · 33 comments
Closed

Sending messages to offline contact. #199

vi opened this issue Jun 22, 2014 · 33 comments

Comments

@vi
Copy link

vi commented Jun 22, 2014

I try to write a messages to an offline contact.

Actual: Venom just does not allow me to queue it for sending.

Expected: Venom shows messages as queued for sending (although undelivered) and later delivers it when it is possible. No messages ever accepted to be sent get lost, all eventually comes to the destination.

@vi
Copy link
Author

vi commented Jul 3, 2014

Experment 2:

  • Open two Venoms "venom1" and "venom2" and add one another to contact list, send a message "message1" from "venom1" to "venom2";
  • Configure chat history preservation;
  • In "venom1", open chat with "venom2" and type a message "message2" (without sending);
  • Close "venom2" and immediately send the message to it from "venom1", before it noticed the offline status;
  • Close "venom1";
  • Re-open "venom1" and "venom2", open chat histories there;
  • Wait until both contacts become online;
  • Send "message3" from "venom1" to "venom2";

Expected:
Identical chat histories on both nodes;

Actual:
"message2" missing on "venom2".

P.S. I remember manually typing sequence numbers in all my ICQ messages (and requesting to resend a message number N sometimes).

@marxistvegan
Copy link

I am more curious about how this is achieved in p2p when there in theory is no xmpp like server to hold the message until the receiving person is online?

@marxistvegan
Copy link

Also this seems a duplicate of #166

@vi
Copy link
Author

vi commented Aug 3, 2014

For example, sender keeps on sending and sending the message periodically unless receives delivery report or explicit NAK.

@Getron
Copy link

Getron commented Aug 3, 2014

Sorry for my bad english, but, here is my idea, maybe would this somehow work:

I think, Tox-Bot should maybe resolve this problem:
Tox-Bot should be a service-bot (daemon), it should be started when the PC starts, and install, first time when the Tox start on the PC. This bot should catch the messages, if the friend is offline, and should send the message, if the friend online come, even if the tox is not started on PCs.
The Tox-Bot should create a encrypted Virtual-Proxy on a Tox Node to, if the friend offline is, and the offline encrypted ready on the virtual-proxy Tox node send, to be able to send it if the client PC offline is, and the friend come online.
The Virtual-Proxy-Node should be active on the node, until the message is delivered.
After delivery, the Virtual-Proxy-Node should be self deleted.

The offline message is delivered now, even if my PC was offline, and my friend it was coming online, without a centralised server, just with help of Virtual-Proxy-Node created by Tox-Bot.

The System should work viceversa to: if my friend is offline, and i online, the Tox-Bot and Virtual-Proxy-Node should do the job.

Hope this System would work.

@vi
Copy link
Author

vi commented Aug 3, 2014

@Getron Is this "Tox-Bot" simply a server part for Tox? Server part does P2P and all network communications (and is expected to be mostly online), client part is UI?

Or Tox-Bot is some "remote helper", with downtime uncorrelated with man Tox downtime?

I don't understand about "Virtual Proxy" thing.

With or without "Tox-Bot", I think the sender should not cease attempts to deliver unacknowledged messages to a contact that is shown as online.

@Getron
Copy link

Getron commented Aug 3, 2014

The Tox-Bot should be a "service" on the PC, to send the messages, just in cause that the sender is not started the Tox, after restart of PC (sender restarts the PC, before receiver come online). The Receiver should become the messages, even if sender restarts the PC, and not start the Tox Client.

"With or without "Tox-Bot", I think the sender should not cease attempts to deliver unacknowledged messages to a contact that is shown as online." - but, what if both PC are offline?, here is the idee:

"Virtual-Proxy", should be a virtual server on the node. This is needed, if both PC are offline, and created just if receiver is offline. For example:

Sender send a message to an offline receiver, and the sender shout down the PC.
Here come the Virtual-Proxy-Node on game: this Virtual-Proxy has the messages now, and will be active so long, until the receiver come online.
When the receivers Tox-Bot come online, the Virtual-Proxy-Node deliver the message.

The reciver has now the message, without centralised server, and no matter, if the sender was offline.

"Proxy" for anonymity and security, for example, to prevent spamers, or hackers to manipulate messages.
"Virtual" for virtualise, or simulation of a real server (real server is centralised).

@vi
Copy link
Author

vi commented Aug 3, 2014

The Tox-Bot should be a "remote helper", to send the messages, just in cause that the sender is not started the Tox, after restart of PC

I also consider the unstable network. You described "Tox-Bot" as "remote helper"... But:

  1. This helper can also be offline;
  2. Downtime of the helper is correlated with downtime of main Tox (as they are run on the same computer, which can be turned off or have poor network connectivity).

but, what if both PC are offline?

The the messages will be delivered later, when both of peers happen to be online. Of course the sender should save undelivered messages in local storage, along with their status as undelivered.

Implementing more true offline delivery can be trickier (maybe that's what your virtual proxy scheme is for) and can work independently of the simple Skype-like scheme.

I don't like when my messages get just dropped. I prefer late delivery.

@Getron
Copy link

Getron commented Aug 3, 2014

sorry, i have corrected my earlier message, please, re-read it.

The problem scenario, why we need a Virtual-Proxy Server on the node:

Sender send a message to an offline receiver.
After a couple of minutes, the sender go offline, and for example, go in a vocation for 2 weeks or more. The message will not be delivered for so long to receiver, even if receiver is online a next day, the receiver will not receive the message, until the sender will not come online. After 2 weeks or more, maybe this message is not important anymore, and not actual anymore.

Therefore, we need somthing like virtual proxy. To send message, even if sender will be go offline, and the sender will be offline for long time. The Virtual proxy will do the job for the offline sender.

@zetok
Copy link
Contributor

zetok commented Aug 4, 2014

@Getron what you're describing is a poor workaround for offline messaging, which, BTW, is being worked on.

@romansimakov
Copy link

Please keep the current behavior too if you decide to add offline messaging. Make it as option. I guess it's very useful to be sure that your friend either read it now (before disconnect) or read it never (next time).
I like this now. I do not like Skype style offline messaging when I receive messages only when we are both online.

@Getron
Copy link

Getron commented Aug 4, 2014

@zetok Sorry if i'm wrong, or described somthing wrong, but, i think, somthing like this is only way to have offline messaging, without centralised server. Maybe, i call this system like "Virtual-Proxy-Node", maybe it should be called somthing like "Virtual-Tox-Memory" on the node, or somthing like this, it should keep the messages virtualy on the node, encrypted, if scenarios with offline sender or receiver apears, like described, and the Tox-Bot should create this automaticaly, if receiver is offline, to be sure, the receiver receive the message when it come online, even if sender go offline, and are offline at time when the receiver come online.

Maybe is this dificult to realise, but, we want to have the best messenger on the world - then, we need to programing the best system on the world.

Unfortunaly, i'm not a programer, but, i think, we have excelent programers here, and could realise somthing like this. The idea is here.

Do you have better idea for offline messaging, without centralised server, and both, sender and receiver go offline? How to send messages else offline? The idea to wait for both, sender and receiver go online, is to bad, and poor. Sorry.

This is just my suggestion and idea.

Tox messenger should give users exactly the same functions like familiar messengers at this time (like Skype, ICQ, etc.), but, even better, and not centralised.

If is not familiary for users, it will be dificult for Tox to grove. Hope, you understand me. Thanks

@vi
Copy link
Author

vi commented Aug 4, 2014

@romansimakov

I do not like Skype style offline messaging when I receive messages only when we are both online.
... either read it now (before disconnect) or read it never (next time).

Then I want to be explicitly informed about the "never", to have a chance to re-send it manually (or even better semi-automatically (i.e. a "resend" button), hopefully with a preserved timestamp).

I want to use messages as a proof of something, without an option of "I haven't receved that message, the system ate it (or you are lying about sending that message)".

A message is like a little e-mail.

"either read it now or read it never" looks like a UDP-style messages. Maybe it is good when chatting about something that expires soon, but when discussing (for example) work-related questions, or sharing an interesting link it should be TCP-style (reliable eventual delivery without re-ordering of messages).

I see Tox/Venom as "Open p2p Skype alternative" and want to minimize inconvenience and omissions when migrating from Skype to Tox.

P.S. I remember when I was using ICQ (before Skype) I and a peer manually started each message with a sequence number, to see any omissions. Maybe Tox can also number all messages between each pair of contacts?

@romansimakov
Copy link

Then I want to be explicitly informed about the "never", to have a chance to re-send it manually (or
even better semi-automatically (i.e. a "resend" button), hopefully with a preserved timestamp).

Now I see that I cannot send message because receiver is gone offline. That's what I meant "never". I either can send AND he can read, or he cannot read AND I cannot send. Now it works so. No? I just ask to keep this working maybe as per contact option or global option.

@vi
Copy link
Author

vi commented Aug 5, 2014

@romansimakov For example, I want to share a link to an interesting article with a somebody.

  • I want to be able to post the message with this link regardless of whether the peer is online or offline;
  • It's not urgent or realtime. The peer can see the link immediately or a week after, it won't be less value later;
  • I don't want my message to be dropped at all, regardless of sender, receiver and other peers online/offline history.

This is like a e-mail. You don't expect e-mails to be sendable only when receiver is online. You don't expect e-mails to be dropped because of networking confitions (offline history of involved nodes) alone.

@Getron
Copy link

Getron commented Aug 5, 2014

@vi yes, like e-mails, but, don't forget, e-mails are stored on a e-mail server, after sender send it, no mater if receiver online or offline is. Is centralised. I'm a hoster, have my private servers on my home, and known how this works.

But, to do the system to work like a e-mails, we need the system i have described early. This would work like a e-mails, but, it wont be neded to have an phisical server.

To send a link, it is not important to see it now, tomorow or in a week, but, what if i want to somebody do somthing in my business tomorow for me, and i go in a vocation for 3 weeks, and the vocation is somwhere, i don't have internet at all there. But this work should be done tomorow for me, and i have leave a message for my coworker, to do this tomorow, it is urgent. What then?

I think, We don't need Tox just for fun and kids. It would be a messenger to work with on the business side to. Then, it should be working like a professional messenger to.

This is a scenario, where we need somthing like in my idea, to do the job for me, if i'm offline for long time, and the message is important for tomorow, for example, and not in 2-3 weeks.

Maybe should this "Virtual-Tox-Memory" should be done on 2, or more nodes, and active so long, until the receivers Tox-Bot go online, to be sure, if the one node go offline, the message is not lost.

@vi
Copy link
Author

vi commented Aug 5, 2014

@Getron There are multiple diverse use cases for intant messaging. Consider three sets of requirements:

  1. Simple realtime instant messaging. No offline delivery required;
  2. Mid-latency (hours to days) reliable messaging with reliable offline delivery (like emails);
  3. High-latency reliable offline delivery (shall be delivered someday).

Current Venom cover only "1.";
Venom + Skype-like eventual opportunistic delivery without additional peers covers "1." + "3.";
Complicated system with additional storage peers covers "1." + "2." + "3.".

But complicated system is complicated, therefore slower to implement, more error prone (=> lost messages because of additional storage node told sender that it will care of the post, but failed to deliver it to receiver).

Also complicated system does not interfere with simple system. I think they can work in parallel: even after some intermediate node decided to care about sender's message, the sender does not stop worrying about the message (when online). When nodes happen to be both online after some "offline" messages been sent, the node can ask "Have you actually received that message id=N"? If yes, the message is showed like delivered (e.g. without yellow exclamation mark in Skype), if no - it is resent.

The offline message can be delivered by that "Virtual-Tox-Memory", but if not, it will still be later delivered directly.

In general it is important to have a good delivery status indicator for messages. Shall I open another issue about non-delivered-ness indicators?

@Getron
Copy link

Getron commented Aug 5, 2014

@vi yes, it will be cool to have indicators to.

And yes, the senders Tox, or Tox-Bot cary about unsended messages to, so far it is online, but, before go offline, if the message is not sended, because receiver doesn't come online, the Tox-Bot should create this "Virtual-Tox-Memory" on the nodes, to be sure, even if sender PC go offline, the message would be delivered on the moment when the receiver come online, no mather if senders Tox-Bot is offline.

It is complicated, yes, but, it is in moment, i think, the only way to have a perfect offline messaging system, without centralised phisical server.

I think, it is better to start now with "3. ", before there are millions of users, to experiment now, and maybe, implement this high-latency reliable offline delivery, because, if there are problems, the Tox is now under development status.

If we do this after a milions of users go to use Tox, and there are problems, and nodes go in problems or so, users will lost the trust on Tox, and go away from it. That is bad step then.

Do someone have a better idea for offline messaging?

@vi
Copy link
Author

vi commented Aug 5, 2014

My idea is to have a simple mechanism, like in Skype. It can work both alone and in team with other, better-but-sophisticated mechanisms.

@romansimakov
Copy link

@vi You tried to explain to me why offline messaging is good :) I exactly know it and understand. You wrote good list of 3 possible set of requirements. My request is pretty simple. Keep simple realtime messaging working like it works right now. I.e. if message cannot be delivered right now it must be indicated as not sent without offline messaging. There are cases when I do not want my friend to read it next time. If he cannot read it right now he should not get it next time after logon. NOT FOR ALL messages. I ask an option to choose it per contact.

Globally I share an idea of Proxy Nodes. If receiver cannot receive my message I can either try to send it myself or ask to send it another node or several nodes. Like real life. I can ask another my friend to transfer some package to another friend. Certainly such packages must be encrypted. Venom could choose such several friends. To avoid multiple receiving I also support an idea to numerate messages.

@vi
Copy link
Author

vi commented Aug 5, 2014

@romansimakov

I.e. if message cannot be delivered right now it must be indicated as not sent without offline messaging. There are cases when I do not want my friend to read it next time. If he cannot read it right now he should not get it next time after logon. NOT FOR ALL messages.

In Skype you can just delete sent messages for this. You can always delete unsent offline message, even very old in Skype, as far as I know (but not old delivered one).

I like this feature of editing and deleting messages. It can be soft (i.e. there is revision history or option to see the deleted messages explicitly). The main body of messages (last revisions of all non-deleted posts) should be plainly visible and searchable. Auxilary posts (deleted posts, older revisions) should be hidden by default or at least shown grayed, and not included in search. There's already an issue about message editing.

Also a contact may appear to be online, but actually be offline.

@vi
Copy link
Author

vi commented Aug 5, 2014

To avoid multiple receiving I also support an idea to numerate messages.

Idea to numberate messages is a good one not only for deduplication. If numbering is individual for each pair of contacts, omissions in sequential numbers can reveal dropped messages.

Also lists of such numbers are good for delivery reports.

@Getron
Copy link

Getron commented Aug 5, 2014

@vi "My idea is to have a simple mechanism, like in Skype. It can work both alone and in team with other, better-but-sophisticated mechanisms."

Skype is simple, or look simple, because, there is a phisical server there, who hold the messages on it, if the receiver is not online. And the receiver become message, no mater, if the sender online, or offline is, the messages are allways saved on an phisical servers.

"
Expected:
Identical chat histories on both nodes;

Actual:
"message2" missing on "venom2".
"
Yes, is missing, and this will be a problem for long time, until we have a background service, like "Tox-Bot", to care about messages.
Therefore, we need somthing like Tox-Bot, to care about what messages are send, or if are send, or whatever is gone with, in such cases. "Tox-Bot" would be a service, and run with, or without started Tox client on the PC. It would control the messaging, if the Tox client go off, or online.

For example, on skype, if i write a message to an offline receiver, and i go offline for 1 week, on the next day, the receiver come online, and he will see message from me. That hapen because, sender message was saved on a phisical server somewhere, for a defined Skype name.

The same system i have described earlyer, but, without phisical servers there, like "Virtual-Proxy-Node", or "Virtual-Tox-Memory".

Hope, you have understand what is my idea for, and how it would be work.

@vi
Copy link
Author

vi commented Aug 5, 2014

@Getron

Skype is simple, or look simple, because, there is a phisical server there, who hold the messages on it, if the receiver is not online.

Skype had limited servers and was more P2P in the past. Also Skype does not deliver messages like e-mail. It just sends queued messages when sees the contact online. When a contact goes from offline to online, it does not just change the picture from gray to green. It also checks if there any pending messages for the contact and sends them automatically.

Expected: Identical chat histories on both nodes;
Actual: "message2" missing on "venom2".

Yes, is missing, and this will be a problem for long time, until we have a background service, like "Tox-Bot", to care about messages.

No, this can be fixed by the easy approach without additional components (with additional components it can be even better).

Critical components for the easy approach are:

  • Message IDs - each message should be numbered;
  • Delivery reports, mentioning that IDs;
  • Deduplication of messages with the same ID;
  • Mutable delivery status, permanently stored in message history, changed when the delivery report gets received.

A contact goes online + there are undelivered messages => send them again. Contact is still online, but one of delivery reports is missing for N seconds => send that message again.

When thinking about a networked application, I often think about a mobile device connected over GPRS on a weaning signal (this age's dialup), not a PC with a broadband connection. With unreliable network, contact goes offline and online N times per hour; and without the reliable delivery the communications will be like ICQ (i.e. very poor), with a lot of (up to 50%) messages getting lost. I want Tox to be like Skype or better, not like ICQ.

I don't want Tox to use "send and forget" model (with or without intermediary storage). I want it to care about each message, track their status and try hard to deliver it though obstacles (such as poort network connectivity).

@Getron
Copy link

Getron commented Aug 6, 2014

@vi "I don't want Tox to use "send and forget" model (with or without intermediary storage). I want it to care about each message, track their status and try hard to deliver it though obstacles (such as poort network connectivity)."

You'r right, to "care about each message", this is my idea about Tox-Bot, to care about each messages, their status, try hard to deliver....Yes, that's what i mean to!

The Tox-Bot service is needed, in case if the Tox Client is not started on starting of PC, or, if Tox Client is closed by user.

I think, we have a 2014, and the dialup system is allmost shuted down. Overall on the world, it exist a broadband, or, a 3G, or 4G. The people with a dialup Internet, or GPRS, doesn't need somthing like Tox. This peoples doesn't need a Tox messenger at all.

Everybody on this days has a +- modern mobile device with 3G or 4G, touch screen, or somthing like this, tabs, etc...

About skype:

"Also Skype does not deliver messages like e-mail. It just sends queued messages when sees the contact online. When a contact goes from offline to online, it does not just change the picture from gray to green. It also checks if there any pending messages for the contact and sends them automatically."

No, sorry, but, you are wrong here, that the skype sends the messages just if the contact come online and the sender must be online to.
You can try and see how it works.
I work with skype every day, and known, how it works. The messages are stored on a phisical server, with status, delivered, or not. If not, should be delivered, and queued for delivery, if delivered, status change to delivered, and go to history to.
If i send to someone message, who is offline, and i go to offline, the contact will receive that message, even if i'm not online for long time. This is a centralised server side work. My message was writen, or sended to an phisical server for this contact, and this contact will receive that message when it come online. And so, i'm sure, my message would be sended to that contact, no mater if i go offline for long time.The receiver receive that message, imediatly if he go online.

"I don't want Tox to use "send and forget" model" - My idea is not like that. The Tox-Bot should care about all the delivered, or undelivered messages, even from a "Virtual-Tox-Memory", or "Virtual-Proxy-Server", check them, if delivered, or not, if exist or not, history, colors of delivery, times, and so on.

But, ok, we don't want to declare here how other messengers works, we want to make Tox a professional, real P2P messenger, with oflline messaging, to rely on it.

Do somebody starts on work with offline messaging, or we are just on speak, and speak, and speak here... :-)

@vi
Copy link
Author

vi commented Aug 6, 2014

@Getron

I think, we have a 2014, and the dialup system is allmost shuted down. Overall on the world, it exist a broadband, or, a 3G, or 4G. The people with a dialup Internet, or GPRS, doesn't need somthing like Tox. This peoples doesn't need a Tox messenger at all.
Everybody on this days has a +- modern mobile device with 3G or 4G, touch screen, or somthing like this, tabs, etc...

Even if GPRS and dial-up does not exist (which is not true, think about the thirld word), there will always be poor network (regardless of technology).

  • Design your program for poor network - it will work moderately on poor network and work well on good network;
  • Design your program for good broadband network - it will work moderately on good network and work bad on poor network.

It's like "today's computers have tons of CPU and RAM, so we can just not care". Don't assume your program will be the sole program running on the computer. There can be neighbour program that slow the system down (so context will switch to Tox rarely) and overload the network. I want Tox to be able to sail in stormy waters.

P.S. s/phisical/physical/g

@vi
Copy link
Author

vi commented Aug 6, 2014

@Getron

Also Skype does not deliver messages like e-mail. It just sends queued messages when sees the contact online. When a contact goes from offline to online, it does not just change the picture from gray to green. It also checks if there any pending messages for the contact and sends them automatically.

No, sorry, but, you are wrong here, that the skype sends the messages just if the contact come online and the sender must be online to.
You can try and see how it works.
I work with skype every day, and known, how it works. The messages are stored on a phisical server, ...

Assuming "physical server" is not a user's computer, but some remote note managed by Skype, it contradicts with what I know. I have found this reply:

Are chat logs stored on skype servers at any point in time?
...
Can anyone officially answer this from Skype or point me to an actual link/document from Skype that clarifies this?

No chat messsages are currently stored on Skype Servers, computers/devices logged on as the same Skype name, at the same time, can sync with 1 to 1 chat messages. Syncing of group chats ("More than 2 people in a chat") is done by chat sync partners in those chats, and not provided by Skype servers.

Can you please source your The messages are stored on a phisical server,?

@Getron
Copy link

Getron commented Aug 6, 2014

@vi You are good, you go to skype (Microsoft now) forum, and look for somthing like this. It is clear, nobody tell realy open, what realy happen, but, here a link, for a milions other links with such infos:

"Can you please source your The messages are stored on a physical server,?"
please, read this full text, this is just one of millions other infos:
http://arstechnica.com/security/2013/05/think-your-skype-messages-get-end-to-end-encryption-think-again/

Example:

I work and live on switzerland, here i have my skype. Work with it every day, and i have a history of all messages. Most people think, this are just localy stored on local PC. But, i go in my other land, Serbia, and i have build a completly new PC machine. Install the system, and install the Skype. Login with my only 1 account from switzerland, e voila, all my messages, history and contacts are on the new machine to. How? (My PC on switzerland is off, no other PC with my skype account is online, to be able to copy, or duplicate, or somthing like this).
Can you explain, how is this possible, without a centralised server?
Skype doesn't have the "Virtual-Proxy-Server" on the nodes system, like in my idea.

Here one more link: http://flylib.com/books/en/2.801.1.95/1/

Hope, you have now a image, how skype works. It is a mix of P2P and centralised storage.

But, ok, this links i have sended, is just for your info, nothing else. It is not my interest what the Skype do with messages. I want to have the Tox as realy good messenger, and not just a piece of amateur toy.
Tox should have better and professional offline messaging system, better than Skype or other messengers. We should create somthing like "wow" messenger, and not a basic one.

I have many ideas about grat functions to implement on it. Unfortunaly, i'm not a big programer, or developer, just a Web Designer and Web Master, Hoster.

We should start somthing on the idea with offline messaging now.

Do we have developers here who started somthing about this offline messaging recently?

@sunchaserinfo
Copy link

@vi @Getron As far as I remember, this sync was introduced near the 6.0 release on Windows in October 2012, so answer from February 2012 is slightly outdated

@Getron
Copy link

Getron commented Aug 6, 2014

@sunchaserinfo Yes, you'r right, somthing like this. And here one more link, how it has worked near 6.0 version:

http://www.mjalali.com/blog/?p=10

After this, it has many changes on it. But this is unimportant here, and not our problems.

We want the Tox to be the best. Any suggestions on this?

@v6
Copy link

v6 commented Oct 19, 2014

// , I would definitely like at least the option to have messages ready to send to someone when they're offline. Tox is not the sort of app I want to have to keep open all the time, if you know what I mean.

@v6
Copy link

v6 commented Oct 19, 2014

// , By the way, if you're worried about the saving of chat logs and such, as this already probably has encryption, I think an easy temporary solution is to just AES the .config/tox folder with something like AEScrypt, and use that as a "password" for Tox.

AESCrypt, she easy. She REAL easy.

@naxuroqa
Copy link
Owner

naxuroqa commented Apr 9, 2018

Duplicate of #166

@naxuroqa naxuroqa marked this as a duplicate of #166 Apr 9, 2018
@naxuroqa naxuroqa closed this as completed Apr 9, 2018
@naxuroqa naxuroqa removed this from Ready for development in v0.3.0 Apr 9, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants