acl-org / emnlp-2020-virtual-conference

Repository containing the code for the EMNLP 2020 virtual conference
MIT License
0 stars 2 forks source link

Add highly active chats section #26

Closed amirhssn closed 3 years ago

amirhssn commented 4 years ago

Few people were mentioning papers with highly chats on Twitter during ACL2020. (see this). I think it might be a good idea to add such a section to the conference:

  1. Not only it encourages more participation and social interactions during a virtual conference, but also, new first-timers/beginner researchers can learn more stuff from discussions between experienced researchers.
  2. I suppose it will resemble popular poster sessions which gather more people around them in a physical conference.

Ideas for implementation: 1- We can have a small script running somewhere to find active chats by actively pulling channel statistics from the Rochet Chat server in fixed intervals. 2- It can store its output, possibly in the JSON format, on S3 (with caching disabled), and then, the web browser can simply use it as a static asset. In this way, we don't need to worry about scaling, racing conditions, and etc.

jcklie commented 4 years ago

That is a really good idea! Once the rocket chat is there we can try it.

amirhssn commented 3 years ago

@jcklie Do we have the rocket chat server right now?

benotti commented 3 years ago

We have the rocketchat server. I can give access to it. I just need an email address and the role (admin/user/other) or a description of the tasks required.

amirhssn commented 3 years ago

Great! We might need to start working on it then find the role requirement later. But I guess the application itself would be just a bot that only needs to read the channel stats. Also, I need an account to produce artificial chats to test the code. So, do I need to give you two email addresses(one for the bot and one for myself)?

benotti commented 3 years ago

That is correct. We can continue this by email luciana.benotti@unc.edu.ar

On Tue, Oct 27, 2020, 11:39 AM Amirhossein notifications@github.com wrote:

Great! We might need to start working on it then find the role requirement later. But I guess the application itself would be just a bot that only needs to read the channel stats. Also, I need an account to produce artificial chats to test the code. So, do I need to give you two email addresses(one for the bot and one for myself)?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/acl-org/emnlp-2020-virtual-conference/issues/26#issuecomment-717290421, or unsubscribe https://github.com/notifications/unsubscribe-auth/AATNNODW4L6FVXIDSAJY2ELSM3LTNANCNFSM4RXJPKHQ .

amirhssn commented 3 years ago

I have checked the Rocketchat APIs and here is my proposed solution:

  1. We use Rocket Chat Rest API to get the channel statistics (including the number of messages) and store the numbers for every public channel in the memory.
  2. Every x seconds (e.g. 60 seconds), the updater-script will get those numbers from the API and calculates the delta between the current number of messages and the previous number of messages, and sort them in descending order. Lastly, it will cache them in memory and we will return the active channels from this cache for the next x seconds. This loop will continue until the end of the conference.
  3. Previously, I proposed to use Amazon S3 to deliver the active channels to the clients. However, I realized that the deployment and caching characteristics of S3 would not be sufficient for our fast-updating endpoint. Therefore, I am proposing the following alternative:
    1. We can use Amazon Elasticache as our in-memory storage to cache the active channels. Then, we can have a lightweight Lambda function to read from the cache and return the cached data to the client.
    2. Amazon API gateway will be used to connect Lambda functions to the HTTP/Rest API. Additionally, we may hide it behind our CloudFront, but of course, we need to disable its caching.
    3. We would need another lambda function, which will be triggered every x second to update the cache (Here shows how we can do that)
    4. All of the scalings will be handled automatically by AWS.
    5. We can also use Cognito to move the API behind the authentication.

@benotti @jcklie Please feel free to feedback on this.

jcklie commented 3 years ago

That sounds good, I also thought that lambda would be good. Do you have an estimate how expensive that would get? How much effort would that be for you to build?

jcklie commented 3 years ago

I honestly would just use the cheapest EC2 there is and write a small python script.

amirhssn commented 3 years ago

The script itself should be quite easy, I don't imagine that it takes too long for me to develop it.

I am not very experienced with AWS, not sure how we can have estimates. But if we are on a budget, I might have some ideas to cache them on CloudFront in order to reduce costs.

Also, given the fact that the number of requests would be high, I am really sure whether cheap EC2 instances can handle the load.

jcklie commented 3 years ago

Using 1 cheap ecs 2 would just be 20$, we can afford that. You solution sounds great, but I think a but too overengineered for the task. You can just use redis/memcached on the ecs if you need caching

amirhssn commented 3 years ago

Yeah, that’s probably overengineered. We can start with a simple setup and then load test it to see if we need something bigger. On Aban 8, 1399 AP, 2:15 AM +0330, Jan-Christoph Klie notifications@github.com, wrote:

Using 1 cheap ecs 2 would just be 20$, we can afford that. You solution sounds great, but I think a but too overengineered for the task. You can just use redis/memcached on the ecs if you need caching — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

jcklie commented 3 years ago

Great! I really look forward to it. I honestly do not expect this endpoint begin hit that hard, not many pepople will have it open at the same time and you can always add a "refresh now" button in the front end instead of periodically querying the endpoint. If you write the script then I will host it for you.

hao-fang commented 3 years ago

Hey folks, this is a nice idea, and I want to also point out that for Admin account, you can view the "Engagement Dashboard" to get some relevant information.

image

image

Maybe it's useful to contact the sales representative (Eduardo) to ask if they have some similar features implemented. @benotti can you send an email to Eduardo about this?

I imagine if they have a bot/plugin that can post messages to a #channel-statistics channel periodically, we can simply embed this channel on a webpage on the virtual conference website.

benotti commented 3 years ago

I contacted Eduardo. I will let you know when he responds.

benotti commented 3 years ago

Eduardo's answered. They do have a widget that can be integrated with websites - https://docs.rocket.chat/guides/omnichannel-guides/omnichannel-manger-guides/livechat-widget-installation. There is documentation about the utility that @hao-fang showed, it can be found here: https://docs.rocket.chat/guides/omnichannel-guides/omnichannel-manger-guides/analytics

jcklie commented 3 years ago

@benotti Thank you! I would then suggest to add it to our virtual website, e.g. use a dropdown in the navbar for chat like I planned for #65 .

amirhssn commented 3 years ago

@benotti Thanks for contacting the sales representative. But I am kinda confused with the response. What does that have to with we have planned so far? I mean how is the live chat widget related to channel statistics?

hao-fang commented 3 years ago

I'm not sure I followed the livechat widget. That seems to be a different feature. FWIW -- I took a look over all Apps available on the Marketplace https://rocket.chat/marketplace/ and it seems there is nothing available for the channel statistics feature. It seems that we may need to implement our own then (unless I misunderstood the livechat feature.)