Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UVa problems and submissions #1

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

Technici4n
Copy link
Member

Tout est dans le titre... 😄

Je n'ai pas écrit de tests, bien que j'aie ajouté serverless-mocha-plugin aux dépendances. Les tests devraient selon moi être écrits par rapport aux différentes fonctions dans lib/platforms/uva.js (et pas par rapport aux différentes fonctions serverless) et je pourrai en écrire la plupart mais je ne suis pas sûr quant à l'architecture actuelle du code et je préfère que tu la reviewes d'abord.
Il faudra aussi rajouter des indexes à la base de données, mais ça je peux m'en occuper.

Copy link
Member

@smadbe smadbe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super ! Tu t'en sors super bien avec les promesses et le SQL. Bon il faut encore que j'y passe un peu de temps pcq j'ai vrmt pas eu bcp de temps ces derniers jours.

}).then(
function(result) {
db.runSql(
'CREATE TABLE submissions (\n' +
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pq ne pas avoir utilisé db.createTable ? ce serait plus lisible et consistent.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parce que je ne pense pas qu'il supporte une primary key à plusieurs colonnes, en tout cas je n'ai pas trouvé.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si si, il faut juste le définir séparément la clé comme tu fais en SQL. Cfr http://sequel.jeremyevans.net/rdoc/files/doc/schema_modification_rdoc.html#label-primary_key

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah oui, je ne sais pas pq je t'ai envoyé sur le migrateur de Sequel ruby ;-)
Mais si il le supporte vu que je l'ai fait dans la première migration, table scores

var dbm;
var type;
var seed;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce que ça nous sert de stocker les détails des soumissions UVa? L'idée de base était d'uniformiser toutes les soumissions dans un format à nous et ainsi d'éviter de stocker des "détails inutiles" et de devoir faire des tables pour tous les formats supportés. Tout de façon il faut bien les interpréter à un moment, pourquoi ne pas les interpréter dès que possible et jeter l'info inutile ? Je ne dis pas que j'ai pensé à tout, c'est plutôt une réflexion...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je trouve le truc actuel plutôt minimaliste, surtout par rapport aux soumissions Codeforces (exemple: http://codeforces.com/api/user.status?handle=Fefer_Ivan&from=1&count=10). Les soumissions et les problèmes sont déjà uniformisés mais pour la table des utilisateurs UVa il n'y a pas le choix puisqu'il faut gérer la correspondance entre le username et l'id.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mais à un moment, tu devras bien "réduire" ça à qqchose de commun à notre plateforme. Stocker tout chez ne me semble pas nécessaire, mais tu veux essayer, vas-y.

).then(
function(result) {
db.runSql(
'CREATE TABLE problems (\n' +
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ce contenu était déjà prévu dans tasks

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pensais que tasks contiendrait les exercices assignés par les coaches. Et il n'y a pas de titres en français ni en néerlandais.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mmh oui le but est stocker tous les exercices qui ont de la valeur pour l'évaluation, donc pas tous les exercices mais bcp, triés par topic etc. Mais donc l'idée serait d'avoir des traductions fr/nl qui arrivent à un moment, mais pas nécessaire.

exports.up = function(db) {

return db.createTable('uva_users', {
uva_user_id: { type: 'serial', primaryKey: true },
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le premier attribut est un identifiant propre à nous ? Alors il faudrait plutôt utiliser comme clé la clé étrangère de users directement.
Si tu veux utiliser une table extérieure, il faut également virer les champs qui y étaient dédiés dans users.

Copy link
Member Author

@Technici4n Technici4n Jun 18, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour moi, la table users contient les utilisateurs "privilégiés" pour lesquels on veut calculer les scores. Les différents services ont des besoins différents, et essayer de tout caser dans une seule table m'a l'air très foireux. Que doit-il se passer en cas de requête sans username Codeforces d'un utilisateur qui n'avait pas encore fait de requête, par exemple ? Il faut aller chercher les soumissions sur UVa et ensuite, il faut les stocker où ? Et on fait quoi des champs Codeforces ?

Je ne sais pas si cet attribut a une grande utilité, je vais regarder si je dois le virer.

Copy link
Member Author

@Technici4n Technici4n Jun 18, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cela dit, je n'ai pas encore viré les champs inutiles des autres tables. Et je n'ai pas encore rajouté les indexes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne suis pas à 100% certains d'avoir compris ta question mais l'idée était de parser de temps en temps les updates UVa et Codeforces pour chaque utilisateur, d'insérer les avancements relevants pour nous (c'est-à-dire liés à une tâche définie dans topic_tasks ) dans activities. Et d'utiliser ça après pour faire la mise à jour continue des scores.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pensais stocker les infos de tous les utilisateurs qui ont sollicité la plateforme, et d'utiliser ces infos pour les quelques utilisateurs privilégiés (à savoir ceux qui participent à beCP) afin de mettre à jour leurs scores à intervalles réguliers.

Je me dis que la plateforme peut servir comme uniformisation des services uHunt, Codeforces, ... et qu'elle peut en plus nous permettre de calculer les scores relatifs aux différents contestants belges.
Uniformiser les soumissions pourrait me permettre d'intégrer plus de plateformes sur la page d'accueil de mon site sans difficultés (http://beoi-training.herokuapp.com/) et ainsi d'avoir plus de visibilité sur ce que les autres font. (Et si un jour quelqu'un veut faire un site web similaire il aura déjà de bons outils disponibles)

@smadbe
Copy link
Member

smadbe commented Jun 18, 2017

Pour ce qui est des tests, il faut essayer d'à la fois tester les services (au niveau des fonctions appelées par les handlers) ET des fonctions simples utilitaires (tests unitaires). Le challenge, c'est de s'en sortir avec les datasets de tests et les mocks des services comme UVa.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants