GithubHelp home page GithubHelp logo

skanev / evans Goto Github PK

View Code? Open in Web Editor NEW
37.0 11.0 29.0 5.25 MB

The website of a bunch of courses in FMI

Ruby 70.27% JavaScript 0.05% CoffeeScript 0.57% CSS 0.44% HTML 0.86% Clojure 0.32% Go 0.31% Shell 0.29% Python 0.73% Gherkin 7.15% SCSS 4.75% Haml 14.25%

evans's Introduction

Evans

Build Status

The website for the "Programming with Ruby" course in the Faculty of Mathematics and Informatics of the Sofia University. That's a really long way to say "university stuff, all in Bulgarian".

Requirements

  • Ruby 2.0+
  • PostgreSQL, preferable 9.0+
  • Redis
  • ImageMagick or a compatible package (such as GraphicsMagic)

Development setup

It's a pretty standard Rails application, with the exception of site.yml. Steps are as follows:

  1. Clone the repository
  2. Run bundle install
  3. Create a config/database.yml based on config/database.yml.example
  4. Create a config/site.yml based on config/site.yml.example
  5. Set up the database with rake db:create:all db:migrate
  6. Profit!

If you want to get some test data, you can run:

$ rake fake

This will populate the database with random data and give you credentials to log in.

Running the tests

You can run the tests with rake. However, for completeness' sake:

  • rake spec cucumber runs the basic test suite
  • rake spec:languages:python runs the tests for the Python language
  • rake spec:languages runs the tests for all languages
  • rake spec spec:languages cucumber runs everything

evans's People

Contributors

aandr avatar alehander92 avatar andrewradev avatar bliof avatar elenadeneva92 avatar georgesg avatar georgyangelov avatar gsamokovarov avatar hahcho avatar hrvladev avatar ignisf avatar ironsmile avatar kalkov avatar kristiantashkov avatar kunev avatar mitio avatar mstoykov avatar nb avatar peternet1 avatar rosti avatar skanev avatar sophiapetrova avatar stoitsev avatar stormbreakerbg avatar vladimiroff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

evans's Issues

Предишни версии на предадени решения

Когато някой предаде обновено решение, старата версия не се пази. Така се губи контекста при коментарите след като решението бъде обновено.

Ще е хубаво, ако старите версии се пазят. Отделно, може коментарите да се показват на две части - такива, които са написани след като решението е станало публично и такива отпреди това. Вторите могат да имат връзка към версията, която коментират.

Раздел "Ръководства" или "Статии"

Добре би било да имаме възможност да поддържаме купчина ръководства/статии в Markdown, които да се обръщат към HTML и да се показват в съответен раздел (много подобно на ръководството за предаване на домашно).

Бих сложил това там, например – "Whitespace и редактори"

Представям си, че routing структурата ще е динамична, т.е. нещо от типа на /articles/foo-bar-baz и ще търси foo-bar-baz.md някъде – например, първо в app/articles/<language>/foo-bar-baz.md, след това в app/articles/common/foo-bar-baz.md.

Мнения?

en.yml → bg.yml

Ще бъде добре да прехвърлим българските текстове от en.yml в bg.yml и да променим I18n.default_locale = :bg.

Нотификация за коментари и форуми

Дали няма да е добра идея да се изпраща нотификация и за коментари по чужди решения и за теми във форума в които си писъл, разбира се с възможността да се изключва (особедно от към форума).

Страница за контакт/връзка

Вероятно е добра идея да добавим една страничка тип "контакти", през която да има бърз достъп до систематизиран списък с данни за връзка с екипа на курса.

Например:

[email protected]
@rbfmi
евентуално други URL-и (напр. fb page)

Допълнително, ще бъде добре да са ембеднати профилите на потребителите-администратори, за да се вижда добре кой е част от екипа и към кого могат да се обръщат студентите с различни въпроси.

Оценяване на задачи без тестове

Понякога даваме задачи, които не могат да бъдат оценени с unit test-ове (например ретроспекция или есе). Искаме тези задачи да могат да бъдат оценявани от администратор.

Базата данни поддържа това (solutions има колонка points). Има нужда от някаква вариация в задачите (брой тестове няма смисъл за "ръчни" задачи; задачите с тестове нямат нужда от интерфейс за оценяване). Също така, администратора трябва да има удобен интерфейс за оценяване.

Задачата dev:fetch е счупена

При опит да пусна тази задача, получавам следната грешка:

$ rake dev:fetch
No stage specified. Please specify one of: clojure13, golang13, python12, python13, ruby11, ruby12, ruby13 (e.g. `cap clojure13 -q')
Fetching the production database failed

Допълнително, защо пропускаме bundle exec пред cap?

/cc @skanev

Липсващ превод

Този ключ излиза при опит за логин с несъществуващ имейл, вместо грешка: not_found_in_database във fmi.py-bg.net:

Не мога да го намеря в кода на текущия master, но не знам вече кой курс от кой branch се деплойва.

/cc @vladimiroff

Автоматизиран деплой на лекциите

Това може би не е точно за този проект, но все пак —

Мисля, че е добра идея когато се push-не в master на публичното repo с лекциите, да се пуска cap ruby13 lectures:update в този проект, за да се обновят лекциите на сайта.

Мнения?

Ръчно даване на точки

Трябва да можем от профила на потребител да му дадем точка за нещо, което е направил. Докато пост във форума, юбер добро решение на домашно или сникерс от лекция ни вършат работа, то за pull request в GitHub нямаме адекватно решение.

Решение:

  1. Бутон "Дай точка", видим само за администратори.
  2. Попълва в textarea защо му е дадена тази точка.
  3. Опция да му се даде повече от една точка, ако е направил нещо голямо. Идеята ми е просто text field със стойност по подразбиране 1.

Изтриване на коментар

Добавяне на линк за изтриване (до този за редактиране) на коментарите под задачите и мненията във форума?

Бих опитал да го направя, но ми трябва време да се ориентирам в проекта :)

Guide за домашни за курса по Го

Директно бутнах в master guide-а, понеже сме шматки и го забравихме. Искаме го публичен колкото се може по-бързо. В случай, че съм омазал/забравил нещо, Кирил има отговорността да го коригира и напише нещо във форума, че е обновен.

Правя този issue вместо PR. Извинявам се за липсата на истински такъв. Коментари и поправки са добре дошли, нека да бъде затворен, в случай, че всичко с guide-а е ОК.

Проверка на задачи без SSH

В момента има нужда да се SSH-нем към сървъра за да проверим домашните. Освен досадно, това е и една от причините да се бавим с проверките (или поне някои от нас).

Може да решим проблема като добавим бутонче на сайта. За целта ни трябва queue, за което съм подбрал resque. За тази цел пък, на сървъра ни трябва (1) redis и (2) god/monit да рестартира нещата.

Функционалност за забравена парола

Вече има случаи, в които хора са си забравили паролата и се налага ръчно да ги "оправяме".

Можем да expose-нем вече съществуващата функционалност на Devise за целта.

Дребен проблем с плурализация в решенията на задача

На страницата с решения на задача, има текст, показващ колко версии на решението има и колко коментара над тях, случаите с по една версия/един коментар не са правилно обработени и се показват текстове като тези:

История (2 версии и 1 коментара)
История (1 версии и 0 коментара)

Предизвикателства

Искаме да въведем система, подобна на задачите, но с по-различна идея. Накратко:

  • Редовно (~3 пъти седмично) публикуваме кратки (5-10 реда решение) задачи на сайта.
  • Задачите не са задължителни.
  • Студентите имат Х време да предадат решение.
  • Всички, които са предали работещо решение получават по една точка.
  • Няколко (3?) от най-добрите решение получават допълнителна бонус точка.
  • Подобно на задачите, предизвикателствата имат тестове
  • Преподавателите могат да редактират броя точки (ако има пропуск в теста, могат да вземат точка от студент)
  • Студентите не виждат решенията си един на друг преди крайния срок.

Последната механика не ми харесва много - иска ми се всеки да вижда предишното решение, за да може да итерира над него. Това обаче поставя въпроса кой получава точки (ако всеки може да копира първото работещо решение, тогава не е справедливо). Алтернативата е ние да преценяваме кой да взема точки.

Bug при хронологията на коментарите

Под решението на тази задача коментарите не излизат в правилния хронологичен ред. Може би има връзка с това, че Стефан е администратор?

Първи коментар: Публикувано преди около 18 часа
Втори коментар: Публикувано преди около 6 часа
Трети коментар: Публикувано преди около 17 часа

Tip of the day

"Tip of the day" е работно име. Може би "съвети"?.

Първо, преподавателите трябва да могат да публикуват кратки съвети (Markdown форматирани) от време на време. Тези съвети трябва да са лесно достъпни за студентите. Всеки съвет е bite-sized (1-2 абзаца) и е нещо конкретно.

Второ, студентите трябва да могат да предлагат такива съвети. Добрите биват възнаградени с бонус точки.

Премахване на интервали около потребителския вход при записване и регистрация

Имам предвид strip-ване на user input-а тук: /sign_ups/new и тук /registrations/new. Опарих се вече от един неволно копиран интервал в края на името.

Колебая се за това, но мисля, че би могло да спести малко главоболия на нас и на студентите.

Смяната на парола те log out-ва

Стъпки за пресъздаване:

  1. Отвори редакция на профил
  2. Въведи нова парола и потвърждение
  3. Натисни "Запази"

Очаквано: Redirect към dashboard

Всъщност: Загубих си сесията и видях "нямате достъп до тази страница"

Това ми се случи на fmi.ruby.bg под Chrome. Не съм го тествал повторно.

Профил на потребител

Профила на всеки потребител трябва да е пълен с информация. Трябва да показваме точки до момента, откъде идват, както и важни неща съврзани с участието му в курса:

  • Брой ваучър кодове
  • Постове, за които е получил бонус точки
  • Коментари на решения
  • Линкове към решения на задачи

...и ред други неща.

Имахме част от тази функционалност, но я премахнах в 352a4da

Проверка за валиден синтаксис при качване на решение

Когато студенти се опитат да качат код, в който има синтактична грешка, това води до възникване на изключение на сървъра. Изключението излиза нейде из skeptic (само за протокола – undefined method [] for nil:NilClass).

Най-добре би било да показваме валидационна грешка, ако синтаксисът на изпращания код не е валиден. При всяко положение, не трябва да гърмим с HTTP 500.

UPDATE: Нещо, което трябва да се има предвид е, че тази проверка трябва да става от executable, пътят до който се задава в конфигурацията (site.yml) поради две причини – първо, сайтът е multilingual и това трябва да работи и за Clojure, Go, Python; второ, дори за Ruby, сайтът се задвижва от Ruby 2.0.0 stable, докато студентите трябва да могат да предават Ruby 2.1.0 код.

Страница с "Екип"

Отделна страница, на която да се вижда списък с преподаватели/екипа зад курса. Това са всички потребители с флаг admin: true. Много подобна на /users, но да има текстче над листинга с хора, което да казва какви са тези люде и да дава разни данни за контакт, като:

  • Rails.configuration.course_email

В страницата с потребители да не се появяват хора от екипа.

Може би, да добавим опционално нещо в site.yml за Twitter акаунт и Facebook група за това издание на курса?

Експлицитни версии на зависимостите

По новите версии на Draper използват Draper::Decorator, вместо Draper::Base като основен клас, което накара страниците, които ползват декораторите да гърмят. Ако беше специфицирана есклпицитна версия на draper в Gemfile, това нямаше да се случи.

@skanev Може ли да закачиш версиите на пакетите от баш (production) сървъра на Gemfile, за да може всички да имаме единна среда?

Анкети

Ще е хубаво админите да могат да дефинират анкети, на които студентите да отговарят. Ще реши няколко проблема, като входен тест, сондиране на мнение по средата на семестъра и получаване на фийдбек по разнообразни теми.

Хубаво е да се помисли дали отговарянето/неотговарянето на анкети ще имат някакъв ефект върху точките.

Чупливи качвачи

В началото си мислех, че проблема е във мен, мила, обаче... (на втора машина ми го правиш)

...

Failures:

  1) PointsBreakdown assigns a point to users with photos
     Failure/Error: user = create :user_with_photo
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/models/points_breakdown_spec.rb:114:in `block (2 levels) in <top (required)>'

  2) User pagination puts users with photos before users without photos
     Failure/Error: first  = create :user_with_photo
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/models/user_spec.rb:41:in `block (3 levels) in <top (required)>'

  3) PhotoUploader creates a 150x150 thumbnail
     Failure/Error: @uploader.store! File.open(fixture_file('beholder.jpg'))
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/uploaders/photo_uploader_spec.rb:10:in `block (2 levels) in <top (required)>'

  4) PhotoUploader creates a 80x80 thumbnail
     Failure/Error: @uploader.store! File.open(fixture_file('beholder.jpg'))
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/uploaders/photo_uploader_spec.rb:10:in `block (2 levels) in <top (required)>'

  5) PhotoUploader creates a 50x50 thumbnail
     Failure/Error: @uploader.store! File.open(fixture_file('beholder.jpg'))
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/uploaders/photo_uploader_spec.rb:10:in `block (2 levels) in <top (required)>'

  6) PhotoUploader creates a 30x30 thumbnail
     Failure/Error: @uploader.store! File.open(fixture_file('beholder.jpg'))
     Errno::ENOENT:
       No such file or directory - identify
     # ./app/uploaders/photo_uploader.rb:24:in `convert_to_jpeg'
     # ./spec/uploaders/photo_uploader_spec.rb:10:in `block (2 levels) in <top (required)>'

Finished in 14.53 seconds
571 examples, 6 failures

...

Т.е. имате ли на идея, защо ми се чупи по този начин, хем на Linux машина, хем на Mac-a? Интересното е, че при вас и на Travis тестовете минават.

No database seeding with initial data

Трудно е човек да си подкара приложението за първи път, понеже няма seed, който да направи поне един потребител, с който да може да се започне. Една wiki страничка също би свършила работа.

Draper за contribution-и?

Мненията във форумите и коментарите по решенията изглеждат по сходен начин. Допълнително, и двете имат звездички.

Може би Draper предлага добро решение на този проблем.

Някой иска ли да разгледа?

Вкарване на точки от проектите

Това в момента го няма като функционалност, а само то липсва, за да имаме пълна картина за броя точки на студентите. Дори бихме могли да им даваме оценка автоматично по този начин, макар че не знам доколко последното е добра идея.

Известията за нов коментар неправилно екранират HTML

Необходимо е или да се избегне екранацията на специални HTML-символи в plain-text email-ите, известяващи нов коментар, или да се смени форматът на тези email-и на HTML.

Добре е и да уточним в текста на съобщението да не правят Reply на нотификационния email, понеже в момента не ги обработваме автоматично тези отговори.

Номера на редове в блоковете с код

Евентуално да може да се контролира с някакъв атрибут наличието/отсъствието на номерация на редовете.

По възможност да не пречи на copy/paste на кода.

Множество Sidekiq worker инстанции

В момента всеки deploy на сайт на курс от текущия codebase ще пусне свое копие на Sidekiq worker. Те са настроени да работят с една и съща опашка (като име) и това вероятно ще създаде проблеми. Подозирам, че ако всеки deploy/сайт на издание на курс работи с име на опашката, което съвпада с изданието на курса (напр. clojure_2013, python_2013, ...) нещата ще са окей.

Още, би било добре да можем да маркираме дадено издание на курс като "завършило" и това да води до разни промени в сайта, една от които може да е да не се пуска повече Sidekiq worker за този deployment.

Като допълнителна бележка, такива scope-вания спрямо името на курса вероятно ще трябва да има и на други места (примерно, CSS?).

Значка, отличаваща аватарите на преподаватели от тези на екипа

Аз си мислех за някаква жълтеникава рамка около снимката, но Генади предложи нещо като badge, което ми харесва повече. Ако има текст, може би трябва да е нещо от рода на "Екип" или "Преподавател".

Това трябва да се вижда навсякъде, където излиза снимката на човека, включително:

  • Форумите
  • Коментари по решения, предизвикателства и прочее
  • Списъкът в страница "Екип" (вж. #83)
  • Профил на потребителя в /users/123

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.