Проект за завършване на курса

  1. Трябва да ни изпратите имейл на fmi@ruby.bg с описание на идеята си за курсов проект, която сте си избрали, до 24.12.2015 г., 23:59:59. Ние няма да ви дадем списък от проекти, от които да си избирате. Харесайте си нещо, което ви се прави, или което ви е интересно и го започнете. Запознайте се с указанията за проекти.

    Най-важно за нас е да прекарате време с Ruby и написвайки нещо по-голямо, да пробвате нови неща и да научите нещо ново. Хубаво е да изберете нещо, което ви е интересно, което ви се пише, или което ви се струва предизвикателно и от което смятате, че ще научите много. Въпреки това, по-важно е да имате каквато и да е тема, одобрена от нас, за да може да започнете писането на код максимално рано.

    Идеалният имейл с тема за проект е сбит преразказ на спецификацията, която сте си поставили за цел, споменавайки технологиите и/или библиотеките, които планирате да използвате, защото сложността много зависи от тези неща. Допустимо е и да питате нещо, ако се колебаете много какво да изберете и имате нужда от насока. Важното е да ни пратите имейл по темата с нещото/нещата, които сте избрали в разумно време преди крайния срок, за да имаме време да ви дадем отговор и да нанесете корекции в изискванията си, ако има нужда от такива.

    Ако не сме получили имейл от вас до тази дата и час и ако искате кредити и оценка, ще трябва да дойдете с проект през септември. Вложете всичко от себе си, за да не стане така, че да изпратите този имейл вечерта на 24-ти.

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

  2. Отговорили сме на всички

    Отговорили сме на всички, които са ни изпратили имейл за курсов проект. Ако някой не вижда отговор, а е пратил имейл, моля да ни уведомите.

    Бележки и съвети

    Напомняме:

    • Прочетете ръководството за проекти.
    • Ако ще правите уеб проект, прочетете и ръководството ни за уеб-проекти (със Sinatra).
    • Ако използвате бази от данни, препоръчваме релационна такава, например SQLite3. Нея може да използвате директно, с gem-а sqlite3, който ви дава SQL интерфейс натам. Може да се огледате и за някакво ORM, например ActiveRecord. Вижте секцията за ORM в ръководството за Sinatra по-горе, там има повече информация по темата.
    • Направете прототип максимално рано и изхвърлете кода, но запазете наученото.
    • Публикуване на кода на проекта ви в GitHub е окей, макар и да е незадължително (но е задължително да ползвате Git или друга VCS локално).
    • Напълно окей е да задавате въпроси във форумите за проектите.
    • Ако правите конзолен интерфейс, хвърлете око на тези две библиотеки: https://github.com/ruby/curses и https://github.com/eclubb/ncurses-ruby.
    • Постарайте се да покриете максимална част от кода си с автоматизирани тестове.
    • Постарайте се да направите добро разделение между "логика" и "интерфейс", каквото и да значи "интерфейс" във вашия случай.

    Относно дизайна на кода ви:

    • Не се притеснявайте да добавяте класове. Десетки класове са нещо съвсем нормално. Един-два-три класа са съмнително малко.
    • Ако ползвате ActiveRecord или друго ORM, имайте предвид, че този ORM клас не е задължително същото като клас с бизнес логика. Може да имате ORM класове, които да са по два реда код и които да използвате само за съхранение на данни, а другата ви, бизнес логика, да е в обикновени Ruby класове. Това не е задъжително, но трябва да имате предвид, че често води до по-добър дизайн.
    • Напълно окей е да се ползва релационна база данни и/или ORM и в проекти, които не са уеб. ActiveRecord си работи чудесно с произволен Ruby код.
  3. Здравейте! В последните версии на bcrypt има проблем с windows. Както и да е, има известен workaround (последния коментар в темата от линка). Но това ме подсети да питам дали можете да предложите алтернативни gem-ове или пък някоя статия как да си направим сами криптирането.

  4. @Станимира, добър въпрос.

    bcrypt е дефакто стандарт за това, но в случай на инсталационен/компилационен проблем, който не успявате да решите, може да приложите само принципа, което е важното в случая – да хеширате паролите, за да не стоят в plain text. За хеширане може да се използват алгоритми като SHA-256 или нещо сродно, като за тях има и класове в стандартната библиотека. Отделете логиката за "хеширане" така, че да може лесно да се замени стратегията на хеширане и това ще е достатъчно.

    Като бонус, може да направите и "осоляване" (търсете за salted passwords).

Трябва да сте влезли в системата, за да може да отговаряте на теми.