collove / pasteme

⚡ RESTful Pastebin Service for @hashnode via @planetscale
https://pasteme.pythonanywhere.com
MIT License
85 stars 7 forks source link

General Recommendations #27

Open Farhaduneci opened 2 years ago

Farhaduneci commented 2 years ago

Hey Sadra, I wish you doing well, thank you for this great project, PasteMe has become one of my favorite online tools for sure.

I've viewed the project codebase and like to share my opinions on a couple of things that caught my :eyes:, so we share ideas about them here. I hope these make everything a little better and make the project to move forward.

None of my recommindations would have any affects on the core website functionality, they are more related to back-end enhancments and visual aspects of the project.

1. Snippet UUID Alphabet,

You have used 12 characters abcdefg12345 as ShortUUIDField in Snippet model file, here is the code. https://github.com/collove/pasteme/blob/4916a92ca8135b79e54ff5a4463e8fbe8254e2c1/snippet/models.py#L8-L13

These characters will make $12^5$ unique combinations based on your desired 5 char length UUIDs, that will have the capacity to produce $28K$ pastes in the application. I believe that's not a huge number for a pastebin service, I think this can simply be solved by using the built-in string module character groups and extending the alphabet to English letters and digits!

from string import ascii_letters, digits
alphabet = ascii_letters + digits

This way, the system will be able to create $62^5$ UUIDs (pastes), which is $\approx 916M$ possibilities.

This number can be shrinked by using smaller, but big-enouph, character groups like ascii_lowercase or ascii_uppercase. They will support $\approx 11M$ UUIDs.

I've done this in my :fork_and_knife:, would be happy to open a PR if you're intrested.

2. Using Code Formatters,

After cloning the codebase on my machine, I've noticed that every file I visit is marked as edited via Git! It happens because of the Final new line that my code editor appends to each file, There are also Not Trimmed Trailing White spaces in the code and some random Extra new lines.

https://github.com/collove/pasteme/blob/4916a92ca8135b79e54ff5a4463e8fbe8254e2c1/snippet/views/template.py#L7-L21

All together, they make the codebase a little dirty and might make the pycodestyle and even some people :unamused: about formatting.

I recommend using the “Black Formatter” in the project!

By using Black, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from :unamused: faces. You will save time and mental energy for more important matters.

Black makes code review faster by producing the smallest diffs possible. Blackened code looks the same regardless of the project you’re reading. Formatting becomes transparent after a while, and you can focus on the content instead.

This can be achieved by using black locally as formatter on save, and checking the code style by GitHub Actions integration on every push to make sure everything is OK.

I've created an action file that does the job in my :fork_and_knife:, would be happy to open a PR if you're intrested.

3. The Footer,

IDK why, but I believe all footers need to be sticky, They are called footers anyway :laughing:. This made me to feel out of comfort-zone and I think it's better that the footer be sticky, So it stocks down there now.

Before:

image

After:

image

I've made the footer sticky in my :fork_and_knife:, would be happy to open a PR if you're intrested.

4. Endpoints Rate Limit,

Pastebin websites are usually tasty :cake: for new hackers, I'm not a security specialist, but rate-limiting end-points are always a good practice. Django Ratelimit is a rate-limiting decorator for Django views, storing rate data in the configured Django cache backend. I recommend using this package in the project.

lnxpy commented 2 years ago

Hi Farhad,

Your thoughts and notes are so noticeable, to be honest. Since the deployed version is more likely to be a simple MVP competing in the Hackathon, it definitely needs improvements and that's why it's open source!! I will work on the CI-related workflows (probably working with Github Actions) and dev-based tools to make a quick guide for those who are willing to have contributions to PasteMe.

I'll label this issue and keep it open till I finished writing the CONTRIBUTING doc and improve the tests. Once I'm done, feel free to make PRs.

Would you please trunk that "footer sticky part" commits to another PR and open it now? It looks to be something related to the templates and static files. We'll work on the codebase later. :)

Much appreciate your love for opening this issue and sharing your opinion. 👍🏻 ❤️

lnxpy commented 2 years ago