Технология на програмирането 2017-2018

Кирил Митов

Въведение

Оценяване

Домашните за важни. Контролните също.

Теми на курса

Първоначалния план е да разделим курса на конкретни малки теми от по 4 -6 седмици всяка.

Дневник оценяване

Наличен тук –https://docs.google.com/spreadsheets/d/1YJ3g2VSMXagB047JMI5_5XC-5scYaCthjw7dX-HZSC0/edit#gid=0

План

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

  1. Запознаване с курса и изискванията към курса, както и с Ръководството за академична честност в ТУЕС.

Тема 1 – RoR, CSV

Обрабокта на финансови документи. Да се върви по ledger и да се намират приходи, разходи, баланс. Да се вадят статистики. Целта е да се усвои работата с CSV документи. Приложенията да бъдат web и да са качени на heroku.

  • Да се уточнят нужните понятия относно „пари“ и финансова обработка на документите
  1. Инсталиране на Ruby и няколко прости примера с Ruby
  2. Инсталиране на Rails  и няколко прости примера с Rails
  3. Да се мине през ресурсите за Ruby със следните задължителни
    1. Beginners guide Ruby
    2. Try Ruby
    3. Ruby in Twenty Minutes
    4. Програмиране с Руби
  4. Да се разработят за домашно и предадът програми за решавана на прости математически задачи с езика Руби. Програмата да приема аргументи от командния ред и да връща резултат.
  5. Да ре мине през ресурсите за Rails със следните задължителни
    1. http://guides.rubyonrails.org/getting_started.html
    2. https://scotch.io/tutorials/build-a-restful-json-api-with-rails-5-part-one
  6. Качване ан приложения върху Heroku.
  7. Да се реализират набор от задачи върху CSV документи
    1. Качват се CSV документът и се отговаря на въпросът
      1. каква е сумата в колона Х
      2. колко за записите в колана У отговарящи на условие в колона Z
      3. да се намери интервалът от 30 последователни дни в които нетният приход да е най-голям
      4. да се направи линейна регресия на данните и да се намерят съответните уравнения.

Домашно 1 върху тема 1

  1. Краен срок – 10 октомври 2017 23:59:59
  2. Формата за предаване е https://goo.gl/forms/i7FJzy2YtiHl0VkA3
  3. Да се разработи приложение, което да се качи на heroku и да е налично на даден url адрес
  4. Приложението трябва да е разработено с Ruby On Rails
  5. Приложението да се качи в github репо
  6. Да поддържа следните функционалности
    1. При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат сумата в първата колона на документа. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil. Прочете за метода protect_from_forgery with: :null_sessions
      1. curl -F „file=@/home/elsyser/file.csv“ http://yourherokuapp/sums
      2. curl –form „file=@/home/elsyser/file.csv“ http://yourherokuapp/sums
    2. При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат сумата в колона на записите в колона 2 на документа, за които е вярно, стойността в колона 3 е нечетна. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil.
      1. curl -F „file=@/home/elsyser/file.csv“ http://example.com/filters
      2. curl –form „file=@/home/elsyser/file.csv“ http://example.com/filters
    3. При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върне като резултат най-голяма сума от 30 последователни записа в колона 1. Резултатът е просто число до втория знак след запетаята. Ако резултатът е цяло число се връща като число с десетична запетая и две нули. Резултатът се закръглява със ceil.
      1. curl -F „file=@/home/elsyser/file.csv“ http://example.com/intervals
      2. curl –form „file=@/home/elsyser/file.csv“ http://example.com/intervals
    4. При изпращане на следната curl POST заявка с прикачен CSV документ трябва да се върнат като резултат стойностите на параметрите а и b, за линейно уравнение описващо данните в колона 1. Параметрите се получават, чрез линейна регресия. Двете числа са закръглени до 6 символа след запетаята и са разделени със запетая.
      1. curl -F „file=@/home/elsyser/file.csv“ http://example.com/lin_regressions
      2. curl –form „file=@/home/elsyser/file.csv“ http://example.com/lin_regressions

Предадени работи от Домашно 1 върху тема 1

https://docs.google.com/spreadsheets/d/178NEJq5Vh4UBxlokOrfK53MxTmMpS3bq-y4m1cryUVg/edit#gid=446685093

Домашно 2 върху Тема 1 – 16 октомври 2017

  1. Краен срок 17 октомври 2017 23:59:59
  2. Да се разработи програма на руби, която да проверява домашните предадени в домашно 1.
  3. Програмата на руби да се именова като Клас_Номер_ПървоИме_Фамилия.rb и да се качи в главната директория в хранилището software_engineering2017. Всички необходими за работата на програмата .csv файлове да се качат в същата директория и да са с име започващо с Клас_Номер_ПървоИме_Фамилия.
  4. Програмата трябва да може да се изпълнява чрез
    1. ruby mp.rb csv_file

    2. в който mp.rb е разработената програма
    3. csv_file е файлът съдържащ предадените линкове към работещи домашни – https://docs.google.com/spreadsheets/d/178NEJq5Vh4UBxlokOrfK53MxTmMpS3bq-y4m1cryUVg/edit#gid=446685093
  5. Приложението трябва да изкарва на екрана списък от редове. На всеки ред, разделени със запетаи, трябва да са изписани класът, номерът на ученика, неговите имена и резултатът от проверката на домашното. Резултатът е 0 или 1.
  6. Резултатът се сформира като се провери дали каченото приложение в домашно 1 отговаря правилно на 4-рите заявки, на които трябва да отговаря. Само и единствено ако приложението отговаря правилно на четирите заявки, се получава резултат 1.

Домашно 3 върху Тема 1 – 22 октомври 2017

  1. Краен срок 22 октомври 2017 23:59:59
  2. Да се промени разработената в домашно 2 програма така че да приема от комнадния ред като първи аргумент csv-то съдържащо връзките към приложенията и като втори аргумент csv-то, с което да се извърши проверката
  3. Програмата трябва да може да се изпълнява чрез
    1. ruby mp.rb csv_file fixture.csv

  4. Файлът fixture.csv съдържа хедър. Хедърът е от първия ред. В колоната с индекс 0 трябва да се съдържа резултатът, който очакваме да получим при изпълнението то точка 1 от домашно 1. В колоната с индекс 1 трябва да се съдържа резултатът, който очакваме да получим при изпълнението то точка 2 от домашно 1. Аналогична за колоните 2 и 3.
  5. Приложението трябва да изкарва на екрана списък от редове. На всеки ред, разделени със запетаи, трябва да са изписани класът, номерът на ученика, неговите имена и резултатът от проверката на домашното. Резултатът е 0 или 1.
  6. Резултатът се сформира като се провери дали каченото приложение в домашно 1 отговаря правилно на 4-рите заявки, на които трябва да отговаря. Само и единствено ако приложението отговаря правилно на четирите заявки, се получава резултат 1.

Тема 2 – RoR, RSpec, JSON, API, Web, XML

Да се разработи приложение за скрити, криптирани съобщения подобно на https://privnote.com/. Да се разработят тестове за него.

  1. Работа с модели, бази и съхранения.
  2. Разработка на RSpec тестове върху функционалността.
  3. Генериране на сигурно URL – криптиране, хеш, случайност. Съхранение на данните сигурно.
  4. Разработка на JSON API за приложението – възможност за създаване на съобщение чрез curl заявка. Работа с JSON документи.
  5. Да има възможност при плащане, човек да получи допълнителни функционалността от приложението. Плащането да е с PayPal.

Домашно 1 върху тема 2

  1. Краен срок 29 октомври 2017г, 23:59:59
  2. Да се разработи приложение качено на heroku и в хранилище в github
  3. Да се предаде връзка към приложението на heroku и връзка към хранилището в github. Двете връзка се изписват една след друга, всяка на нов ред във файл наречен Клас_Номер_ПървоИме_Фамилия.txt, където съответо клас, номер, първо име и фамилия са за конкретния ученик.
  4. Файлът да се предаде в хранилището software_engineering2017 в директорията chapter2/homework1/.
  5. Приложението да предоставя следната функционалност
    1. Отива се на началната страница на приложението, където има бутон и текстово поле.
    2. В текстовото поле се въвежда текст и се натиска бутонът.
    3. След натискане на бутона потребителят се пренасочва към страница на която е изписан един url адрес.
    4. Потребителят може да копира този url адрес и да отвори нова страница в браузъра. След като я отвори трябва да може да види съобщението написано в точка B.

Домашно 2 върху тема 2

  1. Краен срок 06 ноември 2017г, 02:00:00
  2. Към приложението от Домашно 1, тема 2 да се добави функционалност за приемане на пост заявки с данни предавани в JSON и XML формат. Приложението да се качин в същото хранилище и на същия heroku адрес както Домашно 1, Тема 2
  3. JSON функционалност
    1. приложението да може да пиема POST заявки на адрес
      1. за нечетните номера в класа адресът е /notes/api
      2. за четните номера в класа адресът е /messages/api
    2. Заявките са от вида
      curl -H "Content-Type: application/json" -X POST -d '{"message":"the value of the message"}' http://appdomainurl
    3. Като резултат от заявката да се върне url адресът на който може да се достъпи приложението в JSON формат с ключ url и стойност адресът на който да се достъпи приложението
      1. '{"url":"the url address of the message"}' 
  4. XML функционалност
    1. приложението да може да пиема POST заявки на адрес
      1. за нечетните номера в класа адресът е /notes/api
      2. за четните номера в класа адресът е /messages/api
    2. Заявките са от вида
      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
    3. Като резултат от заявката да се върне резултат в ВАЛИДЕН XML формат. Резултатът да съдържа нод <url> със съдържание адресът, на който да може да се види създаденото съобщение. Пример <url>the url of the message</url>

Тема 3 – JavaScript, Ajax, Angular 2, Jasmine

Да се разработи JavaScript интерфес, който работи с API-то предоставено Тема 2.

Тема 4- JavaScript, Canvas и векторна графика

Да се разработи прост редактор на векторна графика чрез Three.js, в който да се чертаят прости фигури. Да се разработи приложение за съхранение на тези прости фигури в SVG формат на сървър качен на Heroku.

Тема 5 – node.js

 

Дневник за оценяване, домашни и други неща

Матерали от занятията, които не са в github

Хранилище на целия код