Abhijeet-AR / Competitive_Programming_Score_API

API to get user details for competitive coding platforms - Codeforces, Codechef, SPOJ, Interviewbit
MIT License
183 stars 59 forks source link

Add Shields.io badges to readme #11

Closed k3KAW8Pnf7mkmdSMPHz27 closed 3 years ago

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Hello, first of all, nice repository and thank you for your effort in creating it!

I just thought I'd add this as a suggested use of the API. For an "in-action" example, I added a CodeChef badge with my global ranking on my own GitHub profile https://github.com/k3KAW8Pnf7mkmdSMPHz27/ (under hobbies, sometimes it can take โ‰ˆ 5 s to load, probably if the cache is invalidated). It mostly work if the cache lifetime value is high enough, occasionally it shows an error message instead of my rank ๐Ÿ˜ฌ

Some thing to note that you might want to change, or I can address them later,

  1. The example images shown are not dynamic, but they can be made dynamic with a long HTTP cache lifetime. I can volunteer my account on the sites that I have, otherwise one can just pick anyone from top10 or a personal favourite competitive programmer ๐Ÿ˜› (I'd go with Errichto based on his youtubes)
  2. The example code should probably have a HTTP cache lifetime value as well. The one I have is updated once a day, which is much more frequent than I need for my occasional monthly long codechef challenge ๐Ÿ˜› Feel free to suggest what you consider to be a reasonable refresh time and I'll add it to the "code" examples.
  3. The badges/shields that I have not included does not have an icon on https://simpleicons.org/ . This is not a problem per say, as it is possible to use an image. I have not had time to do so. I can submit one/more PR whenever I have time to add more badges.
  4. Leetcode is listed on simpleicons but when I were writing the changes I kept getting "internal server error" and I am not sure why. I did not have time to look into it. I can probably submit a PR for that as well at some point in the future. Unfortunately, time is a limited resource ๐Ÿ˜ฌ
Abhijeet-AR commented 3 years ago

Hello, first of all, nice repository and thank you for your effort in creating it!

I just thought I'd add this as a suggested use of the API. For an "in-action" example, I added a CodeChef badge with my global ranking on my own GitHub profile https://github.com/k3KAW8Pnf7mkmdSMPHz27/ (under hobbies, sometimes it can take โ‰ˆ 5 s to load, probably if the cache is invalidated). It mostly work if the cache lifetime value is high enough, occasionally it shows an error message instead of my rank ๐Ÿ˜ฌ

Some thing to note that you might want to change, or I can address them later,

  1. The example images shown are not dynamic, but they can be made dynamic with a long HTTP cache lifetime. I can volunteer my account on the sites that I have, otherwise one can just pick anyone from top10 or a personal favourite competitive programmer ๐Ÿ˜› (I'd go with Errichto based on his youtubes)
  2. The example code should probably have a HTTP cache lifetime value as well. The one I have is updated once a day, which is much more frequent than I need for my occasional monthly long codechef challenge ๐Ÿ˜› Feel free to suggest what you consider to be a reasonable refresh time and I'll add it to the "code" examples.
  3. The badges/shields that I have not included does not have an icon on https://simpleicons.org/ . This is not a problem per say, as it is possible to use an image. I have not had time to do so. I can submit one/more PR whenever I have time to add more badges.
  4. Leetcode is listed on simpleicons but when I were writing the changes I kept getting "internal server error" and I am not sure why. I did not have time to look into it. I can probably submit a PR for that as well at some point in the future. Unfortunately, time is a limited resource ๐Ÿ˜ฌ

Hi, thanks for the appreciation and suggestion. Regarding the 1st change, you can go with your account or mine. For the second, we can update Codechef and Codeforces once a day as the scores might not change too often and for all others we can go with 1 hour. For the third, I'll see if I can help.

Abhijeet-AR commented 3 years ago

Hello, first of all, nice repository and thank you for your effort in creating it!

I just thought I'd add this as a suggested use of the API. For an "in-action" example, I added a CodeChef badge with my global ranking on my own GitHub profile https://github.com/k3KAW8Pnf7mkmdSMPHz27/ (under hobbies, sometimes it can take โ‰ˆ 5 s to load, probably if the cache is invalidated). It mostly work if the cache lifetime value is high enough, occasionally it shows an error message instead of my rank ๐Ÿ˜ฌ

Some thing to note that you might want to change, or I can address them later,

  1. The example images shown are not dynamic, but they can be made dynamic with a long HTTP cache lifetime. I can volunteer my account on the sites that I have, otherwise one can just pick anyone from top10 or a personal favourite competitive programmer ๐Ÿ˜› (I'd go with Errichto based on his youtubes)
  2. The example code should probably have a HTTP cache lifetime value as well. The one I have is updated once a day, which is much more frequent than I need for my occasional monthly long codechef challenge ๐Ÿ˜› Feel free to suggest what you consider to be a reasonable refresh time and I'll add it to the "code" examples.
  3. The badges/shields that I have not included does not have an icon on https://simpleicons.org/ . This is not a problem per say, as it is possible to use an image. I have not had time to do so. I can submit one/more PR whenever I have time to add more badges.
  4. Leetcode is listed on simpleicons but when I were writing the changes I kept getting "internal server error" and I am not sure why. I did not have time to look into it. I can probably submit a PR for that as well at some point in the future. Unfortunately, time is a limited resource ๐Ÿ˜ฌ

Can you give more details on the Leetcode error? It's working fine with my username.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Can you give more details on the Leetcode error? It's working fine with my username.

This is strange. It does work with my username (https://competitive-coding-api.herokuapp.com/api/leetcode/xQZyhWSJ) But both uwi https://competitive-coding-api.herokuapp.com/api/leetcode/uwi and superluminal (https://competitive-coding-api.herokuapp.com/api/leetcode/superluminal) gives me {"message": "Internal Server Error"}

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Regarding the 1st change, you can go with your account or mine.

I compromised, I used my CodeChef and your Codeforces ๐Ÿ˜‰

For the second, we can update Codechef and Codeforces once a day as the scores might not change too often and for all others we can go with 1 hour.

Done.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

For the dynamic badges I also linked them to the platform's profile page, perhaps I should remove the link?

Abhijeet-AR commented 3 years ago

Can you give more details on the Leetcode error? It's working fine with my username.

This is strange. It does work with my username (https://competitive-coding-api.herokuapp.com/api/leetcode/xQZyhWSJ) But both uwi https://competitive-coding-api.herokuapp.com/api/leetcode/uwi and superluminal (https://competitive-coding-api.herokuapp.com/api/leetcode/superluminal) gives me {"message": "Internal Server Error"}

Maybe we are missing some case. We'll find the problem and fix it. I opened an issue #12 for it.

Abhijeet-AR commented 3 years ago

Regarding the 1st change, you can go with your account or mine.

I compromised, I used my CodeChef and your Codeforces ๐Ÿ˜‰

For the second, we can update Codechef and Codeforces once a day as the scores might not change too often and for all others we can go with 1 hour.

Done.

Not a problem ๐Ÿ˜„. We can go with any contributor if they agree ๐Ÿ˜ธ.

Abhijeet-AR commented 3 years ago

For the dynamic badges I also linked them to the platform's profile page, perhaps I should remove the link?

I don't see any problem linking it to profile, maybe we should keep it ๐Ÿค”.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

For the dynamic badges I also linked them to the platform's profile page, perhaps I should remove the link?

I don't see any problem linking it to profile, maybe we should keep it ๐Ÿค”.

Nvm. I confused myself with the alt="..." vs title="..." tags. If you don't want to be confused, ignore what I said ๐Ÿคก

saurabh-prakash commented 3 years ago

For an "in-action" example, I added a CodeChef badge with my global ranking on my own GitHub profile https://github.com/k3KAW8Pnf7mkmdSMPHz27/ (under hobbies, sometimes it can take โ‰ˆ 5 s to load, probably if the cache is invalidated).

@k3KAW8Pnf7mkmdSMPHz27 this (~5s latency) is probably because @Abhijeet-AR has deployed this app on heroku free account and it kills the app due to longer periods of inactivity (AFAIK about heroku). Therefore, upon a new request after such a duration of inactivity, heroku respawns the app and that is where the latency is. @Abhijeet-AR can confirm this by observing the activity graphs in his heroku account.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Aha. In that case I don't see it becoming an issue. Perhaps I were just unlucky with the Shields caching (1 hour) and Heroku killing it off ๐Ÿ˜›

Abhijeet-AR commented 3 years ago

For an "in-action" example, I added a CodeChef badge with my global ranking on my own GitHub profile https://github.com/k3KAW8Pnf7mkmdSMPHz27/ (under hobbies, sometimes it can take โ‰ˆ 5 s to load, probably if the cache is invalidated).

@k3KAW8Pnf7mkmdSMPHz27 this (~5s latency) is probably because @Abhijeet-AR has deployed this app on heroku free account and it kills the app due to longer periods of inactivity (AFAIK about heroku). Therefore, upon a new request after such a duration of inactivity, heroku respawns the app and that is where the latency is. @Abhijeet-AR can confirm this by observing the activity graphs in his heroku account.

Yes, in Heroku's free version server goes to sleep after 30 minutes of inactivity. I was thinking it was due to Shield, I didn't think about Heroku ๐Ÿ˜„.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Hum... I'll look into it more... It might be that Shields uses a time-out... or it is completely unrelated.

Skaฬˆrmavbild 2021-01-12 kl  08 29 17
Abhijeet-AR commented 3 years ago

Hum... I'll look into it more... It might be that Shields uses a time-out... or it is completely unrelated.

Skรคrmavbild 2021-01-12 kl 08 29 17
Screenshot 2021-01-13 at 9 47 53 PM

It's showing unresponsive on your page, but it seems to work fine on our current repository.๐Ÿค”

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

That is strange. My (so far subjective, I have not looked into the details) impression is that I get the broken image every time Shields cache gets invalidated. I have never seen the "unresponsive" message. It is for sure better than just a broken link. Are you using Chrome?

Abhijeet-AR commented 3 years ago

That is strange. My (so far subjective, I have not looked into the details) impression is that I get the broken image every time Shields cache gets invalidated. I have never seen the "unresponsive" message. It is for sure better than just a broken link. Are you using Chrome?

Nope. I'm using safari. But I checked on chrome too, it's showing the same. If you changed it recently, once check if you made any mistake in URL.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Nope. I'm using safari. But I checked on chrome too, it's showing the same. If you changed it recently, once check if you made any mistake in URL.

I have not, but I am using a different URL than this repository so perhaps. I'll see if I can look into it when I add more badges, it would be a shame if it doesn't work as intended.

saurabh-prakash commented 3 years ago

The "UNRESPONSIVE" is due to github caching, I think

Screenshot 2021-01-17 at 5 00 31 PM

See the img src. It is from camo.githubusercontent. "data-cannonical-src" is the actual source and despite it being working in later API calls, github may have cached the first response from shields API (when our API gave an error).

Ideally, we need the img src to have the value that is contained in "data-cannonical-src". But, github modifies that url. Read this.

We'll probably need to purge Camo cache when this occurs.

saurabh-prakash commented 3 years ago

There are 2 hard problems in Computer Science:

  1. Variable Naming
  2. Cache Invalidation
  3. One-off errors

We've hit cache-invalidation in this case.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

Yup. Sorry about that. The cache(s) made me believe this would work better out of the box. @Abhijeet-AR feel free to remove this use-case again.

In addition to the potential cache issues, there is an issue when loading an image takes longer than 4 s. Given the Heroku startup time that can be problematic.

k3KAW8Pnf7mkmdSMPHz27 commented 3 years ago

I'll be quite busy for two weeks or so. I can revisit this issue afterward and see if I can come up with a workaround.