Блог пользователя RodionGork

Автор RodionGork, 10 лет назад, перевод, По-русски

Я джва года хотел саит! (с) классик

http://www.codeabbey.com — а вот и он, встречайте! Ультрасовременный дизайн апеллирующий к временам когда вебсайты рисовали каменными топорами на шкурах! Множество сложнейших задач типа A+B, и A+B+C и даже A+B+C+D!

...

Русская версия этого поста немного отличается от английской.

Года три назад я был одержим наивной идеей написать Online Judge на манер TopCoder, потом я хотел сделать соревнования ботов для внутрикорпоративного использования, потом ещё что-то... Все эти идеи быстро приходили в упадок :)

Прошлой осенью я решил наконец выучить PHP и вернулся к идее сайта с задачами — хотя бы для начинающих программистов.

Однако в самом начале выяснилось что сервера для тестирования решений и нужной инфраструктуры "пока" не будет, поэтому идея поменялась и функционал сайта стал похож на ProjectEuler или Rosalind — т.е. критерием решения задачи является отправленный ответ.

Отличия от ProjectEuler в том что исходные данные к задачам всё-таки более рэндомны, нет уклона в математику — плюс решения других участников можно смотреть (после того как решил задачу сам). Кроме того сначала я хотел сделать чтобы некоторые задачи нельзя было решить прежде каких-то других, но за эту "фичу" получил негодование от пользователей и перестал её использовать. Теперь задачи просто сортируются по количеству решивших (внутри разделов) — т.е. примерно по относительной простоте — и большинство решает их сверху вниз.

Недавно появился функционал для добавления задач за которые можно получать произвольное количество очков — т.е. ответ на которые может быть более или менее оптимальным.

...

Основной проблемой (ну, кроме дизайна, низкой посещаемости, ошибок в SEO) как обнаружилось является мой недостаточный опыт в решении и изобретении задач. Как результат — большинство задач очень простые, многие на тупую реализацию алгоритма по написанному. (т.е. это сайт не для СП-энтузиастов, а именно для начинающих, школьников изучающих языки и .п.) Вот пример "очень сложной" задачи (по позитивным отзывам пользователей) — сводящейся к простому ДП.

Как результат — некоторые задачи кажущиеся мне банальными вызывают сложности у пользователей — и наоборот, иные я долго-долго придумываю и, как оказывается, упускаю очевидное простое решение. Очень стыдно!

Поэтому кроме критики/предложений/идей которые я рад буду получить, мне в перспективе было бы приятно вступить в тайный союз с каким-либо автором учебно-программистского блога (чтобы обмениваться ссылками), любителем выдумывать задачки (годятся просто идеи, авторство будет указано) или просто гуру у кого порой можно было бы консультироваться по идеям новых задач :)

Сайт совсем-совсем бесплатный (хотя некоторые функции доступны лишь с определённого уровня). Я сначала хотел было монетизировать его с помощью небольших рекламных баннеров, но понял что миллионов я таким образом не заработаю и убрал чтоб не раздражать пользователей. :D

  • Проголосовать: нравится
  • +74
  • Проголосовать: не нравится

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

Попробуйте прежде пару-тройку раз придумать задачи для раунда ЦФ и возможно даже станете автором. Наберетесь опыта в этом деле и сделаете для себя выводы. З.Ы. ИМХО

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    Попробуйте прежде пару-тройку раз придумать задачи для раунда ЦФ

    Было бы здорово если бы вы или кто-нибудь другой создал пост о придумывании задач для ЦФ и подготовке раундов — о том что для этого требуется, сколько усилий уходит, как выглядит взаимодействие с командой CF — я несколько раз просил об этом разных авторов, они соглашались и обещали этим заняться как только найдут время, но пока увы...

»
10 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

Just have to say, I love the design. It might not be super polished, but it's well thought of from a UX point of view and feels very good to me.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Thanks, you are too kind :)

    I should say that many users' advices helped me improve it significantly, so I'm greatly thankful to them.

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Which technology stack do you use?

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Initially my goal was to learn PHP (because I'm java developer by occupation), so the stack is quite simple: PHP (with PhpLayout — my own light framework) and MySQL.

    UPD: well, of course here are few minor details:

    • some statements show pictures in embedded SVG;
    • demos for some problems use javascript / jQuery either with canvas or with JsMonoTermexample1, example2.
»
10 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

A few suggestions about security and UX:

  • The username length is irritating. I can't use my usual nick because it is too short. I think 4 characters should at least be allowed
  • The registration was a bit awkward because I did not read the restrictions about nick name length and password complexity, so I had a few failed form submissions. It would be nice to check the constraints on the client side using JS, so that one can see the mistakes before submitting (and thus resetting the form). Alternatively, the filled in fields should be refilled if submission fails and not be cleared
  • I like that you have a privacy policy. However it does not mention how you store passwords. The page (and the code here) indicate that my password could be sent to me via email, which would mean that it is stored in plain text. Never ever do that, use a salted iterated strong hash algorithm. I can recomment bcrypt with lots of iterations (maybe as much as thousands of rounds, if you can afford it). There's really no need to store user passwords, in case somebody forgets their password, just let them generate a new one. Remember that users commonly use the same password for multiple pages, so it's not only your service that would be affected by a compromise of your database.
  • I did not test this, but make sure to HTML-escape comment text to prevent XSS flaws and use prepared statements with emulation turned off explicitly for SQL queries, like described here.
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Thanks a lot for your elaborate research on the functionality and vulnerabilities! I'll try to answer to each point below:

    • Yes, my fault! :) Initially it was supposed the users will login via FB or Gmail account to simplify matters for them and for me — so when I added "direct login", I tried to make it "just a bit more complicated" so that user have time to reconsider other login options :)
    • Well... Agreed, I'll try to provide JS verification as soon as possible.
    • Thanks! I've added just now explanation about storing passwords to privacy policy (you are pretty correct, I use hashing with salt — framework have just "mock" implementation — perhaps I should update it);
    • Comments and Info in user profile allow using markdown, but with html turned off to restrict inserting funny javascripts — also they are not stored plaintext to avoid problems with SQL.
»
10 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится

This is a great website and i appreciate your idea but i have an opinion : you can change the design and make it better and set many contests like CF :)

»
7 лет назад, # |
  Проголосовать: нравится -60 Проголосовать: не нравится

Site for a beginner from a blue, lol. Bro, practice and maybe you will get purple one day. Don't get into this bullshit crap. Thank me later! :)

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится

    I think you have lost it . Last time he participated was in 2014 and he left coding competition with his best rank that shows that he could have reached more and more if he would have continued............So so can't throw tantrums at him like that :(