SamSuka
Videochat Extension
Videochat Extension

patreon


Progress report for 2023-10 (October 2023)

What is this post about?

At the end of each month, we publish a report for patrons on the status of the project and the work done that month.

There is no guarantee that we will be able to spend much time on the project each month, but overall we hope that this will give more transparency to the people supporting the project.

Progress Report for October 2023.

This month we spent a total of 75 hours working on the project.

This month I (qrlk) was the only person working on the project.

The overall highlights:

Overall it was a very boring month with no impressive or significant changes. This month's overall goal was to take another big step towards internationalization (support for multiple interface languages) and complete simplification of everything standing in its way.

Detailed Report for October 2023.

changelog

I think you've noticed the strange changelog system we used to show users what new things came with each update.

It was very time-consuming to maintain because we had to make changes to this changelog file every time we did something in the code. In addition, this changelog had to be translated into Russian and any other language in the future, which is painful to even think about.

Honestly, I don't think anyone has actually read it.

I decided to simplify life for everyone and slightly rework this system. Now each patch note in the extension contains a very short list of highlighted changes, which is very easy to translate as it is stored right in the language file.

Full patch notes are now provided in English only and posted on patreon with a block of google translate links for the most popular languages among our users.

Patreon platform was also slightly redesigned this month, adding more features for free members, so now people can join patreon for free to receive notifications about new free posts. I think this will be very useful for community building, and I will try to somehow promote patreon as a place where people can get news instead of using discord for this purpose (discord may not be suitable for everyone).

It is painful to remember what it cost to put these changes into action. I had to rewrite 46 changelogs, write a summary for each one and translate it, and replace all the old social media patch notes with the new format. Chatgpt and grammarly helped a lot with this task, but I'd prefer to never do anything like this again.

The results are here: https://www.patreon.com/collection/127278

I've written a bunch of scripts to help generate patch messages for each social platform (github, discord, canny, etc), so this should save a lot of effort and time in the future.

post-install window

I simplified the post-install window.

This change is not live yet, but the whole point that there are only two pages in the post-install window: supported platforms and social pages links. 

Onboarding windows which appear when user opens new platform for the first time also have also been simplified.

After all, the less text, the better. Is anyone still reading this?

chrome web store listing

I've updated the store listing to include new features and simplified it.

There is now a "Key Features" block in the beginning with a very brief description of what the extension is capable of. It is expected to be translated into all future languages, and the detailed list of features is better left in English to save translator's time.

You can check it our here: https://chrome.google.com/webstore/detail/alchldmijhnnapijdmchpkdeikibjgoi

The old description is still live in firefox store, but soon it will be updated too: https://addons.mozilla.org/en-US/firefox/addon/videochat-extension-ip-locator/

website

As we simplified the post-installation window, we needed an up-to-date alternative for users to get information about the project. We had a project website for the last 6 months, but it was not optimized for search engines and contained outdated information about the extension's features. It was necessary to address this issue.

We used to use github pages to host static pages generated from markdown files. I've redesigned this system so that now we actually build a site from multiple markdown files using a previously unsupported internationalization plugin, and only then use github pages to host it.

It should allow easy translation of the site into multiple languages, but there is no automatic language detection yet, so the user has to choose their own language.

I still don't think it has good seo optimization, but that's enough for now.

You can check out the result here: https://videochat-extension.starbase.wiki

github readme

I just took the updated description from chrome web store and updated the readme on github with it.

Search engines like github very much, so keeping the readme on github up to date is very important.

You can check out the result here: https://github.com/videochat-extension/videochat-extension

server infrastructure

In May 2023, we started using our own geolocation server. It was necessary to solve the problem of a minority of users who had problems with the http-only ip geolocation service we had used in previous years.

It was just a simple VPS server hosted on digitalocean with a few gunicorn async django workers that made requests to the paid geolocation service if the requested data was not already present in the memcached cache. Yes, we do pay for all user requests. But in the case of the non-patron geolocation data, the price is fixed and not that expensive.

We also used cloudflare to hide the real IP address of our server, avoid DDOS attacks and understand how many people are using the extension without having to run any analytics on our own server.

At some point the server couldn't handle the load and we just threw money at the problem, which resulted in ~$40/month in costs.

It was too expensive, but performance still was not the best because we had to handle 30-100 requests per second, and sometimes that's just a lot for an unoptimized server.

This month I decided to address the issue and finally do something about the high costs and reduce the load on the server.

The first thing we did was purchase a ~$400$ server to help us with costs in the future. The idea was to just move the unoptimized server there and forget about it for a while, focusing on changes in the client. But in the end we decided to stay on digitalocean, using that new server for other project-related tasks, like collecting performance metrics in the future.

So I needed to find a way to keep costs and load down.

reducing load

Cloudflare recently made their "cache rules" product publicly available. Recently means about a week ago, which was very convenient.

Since cloudflare sits between the user and our server, it can cache popular requests so that our server can rest while cloudflare handles some requests.

Basically I set a rule for cloudflare to cache all successful non-patron geolocation requests for one month. It is also set to never cache the API check request.

Now, if someone requests geolocation data about a stranger that another of our users met not too long ago, the request will not reach our server and will simply be served straight from the cloudflare cache.

The results were quite impressive.

Unfortunately, cloudflare is too smart to cache so much data for free, so it occasionally clears the old unused cache. But still this simple rule allows to handle 2/3 of overall requests, and sometimes even 75%, as shown in the screenshot above. This is a great value that cloudflare has always provided for free, but now it provides more customization options that I was able to use for this project.

The downside is that in the future we will have to pay cloudflare 20$ / month to export analytics, as we won't be able to understand how many people are using our api without going into our dashboard every time. But since we share the domain with our other project, it won't be a big problem.

optimization

I've adapted nginx as a reverse proxy to handle encryption (TLS) and verify that requests are coming from cloudflare. This is more efficient than just passing all requests to gunicorn and hoping it can handle them.

I also tried changing the django api framework from django-rest-framework+adrf to django-ninja. The goal was to improve performance, but in the end I don't think it made much difference, so I rolled back that change. The problem was in the part that made the requests to the remote geolocation api, but not in the framework itself. So something had to be done about it.

Fortunately, it turned out that the geolocation provider we use already had a solution to this problem. It was labeled as a pre-release version and hadn't been updated in years, so I just ignored it when I first saw it. I was very wrong to ignore it.

It's a simple proxy written in Go that effectively solves the problem of getting geolocation data. We deployed this product on our server and changed the request url in the server code to this proxy.

Now this proxy is responsible for connection to the geolocation server. It also supports several keep-alive connections (instead of making 10-50 connections every second from the worker), selects the fastest server, sends requests in batches, etc. This has significantly improved the performance and response speed of the extension server.

Also, this proxy server has its own, slightly more efficient cache, so we got rid of caching in workers for that particular endpoint. This is very cool and saved us a lot of RAM and processing power.

results

I was able to switch from a $40/month server to a $14/month server and get much better performance. We probably could have live with $7/month VPS, but in such cases it is better to be a bit more careful.

We also saved a lot of CPU power that we can now use for future experiments.

What about Patreon?

After all the server optimizations, Patreon now covers about 50% of our monthly expenses.

This is not enough to devote proper time to project development, but we have planned to make a big breakthrough in project development in the next two months. If our efforts do not yield sufficient results (at least self-sustainability), we will have to change our main focus to developing more promising projects. In practice, this will mean 10-20 hours per month for development instead of 50-100, which is not great but not terrible either.

We have a lot of exciting things planned, but won't necessarily be able to implement them quickly. With such projects it is very important to avoid burnout by solving one problem at a time, so sometimes we will take breaks to come up with new approaches for the development of the extension.

Conclusion

So the second progress report for patrons has come to an end.

It's been a very boring month with tasks that I hope I never have to do again in my life.

Rewriting 46 patch notes and updating them manually across all social platforms was no fun, and I hope next month will bring something really interesting to work on. The only untranslated part of the code left is the hint system, but it shouldn't take too long to adapt.

Thank you all for your support! I hope to fulfill my promise to improve support omegle in the next month and also add a bit more value for patrons.

See you next month!

qrlk


More Creators