I wanted to suggest some improvements for the blog system. Some of these things have probably been said before. Some of these things should be pretty easy to implement, others are harder and might require a complete rework. I tried to put the easy things first. $$$~$$$
Let's do something about necroposting
This is probably my biggest pet peeve about Codeforces blogs. Most of the time, Recent Actions is filled with very old blogs, some of which have been brought up for pretty much no reason at all. Currently, we have useful C++ "library from 2013 in Recent Actions, where the recent comment answers an old question which has already been answered better. Similarly, there is How to add friends? which was brought up to make some joke that has already been done.
The thing is though, a lot of the time these blogs are not brought up by trolls or anything like that. They are brought up by helpful people who simply did not notice that the blog is old and the question has already been answered. Sometimes people reply to those guys with angry comments, but that doesn't do much because people don't make that mistake more than once — we just have a constant stream of new users doing that. And it isn't good to chastise people for trying to be useful. My suggestion is to just prevent people from accidentally doing that. I propose that if you are replying to an old blog with no activity in the last 6 months, you get a popup saying something like
The most recent activity in this blog was X years ago. Are you sure you want to write a reply? It's not recommended to reply to old blogs without a good reason.
There are a few types of necroposting that I find annoying but can be argued to have a good reason:
- replying to an old tutorial with "thank you" (because these tutorials can be useful now and if they are in Recent Actions, they are seen by younger people);
- replying to an old editorial with "please debug my code" (because posting a new blog is pretty much equivalent).
In my ideal world, these replies wouldn't be necessary, but more about that later.
Don't allow users to delete blogs
The issue here is that if you delete a blog, then you delete all the discussion that happens in the comments. In my opinion, once you have posted a blog, it's not really yours to control anymore. It "belongs" to the community. Sometimes there is some important discussion in the comments that just gets deleted on the author's whim. Sometimes I put hard work and effort into writing a comment, only to discover the next day that the author of the blog has undone all that with the click of a button. We already can not delete comments. Why should we be allowed to delete blogs?
There can be some reasonable reasons to delete blogs, but they can be handled in other ways.
- if a blog is against the rules, it will be moved to drafts by CF moderation (this is already being done).
- if a blog is just spam, it will get downvoted and will disappear from Recent Actions (this is also already being done).
- if you are ashamed of the blog or something along these lines, you can edit the blog and disallow viewing history, but you won't delete other people's thoughts by doing that.
- if you have a really serious reason for deleting the blog, you can reach out to CF administration.
I also suggested that in a comment yesterday, but the blog got... deleted.
Have a separate place where beginners can ask questions
There have been attempts to create some megathreads for that, but they have always been unofficial and they have always eventually just disappeared, and beginners have gone back to making new blogs or posting under old editorials. For this to work, it needs to be official and there needs to be an official access point.
Also, it needs to have some sticky posts. There are a few recurring points that will solve a large part of the problems beginners have. For example, we have Codeforces Round #FF(255) Editorial and Codeforces Round #134 in Recent Actions currently, and both of them are there because a beginner asked a question of the type "my solution prints different output on Codeforces". Almost always, the solution to that is "You have undefined behavior, use tools like -fsanitize=address
to find out where it is. There are two other typical problems:
- "I have WA and I can't find a reason" — the solution is to write a very simple and naive solution, a program that generates small random tests and a program that compares the output of the two solutions.
- "I have TLE" — the solution is to learn what the words "time complexity" mean.
Beginners need to see these things before asking a question. And the only way to ensure that is to have some kind of sticky or readme before you ask a question.
Have a separate place for educational resources
This was once suggested here, but it is not implemented. Again, there have been some unofficial attempts to create "lists of tutorials" but they will get similarly buried and updating them depends on the author. Again, for something like this to work, it needs to be official and it needs to have an official access point. Otherwise, it will get buried and obsoleted. EDU is somewhat like that, but it's a bit different — EDU is more like an online course platform, while tutorials can be all kinds of community-created resources that need not follow the EDU format.
Make the blog system into a forum system
This is the ultimate one and it would solve the two previous problems automatically. The real problem is that Codeforces has a blog system, but it has grown into a stage where the blog system is practically used as a forum system, except it doesn't have typical forum features. Currently Recent Actions is the only access point to the blog system, and it is very inflexible.
If we had a forum system, we could have sub-forums "Contest announcements", "Contest editorials", "Beginner questions", "Tutorials", "General discussion" etc. In each of them, you could sort the threads by most recent action, allowing you the same experience as Recent Actions currently has, but with none of the annoying blogs that you don't want to see. Sub-forums could have sub-forums of their own, allowing us to create a separate discussion thread for every problem in every contest (something that has been requested several times). Or to create different sub-forums for different difficulty levels of tutorials, allowing "ODE and differential technique" to not be buried in a sea of "DP for beginners, part 7". You could create sticky threads, solving the problem of beginners asking questions that have a standard solution. And so on.
The idea itself is nice but I hope the implementation won't be terrible (see Codechef discuss as a negative example). I don't think we need forums, actually, that would mix very different things. I believe we should have long-term blogs and short-term questions, akin to StackOverflow. Breakdown:
not really. a lot of the times, the accepted answer on stack overflow is not necessarily detailed and insightful. comments posted later can be much more helpful too
I'm not so sure. Let's do some brainstorming.
The goal is to create a knowledge base. Preferably, in short question--short answer form, because we want it to be searchable and universal.
Ideally, this should be a one-to-one mapping. If we allow one-to-many mappings, people may post hacky solutions and someone will use them because they seem 'easier' than the correct one but have pitfalls. Usual Q&As provide a one-to-many mappings. At the same time, there are of course many people who can write answers.
Solution: Questions can be marked as 'knowledge base'. Questions without this mark can be answered by anyone. They are closed a month after last message. They may be converted to 'knowledge base' by choosing the best answer, this would only be allowed for high-rated users. 'Knowledge base' represents our joint opinion on the problem, they have a single best solution and everyone recommends to use it. These questions don't expire and don't get deleted. The 'best' answer can be edited, like a community wiki on StackOverflow, probably by high-rated users only.
Timeline for dumb questions:
Timeline for good questions:
Hope to see your handle black soon.
what color's my handle?
If I'd ever have an option to block you, I wouldn't have been seeing your edgy posts all the time. You're getting too cringe.
Whatever you have written does makes sense . I also wrote a blog in which one part was Don't allow users to delete blogs but it got heavily down voted .
I think it's not that CF headquarters are not aware of these issue .Some of thing you mentioned has already been mentioned a lot of time in comments by users . It's just they either want to focus on things more important than this (Like related to contests , submission queue) . They also do changes from time to time :
1.Blog in recent action now disappear after getting -15 votes .
2.People with negative contribution can comment only limited number of times.
I am sure that if someone from developer community volunteers to develop all these things , Mike will accept that.
I won't fall for this mistake again. People ask for a feature, the site owner doesn't reply, I develop the feature myself, everyone says 'Awesome!', I ask the site owner to at least add the link to my site or something, they ignore me. That's just lost time and nerves.
Hey MikeMirzayanov. We're not just competitive programmers here, there are industrial programmers here too. There are lots of people who like this idea, and there are lots of people among them who can develop it. If you like the idea but don't want to implement it -- please say that. Don't make us wait for a dozen years without any progress information.
MikeMirzayanov has lot of responsibilities too. In several contest announcements i have read that he has worked whole night to solve some bug.
Also implementing additional features must be done with care and coordination with people who are working on it . It requires additional time and efforts . Seeing comments of Mike , It seems like he alone holds lot of responsibility . Last time a DIV3 got unrated because he had some other work.
Most of the money from sponsorship or fund raising is utilized for paying the contest makers. It might not be possible right now to hire lot of good developers to do that job along with maintaining frequency of contests .
I know. I love Codeforces which is the best of all competitive programming sites. I love this community and I love how Mike made all of that possible. Without a doubt he spends a lot of time working on Codeforces, and he just doesn't have enough time to work on blogs too. Yes, then just say 'I don't have time', it's easy! We can do that for you, just give us carte blanche.
Yes , In my opinion also Codeforces is best competitive programming website in world and one of the important reason is frequency of contests and no bugs during most of the contests.
MikeMirzayanov is alone responsible for most of the development related work and i am optimistic that codeforces will have features mentioned in the blog in future . We need to be have patience for it. He doesn't ignore us , I have seen some of his comments giving hint that he sometimes goes through blogs in recent action .
The thing that actually motivated me to write this blog was necroposting. After that it kind of just developed from there. And to be honest, I have not seen any suggestion related to necroposting. Necroposting and blog deletion are also relatively easy to implement compared to the other three.
Anyway, this isn't really about "being aware of the issue" because it is not a bug report, it is a feature request. In this situation, I think it can be worth it to show demand. All kinds of features are theoretically possible and of course someone at CF may have already thought of it, but if there is a blog requesting something and it is upvoted etc, then it communicates that people actually want this. This doesn't guarantee anything of course but I think it at least increases the probability of CF administration considering this.
purplesyringa suggested a lot to avoid necroposting in each scenario here.
Which is like a completely different suggestion. Ok, I should have said that I haven't seen anything similar to my suggestion.
Don't get me wrong. There's still people(including me) that violates,
I think the first one is not really an "don't do this", it's more like "heads up, the comment may not appear as you expect it to".
People will violate all kinds of things, it's more about reducing the number of people who make unnecessary necroposts. I have seen a lot of discussions that go like:
Person A: makes pointless reply
Person B: Dude wtf? This blog is 7 years old!
Person A: Oh sorry, I didn't notice.
The point is, a lot of people reply to old threads simply because they don't notice. And if we can divert their attention to that before they reply, they will not post an unnecessary comment.
Locking old threads also does the same thing but in a strict manner.
I don't think a strict measure is needed, though. I don't think we should prevent all necroposting. Sometimes there are good reasons to reply to old blogs, and there's nothing wrong with that. I just want to prevent situations where people reply to them by accident.
Have a separate place where beginners can ask questions
that would clear a lot of mess from recent action,I hope mike implement itSome times beginners also have astonishing ideas . It would just be unfair and will contribute more to ratism . every one should have equal rights here. Punish them for wrong but don't take away for rights.
No, I think you got it wrong, it's not about rating limitation. If something is wrong with my solution and I can't debug it, I'd also ask my questions on the beginner place. It's just to separate short-term questions from long-term blogs.
His suggestion has nothing to do with ratism.
While we're at it, how about this feature.
"Filter Recent Actions based on rating of the person who posted or commented"
I think this is important because if some LGM or IGM posted or commented anywhere, I would like to read it. Also it would give users an easy way to filter spamming done by beginners.
say what now?
LGM or IGMs typically produce better content than newbies/pupils/etc.
Blatant ratism.
Anyways this is something you could probably do yourself. The easiest solution is going here and then writing a script to delete all entries where the user isn't red or black-red. If you wanted to take it farther you could look at API.
Add to Favorites for blogs and there should be option to make entries of your favorites to be public or private.
This section should allow users to create multiple lists with some heading and links as entries(with option of private and public for every entry).
By this we can save blogs which we think are good.
BONUS: making some entries public will help your followers(they will not span your chats for some good resources).
The basic functionality of "add to favorites" exists, although it is very easy to miss. Click the little star next to the upvote and downvote buttons.
please don't take the blogs seriously. nothing valuable was ever brought from the discussions.
"Don't allow users to delete blogs" — YES, YES, YES AND ONE MORE YES! It is so annoying to see your comment that you put effort into and worthy discussion disappear since its on author's mercy.
My main concern with blogs is that it becomes really hard to find blog once it gets out of Recent Actions, you need to either remember the author and find the blog in his blogs or search it using Google, that's basically a "death" for a blog then. I wouldn't mind scrolling through lazily displayed long list of blogs to finally get one that I am interested in
Is that possible — the gym submissions become opened for all...
I have a feature request; total interaction count of a comment/blog(not just upvote count).
The Current case is if a Comment/Blog has x upvotes and y downvotes; it is shown to have (x-y) upvotes.
But consider the case where two Blogs have these stats:
Blog A: 20 Upvotes and 10 Downvotes (total interaction 30 and upvotes 10) and
Blog B: 200 Upvotes and 210 Downvotes (total interaction 430 and upvotes 10)
Clearly, Blog B has more debate going on and Blog A less; some people may prefer to visit Blog B over Blog A and some otherwise(to contribute to Blog with less interaction).
A Blog/Comment can show total interaction caused by it(Summation of the interaction of all its child comments), and this information is valuable.
Please share your views on this.
so u are saying
1) hide newly created blogs as they have low interaction and keep display old controversial blogs
2) keep spam blogs which have a lot of downvotes on top by viewing it as interaction
No
He's not saying to keep it on top/bottom. He's just saying to display the stats.
i feel like this would clutter up the UI, and in majority of cases there isn't a need
it would be a bit unusual to have 2 numbers (esp. since you would have to label which is which), but having this number in a tooltip would be fine
i think that interaction can be judged by amounts of comments for a blog or amount of child comments in any case
Sounds good...Completely Agree!
Yeah, I think it would be helpful. But first priority should be given to latest blogs and then based on what u mentioned above.
More features can downgrade popularity of website because of it's complexity. CF interface is easier that codechef's and that's why more popular.
I think there are a lot of other reasons why CF is more popular too...
In some sense I agree with you. But it doesn't mean features can't be implemented, it's more about being smart about what you implement and how you implement it.
No, https://mirror.codeforces.com/top
Yeah , and similarly you can see that not all blogs are related to necroposting in recent action . Also what is problem if someone has doubt in some old blog ?
A blog for reporting all such matters are already made here but then also -is-this-fft- made a blog instead of posting there . He is teaching beginners to how to behave and he himself doesn't go through all blogs.
Why necroposting is generally not encouraged. Some argument can be made to allow it (like on editorials), I think there should at least be a contribution lower bound to do so.
The problem he is talking about by saying its the only access point, is that it is very tough to find old blogs that you found useful unless you can effectively Google them (never found Codeforces search useful), or perhaps discussion on a particular topic. Hence it is inflexible, as is the Top section which generally is full of contest announcements and editorials. I didn't even know about the blog you mentioned, which is a testament to how ineffective it is.
?????
Where have I said that beginners must go through all blogs (is that what you are implying here?)? Also, I can't find anything I have said that would suggest I should have posted this blog under that topic instead of here.
Actually, I think the blog you linked is another reason why a forum system would be good. If this blog would be stickied, people would actually use it. But now, it gets buried and people will forget about it.
And I specifically said that this one can be argued to have a good reason.
Codeforces should also have something like the Arch Linux Code of Conduct or the equivalent for Stack Overflow. I think (trusted) members of the community would be happy to moderate based on this set of rules. It would really clean up the blogs of pointless arguments (and trolls) and encourage people to actually Google and do their research before asking questions (or at least frame them better). Honestly, the end goal should be something like the Arch Linux Forums.
Hello. I have read the post carefully and agree with many (but not all) of the above. Thanks for your thoughts and ideas. Unfortunately, I am now very busy with other activities in order to carefully formulate thoughts. Here's a short summary of what I think.
Even if I don't answer, be sure. I read all the posts on Codeforces that sparked discussion. Every day (exceptions are rare) I do something to make Codeforces better: with the growth of the system, the number of places that require work, but at the same time invisible to users, has increased. There are many things to do. Even if it turns out to delegate them, then I still have to review the question, process, and results: hardware, maintenance of servers and judging machines, adapting to load and changes, improving the performance of different parts of the system, communicating with partners and hosting partner events, just paper bureaucracy, some work with problems (not only new ones, sometimes I need to fix old problems), responding to feedback, reading discussions and moderation, organizing the work of others who help Codeforces, developing some new features, testing and implementing them, questions related to sending prizes/souvenirs and working with authors, monitoring rounds, searching for cheaters and their punishment. Give me a couple of minutes to think and I'll write twice more. Plus, unfortunately, health is also not iron and there are some difficulties.
Thank you Mike for your reply . I knew that you don't ignore us . You are like one man army keeping everything good on this website.
Related to blog deletion , if we implement blog deletion on this website , we can do one thing is not decreasing the contribution of person who made the blog after blog gets votes less than -10 . This is because many times some new people and even some good blogs get downvoted and saving the contribution is one of the reason why people delete the blogs.
Also , i read in one of your comment that you are going to implement account deletion . If you implement it , you can convert all blogs/comments of that person as anonymous instead of removing them.
Really sorry for the necroposting, but I feel like the blog deletion thing should be addressed, if it has not been addressed already (and I feel that this is the case).
The reason why I'm writing this comment is the following.
Today, someone posted an interesting blog about implementing modular HLD, which had a good discussion in the comments. More specifically, there was a very interesting comment by bicsi which led me to think a bit more about the implementation part of it*, and was imho very valuable to the community. I also had commented on the blog with a few pointers on how to optimize the implementation, and it could be useful for the community too.
The comment had to do with having containers other than segment trees for the heavy paths, and sounded like a unique idea to me.
However, when I looked back at the blog to read the relevant comment once again, I realized that the blog itself was gone. I wonder how many good discussions (even more instructive than the ones on this blog) have been lost this way, just because of a thought that crossed the OP's mind that led to them deleting the blog.
Now other people might say, oh you should make your own blog about the topic if you're so invested in it. But it's not possible to replicate all the discussion and all the good points in the comments just based off memory. And it's too much work just to compensate for the carelessness/thoughtlessness of the OP.
More importantly, allowing users to delete their own public blogs gives them power to get rid of some resources now belonging to the community, which sounds quite clumsy and bad to me.
That's one reason I feel that the delete feature for blogs should be removed, and removal should be done only in special cases (when there is nothing perceivable as useful, or just spam). It saddens me how actually good blogs tend to be deleted, while the blogs that are blatant spam tend to float around in recent actions for days or weeks.
I agree. Those are the things you come back to to think about, and if they just disappear, it makes it a lot harder to progress on your ideas.
The thing is that sometimes newbies/pupils post blogs that get downvoted into the ground (often because ratism), and it ruins their contribution. I know it's basically useless internet points, but it doesn't feel very good when you have like -20 contribution (I had -36 at one point) while many others have +100 and get constantly upvoted (again because ratism).
Maybe being able to delete a blog within the first 20 minutes after posting it would fix this (because usually the downvotes come in fast), but more experienced codeforcers can probably advise better improvements.
I really like the suggestion for a beginner place and an educational place for discussions, as well as "other". However I think we can go more than that and have something like LethalPuppy said, where there would be different sections you can choose from. And maybe there could be a way to remove spam posts, like a "report as spam" button, so if it's reported enough, it could be removed (maybe with some manual checking just to make sure).
The main con I see is that it would have to integrate well with the current Codeforces layout though, so even if this idea is used, it might take a while to implement.
Again, take my ideas with two grains of salt, as even though I'm purple (barely, but still), I'm relatively new to codeforces (4 days ago was my account's 6-month birthday :)
I don't agree to your first two ideas. I like necroposting because I have discovered many great and useful blogs thanks to it. I think that even after posting it, a blog is still yours, not the community's and that you should be allowed to delete it.