Кирил Митов
Съдържание
- Въведение
- Теми
- Тема 1 – RoR, CSV
- Домашно 1 върху тема 1
- Предадени работи от Домашно 1 върху тема 1
- Домашно 2 върху Тема 1 – 16 октомври 2017
- Домашно 3 върху Тема 1 – 22 октомври 2017
- Тема 2 – RoR, RSpec, JSON, API, Web, XML
- Домашно 1 върху тема 2
- Домашно 2 върху тема 2
- Домашно 3 върху тема 2
- Тема 3 – Комуникация между процеси – Александър Спасов
- Домашно 1 по Тема 3
- Тема 1 – RoR, CSV
Въведение
Оценяване
Домашните за важни. Контролните също.
Теми на курса
Първоначалния план е да разделим курса на конкретни малки теми от по 4 -6 седмици всяка.
Дневник оценяване
Наличен тук –https://docs.google.com/spreadsheets/d/1YJ3g2VSMXagB047JMI5_5XC-5scYaCthjw7dX-HZSC0/edit#gid=0
План
Работим с много технологии, но общата цел на курс е разработка на качествен софтуер, следване на процеси, тестване.
- Запознаване с курса и изискванията към курса, както и с Ръководството за академична честност в ТУЕС.
Теми
Тема 1 – RoR, CSV
Обрабокта на финансови документи. Да се върви по ledger и да се намират приходи, разходи, баланс. Да се вадят статистики. Целта е да се усвои работата с CSV документи. Приложенията да бъдат web и да са качени на heroku.
- Да се уточнят нужните понятия относно „пари“ и финансова обработка на документите
- Инсталиране на Ruby и няколко прости примера с Ruby
- Инсталиране на Rails и няколко прости примера с Rails
- Да се мине през ресурсите за Ruby със следните задължителни
- Да се разработят за домашно и предадът програми за решавана на прости математически задачи с езика Руби. Програмата да приема аргументи от командния ред и да връща резултат.
- Да ре мине през ресурсите за Rails със следните задължителни
- Качване ан приложения върху Heroku.
- Да се реализират набор от задачи върху CSV документи
- Качват се CSV документът и се отговаря на въпросът
- каква е сумата в колона Х
- колко за записите в колана У отговарящи на условие в колона Z
- да се намери интервалът от 30 последователни дни в които нетният приход да е най-голям
- да се направи линейна регресия на данните и да се намерят съответните уравнения.
- Качват се CSV документът и се отговаря на въпросът
Домашно 1 върху тема 1
- Краен срок – 10 октомври 2017 23:59:59
- Формата за предаване е https://goo.gl/forms/i7FJzy2YtiHl0VkA3
- Да се разработи приложение, което да се качи на heroku и да е налично на даден url адрес
- Приложението трябва да е разработено с Ruby On Rails
- Приложението да се качи в github репо
- Да поддържа следните функционалности
- При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат сумата в първата колона на документа. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil. Прочете за метода protect_from_forgery with: :null_sessions
- curl -F „file=@/home/elsyser/file.csv“ http://yourherokuapp/sums
- curl –form „file=@/home/elsyser/file.csv“ http://yourherokuapp/sums
- При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат сумата в колона на записите в колона 2 на документа, за които е вярно, стойността в колона 3 е нечетна. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil.
- curl -F „file=@/home/elsyser/file.csv“ http://example.com/filters
- curl –form „file=@/home/elsyser/file.csv“ http://example.com/filters
- При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат най-голяма сума от 30 последователни записа в колона 1. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil.
- curl -F „file=@/home/elsyser/file.csv“ http://example.com/intervals
- curl –form „file=@/home/elsyser/file.csv“ http://example.com/intervals
- При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върнат като резултат стойностите на параметрите а и b, за линейно уравнение описващо данните в колона 1. Параметрите се получават, чрез линейна регресия. Двете числа са закръглени до 6 символа след запетаята и са разделени със запетая.
- curl -F „file=@/home/elsyser/file.csv“ http://example.com/lin_regressions
- curl –form „file=@/home/elsyser/file.csv“ http://example.com/lin_regressions
- При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат сумата в първата колона на документа. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil. Прочете за метода protect_from_forgery with: :null_sessions
Предадени работи от Домашно 1 върху тема 1
Домашно 2 върху Тема 1 – 16 октомври 2017
- Краен срок 17 октомври 2017 23:59:59
- Да се разработи програма на руби, която да проверява домашните предадени в домашно 1.
- Програмата на руби да се именова като Клас_Номер_ПървоИме_Фамилия.rb и да се качи в главната директория в хранилището software_engineering2017. Всички необходими за работата на програмата .csv файлове да се качат в същата директория и да са с име започващо с Клас_Номер_ПървоИме_Фамилия.
- Програмата трябва да може да се изпълнява чрез
-
ruby mp.rb csv_file
- в който mp.rb е разработената програма
- csv_file е файлът съдържащ предадените линкове към работещи домашни – https://docs.google.com/spreadsheets/d/178NEJq5Vh4UBxlokOrfK53MxTmMpS3bq-y4m1cryUVg/edit#gid=446685093
-
- Приложението трябва да изкарва на екрана списък от редове. На всеки ред, разделени със запетаи, трябва да са изписани класът, номерът на ученика, неговите имена и резултатът от проверката на домашното. Резултатът е 0 или 1.
- Резултатът се сформира като се провери дали каченото приложение в домашно 1 отговаря правилно на 4-рите заявки, на които трябва да отговаря. Само и единствено ако приложението отговаря правилно на четирите заявки, се получава резултат 1.
Домашно 3 върху Тема 1 – 22 октомври 2017
- Краен срок 22 октомври 2017 23:59:59
- Да се промени разработената в домашно 2 програма така че да приема от комнадния ред като първи аргумент csv-то съдържащо връзките към приложенията и като втори аргумент csv-то, с което да се извърши проверката
- Програмата трябва да може да се изпълнява чрез
-
ruby mp.rb csv_file fixture.csv
-
- Файлът fixture.csv съдържа хедър. Хедърът е от първия ред. В колоната с индекс 0 трябва да се съдържа резултатът, който очакваме да получим при изпълнението то точка 1 от домашно 1. В колоната с индекс 1 трябва да се съдържа резултатът, който очакваме да получим при изпълнението то точка 2 от домашно 1. Аналогична за колоните 2 и 3.
- Приложението трябва да изкарва на екрана списък от редове. На всеки ред, разделени със запетаи, трябва да са изписани класът, номерът на ученика, неговите имена и резултатът от проверката на домашното. Резултатът е 0 или 1.
- Резултатът се сформира като се провери дали каченото приложение в домашно 1 отговаря правилно на 4-рите заявки, на които трябва да отговаря. Само и единствено ако приложението отговаря правилно на четирите заявки, се получава резултат 1.
Тема 2 – RoR, RSpec, JSON, API, Web, XML
Да се разработи приложение за скрити, криптирани съобщения подобно на https://privnote.com/. Да се разработят тестове за него.
- Работа с модели, бази и съхранения.
- Разработка на RSpec тестове върху функционалността.
- Генериране на сигурно URL – криптиране, хеш, случайност. Съхранение на данните сигурно.
- Разработка на JSON API за приложението – възможност за създаване на съобщение чрез curl заявка. Работа с JSON документи.
- Да има възможност при плащане, човек да получи допълнителни функционалността от приложението. Плащането да е с PayPal.
Домашно 1 върху тема 2
- Краен срок 29 октомври 2017г, 23:59:59
- Да се разработи приложение качено на heroku и в хранилище в github
- Да се предаде връзка към приложението на heroku и връзка към хранилището в github. Двете връзка се изписват една след друга, всяка на нов ред във файл наречен Клас_Номер_ПървоИме_Фамилия.txt, където съответо клас, номер, първо име и фамилия са за конкретния ученик.
- Файлът да се предаде в хранилището software_engineering2017 в директорията chapter2/homework1/.
- Приложението да предоставя следната функционалност
- Отива се на началната страница на приложението, където има бутон и текстово поле.
- В текстовото поле се въвежда текст и се натиска бутонът.
- След натискане на бутона потребителят се пренасочва към страница на която е изписан един url адрес.
- Потребителят може да копира този url адрес и да отвори нова страница в браузъра. След като я отвори трябва да може да види съобщението написано в точка B.
Домашно 2 върху тема 2
- Краен срок 06 ноември 2017г, 02:00:00
- Към приложението от Домашно 1, тема 2 да се добави функционалност за приемане на пост заявки с данни предавани в JSON и XML формат. Приложението да се качин в същото хранилище и на същия heroku адрес както Домашно 1, Тема 2
- JSON функционалност
- приложението да може да пиема POST заявки на адрес
- за нечетните номера в класа адресът е /notes/api
- за четните номера в класа адресът е /messages/api
- Заявките са от вида
curl -H "Content-Type: application/json" -X POST -d '{"message":"the value of the message"}' http://appdomainurl
- Като резултат от заявката да се върне url адресът на който може да се достъпи приложението в JSON формат с ключ url и стойност адресът на който да се достъпи приложението
-
'{"url":"the url address of the message"}'
-
- приложението да може да пиема POST заявки на адрес
- XML функционалност
- приложението да може да пиема POST заявки на адрес
- за нечетните номера в класа адресът е /notes/api
- за четните номера в класа адресът е /messages/api
- Заявките са от вида
curl -H "Content-Type: text/xml" -X POST -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message>the message value</message>' http://appdomain/api/login
- Като резултат от заявката да се върне резултат в ВАЛИДЕН XML формат. Резултатът да съдържа нод <url> със съдържание адресът, на който да може да се види създаденото съобщение. Пример <url>the url of the message</url>
- приложението да може да пиема POST заявки на адрес
Домашно 3 върху тема 2
Да се разработят rspec тестове за клас, конвертиращ римски от десетична в римска бройна система и обратно.
Сигнатурата на клас е следната
class RomeConverter
def to_rome int_arg
end
def to_dec string_arg
end
end
Да се разработи един RSpec, който да се казва RomeConverterSpec. Да се намира във файл spec/rome_converter_spec.rb. Да търси класът RomeConverter от ../lib
Всичко това да е в ново хранилище. Пътят към хранилището да се предаде тук до 02:00 на 06 декември. Ще бъде качена малко по-късно форма за предаване.
Целта на спековете е да проверят за правилното поведение на RomeConverter. Ако един RomeConverter не се държи правилно, трябва спекът да го покаже.
Форма за предаване https://goo.gl/forms/76wMDZ8XwzppipMS2
Домашно 4 върху тема 2
0. Краен срок – 13 декември 02:00. Формата е https://docs.google.com/forms/d/e/1FAIpQLSehsTCp-ZmRNvzSrhDRokPezywPzrIWAQisaDoKxScOPhRAog/viewform?usp=sf_link
- Да се разработи клас имплементираш RSA криптиране, следваща RSA алгоритъм. Класът трябва да има следната сигнатура и поведение
class RSA def initialize n, e, d #initializes this instance of RSA with a n,e and d variables of type int. 'n','e' are the public key and 'd' is the private one. This n,e,d should be used when encrypting and decrypting the message end def n #returns the value of 'n' passed in the initialize end def e #returns the value of 'e' passed in the initialize end def d #returns the value of 'd' passed in the initialize end def new_key #generates a new 'n','e' and 'd' values following the RSA algorithm. Returns a new array of three elements where the first element is 'n', the second is 'e' and the third is 'd'. Each time it is called a new key must be returned. end def encrypt message #encrypts the message passed. The message is of type string. Encrypts each symbol of this string by using its ASCII number representation and returns the encrypted message. end def decrypt message #decrypts the message passed. The message is of type string. Decrypts each symbol of this string Encrypts each symbol of this string by using its ASCII number representationand returns the decrypted message. end end
2. Да се разработи spec с име RSA_spec.rb, който да проверява поведението на класа RSA
3. Да се предадът двата класа. Спекът е в директорията spec докато RSA.rb е в директорията lib.
Домашно 5 върху тема 2
- Краен срок 20 Декември 2017 02:00
- Да се изгради web приложение предоставящо възможност да се използва RSA класът.
- Приложението да е качено на хероку.
- Да се даде линк към приложението и линк към репото в тази форма – https://docs.google.com/forms/d/e/1FAIpQLScxYo6qXgjmYVQqMREKMVcD2ERdXxME_Dgc_iMG7BK7LS2npg/viewform?usp=sf_link
- Приложението да отговаря на следните REST заявки
POST /rsas - създава нов ключ и връща id на този ключ POST /rsas - създава нов ключ с конкретните стойности за n, e, d. Връзка id-то params: n, e, d GET /rsas/:id - връща json представяне на ключа с идентификатор id. JSON-а съдържа три ключа n, e, d със стойности на съответните параметри POST /rsas/:id/encrypt_messages/ - криптира съобщението подадено с параметъра и създава ново криптирано съобщение. Връща идентификатор params: message GET /rsas/:id/encrypt_messages/:id - връща криптирано съобщение с дадения идентификатор. JSON съдържа един ключ message със стойност съобщението POST /rsas/:id/decrypt_messages/ - декриптира съобщението подадено с параметър и създава ново дикриптирано съобщение на база параметъра. params: message
Домашно 6 върху тема 2
- Краен срок 15 Януари 2017 02:00
- Да се разработят тестове за контролерите на приложението написано в Домашно 5
- Приложението да е качено на хероку.
- Да се даде линк към приложението и линк към репото в тази форма – https://docs.google.com/forms/d/e/1FAIpQLScxYo6qXgjmYVQqMREKMVcD2ERdXxME_Dgc_iMG7BK7LS2npg/viewform?usp=sf_link
Упражениен тема 2, RSpec и Rails 10 Януари 2017
От б клас
1 – нов проект rails _4.2.8_ new rsa_some
2 – добавяме rspec-rails към gemfile
3 – bundle install
4 – отиваме на https://github.com/rspec/rspec-rails
5 – rails generate rspec:install
6 – mkdir spec/models
7 – subl spec/models/rsa_spec.rb
8 – съдържане на rsa_spec.rb
RSpec.describe RSA do
it „does something“ do
expect(true).to eq true
end
end
9 – subl app/models/rsa.rb
class RSA
end
10 – rspec
11 – добавяме require_relative ‘../../app/models/rsa’, но не трябва
12 – в .rspec файл трябва да имаме ред –require rails_helper
13 – пускаме rake db:migrate защото имахме Warning
14 – добавяме rspec
it „encrypts“ do
r = RSA.new
expect(r.encrypt(„blabla“)).to eq „qwert“
end
15 – добавяме имплентация
class RSA
def encrypt message
„qwert“
end
end
16 – смятаме че имаме завършен RSA клас
17 – mkdir spec/controllers
18 – създаваме нов спек spec/controllers/rsas_controller_spec.rb
RSpec.describe RsasController do
it „gets by id“ do
get :show, id: 1
expect(response.body).to eq
„the content“
end
end
19 – създаваме нов контролер app/controllers/rsas_controller.rb
class RsasController < ApplicationController
end
20 – добавяме в config/routes resources :rsas, only: [:show]
21 – mkdir app/views/rsas/
От А клас
1 – rails new rsa1
2 – add to bunlder file of „rspec-rails“
3 – bundle install
4 – rails generate rspec:install
5 – mkdir spec/models
6 – subl spec/models/rsa_spec.rb
RSpec.describe Rsa do
it „encrypts“ do
expect(true).to eq true
end
end
7 – subl app/models/rsa.rb
class Rsa
end
8 – add –require rails_helper to .rspec
9 – rails db:migrate
10 – subl spec/models/rsa_spec.rb
RSpec.describe Rsa do
it „encrypts“ do
r = Rsa.new
expect(r.encrypt(„blabla“)).to eq „qwer“
end
end
11 – mkdir spec/conrollers
12 – subl spec/conrollers/rsas_controller_spec.rb
13 –
RSpec.describe RsasController do
it „shows an rsa“ do
get :show, params: {id: 1}
expect(response).to render_template :show
end
end
14 – subl app/controllers/rsas_controller.rb
class RsasController < ApplicationController
end
15 – add „type: :controller“ to RsasControllerSpec
16 – subl config/routes.rb
resources :rsas, only: [:show]
17 – mkdir app/views/rsas
18 – subl app/views/rsas/show.html.erb
19 – new spec
it „creates a new rsa“ do
post :create, params: {n: 5, e:7, d: 3}
expect(Rsa.count).to eq 1
end
20 – extend Rsa with < ActiveRecord::Base
21 -rails g migration create_rsas
db/migrate/20180110121127_create_rsas.rb
Тема 3 – Комуникация между процеси – Александър Спасов
Домашно 1 по Тема 3
Домашните са зададени от Александър Спасов. Предаването е по мейл към него до края на деня на 10 декември 2017.
Тема .. – JavaScript, Ajax, Angular 2, Jasmine
Да се разработи JavaScript интерфес, който работи с API-то предоставено Тема 2.
Тема ..- JavaScript, Canvas и векторна графика
Да се разработи прост редактор на векторна графика чрез Three.js, в който да се чертаят прости фигури. Да се разработи приложение за съхранение на тези прости фигури в SVG формат на сървър качен на Heroku.
Тема .. – node.js
Тема 4 JavaScript
canvas_experiment
some
Домашно 1 върху тема 4
По подобие на разработения в клас пример за ниво от JavaScript игра, да се разработи ново ниво. Да се качи в хранилището на предмета в директорията c5_javascript. Нивото да се реализира в един файл. Името на файла да е клас_номер_име_фамилия.js
Да се качи до 2018-01-24 02:00
Тема 4 JavaScript
Динамично добавяне на елементи към HTML
var newCanvas = document.createElement(„canvas“);
newCanvas.id = „heart1“;
newCanvas.width = „300“;
newCanvas.height = „300“;
document.body.appendChild(newCanvas);
var newCanvas = document.createElement(„canvas“);
newCanvas.id = „heart2“;
newCanvas.width = „300“;
newCanvas.height = „300“;
document.body.appendChild(newCanvas);
var newCanvas = document.createElement(„canvas“);
newCanvas.id = „heart3“;
newCanvas.width = „300“;
newCanvas.height = „300“;
document.body.appendChild(newCanvas);
var newCanvas = document.createElement(„canvas“);
newCanvas.id = „points“;
newCanvas.width = „80“;
newCanvas.height = „80“;
document.body.appendChild(newCanvas);