diff options
| Commit | e3f6690808d606913359ca677526d46cf0660ddf (patch) | |
|---|---|---|
| Author | 2025-09-27 17:37:54 +0300 | |
| Committer | 2025-09-27 17:37:54 +0300 | |
| Files | 5bac9641da6be44f7cdf784054362da99c5d776b /src | |
| syndamia.com-e3f6690808d606913359ca677526d46cf0660ddf.tar syndamia.com-e3f6690808d606913359ca677526d46cf0660ddf.tar.gz syndamia.com-e3f6690808d606913359ca677526d46cf0660ddf.zip | ||
| Parent | 118f5b3915013ebeb8d2eacf67145001e2e3e35a (diff) | |
feat(teaching/upp-2025/w1): Add slides and exercises
10 files changed, 967 insertions, 0 deletions
| -rw-r--r-- | src/teaching.du | 2 | ||||
| -rw-r--r-- | src/teaching/index.du | 2 | ||||
| -rw-r--r-- | src/teaching/upp-2025/index.du | 28 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/concepts.du | 116 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/github_classroom.du | 174 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/helloworld.cpp | 6 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/index.du | 42 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/introduction.du | 236 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/visual_studio.du | 245 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week01/zip.du | 116 |
diff --git a/src/teaching.du b/src/teaching.du index b51fe8a..463262b 100644 --- a/src/teaching.du +++ b/src/teaching.du @@ -5,6 +5,8 @@ This is a list of all the subjects I've taught professionally. \n :defs +; [$bg] 2025-2026   [url /teaching/upp-2025 3107 Увод в програмирането - практикум, КН, 5 група] +: Хоноруван преподавател във [url https://www.fmi.uni-sofia.bg/ ФМИ] на специалност [url https://www.fmi.uni-sofia.bg/bg/kompyutrni-nauki Компютърни науки] ; [$bg] 2025   [url https://github.com/universal-configurations-with-nix Универсални конфигурации с Nix] - [url https://github.com/universal-configurations-with-nix/academy-2025 лекции, материали, задачи] и [url https://www.youtube.com/watch?v=QcHIeRtySxA&list=PLjPLCCBcJVpGfRHmHlucj3D7lbNkQZAH- записи] : Преподавател в частна академия по Nix към [url https://blocksense.network blocksense.network] diff --git a/src/teaching/index.du b/src/teaching/index.du index b51fe8a..463262b 100644 --- a/src/teaching/index.du +++ b/src/teaching/index.du @@ -5,6 +5,8 @@ This is a list of all the subjects I've taught professionally. \n :defs +; [$bg] 2025-2026   [url /teaching/upp-2025 3107 Увод в програмирането - практикум, КН, 5 група] +: Хоноруван преподавател във [url https://www.fmi.uni-sofia.bg/ ФМИ] на специалност [url https://www.fmi.uni-sofia.bg/bg/kompyutrni-nauki Компютърни науки] ; [$bg] 2025   [url https://github.com/universal-configurations-with-nix Универсални конфигурации с Nix] - [url https://github.com/universal-configurations-with-nix/academy-2025 лекции, материали, задачи] и [url https://www.youtube.com/watch?v=QcHIeRtySxA&list=PLjPLCCBcJVpGfRHmHlucj3D7lbNkQZAH- записи] : Преподавател в частна академия по Nix към [url https://blocksense.network blocksense.network] diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du new file mode 100644 index 0000000..1494e65 --- /dev/null +++ b/src/teaching/upp-2025/index.du @@ -0,0 +1,28 @@ +# Увод в програмирането - практикум, Компютърни науки, 8 група + +Материали на проведените през 2024/2025 практикуми по Увод в програмирането на Компютърни науки (2 поток), 5 група. + +=[Зала:]= ФМИ 217 [$dbarsep] +=[Време:]= 16:00 - 18:00 [$dbarsep] +=[Ден:]= Четвъртък + +=[Директни връзки:]= +[url ./week01/introduction.html?a#section-3 Контакт с мен] +'stop_output +| [url https://github.com/Syndamia/upp-2023-solutions Решения на задачи] +| [url https://github.com/ivanahristova/introduction-to-programming-2023-2024 Материали от семинари] +| [url https://learn.fmi.uni-sofia.bg/course/view.php?id=9567 Курс в мудъл] +'resume_output + +:table +|=№=||=Дата=||=Материали=| + +|:1:| + |:02.10.2025:| + |:Въведение:| +|::||::||: + [url ./week01/introduction.html?a Уводни бележки] || [url ./week01/concepts.html?a Общи концепции] || [url ./week01/github_classroom.html?a GitHub Classroom упътване] || [url ./week01/visual_studio.html?a Visual Studio упътване] || <br>[url ./week01/zip.html?a ZIP архиви упътване] + :| +|::||::||: + [url ./week01/index.html Задачи] || [url https://classroom.github.com/a/-1l498jX GitHub Classroom] + :| diff --git a/src/teaching/upp-2025/week01/concepts.du b/src/teaching/upp-2025/week01/concepts.du new file mode 100644 index 0000000..c1bbacc --- /dev/null +++ b/src/teaching/upp-2025/week01/concepts.du @@ -0,0 +1,116 @@ +# Общи концепции - УПП, Седмица 1, 02.10.2025 + +'define expected-reading 4 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +[$presentation-controller] + +:title_slide35 + +# Общи концепции + + +:slide35 + +## Компютър, код, компилиране + +[$br2] + +:unordered +- Компютърът е една гигантска елка с много бутони и памет +- Видео, аудио, ... се свеждат до записване на число в паметта + .unordered + - Например, записване на 255 в определена памет, казва че червеното на първия пиксел е с максимална яркост + +- Как числото става нещо осезаемо е въпрос по елетротехника + + + +:middle_slide + +.unordered +- В древността (около 1940те) програмистите са ръчно са размествали жички за да работят с компютъра +- Електротехниката се развива и това "разместване" се случва без нуждата от промяна в електрическата схема +- На хората им омръзва от писането на числа, изобретяват програмните езици +- Това е (=[неформатиран]=) текст, като комбинации от знаци се свеждат до съответните цифри + .unordered + - Например, нека числото 200 да обозначава\n + "добавяне на единица към *[(регистър)]* Y" + - С програмен език текста `[INY]` или `[++Y]` се свежда до числото 200 + + +:middle_slide35 + +.unordered +- Програмите които превръщат този текст в числа се наричат =[компилатори]=. + Самия процес - =[компилиране]=. +- Разногласия по какъв текст какво трябва да значи още текат, затова имаме различни (програмни) езици +- Допълнително, хората правят комбинации от знаци, които се превеждат до много числа по сложни начини +- Така се зараждат =[парадигмите]= + + +:slide35 + +## История на версиите, git + +[$br2] + +.unordered +- Microsoft Word, браузърите, ... следят история на действия +- Можем да се движим назад и напред +- Но ако се върнем назад и направим нова промяна, "бъдещите" промени се забравят +- Би било полезно в някои ситуации всъщност да правим разклонение и да пазим и двете редици промени + + +:middle_slide35 + +.unordered +- [url https://git-scm.com/ git] е програма, която пази такива разклонени редици от промени върху файловете в директории +- Всяка промяна се нарича "=[commit]=" +- Различните разклонения се наричат "=[branch]="-ове +- Всеки "commit" трябва да има автор и описание, тоест commit-ове не се правят автоматично! +- Създаването/изтриването на файлове с/без съдържание също се включва в commit-ите +- Папка (и всички под-папки в нея) в която git следи за промени се нарича "=[repository]=" (хранилище) + + +:slide35 + +.unordered +- Понякога искаме да споделим нашите промени и да смесим чужди промени при нас\n + *[(примерно няколко програмиста паралелно правят модификации по един и същ код)]* +- Можем да използваме Google Drive/Dropbox/... и ръчно да смесваме, но става сложно и тромаво +- Сайтове като [url https://github.com GitHub] са специализирани за работа с repository-та. + Предоставят: + .unordered + - безплатно пространство (облак) за repository-и + - съвместна интеграция с git + - "pull request": улеснено смесване на два branch-а с възможност за дискусии + + +:middle_slide35 + +.unordered +- git и GitHub (или техни близки алтернативи) се използват масово от програмисти по целия свят +- С цел да видите как се ползват и свикнете с тях, ще ги използваме по време на упражнения + + +:slide35 + +## GitHub Classroom + +[$br1] + +.unordered +- Чрез [url https://classroom.github.com GitHub Classroom] ще създавам =[задания с ограничен срок]= (края на съответното упражнение) +- Когато вие приемете заданието, автоматично се създава git repository към което имате (ограничен) достъп +- Преди срока трябва да добавите commit с вашата работа по време на упражнението, =[колкото и малко да е!]= +- Добавя се един автоматичен "pull request" в който ще пиша отзивите. + + +Да, странно е, че използваме системата за смесване на branch-ове за обратна връзка, но така са решили да го направят. + +:title_slide35 + +.p [url ./github_classroom.html?a Към "GitHub Classroom упътване"] diff --git a/src/teaching/upp-2025/week01/github_classroom.du b/src/teaching/upp-2025/week01/github_classroom.du new file mode 100644 index 0000000..216a09d --- /dev/null +++ b/src/teaching/upp-2025/week01/github_classroom.du @@ -0,0 +1,174 @@ +# GitHub Classroom упътване - УПП, Седмица 1, 02.10.2025 + +'define expected-reading 5 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +[$presentation-controller] + +:title_slide + +# GitHub акаунт + +.p Може да пропуснете тази секция ако вече имате GitHub акаунт + + +:slide + +## Сега всички (които нямат) трябва да си направят GitHub акаунти + +.p +Отивате на [url https://github.com/signup github.com/signup], въвеждате си данните една по една и се регистрирате + +.p [image ../../upp-2023/week1/img/github-signup.gif] + + +:middle_slide + +.p +След това, като влезете в акаунтите си (което става автоматично след регистрация), на заглавната страница ще имате нещо такова: + +.width75% [image ../../upp-2023/week1/img/github-index.gif] + +.p +В горния десен ъгъл, където е иконката с квадрати на бял фон, след натискане получавате sidebar. +От него, може да достъпите профила си, repository-та които имате, и так. нат. + + +:slide + +### Проверете дали сте маркирани! + +.p +Понякога при създаване на нов акаунт, GitHub го маркира (като "проблемен"). +В такава ситуация, няма да можете сами да го изтриете и няма да можете да го ползвате за GitHub classroom. + +.p +Най-простия начин, който намерих, е да отворите +[url https://support.github.com/contact/reinstatement support.github.com/contact/reinstatement]\n +Ако отгоре пише "Your account has been flagged", тогава имаме проблем. + +.p +[image ../../upp-2023/week1/img/github-support-flagged.gif] + + +:title_slide35 + +# Конфигуриране и ползване на GitHub Classroom + + +:slide + +## Как ще ползваме GitHub Classroom + +[$br3] + +.p +За всеки практикум ще има направя линк. +При приемане на заданието се генерира repository. + +.p +Трябва да сте качили работата си =[по време]= на упражнението (или малко след това) в това repository. +GitHub предоставя лесни начини да правите промени по файлове директно чрез браузъра, така че за незаинтересуваните, може да го ползвате като усложнен Google Drive. + +.p +След това аз ще направя отзиви върху вашата работа. +Те ще се намират в таба "Pull Requests" на конкретното repository. +Четете ги, отговаряйте, целта е да дискутираме какво сте направили. + + +:slide + +.p +За всяко упражнение ще има отделен линк.\n +Този за днеска е: [url https://classroom.github.com/a/-1l498jX] + +[$br1] + +:row +.p След като го отворите, ще видите съобщение за разрешение, авторизирайте го. + +.p [image ../../upp-2023/week1/img/github-classroom-authorize.gif] + + + +:middle_slide + +:row + +.width60% [image ../../upp-2023/week1/img/join-the-classroom.gif] + +:column + +.p При първо влизане ще получите страница с имената и факултетните имена на всички студенти от групата. + +.p Изберете своето. + +.p Това се прави само веднъж, и след това никога пак. + + + + +:slide + +.p След това, би трябвало да видите страницата за "Приемане на заданието". + +.width40% [image ../../upp-2023/week1/img/accept-assignment.gif] + +.p След като го приемете, на новата страница, изчакайте няколко секунди и презаредете. +Трябва да видите това: + +.width40% [image ../../upp-2023/week1/img/ready-to-go.gif] + + +:middle_slide + +.p Сега сте готови, кликнете върху синия линк и ще стигнете във вашето GitHub repository. + +.p Вътре в това конкретно repository очаквам да качвате работата ви през упражнението. +Повтарям, дори да е недовършено, дори да има някакви празни файлове и такива, трябва да го качите. + +.p Който иска спокойно може да прави няколко commit-и, да им прави съобщения и так. нат., ама към този етап, това не е нужно. + +.p В края на презентация показвам как точно е най-лесно да качите работата си. + + +:slide + +.p +В таба "Pull requests", още от началото, ще имате едно "Feedback". +В него ще ви връщам отзиви относно работата ви, и вие също можете да пишете неща и да ми отговаряте. + +.p +Целта е да видя какво правите и да ви помогна, моля проверявайте какво съм ви писал, по подразбиране би трябвало да получавате известия на имейл-а. + +.centered +.width80% [image ../../upp-2023/week1/img/feedback.gif] + + +:slide + +## Качване на решенията + +.p +След като сте решили една задача, имате два варианта за писане на следващата: или да създадете нов проект, или да презапишете кода. +Второто е най-лесно. + +.p +Във всеки случай, ще се наложи сегашния файл с код да го качите. +Най-елементарния начин: копирате всичко, след това отивате на вашето GitHub repository, кликвате "Add", после "Create new file". + +.p +Отгоре на "Name your file..." пишете някакво име, което =[моля да завърша на `[.cpp]`!]= +Това показва, че файла съдържа код на C++. +Също, когато решавате много задачи и създавате много такива файлове, =[напомням че имената на файловете трябва да са различни.]= + +.p +В "Enter file contents here" пействате копирания код. +Горе в дясно натискате "Commit changes...", в pop-up-a после пак натискате "Commit changes" (ако искате, променяйте "Commit message" и "Extended description", но не е нужно) и сте готови с този файл/задача. + + +:title_slide35 + +.p [url ./visual_studio.html?a Към "Visual Studio упътване"] diff --git a/src/teaching/upp-2025/week01/helloworld.cpp b/src/teaching/upp-2025/week01/helloworld.cpp new file mode 100644 index 0000000..3e7b24d --- /dev/null +++ b/src/teaching/upp-2025/week01/helloworld.cpp @@ -0,0 +1,6 @@ +#include <iostream> + +int main() +{ + std::cout << "Hello World\n"; +} diff --git a/src/teaching/upp-2025/week01/index.du b/src/teaching/upp-2025/week01/index.du new file mode 100644 index 0000000..0d3eaa6 --- /dev/null +++ b/src/teaching/upp-2025/week01/index.du @@ -0,0 +1,42 @@ +# Задачи - УПП, Седмица 1, 01.10.2025 + +'define expected-reading 2 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +.warn +Не сте имали нито лекция нито семинарно упражнение, затова в задачите няма писане на код. + +GitHub Classroom: [url https://classroom.github.com/a/-1l498jX] + +## 1 задача - Hello, World! + +Изкарайте на екрана съобщението "Hello, World!". + +Ако използвате Visual Studio, проектът по подразбиране трябва да съдържа програмата за "Hello, World!". +Нужно е единствено да я компилирате и пуснете, както са инструкциите в [url ./visual_studio.du#section-6 презентацията "Visual Studio"]. + +Ако използвате друга среда/редактор, създайте `[C++]` файл със следното съдържание: + +```c++ +'include ./helloworld.cpp + +Компилирайте го и го изпълнете според инструкциите на вашата програма. + +### Исторически контекст + +В модерно време, това е класическата първа задача по програмиране. +Цялата идея идва от книгата/упътване [url https://en.wikipedia.org/wiki/The_C_Programming_Language The C Programming Language] (първо издание 1978). + +Тази книга (и съответния език) са едни от най-популярните в програмирането. +Ако някой не е запознат, целия свят се крепи на C :) + +## 2 задача - Качване в GitHub Classroom + +Създайте =[ZIP архив]= който съдържа вашия `[.cpp]` файл (съдържащ "Hello, World!" програмата). +Качете архива във вашето repository към заданието най-отгоре на страницата. + +Инструкции за създаване на ZIP архив [url ./zip.html тук]. + +Инструкции за използване на GitHub Classroom [url ./github_classroom.html#-github-classroom-1 тук]. diff --git a/src/teaching/upp-2025/week01/introduction.du b/src/teaching/upp-2025/week01/introduction.du new file mode 100644 index 0000000..3ea07b9 --- /dev/null +++ b/src/teaching/upp-2025/week01/introduction.du @@ -0,0 +1,236 @@ +# Уводни бележки - УПП, Седмица 1, 02.10.2025 + +'define expected-reading 4 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +[$presentation-controller] + +:title_slide35 + +# Добре дошли! + +.p +.width65% +[image_url https://upload.wikimedia.org/wikipedia/commons/3/3c/Chimpanzee_seated_at_typewriter.jpg https://en.wikipedia.org/wiki/Infinite_monkey_theorem] + + +:slide35 + +## Кой съм Аз + +[$br5] + +.unordered +- Казвам се Камен. +- Четвъртокурсник* във ФМИ, КН, втори поток. +- Водех УП Практикум 2023/2024 година. + + +:slide +## Връзка с мен + +:unordered +- Facebook messenger: <img class="file-type-icon" src="/files/ephemeral/facebook.png"> + +- Discord: <img class="file-type-icon" src="/files/ephemeral/discord.png"> + +- Имейл: + .bulleted + - <a href="mailto:kamen@syndamia.com">kamen@syndamia.com</a> <a class="borderless" href="/files/publickey-kamen@syndamia.com-0x354C5F95.asc"><img class="borderless unzoomable" src="/img/pgpkey.gif" alt="PGP key"></a> + - <a href="mailto:kamen.d.mladenov@protonmail.com">kamen.d.mladenov@protonmail.com</a> <a class="borderless" href="/files/publickey-kamen.d.mladenov@protonmail.com-62ca52e87475c874b9e6ebf3c4c9f716b6ce4c9d.asc"><img class="borderless unzoomable" src="/img/pgpkey.gif" alt="PGP key"></a> + + +.p Директни линкове към Facebook и Discord има на [url https://learn.fmi.uni-sofia.bg/user/profile.php?id=23229 профила ми в мудъл].\n + + + +:slide35 + +## Кои сте вие? + +[$br2] + +.unordered +- Няма да обикалям човек по човек. + +[$br1] + +.unordered +- Кои са състезатели? +- Кои не са програмирали преди? +- Кой е работел с указатели? + + +:title_slide35 +# Относно курса + +.p Защото това упражнение е преди първата лекция... + + +:slide35 + +## Занятията + +[$br3] + +.unordered +- =[Лекции]= - теория и формалности зад нещата +- =[Семинари]= (семинарни упражнения) - как теоретичните неща се реализират +- =[Практикуми]= (практически упражнения) - реализиране на нещата от вас + + +:slide35 +## Оценяване + +[$br4] + +.unordered +- Ще разберете на лекцията утре, от доц. Нора Ангелова.\n + Тя води курса и тя определя точната скала. +- Ще има контролни през семестъра.\n + Ще се разглежда теория и практика. + + +:slide35 + +## Материала + +[$br4] + +.unordered +- Ще работим изцяло с езика `[C++]` +- Ще разглеждаме общи концепции: оператори, цикли, функции, масиви, низове +- И някои по-специални понятия: =[указатели]=, =[рекурсия]= + + +:slide35 + +[$br2] + +### За състезателите + +.unordered +- Ще трябва да научите как се пише четим код +- Може би не сте запознати с някои детайли + +[$br1] + +### За хората без опит + +.unordered +- Материалът е =[много]= и бързо напредваме. + Няма да имаме време всичко да изговорим. +- Допълнителна самоподготовка е =[нужна]= и едва ли ще можете да се справите без нея. + + +:slide35 + +### За всички + +[$br3] + +.unordered +- =[Не се отпускайте!]= +- `[C++]` е език на ниско ниво, има безброй много детайли които може да ви спънат. +- Ние имаме специфични изисквания за писане на код.\n + =[Ако не ги спазвате, дори решението да работи, може да получите слаба оценка!]= + + +:slide35 + +## Плагиатство + +[$br2] + +.unordered +- В училище (разкрито) преписването води до двойка и потенциално обаждане към родителите. +- Във ФМИ при установено плагиатството, =[в срок от една година]=, студента *[може]* да бъде =[изключен от университета без възможност да се запише обратно]=. +- По-добре си изкарайте двойката, ще ви дадем достатъчно шансове да си минете курса. + + +:middle_slide35 +:centered + +.p *[Пък и може би не си заслужава...]* + +<iframe width="480" height="360" src="https://www.youtube.com/embed/hMloyp6NI4E"> +</iframe> + + + +:title_slide35 + +# Практикумите + + +:slide35 + +## Как ще ги водим + +[$br2] + +.unordered +- В началото на часа давам задачи, вие ги решавате. +- Всички текстови редактори/IDE-та са позволени. +- До края на часа трябва да предадете написаното от вас в GitHub Classroom +- Ще връщам обратна връзка към предаденото, *[моля да я четете!]* + + +:slide + +## Видове задачи + +[$br1] + +.defs +; За решаване +: Прости задачи, които очаквам да можете да решите (повечето през упражнението) +; За самоподготовка +: По-сложни задачи, които ще описват възможни проблеми от реалния свят +; За любознателните +: 1-2 сложни задачи, чиято цел е да се реализира *[реалистичен]* използваем софтуерен компонент + + +:middle_slide35 + +.unordered +- На първия тип винаги ще качвам решения. +- На останалите е условно. +- Въпреки това, ако някой иска решение за нещо, да ми пише. + + +:slide35 + +## Изкуствен интелект + +[$br4] + +.unordered +- Ще чуете и други мнения от екипа по тематa +- Анализ на генериран изход от ИИ ще бъде разглеждан в курса +- На практикумите ви е позволено да го ползвате, =[но]= не го окуражавам + + +:slide35 + +[$br2] + +.p Различни умения са: +.numbered +1. да =[напишеш сам]= код от нулата +2. да =[четеш]= код и разбереш какво прави +3. да =[модифицираш/допълниш]= вече наисан код + +.p +Чрез ИИ избягвате да правите първото. +То е най-важно (особено за контролни) и може би най-трудно. + +.p +Най-много мога да ви помогна и най-много имате да научите покрай него. + + +:title_slide35 + +.p [url ./concepts.html?a Към "Общи концепции"] diff --git a/src/teaching/upp-2025/week01/visual_studio.du b/src/teaching/upp-2025/week01/visual_studio.du new file mode 100644 index 0000000..e899c05 --- /dev/null +++ b/src/teaching/upp-2025/week01/visual_studio.du @@ -0,0 +1,245 @@ +# Visual Studio упътване - УПП, Седмица 1, 02.10.2025 + +'define expected-reading 6 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +[$presentation-controller] + +:title_slide35 + +# IDE и текстови редактори + + +:slide + +## Къде пишем код? + +[$br2] + +.p +=[Кодът е чисто и просто текст]=, компилаторът е специалната програма, която превръща този текст в нещо, което може компютъра да изпълни. + +.p +За писане и редактиране на текст ползваме =[текстови редактори]=. +Програмистите са искали да улеснят работата си, затова модерните текстови редактори поддържат много помощни функционалности: показване на грешки на точния ред, автоматично форматиране, ... + +.p +За някои и това не е било достатъчно удобно, затова са създадени =[Integrated Development Environment]= (IDE), програми които съдържат в себе си всичко нужно за разработка на код. +Тоест, те са текстови редактори, но "вградено" могат да компилират код, да менижират сегашното repository, ... + + +:middle_slide + +.p +Главно очакваме да пишете на IDE-то наречено Visual Studio. +Разработено е от Microsoft и е едно от най-използваните и развитите IDE-та на пазара. + +.p +Разбира се, може да ползвате и текстови редактори като Visual Studio Code, vim, emacs, ... +Но изисква повече конфигуриране от ваша страна. + +.p +Извън това, с мен може да говорите за vim и neovim :) + + +:title_slide35 + +## Инсталация + +.p +Може да пропуснете тази секция ако работите с машините в компютърните зали. +Visual Studio е вече инсталирано там. + + +:slide + +### Инсталация + +[$br5] + +.p +За Visual Studio, отивате на [url https://visualstudio.microsoft.com/ visualstudio.microsoft.com], скролвате малко надолу, избирате "Download Visual Studio" и след това "Community 2022". +.bulleted +'footnote vs-2022-old-win Може би има трикове с които да инсталирате 2022 версията, но те не са официални и затова няма да го преподам +- Ако искате да ползвате по-стара ОС, като Windows 8.1 или Windows 7 ще трябва да използвате "Community 2019"[$vs-2022-old-win], разликата между версиите не е съществена, затова не се притеснявайте. + + +:slide + +.p +След като изтеглите инсталатора за Visual Studio и след като изчакате да заредят работи, би трябвало да имате прозорец на име "Installing - Visual Studio Community 2022". + +.p +Единствено избирате "Desktop development with C++" в таба Workloads, и натискате "Install". +Би трябвало да заема към 11 GB памет и в моето тестване се инсталира за 10тина минути. + +.centered +.width80% [image ../../upp-2023/week1/img/vs-install.gif] + + +:slide + +.p +Когато е готово, би трябвало да се включи автоматично и да имате прозорец с име "Sign in to Visual Studio". +За сега това не е нужно, спокойно изберете "Not now, maybe later." + +.p +След това, на "Start with a familiar environment", отново, не е нужно да променяте нищо, просто натиснете "Start Visual Studio". + +:centered +:width75% +:row + +.p [image ../../upp-2023/week1/img/vs-signin.gif] + +.p [image ../../upp-2023/week1/img/vs-start-env.gif] + + + + + +:title_slide35 + +## Как да използваме Visual Studio + + +:slide + +### Създаване на нов проект + +.p +Това е първия прозорец, който се отваря. +В лявата колона имате скорошни проекти, в дясната имате начини да създадете нов проект. + +:centered +:width80% [image ../../upp-2023/week1/img/vs-open-recent.gif] + + + + +:slide + +.p +Нека да направим нов проект, кликнете "Create a new project". +В този прозорец избирате началната "конфигурация" на проекта. +В този курс ще работим само и единствено с "Console App", затова изберете него и кликнете "Next". + +:centered +:width75% [image ../../upp-2023/week1/img/vs-create-project.gif] + + + + +:slide + +.p +Последния прозорец преди писането на код е за конфигурация на проекта. +Тук единствено може да искате да промените Project Name и Location, другото не е важно. + +:centered +:width80% [image ../../upp-2023/week1/img/vs-configure-project.gif] + + + + +:slide + +#### Бърза вметка, какво и защо конзолата? + +.p +През 19ти век са изобретени teleprinters: пишещи машини с възможности да печат текст от електрически сигнал. +Използвали са се в телеграфията: пишеш като на пишеща машина съобщението и отговора се напечатва на същия лист хартия. + +В ранните години на компютрите, точно тези teleprinters са били използвани, все пак са били съществуваща технология, която "изпраща" текст като ел. сигнали и може да принтира ел. сигнали като текст. + +.p +Имало е неудобства, използвало се е много хартия, и механиката на бутоните е била сложна. +С времето компаниите са разработвали такива устройства, който обаче ползват електронно-лъчева тръба и "нормални" бутони за клавиши. + +.p +Чисто практически, ние това знаем като конзолата: устройство (или в модерно време, програма) което може да получи входен текст и да изкара текст. + + +:slide + +### Компилиране на код + +.p +След малко чакане, най-после ще се намираме в средата за писане на код. + +:centered +:width60% +.p [image ../../upp-2023/week1/img/vs-general.gif] + + + +.p +В Solution Explorer имате всички файлове от проекта (Visual Studio позволява да групирате няколко проекта в едно, наречено Solution, не е нужно да се занимавате). + +.p +Тук =[единственото важно за вас се намира в папката "Source Files"]=. +В нея ще се намира вашия код, всичко останало са допълнителни неща, които са релевантни за по-големи проекти. + + +:slide + +:row + +.p +Компилирането на код става от менюто "Debug" най-отгоре, и след това избиране на "Start Without Debugging". + +:width50% +:fright +.p [image ../../upp-2023/week1/img/vs-debug-menu.gif] + + + + +.p +След малко чакане, би трябвало да излезе един прозорец, който изглежда горе-долу така: + +.p [image ../../upp-2023/week1/img/vs-console.gif] + + +:slide + +### Дебъгване + +[$br1] + +.p +Bug е когато нещо непланирано се случи в кода. +Debuging е глаголът за откриване на причината за един bug. +Visual Studio предоставя много функционалности, които да ускорят debugging. + +.p +Нека да въведем една грешка, в реда на който изкараме "Hello, World!", нека да махнем последната ";". + +.p +При компилиране, ще получим съобщение за грешки по време на компилирането. + +.p [image ../../upp-2023/week1/img/vs-build-errors.gif] + + +:slide + +.p +Нека да натиснем "No" и да погледнем Visual Studio. + +.p +Грешките, или поне където то си мисли че са, ще бъдат подчертани с червена зигзагообразна линия. +Ако сложим мишката върху тях, ще получим popup, в който ще пише каква е грешката на това място. +Грешки също се виждат в така наречения "Error List", който се намира директно под кода. +Той се появява когато при компилиране получим грешки и изчезва когато няма. + +:centered +:width70% [image ../../upp-2023/week1/img/vs-errors.gif] + + + + +:title_slide35 + +.p [url ./zip.html?a Към "ZIP архиви упътване"] diff --git a/src/teaching/upp-2025/week01/zip.du b/src/teaching/upp-2025/week01/zip.du new file mode 100644 index 0000000..2bc18fa --- /dev/null +++ b/src/teaching/upp-2025/week01/zip.du @@ -0,0 +1,116 @@ +# ZIP архиви упътване - УПП, Седмица 1, 01.09.2025 + +'define expected-reading 2 min +'define created 27 September 2025 +'define edited 27 September 2025 +[$pagenav] + +[$presentation-controller] + +:title_slide35 + +# ZIP архиви + + +:middle_slide + +.unordered +- Чрез ZIP архив обединяваме един или повече файлове и папки в един единствен файл +- Ще използваме ZIP архиви на контролни/изпити, така че е добре от сега да се запознаем как да боравим с тях + + +:slide + +## Windows 11 + +[$br4] + +:unordered +- Под Windows 11 с *[новото]* меню което излиза при натискане на десен бутон, можете директно да архивирате селектираните файлове +- Тоест, процедурата е + .numbered + 1. Селекция на файловете за архивиране + 2. Десен бутон + 3. "Compress to ZIP file" + +- Въпреки всичко, имало е случаи, когато това не работи, затова препоръчвам да разгледате метода и за другите Windows версии + + + +:slide + +## Windows 2000 - Windows 11 + +[$br3] + +:unordered +- Ще трябва да инсталирате програма за ZIP файлове. +- Тази която аз препоръчвам е 7-Zip, спрямо WinRAR: + .unordered + - Няма дразненето с безплатния trial + - Поддържа повече формати + - Налично е за повече ОС +- Инсталацията е стандартна: от заглавната страница изтегляте 64bit-овата версия, пускате инсталатора + + + +:slide + +[$br3] + +.ordered +1. Селектирате файловете които искате да архивирате +2. Десен бутон *[(под Windows 11 трябва да натиснете "Show more options")]* +3. Задържате курсора върху "7-Zip" +4. Избирате `[Add to "SOMETHING.=[zip]="]`, където `[SOMETHING]` ще е името на папката в която се намирате. + Това директно създава архив с името на текущата папка. +5. Алтернативно избирате `[Add to archive...]`. + От там се отваря прозорец с настройки, най-важно под "Archive format" да изберете ZIP. + Другите неща не е нужно да променяте. + + +:slide + +## MacOS + +[$br6] + +.ordered +1. Селектирате файловете които искате да архивирате +2. Натискате десен бутон +3. Избирате "Compress" + + +:slide + +## Linux + +.p +.font20 +*[Ползваш Linux и се нуждаеш от туториал? Слабо.]* + +[$br5] + +### Чрез командния ред + +.ordered +1. Инсталираш `[zip]` командата (пакета почти винаги също се казва `[zip]`) +2. Извикваш команда във следната форма: +```bash +zip archive.zip file1 file2 ... + + +:slide + +### Графично приложение + +[$br7] + +.unordered +- Отваряш съответния "App Store", търсиш "zip", инсталираш първото и ползваш. +- Почти винаги може да го отвориш и след това драг-неш селектнати файлове в празното пространство + + +:title_slide35 + +.p [url ./index.html Към задачите] |