From 6b8cae12cb5d60b37931332d9d8008649ae14566 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 12 Sep 2026 11:31:19 +0300 Subject: feat!: Update dunbar markup Currently the newest version of the markup is not on the main branch, mostly because of polish and the documentation. As an effect from the changes to the language, the sitemap is the only thing which needs to be created externally. --- src/404.du | 1 + src/about.du | 96 ++- src/about/index.du | 96 ++- src/accessibility.du | 15 +- src/acknowledgements.du | 31 +- src/blog.du | 137 ++-- src/blog/2.6-years-of-web-design/index.du | 124 ++-- src/blog/bash-is-weird/index.du | 55 +- src/blog/connect-to-mysql-in-dotnet-ef/index.du | 58 +- src/blog/disable-sticky-keys-popup/index.du | 32 +- src/blog/encrypted-email/index.du | 116 ++-- src/blog/export-skype/index.du | 72 +-- src/blog/fix-network-brother-printers/index.du | 44 +- src/blog/fix-no-frame-buffer-plan9/index.du | 35 +- src/blog/fix-qc-timeout/index.du | 30 +- .../balove-2021.du | 35 +- .../index.du | 202 +++--- .../index.du | 76 +-- src/blog/gns3-initsh-no-such-file/index.du | 12 +- src/blog/how-to-encrypt-email/index.du | 163 ++--- src/blog/how-to-use-jira/bug.du | 25 +- src/blog/how-to-use-jira/cards.du | 147 +++-- src/blog/how-to-use-jira/components.du | 47 +- src/blog/how-to-use-jira/dashboards.du | 64 +- src/blog/how-to-use-jira/filters.du | 44 +- src/blog/how-to-use-jira/index.du | 87 ++- src/blog/how-to-use-jira/kanban.du | 35 +- src/blog/how-to-use-jira/pages.du | 24 +- src/blog/how-to-use-jira/projects.du | 141 ++-- src/blog/how-to-use-jira/releases.du | 23 +- src/blog/how-to-use-jira/scrum.du | 53 +- .../index.du | 76 +-- src/blog/index.du | 137 ++-- .../install-drivers-for-epson-scanners/index.du | 40 +- src/blog/install-plan9-with-virt-manager/index.du | 66 +- src/blog/making-sense-of-android-root/index.du | 69 ++ .../managing-apps-with-adb-without-root/index.du | 116 ++-- src/blog/microsoft-and-foss-extinguish/index.du | 48 +- .../mundus-first-shot-at-gamedev/basic-concepts.du | 34 +- src/blog/mundus-first-shot-at-gamedev/index.du | 53 +- .../mundus-first-shot-at-gamedev/introduction.du | 53 +- src/blog/mundus-first-shot-at-gamedev/timeline.du | 40 +- .../mundus-first-shot-at-gamedev/user-interface.du | 63 +- src/blog/plan9-in-linux-mouse-menus/index.du | 161 +++-- src/blog/remove-weather-widget/index.du | 18 +- src/blog/sane-explanation-of-compilers/index.du | 12 +- .../sane-explanation-of-compilers/part-1/index.du | 633 +++++++++--------- src/blog/switchut-izgorq/index.du | 22 +- src/blog/taming-the-fun-too/index.du | 64 +- .../index.du | 235 ++++--- .../thinkpad-x270-my-favorite-machine/index.du | 93 +-- src/blog/thoughts-on-minecraft-design/index.du | 331 ++++++++++ src/blog/turn-off-notifications-windows/index.du | 24 +- src/blog/virt-manager-freeze-on-browse/index.du | 18 +- .../index.du | 34 +- src/blog/windows-run-dialog/index.du | 143 ++-- src/index.du | 3 +- src/license.du | 15 +- src/misc.du | 9 +- src/misc/index.du | 9 +- src/misc/universitetski-belejki/index.du | 23 +- src/preserved-media.du | 17 +- src/preserved-media/index.du | 17 +- src/preserved-web-pages.du | 11 +- src/preserved-web-pages/index.du | 11 +- src/privacy.du | 23 +- src/regarding-js.du | 73 ++- src/rework.du | 7 +- src/setup.du | 82 +-- src/setup/index.du | 82 +-- src/slides.du | 13 +- src/slides/demo/index.du | 78 +-- src/slides/index.du | 13 +- src/slides/linuxgraphy-by-strabo/index.du | 719 +++++++++++---------- src/teaching.du | 28 +- src/teaching/index.du | 28 +- src/teaching/oop-2023/index.du | 60 +- src/teaching/oop-2023/week1/good-software.du | 85 +-- src/teaching/oop-2023/week1/index.du | 60 +- src/teaching/oop-2023/week1/organization.du | 15 +- src/teaching/oop-2023/week10/index.du | 105 +-- src/teaching/oop-2023/week11/index.du | 121 ++-- src/teaching/oop-2023/week12/index.du | 61 +- src/teaching/oop-2023/week13/index.du | 93 +-- src/teaching/oop-2023/week14/index.du | 9 +- src/teaching/oop-2023/week15/index.du | 9 +- src/teaching/oop-2023/week16/index.du | 9 +- src/teaching/oop-2023/week2/index.du | 105 +-- src/teaching/oop-2023/week3/index.du | 71 +- src/teaching/oop-2023/week4/index.du | 65 +- src/teaching/oop-2023/week5/index.du | 45 +- src/teaching/oop-2023/week6/index.du | 53 +- src/teaching/oop-2023/week7/index.du | 39 +- src/teaching/oop-2023/week8/index.du | 59 +- src/teaching/oop-2023/week9/index.du | 59 +- src/teaching/oop-2025/index.du | 82 +-- src/teaching/oop-2025/oop-notes/index.du | 44 +- src/teaching/oop-2025/week01/index.du | 104 +-- src/teaching/oop-2025/week01/intro.du | 28 +- src/teaching/oop-2025/week02/index.du | 124 ++-- src/teaching/oop-2025/week03/index.du | 286 ++++---- src/teaching/oop-2025/week04/index.du | 60 +- src/teaching/oop-2025/week05/index.du | 120 ++-- src/teaching/oop-2025/week06/index.du | 74 +-- src/teaching/oop-2025/week07/index.du | 26 +- src/teaching/oop-2025/week08/index.du | 44 +- src/teaching/oop-2025/week09/index.du | 96 +-- src/teaching/oop-2025/week10/index.du | 55 +- src/teaching/oop-2025/week11/index.du | 82 +-- src/teaching/oop-2025/week12/index.du | 10 +- src/teaching/oop-2025/week13/index.du | 64 +- src/teaching/oop-2025/week14/index.du | 30 +- src/teaching/oop-2025/week15/index.du | 38 +- src/teaching/upp-2023/additional1/index.du | 115 ++-- src/teaching/upp-2023/additional2/index.du | 193 +++--- src/teaching/upp-2023/index.du | 60 +- src/teaching/upp-2023/week1/index.du | 26 +- src/teaching/upp-2023/week1/setup.du | 103 +-- src/teaching/upp-2023/week1/welcome.du | 99 +-- src/teaching/upp-2023/week10/index.du | 74 ++- src/teaching/upp-2023/week11/index.du | 94 ++- src/teaching/upp-2023/week12/index.du | 73 ++- src/teaching/upp-2023/week13/index.du | 44 +- src/teaching/upp-2023/week14/index.du | 86 ++- src/teaching/upp-2023/week2/index.du | 127 ++-- src/teaching/upp-2023/week2/revision.du | 76 +-- src/teaching/upp-2023/week3/index.du | 170 +++-- src/teaching/upp-2023/week3/revision.du | 71 +- src/teaching/upp-2023/week4/index.du | 77 +-- src/teaching/upp-2023/week4/revision.du | 39 +- src/teaching/upp-2023/week5/index.du | 77 ++- src/teaching/upp-2023/week5/revision.du | 21 +- src/teaching/upp-2023/week6/index.du | 82 +-- src/teaching/upp-2023/week7/index.du | 103 +-- src/teaching/upp-2023/week8/index.du | 70 +- src/teaching/upp-2023/week9/index.du | 63 +- src/teaching/upp-2025/cpp-pitfalls/index.du | 240 +++---- src/teaching/upp-2025/ideas.du | 6 +- src/teaching/upp-2025/index.du | 128 ++-- src/teaching/upp-2025/week01/concepts.du | 48 +- src/teaching/upp-2025/week01/github_classroom.du | 44 +- src/teaching/upp-2025/week01/index.du | 30 +- src/teaching/upp-2025/week01/introduction.du | 86 +-- src/teaching/upp-2025/week01/visual_studio.du | 54 +- src/teaching/upp-2025/week01/zip.du | 42 +- src/teaching/upp-2025/week02/index.du | 60 +- src/teaching/upp-2025/week02/machine.du | 44 +- src/teaching/upp-2025/week02/machine_manual.du | 82 +-- src/teaching/upp-2025/week03/index.du | 140 ++-- src/teaching/upp-2025/week04/index.du | 191 +++--- src/teaching/upp-2025/week05/index.du | 185 +++--- src/teaching/upp-2025/week06/index.du | 153 +++-- src/teaching/upp-2025/week07/index.du | 183 +++--- src/teaching/upp-2025/week08/index.du | 248 ++++--- src/teaching/upp-2025/week09/index.du | 36 +- src/teaching/upp-2025/week10/index.du | 119 ++-- src/teaching/upp-2025/week11/index.du | 135 ++-- src/teaching/upp-2025/week12/index.du | 142 ++-- src/teaching/upp-2025/week13/index.du | 264 +++++--- .../week14/bitwise-and-binary-representation.du | 114 ++-- src/teaching/upp-2025/week14/index.du | 51 +- 161 files changed, 7205 insertions(+), 6017 deletions(-) create mode 100644 src/blog/making-sense-of-android-root/index.du create mode 100644 src/blog/thoughts-on-minecraft-design/index.du (limited to 'src') diff --git a/src/404.du b/src/404.du index b23ffa7..4751930 100644 --- a/src/404.du +++ b/src/404.du @@ -1,3 +1,4 @@ +'def title 404 page not found! # 404 Not Found The page you were trying to access doesn't exist! diff --git a/src/about.du b/src/about.du index 7a8f289..d2d9ea7 100644 --- a/src/about.du +++ b/src/about.du @@ -1,66 +1,58 @@ -# About Me +'def title About Me +'def desc Contacts, resume, (Anti)bio, and software projects + +# {title} :defs -; [=Contact me casually=] +; {b Contact me casually} : syndamia@protonmail.com - PGP key - -\n - +
kamen.s@syndamia.com - PGP key - [*(for this one, make sure to check your spam folder!)*] + {i (for this one, make sure to check your spam folder!)} -; [=Contact me about work and projects I'm maintaining=] +; {b Contact me about work and projects I'm maintaining} : kamen.d.mladenov@protonmail.com - PGP key - -\n - +
kamen@syndamia.com - PGP key -[*for this one, make sure to check your spam folder!*] +{i for this one, make sure to check your spam folder!} +
+{url linkedin.com/in/kamen-mladenov;https://www.linkedin.com/in/kamen-mladenov/} +; {b Resume} +: {url Български;/files/resume-bg.pdf} | {url English;/files/resume-en.pdf} \n -[url https://www.linkedin.com/in/kamen-mladenov/ linkedin.com/in/kamen-mladenov] - -; [=Resume=] -: [url /files/resume-bg.pdf Български] | [url /files/resume-en.pdf English] - - -\n -### Antibio [url https://www.brendangregg.com/antibio.html (opposite of bio, and much more fun)] +### Antibio {url (opposite of bio, and much more fun);https://www.brendangregg.com/antibio.html} -I'm a [url https://www.fmi.uni-sofia.bg/en university] student and general computer nerd. -My current interests include: operating systems, functional programming, webdev (without [=any=] libraries, pure JavaScript), old tech, some amount of server administration and a teeny weeny bit of computer history. +I'm a {url university;https://www.fmi.uni-sofia.bg/en} student and general computer nerd. +My current interests include: operating systems, functional programming, webdev (without {b any} libraries, pure JavaScript), old tech, some amount of server administration and a teeny weeny bit of computer history. -I have a good amount of [url https://gitlab.com/users/Syndamia/projects projects under my belt], although very few are actually useful. -I've put down the more notable ones [url /software here], but [url https://github.com/Syndamia/filite-list filite-list] and [url https://github.com/Syndamia/min-youtube-element-blocker min-youtube-element-blocker] seem to have gotten the most attention (if any). +I have a good amount of {url projects under my belt;https://gitlab.com/users/Syndamia/projects}, although very few are actually useful. +I've put down the more notable ones {url here;/software}, but {url filite-list;https://github.com/Syndamia/filite-list} and {url min-youtube-element-blocker;https://github.com/Syndamia/min-youtube-element-blocker} seem to have gotten the most attention (if any). As for what exactly you can expect in the future, anything goes really. I've done a lot of low(er)-level programming, a bit less functional programming, professional-ish web development (back-end + front-end), a whole lot of scripting and more server/system administration that I would ever want. @@ -75,49 +67,49 @@ This is a curated list of the more relevant software projects I've made or heavi \n -#### [*2023*] +#### {i 2023} :defs -; [url https://gitlab.com/Syndamia/texty-office gitlab / texty-office] + [url https://gitlab.com/Syndamia/texty-office.vim gitlab / texty-office.vim] -: An imperfect converter from DOCX, PPTX and XLSX to normal text with it's associated [url https://www.vim.org/ Vim] plugin. \n - [`GNU GPLv3`] & [`MIT`] | [`C++`] [`vimscript`] | [`Office file`] [`converter`] [`plugin`] [`Vim`] [`CLI tool`] +; {url gitlab / texty-office;https://gitlab.com/Syndamia/texty-office} + {url gitlab / texty-office.vim;https://gitlab.com/Syndamia/texty-office.vim} +: An imperfect converter from DOCX, PPTX and XLSX to normal text with it's associated {url Vim;https://www.vim.org/} plugin. \n + {` GNU GPLv3} & {` MIT} | {` C++} {` vimscript} | {` Office file} {` converter} {` plugin} {` Vim} {` CLI tool} -; [url https://gitlab.com/Syndamia/small-web-utilities gitlab / small-web-utilities]   [*maintained*] -: A collection of small but fast utilities, like a checklist, that work locally on your browser. Also hosted [url https://utils.syndamia.com here]. \n - [`GNU GPLv3`] | [`HTML`] [`Javascript`] | [`checklist`] [`utilities`] +; {url gitlab / small-web-utilities;https://gitlab.com/Syndamia/small-web-utilities}   {i maintained} +: A collection of small but fast utilities, like a checklist, that work locally on your browser. Also hosted {url here;https://utils.syndamia.com}. \n + {` GNU GPLv3} | {` HTML} {` Javascript} | {` checklist} {` utilities} -; [url https://gitlab.com/Syndamia/ss-law gitlab / ss-law] + [url https://github.com/Syndamia/ss-law github / ss-law]   [*maintained*] +; {url gitlab / ss-law;https://gitlab.com/Syndamia/ss-law} + {url github / ss-law;https://github.com/Syndamia/ss-law}   {i maintained} : A small, lightweight and simple static site generation system, extracted as a template from my own \n - [`Markdown`] [`bash`] [`awk`] | [`ssg`] [`lowdown`] [`static site generator`] [`pipelines`] + {` Markdown} {` bash} {` awk} | {` ssg} {` lowdown} {` static site generator} {` pipelines} -; [url https://gitlab.com/Syndamia/homelander gitlab / homelander]   [*maintained*] +; {url gitlab / homelander;https://gitlab.com/Syndamia/homelander}   {i maintained} : A very small and good looking, handmade prompt for zsh \n - [`GPLv3`] | [`bash`] | [`zsh`] [`shell`] [`prompt`] [`script`] [`Linux`] + {` GPLv3} | {` bash} | {` zsh} {` shell} {` prompt} {` script} {` Linux} -; [url https://gitlab.com/Syndamia/goodwolf gitlab / goodwolf]   [*abandoned*] -: Fork of the [url https://hacktivis.me/projects/badwolf badwolf] browser, which aims to add features \n - [`BSD-3-Clause`] | [`C`] | [`web browser`] [`GTK`] [`WebKitGTK`] [`Linux`] +; {url gitlab / goodwolf;https://gitlab.com/Syndamia/goodwolf}   {i abandoned} +: Fork of the {url badwolf;https://hacktivis.me/projects/badwolf} browser, which aims to add features \n + {` BSD-3-Clause} | {` C} | {` web browser} {` GTK} {` WebKitGTK} {` Linux} -#### [*2021*] +#### {i 2021} :defs -; [url https://gitlab.com/Syndamia/reposync gitlab / RepoSync]   [*completed*] +; {url gitlab / RepoSync;https://gitlab.com/Syndamia/reposync}   {i completed} : Script and some config files for synchronizing a git repository with a server \n - [`MIT`] | [`python`] | [`server`] [`git`] [`systemd`] + {` MIT} | {` python} | {` server} {` git} {` systemd} -; [url https://github.com/Syndamia/filite-list github / filite-list]   [*completed*] -: Script for managing [url https://github.com/raftario/filite filite] links \n - [`GPLv3`] | [`bash`] | [`filite`] [`server`] [`script`] [`Linux`] +; {url github / filite-list;https://github.com/Syndamia/filite-list}   {i completed} +: Script for managing {url filite;https://github.com/raftario/filite} links \n + {` GPLv3} | {` bash} | {` filite} {` server} {` script} {` Linux} -#### [*2020*] +#### {i 2020} :defs -; [url https://github.com/Team-Kaleidoscope/DevHive github / DevHive] and [url https://github.com/Team-Kaleidoscope/DevHive-Angular github / DevHive-Angular]   [*completed*] +; {url github / DevHive;https://github.com/Team-Kaleidoscope/DevHive} and {url github / DevHive-Angular;https://github.com/Team-Kaleidoscope/DevHive-Angular}   {i completed} : DevHive is a social network oriented towards programmers. It's FOSS, built from the ground up, and made from a team of three for a course. \n - [`GPLv3`] | [`C#`] [`TypeScript`] | [`Angular`] [`ASP.NET Core`] [`social media`] [`mvc`] [`Docker`] [`CSS`] + {` GPLv3} | {` C#} {` TypeScript} | {` Angular} {` ASP.NET Core} {` social media} {` mvc} {` Docker} {` CSS} -; [url https://github.com/Syndamia/min-youtube-element-blocker github / min-youtube-element-blocker]   [*maintained*] +; {url github / min-youtube-element-blocker;https://github.com/Syndamia/min-youtube-element-blocker}   {i maintained} : Userscript for hiding certain UI elements in YouTube \n - [`MIT`] | [`JavaScript`] | [`youtube`] [`userscript`] [`css`] + {` MIT} | {` JavaScript} | {` youtube} {` userscript} {` css} diff --git a/src/about/index.du b/src/about/index.du index 7a8f289..d2d9ea7 100644 --- a/src/about/index.du +++ b/src/about/index.du @@ -1,66 +1,58 @@ -# About Me +'def title About Me +'def desc Contacts, resume, (Anti)bio, and software projects + +# {title} :defs -; [=Contact me casually=] +; {b Contact me casually} : syndamia@protonmail.com - PGP key - -\n - +
kamen.s@syndamia.com - PGP key - [*(for this one, make sure to check your spam folder!)*] + {i (for this one, make sure to check your spam folder!)} -; [=Contact me about work and projects I'm maintaining=] +; {b Contact me about work and projects I'm maintaining} : kamen.d.mladenov@protonmail.com - PGP key - -\n - +
kamen@syndamia.com - PGP key -[*for this one, make sure to check your spam folder!*] +{i for this one, make sure to check your spam folder!} +
+{url linkedin.com/in/kamen-mladenov;https://www.linkedin.com/in/kamen-mladenov/} +; {b Resume} +: {url Български;/files/resume-bg.pdf} | {url English;/files/resume-en.pdf} \n -[url https://www.linkedin.com/in/kamen-mladenov/ linkedin.com/in/kamen-mladenov] - -; [=Resume=] -: [url /files/resume-bg.pdf Български] | [url /files/resume-en.pdf English] - - -\n -### Antibio [url https://www.brendangregg.com/antibio.html (opposite of bio, and much more fun)] +### Antibio {url (opposite of bio, and much more fun);https://www.brendangregg.com/antibio.html} -I'm a [url https://www.fmi.uni-sofia.bg/en university] student and general computer nerd. -My current interests include: operating systems, functional programming, webdev (without [=any=] libraries, pure JavaScript), old tech, some amount of server administration and a teeny weeny bit of computer history. +I'm a {url university;https://www.fmi.uni-sofia.bg/en} student and general computer nerd. +My current interests include: operating systems, functional programming, webdev (without {b any} libraries, pure JavaScript), old tech, some amount of server administration and a teeny weeny bit of computer history. -I have a good amount of [url https://gitlab.com/users/Syndamia/projects projects under my belt], although very few are actually useful. -I've put down the more notable ones [url /software here], but [url https://github.com/Syndamia/filite-list filite-list] and [url https://github.com/Syndamia/min-youtube-element-blocker min-youtube-element-blocker] seem to have gotten the most attention (if any). +I have a good amount of {url projects under my belt;https://gitlab.com/users/Syndamia/projects}, although very few are actually useful. +I've put down the more notable ones {url here;/software}, but {url filite-list;https://github.com/Syndamia/filite-list} and {url min-youtube-element-blocker;https://github.com/Syndamia/min-youtube-element-blocker} seem to have gotten the most attention (if any). As for what exactly you can expect in the future, anything goes really. I've done a lot of low(er)-level programming, a bit less functional programming, professional-ish web development (back-end + front-end), a whole lot of scripting and more server/system administration that I would ever want. @@ -75,49 +67,49 @@ This is a curated list of the more relevant software projects I've made or heavi \n -#### [*2023*] +#### {i 2023} :defs -; [url https://gitlab.com/Syndamia/texty-office gitlab / texty-office] + [url https://gitlab.com/Syndamia/texty-office.vim gitlab / texty-office.vim] -: An imperfect converter from DOCX, PPTX and XLSX to normal text with it's associated [url https://www.vim.org/ Vim] plugin. \n - [`GNU GPLv3`] & [`MIT`] | [`C++`] [`vimscript`] | [`Office file`] [`converter`] [`plugin`] [`Vim`] [`CLI tool`] +; {url gitlab / texty-office;https://gitlab.com/Syndamia/texty-office} + {url gitlab / texty-office.vim;https://gitlab.com/Syndamia/texty-office.vim} +: An imperfect converter from DOCX, PPTX and XLSX to normal text with it's associated {url Vim;https://www.vim.org/} plugin. \n + {` GNU GPLv3} & {` MIT} | {` C++} {` vimscript} | {` Office file} {` converter} {` plugin} {` Vim} {` CLI tool} -; [url https://gitlab.com/Syndamia/small-web-utilities gitlab / small-web-utilities]   [*maintained*] -: A collection of small but fast utilities, like a checklist, that work locally on your browser. Also hosted [url https://utils.syndamia.com here]. \n - [`GNU GPLv3`] | [`HTML`] [`Javascript`] | [`checklist`] [`utilities`] +; {url gitlab / small-web-utilities;https://gitlab.com/Syndamia/small-web-utilities}   {i maintained} +: A collection of small but fast utilities, like a checklist, that work locally on your browser. Also hosted {url here;https://utils.syndamia.com}. \n + {` GNU GPLv3} | {` HTML} {` Javascript} | {` checklist} {` utilities} -; [url https://gitlab.com/Syndamia/ss-law gitlab / ss-law] + [url https://github.com/Syndamia/ss-law github / ss-law]   [*maintained*] +; {url gitlab / ss-law;https://gitlab.com/Syndamia/ss-law} + {url github / ss-law;https://github.com/Syndamia/ss-law}   {i maintained} : A small, lightweight and simple static site generation system, extracted as a template from my own \n - [`Markdown`] [`bash`] [`awk`] | [`ssg`] [`lowdown`] [`static site generator`] [`pipelines`] + {` Markdown} {` bash} {` awk} | {` ssg} {` lowdown} {` static site generator} {` pipelines} -; [url https://gitlab.com/Syndamia/homelander gitlab / homelander]   [*maintained*] +; {url gitlab / homelander;https://gitlab.com/Syndamia/homelander}   {i maintained} : A very small and good looking, handmade prompt for zsh \n - [`GPLv3`] | [`bash`] | [`zsh`] [`shell`] [`prompt`] [`script`] [`Linux`] + {` GPLv3} | {` bash} | {` zsh} {` shell} {` prompt} {` script} {` Linux} -; [url https://gitlab.com/Syndamia/goodwolf gitlab / goodwolf]   [*abandoned*] -: Fork of the [url https://hacktivis.me/projects/badwolf badwolf] browser, which aims to add features \n - [`BSD-3-Clause`] | [`C`] | [`web browser`] [`GTK`] [`WebKitGTK`] [`Linux`] +; {url gitlab / goodwolf;https://gitlab.com/Syndamia/goodwolf}   {i abandoned} +: Fork of the {url badwolf;https://hacktivis.me/projects/badwolf} browser, which aims to add features \n + {` BSD-3-Clause} | {` C} | {` web browser} {` GTK} {` WebKitGTK} {` Linux} -#### [*2021*] +#### {i 2021} :defs -; [url https://gitlab.com/Syndamia/reposync gitlab / RepoSync]   [*completed*] +; {url gitlab / RepoSync;https://gitlab.com/Syndamia/reposync}   {i completed} : Script and some config files for synchronizing a git repository with a server \n - [`MIT`] | [`python`] | [`server`] [`git`] [`systemd`] + {` MIT} | {` python} | {` server} {` git} {` systemd} -; [url https://github.com/Syndamia/filite-list github / filite-list]   [*completed*] -: Script for managing [url https://github.com/raftario/filite filite] links \n - [`GPLv3`] | [`bash`] | [`filite`] [`server`] [`script`] [`Linux`] +; {url github / filite-list;https://github.com/Syndamia/filite-list}   {i completed} +: Script for managing {url filite;https://github.com/raftario/filite} links \n + {` GPLv3} | {` bash} | {` filite} {` server} {` script} {` Linux} -#### [*2020*] +#### {i 2020} :defs -; [url https://github.com/Team-Kaleidoscope/DevHive github / DevHive] and [url https://github.com/Team-Kaleidoscope/DevHive-Angular github / DevHive-Angular]   [*completed*] +; {url github / DevHive;https://github.com/Team-Kaleidoscope/DevHive} and {url github / DevHive-Angular;https://github.com/Team-Kaleidoscope/DevHive-Angular}   {i completed} : DevHive is a social network oriented towards programmers. It's FOSS, built from the ground up, and made from a team of three for a course. \n - [`GPLv3`] | [`C#`] [`TypeScript`] | [`Angular`] [`ASP.NET Core`] [`social media`] [`mvc`] [`Docker`] [`CSS`] + {` GPLv3} | {` C#} {` TypeScript} | {` Angular} {` ASP.NET Core} {` social media} {` mvc} {` Docker} {` CSS} -; [url https://github.com/Syndamia/min-youtube-element-blocker github / min-youtube-element-blocker]   [*maintained*] +; {url github / min-youtube-element-blocker;https://github.com/Syndamia/min-youtube-element-blocker}   {i maintained} : Userscript for hiding certain UI elements in YouTube \n - [`MIT`] | [`JavaScript`] | [`youtube`] [`userscript`] [`css`] + {` MIT} | {` JavaScript} | {` youtube} {` userscript} {` css} diff --git a/src/accessibility.du b/src/accessibility.du index 7ed44d3..0cfaa77 100644 --- a/src/accessibility.du +++ b/src/accessibility.du @@ -1,4 +1,7 @@ -# Accessibility +'def title Accessibility +'def desc I do want to make sure the content on this website is consumable by people with disabilities, however I also want to fancy features. I'm currently maintaining a balance between the two. + +# {title} I do personally want to make sure the content on this website is consumable by people with disabilities and/or with poor internet connection and browser speed. However, at the same time, I want to add any feature that I feel would improve the website experience, for everyone else. @@ -6,7 +9,7 @@ This is how I reach a middle ground between both sides: ### Bare bone website version -At [url https://tiny.syndamia.com tiny.syndamia.com] I offer my website with almost all styling and JavaScript functionality removed. +At {url tiny.syndamia.com;https://tiny.syndamia.com} I offer my website with almost all styling and JavaScript functionality removed. You'll receive only the webpage text and asset contents, and nothing more. From my testing, pages usually load two times faster on tiny.syndamia.com. @@ -16,16 +19,16 @@ I do also hope that without the styling and JavaScript, people with impairments 'footnote normal-pages Meaning a page that has only text, images and video. If the page contains a JavaScript demo, it obviously cannot function entirely without JS. -By design, all "normal" pages[$normal-pages] can be viewed without any JavaScript, any styling and any custom font. +By design, all "normal" pages{normal-pages} can be viewed without any JavaScript, any styling and any custom font. All of those are meant to make the browsing experience prettier and easier for those that can benefit from it and allow you to change and block certain features without the content being obstructed. -Even my [url /talks talks], where each one is a collection of delicately crafted CSS and JS slides, can be viewed as any normal text article on my site. +Even my {url talks;/talks}, where each one is a collection of delicately crafted CSS and JS slides, can be viewed as any normal text article on my site. ### Reasonable icons First, icons on this website are managed with an icon font. -I've watched [url https://www.youtube.com/watch?v=9xXBYcWgCHA Seren Davies' talk], but I've found working with SVGs noticeably increases workload on my end. +I've watched {url Seren Davies' talk;https://www.youtube.com/watch?v=9xXBYcWgCHA}, but I've found working with SVGs noticeably increases workload on my end. -[=However=], I've still implemented those icons with accessibility in mind: +{b However}, I've still implemented those icons with accessibility in mind: :unordered - Navigation is done with text entries in the sidebar, not icons. diff --git a/src/acknowledgements.du b/src/acknowledgements.du index 06d0aad..fb4cc5b 100644 --- a/src/acknowledgements.du +++ b/src/acknowledgements.du @@ -1,36 +1,39 @@ -# Acknowledgements +'def title Acknowledgements +'def desc A list of (mostly) icon projects and blog inspirations + +# {title} :defs -; [url https://github.com/tabler/tabler-icons tabler-icons], licensed under [url https://github.com/tabler/tabler-icons/blob/master/LICENSE MIT] +; {url tabler-icons;https://github.com/tabler/tabler-icons}, licensed under {url MIT;https://github.com/tabler/tabler-icons/blob/master/LICENSE} : All UI icons -; [url https://github.com/sindresorhus/github-markdown-css github-markdown-css], licensed under [url https://github.com/sindresorhus/github-markdown-css/blob/main/license MIT] +; {url github-markdown-css;https://github.com/sindresorhus/github-markdown-css}, licensed under {url MIT;https://github.com/sindresorhus/github-markdown-css/blob/main/license} : Some of the styling, especially for tables and code/pre tags -; [url https://github.com/lipis/flag-icons flag-icons], licensed under [url https://github.com/lipis/flag-icons/blob/main/LICENSE MIT] +; {url flag-icons;https://github.com/lipis/flag-icons}, licensed under {url MIT;https://github.com/lipis/flag-icons/blob/main/LICENSE} : Icons of flags -; [url https://github.com/linuxmint/mint-y-icons mint-y-icons], licensed under [url https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0] +; {url mint-y-icons;https://github.com/linuxmint/mint-y-icons}, licensed under {url CC BY-SA 4.0;https://creativecommons.org/licenses/by-sa/4.0} : Certain icons in articles/pages ## Special thanks to :defs -; [url https://danluu.com/programming-blogs/ danuluu's programming blogs list] +; {url danuluu's programming blogs list;https://danluu.com/programming-blogs/} : For the excellent list of awesome blogs, from which I drew a good amount of inspiration. -; [url https://shipilev.net/ Aleksey Shipilëv's], [url https://tonsky.me/ Nikita's], [url https://jvns.ca/ Julia Evan's] and [url https://hacktivis.me Haelwenn Monnier's] blogs +; {url Aleksey Shipilëv's;https://shipilev.net/}, {url Nikita's;https://tonsky.me/}, {url Julia Evan's;https://jvns.ca/} and {url Haelwenn Monnier's;https://hacktivis.me} blogs : From which I drew the most inspiration -; [url http://www.ringlet.net/roam/ Peter Pentchev's personal page] +; {url Peter Pentchev's personal page;http://www.ringlet.net/roam/} : For igniting my love for website badges and the somewhat rare "Created with Vim" badge -; [url https://www.anybrowser.org/cdaveb/ Cari D. Burstein] -: For his [url https://www.anybrowser.org/campaign/index.html Viewable with Any Browser] comapign and the awesome [url https://www.anybrowser.org/campaign/abgraphics.html provided badges] +; {url Cari D. Burstein;https://www.anybrowser.org/cdaveb/} +: For his {url Viewable with Any Browser;https://www.anybrowser.org/campaign/index.html} comapign and the awesome {url provided badges;https://www.anybrowser.org/campaign/abgraphics.html} -; [url https://sh2.us/ RusticCyberpunk/cypnk] -: For his [url https://sh2.us/buttons/ archive] of [url https://gtmcknight.com/ Taylor McKnight's] collection of buttons +; {url RusticCyberpunk/cypnk;https://sh2.us/} +: For his {url archive;https://sh2.us/buttons/} of {url Taylor McKnight's;https://gtmcknight.com/} collection of buttons -; [url https://kalsey.com/ Adam Kalsey] -: For his awesome [url https://kalsey.com/tools/buttonmaker/ button maker] +; {url Adam Kalsey;https://kalsey.com/} +: For his awesome {url button maker;https://kalsey.com/tools/buttonmaker/} diff --git a/src/blog.du b/src/blog.du index cf0bf46..d282d38 100644 --- a/src/blog.du +++ b/src/blog.du @@ -1,113 +1,116 @@ -# Blog +'def title Blog +'def desc Articles detailing personal experiences or exploration of certain topics + +# {title} Articles detailing personal experiences or exploration of certain topics. \n -#### [*2024*] +#### {i 2024} :defs -; [$bg] 18 Nov   [url /blog/switchut-izgorq Суичът изгоря!] -: [`Shallow dive`] | [`Story`] | [`Networking`] [`Switch`] [`NetworkPartner`] +; {bg} 18 Nov   {url Суичът изгоря!;/blog/switchut-izgorq} +: {` Shallow dive} | {` Story} | {` Networking} {` Switch} {` NetworkPartner} -; [$gb] 06 Oct   [url /blog/the-physics-behind-a-black-hole-shader The physics behind a black hole shader] -: [`Deep dive`] | [`Physics`] | [`General theory of relativity`] [`Celestial mechanics`] [`Gravity`] [`Black Hole`] [`Algorithm`] +; {gb} 06 Oct   {url The physics behind a black hole shader;/blog/the-physics-behind-a-black-hole-shader} +: {` Deep dive} | {` Physics} | {` General theory of relativity} {` Celestial mechanics} {` Gravity} {` Black Hole} {` Algorithm} -; [$gb] 20 Feb   [url /blog/microsoft-and-foss-extinguish Microsoft and FOSS: a fire to be extinguished] -: [`Shallow dive`] | [`Opinion`] | [`Microsoft`] [`GitHub`] [`Linux`] [`FOSS`] +; {gb} 20 Feb   {url Microsoft and FOSS: a fire to be extinguished;/blog/microsoft-and-foss-extinguish} +: {` Shallow dive} | {` Opinion} | {` Microsoft} {` GitHub} {` Linux} {` FOSS} -#### [*2023*] +#### {i 2023} :defs -; [$gb] 16 Dec   [url /blog/fix-qc-timeout Fix "qc timeout" kernel log error] -: [`Linux`] | [`kernel`] | [`libata`] [`qc`] [`logs`] [`DMA`] +; {gb} 16 Dec   {url Fix "qc timeout" kernel log error;/blog/fix-qc-timeout} +: {` Linux} | {` kernel} | {` libata} {` qc} {` logs} {` DMA} -; [$gb] 30 Aug   [url /blog/thinkpad-x270-my-favorite-machine ThinkPad X270 - my favorite machine] -: [`Medium dive`] | [`Review`] | [`Lenovo`] [`ThinkPad`] [`Yoga`] +; {gb} 30 Aug   {url ThinkPad X270 - my favorite machine;/blog/thinkpad-x270-my-favorite-machine} +: {` Medium dive} | {` Review} | {` Lenovo} {` ThinkPad} {` Yoga} -; [$gb] 19 Jul   [url /blog/icon-fonts-arent-evil-you-just-have-to-care Icon fonts aren't evil, you just have to care] -: [`Shallow dive`] | [`Web development`] | [`Icon font`] [`SVG`] [`Accessibility`] [`FontForge`] +; {gb} 19 Jul   {url Icon fonts aren't evil, you just have to care;/blog/icon-fonts-arent-evil-you-just-have-to-care} +: {` Shallow dive} | {` Web development} | {` Icon font} {` SVG} {` Accessibility} {` FontForge} -; [$bg] 14 Jul   [url /blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq ФМИ и висшето образование в програмистката индустрия] -: [`Deep dive`] | [`University`] | [`FMI`] [`Education`] +; {bg} 14 Jul   {url ФМИ и висшето образование в програмистката индустрия;/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq} +: {` Deep dive} | {` University} | {` FMI} {` Education} -; [$gb] 28 Jun   [url /blog/fix-network-brother-printers Fix networked Brother printers not working in Linux] -: [`Linux`] | [`CUPS`] | [`Printers`] [`Brother`] [`Network`] [`avahi`] +; {gb} 28 Jun   {url Fix networked Brother printers not working in Linux;/blog/fix-network-brother-printers} +: {` Linux} | {` CUPS} | {` Printers} {` Brother} {` Network} {` avahi} -; [$gb] 14 Jun   [url /blog/gns3-initsh-no-such-file Fix "exec /gns3/init.sh: no such file or directory"] -: [`Linux`] | [`GNS3`] | [`Docker`] [`busybox`] +; {gb} 14 Jun   {url Fix "exec /gns3/init.sh: no such file or directory";/blog/gns3-initsh-no-such-file} +: {` Linux} | {` GNS3} | {` Docker} {` busybox} -; [$gb] 07 Jun   [url /blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend Friendship ended with Funtoo, now Gentoo is my best friend] -: [`Shallow dive`] | [`Linux`] | [`Funtoo`] [`Gentoo`] [`portage`] [`packages`] [`emerge`] [`ebuild`] +; {gb} 07 Jun   {url Friendship ended with Funtoo, now Gentoo is my best friend;/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend} +: {` Shallow dive} | {` Linux} | {` Funtoo} {` Gentoo} {` portage} {` packages} {` emerge} {` ebuild} -; [$gb] 01 May   [url /blog/bash-is-weird BASH is weird] -: [`Shallow dive`] | [`bash`] | [`Linux`] [`scripting`] +; {gb} 01 May   {url BASH is weird;/blog/bash-is-weird} +: {` Shallow dive} | {` bash} | {` Linux} {` scripting} -; [$gb] 26 Apr   [url /blog/install-drivers-for-epson-scanners Install drivers for Epson scanners] -: [`Linux`] | [`SANE`] | [`Scanners`] [`Epson`] [`epkowa`] [`iscan`] +; {gb} 26 Apr   {url Install drivers for Epson scanners;/blog/install-drivers-for-epson-scanners} +: {` Linux} | {` SANE} | {` Scanners} {` Epson} {` epkowa} {` iscan} -; [$gb] 25 Apr   [url /blog/managing-apps-with-adb-without-root Managing Android apps with ADB (and without root)] -: [`Android`] | [`ADB`] | [`Apps`] [`Linux`] [`Windows`] +; {gb} 25 Apr   {url Managing Android apps with ADB (and without root);/blog/managing-apps-with-adb-without-root} +: {` Android} | {` ADB} | {` Apps} {` Linux} {` Windows} -; [$gb] 18 Apr   [url /blog/sane-explanation-of-compilers/part-1 Sane explanation of compilers: Part 1] -: [`Deep dive`] | [`Compilers`] | [`C`] [`yacc`] [`bison`] [`math`] [`Trees`] [`Regex`] [`Grammar`] [`Languages`] +; {gb} 18 Apr   {url Sane explanation of compilers: Part 1;/blog/sane-explanation-of-compilers/part-1} +: {` Deep dive} | {` Compilers} | {` C} {` yacc} {` bison} {` math} {` Trees} {` Regex} {` Grammar} {` Languages} -; [$gb] 13 Jan   [url /blog/plan9-in-linux-mouse-menus Plan 9 in Linux: Mouse menus] -: [`Medium dive`] | [`Linux`] | [`Plan 9`] [`mouse`] [`bash`] [`script`] [`X11`] [`openbox`] [`jgmenu`] [`plumber`] +; {gb} 13 Jan   {url Plan 9 in Linux: Mouse menus;/blog/plan9-in-linux-mouse-menus} +: {` Medium dive} | {` Linux} | {` Plan 9} {` mouse} {` bash} {` script} {` X11} {` openbox} {` jgmenu} {` plumber} -; [$gb] 01 Jan   [url /blog/virt-manager-freeze-on-browse virt-manager freezing up when clicking Browse in any window] -: [`Linux`] | [`virt-manager`] | [`QEMU/KVM`] [`libvirt`] [`Linux`] [`GTK`] +; {gb} 01 Jan   {url virt-manager freezing up when clicking Browse in any window;/blog/virt-manager-freeze-on-browse} +: {` Linux} | {` virt-manager} | {` QEMU/KVM} {` libvirt} {` Linux} {` GTK} -#### [*2022*] +#### {i 2022} :defs -; [$gb] 23 Dec   [url /blog/2.6-years-of-web-design 2.6 years of web design] -: [`Shallow dive`] | [`Web design`] +; {gb} 23 Dec   {url 2.6 years of web design;/blog/2.6-years-of-web-design} +: {` Shallow dive} | {` Web design} -; [$gb] 13 Dec   [url /blog/when-a-language-forces-simpler-thinking When a language forces simpler thinking] -: [`Shallow dive`] | [`Common Lisp`] | [`Advent of Code`] +; {gb} 13 Dec   {url When a language forces simpler thinking;/blog/when-a-language-forces-simpler-thinking} +: {` Shallow dive} | {` Common Lisp} | {` Advent of Code} -; [$gb] 04 Dec   [url /blog/taming-the-fun-too Taming The Fun-too] -: [`Story`] | [`Funtoo`] | [`Linux`] [`Gentoo`] [`packages`] +; {gb} 04 Dec   {url Taming The Fun-too;/blog/taming-the-fun-too} +: {` Story} | {` Funtoo} | {` Linux} {` Gentoo} {` packages} -; [$gb] 01 Nov   [url /blog/turn-off-notifications-windows How to turn off notifications on Windows] -: [`Windows 10`] | [`Settings`] | [`Notifications`] +; {gb} 01 Nov   {url How to turn off notifications on Windows;/blog/turn-off-notifications-windows} +: {` Windows 10} | {` Settings} | {` Notifications} -; [$gb] 01 Nov   [url /blog/disable-sticky-keys-popup How to disable Sticky Keys prompt] -: [`Windows`] | [`Settings`] | [`Sticky Keys`] +; {gb} 01 Nov   {url How to disable Sticky Keys prompt;/blog/disable-sticky-keys-popup} +: {` Windows} | {` Settings} | {` Sticky Keys} -; [$gb] 26 Oct   [url /blog/remove-weather-widget How to remove Windows Weather Widget] -: [`Windows 10`] | [`Settings`] | [`Taskbar`] [`Weather Widget`] +; {gb} 26 Oct   {url How to remove Windows Weather Widget;/blog/remove-weather-widget} +: {` Windows 10} | {` Settings} | {` Taskbar} {` Weather Widget} -; [$gb] 04 Oct   [url /blog/windows-run-dialog Windows Run dialog] -: [`Windows`] | [`Commands`] | [`Run`] [`Settings`] +; {gb} 04 Oct   {url Windows Run dialog;/blog/windows-run-dialog} +: {` Windows} | {` Commands} | {` Run} {` Settings} -; [$gb] 03 Oct   [url /blog/export-skype How to export Skype data] -: [`Skype`] | [`Export`] | [`Archive`] [`skype-parser`] +; {gb} 03 Oct   {url How to export Skype data;/blog/export-skype} +: {` Skype} | {` Export} | {` Archive} {` skype-parser} -; [$gb] 16 Sep   [url /blog/how-to-encrypt-email How to encrypt email] -: [`All`] | [`Email`] | [`PGP`] [`S/MIME`] [`Email Client`] [`Gmail`] [`Outlook`] [`Protonmail`] +; {gb} 16 Sep   {url How to encrypt email;/blog/how-to-encrypt-email} +: {` All} | {` Email} | {` PGP} {` S/MIME} {` Email Client} {` Gmail} {` Outlook} {` Protonmail} -; [$gb] 10 Sep   [url /blog/encrypted-email Encrypted email] -: [`Medium dive`] | [`Email`] | [`Encryption`] [`Security`] [`PGP`] [`S/MIME`] [`Protonmail`] [`Tutanota`] +; {gb} 10 Sep   {url Encrypted email;/blog/encrypted-email} +: {` Medium dive} | {` Email} | {` Encryption} {` Security} {` PGP} {` S/MIME} {` Protonmail} {` Tutanota} -; [$gb] 30 Jul   [url /blog/fix-no-frame-buffer-plan9 Fix "No frame buffer" error in Plan 9] -: [`Plan 9`] | [`Configuration`] | [`QEMU/KVM`] [`Linux`] [`monitor`] +; {gb} 30 Jul   {url Fix "No frame buffer" error in Plan 9;/blog/fix-no-frame-buffer-plan9} +: {` Plan 9} | {` Configuration} | {` QEMU/KVM} {` Linux} {` monitor} -; [$gb] 30 Jul   [url /blog/install-plan9-with-virt-manager Install Plan 9 with virt-manager] -: [`Plan 9`] | [`Installation`] | [`Setup`] [`QEMU/KVM`] [`virt-manager`] [`Linux`] +; {gb} 30 Jul   {url Install Plan 9 with virt-manager;/blog/install-plan9-with-virt-manager} +: {` Plan 9} | {` Installation} | {` Setup} {` QEMU/KVM} {` virt-manager} {` Linux} -#### [*2020*] +#### {i 2020} :defs -; [$gb] 24 Jul   [url /blog/how-to-use-jira How to use Jira] -: [`Project Management`] | [`Jira`] | [`Agile`] [`Issue tracking`] [`Bug tracking`] [`Kanban`] [`Atlassian`] +; {gb} 24 Jul   {url How to use Jira;/blog/how-to-use-jira} +: {` Project Management} | {` Jira} | {` Agile} {` Issue tracking} {` Bug tracking} {` Kanban} {` Atlassian} -; [$gb] 21 May   [url /blog/connect-to-mysql-in-dotnet-ef Connect to Mysql in .NET and Entity Framework] -: [`ASP.Net`] | [`MySQL`] | [`Entity Framework`] [`Pomelo`] +; {gb} 21 May   {url Connect to Mysql in .NET and Entity Framework;/blog/connect-to-mysql-in-dotnet-ef} +: {` ASP.Net} | {` MySQL} | {` Entity Framework} {` Pomelo} -; [$gb] 20 May   [url /blog/mundus-first-shot-at-gamedev Mundus: My first shot at game development] -: [`Deep dive`] | [`Gamedev`] | [`2D`] [`Sandbox`] [`Crafting`] [`Building`] [`Fighting`] [`GtkSharp 2.0`] [`C#`] +; {gb} 20 May   {url Mundus: My first shot at game development;/blog/mundus-first-shot-at-gamedev} +: {` Deep dive} | {` Gamedev} | {` 2D} {` Sandbox} {` Crafting} {` Building} {` Fighting} {` GtkSharp 2.0} {` C#} diff --git a/src/blog/2.6-years-of-web-design/index.du b/src/blog/2.6-years-of-web-design/index.du index 2678065..5b99ea7 100644 --- a/src/blog/2.6-years-of-web-design/index.du +++ b/src/blog/2.6-years-of-web-design/index.du @@ -1,23 +1,23 @@ -# 2.6 years of web design +'def title 2.6 years of web design +'def desc Outlining my experience with Web design while making this website -'define expected-reading 13 min -'define created 23 December 2022 -'define edited 23 December 2022 -[$pagenav] +# {title} + +{pagenav 13 min;23 December 2022;23 December 2022} :contents .numbered -1. [url #v1.0 v1.0] -2. [url #v2.0 v2.0] -3. [url #v2.1 v2.1] -4. [url #v2.2 v2.2] -5. [url #v3.0 v3.0] -6. [url #v3.1 v3.1] -7. [url #now now] -8. [url #appendix Appendix] +1. {uhref v1.0} +2. {uhref v2.0} +3. {uhref v2.1} +4. {uhref v2.2} +5. {uhref v3.0} +6. {uhref v3.1} +7. {uhref now} +8. {uhref Appendix} -On 17 May 2020 I [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/f2d3991cf3381d4d794b3faa2890439bb70af729 pushed the very first version of this website], which went live 3 days later. +On 17 May 2020 I {url pushed the very first version of this website;https://gitlab.com/Syndamia/syndamiadotcom/-/commit/f2d3991cf3381d4d794b3faa2890439bb70af729}, which went live 3 days later. The whole idea of making my own website came on a whim: I had recently turned 18 and spent some of my money on getting a small VPS (which was primarily used for cloud storage). There was no plan and I had never done anything like it, so a shitty website was to be expected. @@ -25,66 +25,66 @@ There was no plan and I had never done anything like it, so a shitty website was Looking back at it now, that first design's color palette was comprised of three dull grey colors, which didn't contrast very much on the white font: -[image ./img/v1.0-index.png] +{img ./img/v1.0-index.png} For code blocks, the background was a dark-blue color with a blue-ish font color, absolutely horrible for readability: -[image ./img/v1.0-code\ block.png] +{img block.png;./img/v1.0-code block.png} -Although I wasn't the one to invent that color scheme, it was [*inspired*] from [url https://github.com/linuxmint/xed xed]'s Oblivion theme. +Although I wasn't the one to invent that color scheme, it was {i inspired} from {url xed;https://github.com/linuxmint/xed}'s Oblivion theme. It wasn't all completely bonkers, there were some not-so-ugly design decisions. Navigation was done with tabs, which look decently nice on a desktop. On blog posts, and especially on those with multiple pages, you would have the title on the left, and a close button on the right, "mimicking" a browser window. -[image ./img/v1.0-tutorial-page.png] +{img ./img/v1.0-tutorial-page.png} As you can imagine, this was a scalability nightmare. If the title was too long or there were too many pages, stuff would overlap in an unreadable manner: -[image ./img/v1.0-index-smallscreen.png] +{img ./img/v1.0-index-smallscreen.png} -You know, if this website was published on [url https://neocities.org/ neocities], my desktop-oriented unscaleable layout might've been seen as cool and novel... +You know, if this website was published on {url neocities;https://neocities.org/}, my desktop-oriented unscaleable layout might've been seen as cool and novel... Thankfully (or maybe unfortunately), I didn't go down that road. Finally, tables, like those used in the "Projects" listing, were the absolute dumbest: -[image ./img/v1.0-projects.png] +{img ./img/v1.0-projects.png} As you can see, the design was overwhelmingly ugly, with many boneheaded decisions behind it. -Did I mention every post had to be written entirely by hand in HTML, except for the headers and footers, which were [url https://gitlab.com/Syndamia/syndamiadotcom/-/tree/v1.0/website/js [=generated client-side with JavaScript=]]? +Did I mention every post had to be written entirely by hand in HTML, except for the headers and footers, which were {url {b generated client-side with JavaScript};https://gitlab.com/Syndamia/syndamiadotcom/-/tree/v1.0/website/js}? -Nonetheless, it served as a good starting point and stepping stone, for my web development [*adventures*]. +Nonetheless, it served as a good starting point and stepping stone, for my web development {i adventures}. ### v2.0 -Less than two months later, on 21 July, [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/64fbbd514733e42dd047bf65c511563a84ebd629 I did a complete redesign]. -To more easily separate the two, I decided to use [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases releases], where a major version would signify a major styling change, and minor versions would be reserved for other important changes, like how the whole website is generated. +Less than two months later, on 21 July, {url I did a complete redesign;https://gitlab.com/Syndamia/syndamiadotcom/-/commit/64fbbd514733e42dd047bf65c511563a84ebd629}. +To more easily separate the two, I decided to use {url releases;https://gitlab.com/Syndamia/syndamiadotcom/-/releases}, where a major version would signify a major styling change, and minor versions would be reserved for other important changes, like how the whole website is generated. Speaking of generated, I actually went away with the old "system" of manual labour, and turned to technology for aid. -It's all thanks to [url https://www.youtube.com/@WolfgangsChannel Wolfgang's Channel]'s tutorial on making a [url https://www.youtube.com/watch?v=N_ttw2Dihn8 "Fast & Minimal Blog"]. -There, he showed how to setup and use [url https://www.romanzolotarev.com/ssg.html ssg] with [url https://kristaps.bsd.lv/lowdown/ lowdown], a combination that still powers this website. +It's all thanks to {url Wolfgang's Channel;https://www.youtube.com/@WolfgangsChannel}'s tutorial on making a {url "Fast & Minimal Blog";https://www.youtube.com/watch?v=N_ttw2Dihn8}. +There, he showed how to setup and use {url ssg;https://www.romanzolotarev.com/ssg.html} with {url lowdown;https://kristaps.bsd.lv/lowdown/}, a combination that still powers this website. Turning to the actual website itself, now it looked quite pleasant, in the day at least: -[image ./img/v2.0-index.png] +{img ./img/v2.0-index.png} Rather than using multiple colors for different elements, I went for a monochrome "printed on a piece of paper" look. One might call that regression, but I'd like to think of it as minimalism. Looking at those same code blocks and tables: -[image ./img/v2.0-code\ block.png] -[image ./img/v2.0-resume.png] +{img block.png;./img/v2.0-code block.png} +{img ./img/v2.0-resume.png} Ay, that's pretty clean! But it should remind you of something. Before, the only time I would work with Markdown files was in GitHub READMEs. So, with that association in place, replicating GitHub's style was a natural choice. -Though that last part wasn't done by me, but by [url https://github.com/sindresorhus/github-markdown-css sindresorhus]. +Though that last part wasn't done by me, but by {url sindresorhus;https://github.com/sindresorhus/github-markdown-css}. As for the overall design, there isn't too much to say. Yes, the original tab idea kinda lived on, as those buttons at the top, and yes, it still wasn't scaleable, but now it didn't even try to be. -[image ./img/v2.0-index-smartphone.png] +{img ./img/v2.0-index-smartphone.png} Overall, this made it more "commercialized", soulless (assuming v1.0 had one) and plain old boring. It seems I hit the other end of the spectrum, from ugly but interesting to pleasing but dull. @@ -93,7 +93,7 @@ It seems I hit the other end of the spectrum, from ugly but interesting to pleas Over the following half a year, I wrote a couple more articles, but most importantly the styling was finally made scaleable: -[image ./img/v2.1-index-smartphone.png] +{img ./img/v2.1-index-smartphone.png} Ignoring my big fat head taking up 70% of the screen, the index page properly fit on a mobile screen! The navigation tabs weren't very symmetrically organized, but at least nothing was overlapping and overflowing over the screen. @@ -101,9 +101,9 @@ The navigation tabs weren't very symmetrically organized, but at least nothing w ### v2.2 Still, by that time I started to get criminally bored by that black and white appearance. -As an avid fan of not hurting my eyes and [url https://github.com/morhetz/gruvbox gruvbox], a color overhaul needed to be done. +As an avid fan of not hurting my eyes and {url gruvbox;https://github.com/morhetz/gruvbox}, a color overhaul needed to be done. -But I'm getting ahead of myself, we need to sidetrack to a project I was working on at the time of [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v2.1 2.1's release]: [url https://github.com/Team-Kaleidoscope DevHive]. +But I'm getting ahead of myself, we need to sidetrack to a project I was working on at the time of {url 2.1's release;https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v2.1}: {url DevHive;https://github.com/Team-Kaleidoscope}. Sparing you the details, it was a social media app, with detached front-end and back-end. Me and two other guys worked on it for about 5 months, from December 2020 to April 2021, as a course project. @@ -111,23 +111,23 @@ Up until this point, the course I'm talking about almost didn't touch front-end As you might imagine, I was the only one with any idea of web design, meaning I was the "lead designer". This time, however, I wanted to do it a bit more properly, so I made mockups of the final design. -The first was done in [url https://pencil.evolus.vn/ Pencil], a somewhat limited application for designing layouts: +The first was done in {url Pencil;https://pencil.evolus.vn/}, a somewhat limited application for designing layouts: -[image ./img/devhive-index-concept1.png] +{img ./img/devhive-index-concept1.png} Pretty quickly I turned to actual HTML and CSS, because I needed a more realistic feel of how the actual elements would be laid out. Another idea that came up to mind was using a palette: a certain selection of colors for everything. After talking with the others, I found a decent selection of blue and orange sunset-y colours and got to work. The end result was this beauty: -[image ./img/devhive-index-concept2.png] +{img ./img/devhive-index-concept2.png} Although it looked pretty nice, we decided against it, since the focus was on the back-end, the front-end needed to be simpler. There are also some problems with the color scheme, but more on that later. Then I did what I had already done before: simplified the devil out of it. -[image ./img/devhive-index-concept3.png] +{img ./img/devhive-index-concept3.png} Now this looks way too cartoon-ish, you could make it with a steady hand and a ruler on a sheet of paper. However it made the others happy, so we went along with it. @@ -135,7 +135,7 @@ However it made the others happy, so we went along with it. The overall flatness and emptiness, and general boringness bugged me for a while. Some time later, after messing around for a couple hours, I came up with this: -[image ./img/devhive-index-concept4.png] +{img ./img/devhive-index-concept4.png} A much more modern-looking and feeling concept, completely different from it's comic roots. Unfortunately, we didn't go with it, later we found out it had some issues with certain elements, and the previous idea was already implemented. @@ -156,14 +156,14 @@ I needed something in between the second and third concepts, something which was Coincidentally, at the same time, I was working on a dark colored implementation of my website, using the gruvbox color. Putting two and two together, I came up with this thing; -[image ./img/devhive-index-concept5.png] +{img ./img/devhive-index-concept5.png} Now this looked really nice, somewhat professional even, was very simple and didn't hurt your eyes. Suffice to say, everyone loved it, and we redid everything to look like it. As for my own website, this is what it looked like by the time I made release 2.2: -[image ./img/v2.2-index.png] +{img ./img/v2.2-index.png} There is no point in showing code blocks or other elements, since it was just a change of colors. But boy oh boy how long it took to make such a simple change. @@ -171,31 +171,31 @@ That's where everything stayed for a while. ### v3.0 -Of course, there were changes, I wrote more posts, tweaked some of the styling, hell, I even started adding ([=non required=]) JavaScript functionality. +Of course, there were changes, I wrote more posts, tweaked some of the styling, hell, I even started adding ({b non required}) JavaScript functionality. Still, I was yearning for something better. Scalability was continuing to be an issue, outside of the annoying misalignment, navigation buttons in the header or footer would disappear into the void if it's contents were too long: -[image ./img/v2.2-index-footer-smallwidth.png] +{img ./img/v2.2-index-footer-smallwidth.png} This example is unrealistic, but there were times where I wanted to put something longer in the footer button, and this issue arose. Also the whole button idea wasn't very expandable, what if I wanted to have not 6 but more than 20 buttons in the header up top? -[image ./img/v2.2-index-full-header.png] +{img ./img/v2.2-index-full-header.png} And don't get me started on how comically bad this is on mobile: -[image ./img/v2.2-index-full-header-smartphone.png] +{img ./img/v2.2-index-full-header-smartphone.png} Something needed to change yet again, and something did. -A year and a third later, on [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/bde3ebdea6310c891b7e38185906d1a1e03977e4 3 July 2022], I went away with the tabbed-like button layout, and opted for a dead simple sidebar: +A year and a third later, on {url 3 July 2022;https://gitlab.com/Syndamia/syndamiadotcom/-/commit/bde3ebdea6310c891b7e38185906d1a1e03977e4}, I went away with the tabbed-like button layout, and opted for a dead simple sidebar: -[image ./img/v3.0-index-initial.png] +{img ./img/v3.0-index-initial.png} About that useless right border and the weird choice for only left and bottom borders on the sidebar: I wanted some separation for the sidebar and I wanted more "fun" in the overall design. -Most of the inspiration for those came from [url https://jvns.ca/ Julia Evan's blog], where there is a big orange ribbon running on the sides and across the page. +Most of the inspiration for those came from {url Julia Evan's blog;https://jvns.ca/}, where there is a big orange ribbon running on the sides and across the page. Over time I did more tweaking on the colors and layout of everything, so by the time I created release 3.0, it looked like this: -[image ./img/v3.0-index.png] +{img ./img/v3.0-index.png} A good question you might be asking yourself is "How is this supposed to be scaleable?" The answer is that it kinda of wasn't, at the time. @@ -210,41 +210,41 @@ The whole point of DevHive's final redesign was to use colors for better separat But that completely when over my head when I initially did that 3.0 redesign. Fortunately, it later came back. -It might've been four and a half months later, but I finally [url https://gitlab.com/Syndamia/syndamiadotcom/-/commit/55afc85bf7da9c0ed5e8859027080aebfa55ec50 added color separation between the background and article and navbar]. +It might've been four and a half months later, but I finally {url added color separation between the background and article and navbar;https://gitlab.com/Syndamia/syndamiadotcom/-/commit/55afc85bf7da9c0ed5e8859027080aebfa55ec50}. -[image ./img/v3.1-index.png] +{img ./img/v3.1-index.png} And about that unfixed scalability? Well, I fixed it, now on a mobile devices, the navbar stays up top, but is shrunk and can be expanded with a button: -[image ./img/v3.1-index-smartphone.png] +{img ./img/v3.1-index-smartphone.png} Another notable styling change was in tables. -I pretty much stole the design from [url https://www.lemmi.no/ LEMMiNO]'s website: +I pretty much stole the design from {url LEMMiNO;https://www.lemmi.no/}'s website: -[image ./img/v3.1-table.png] +{img ./img/v3.1-table.png} Finally, probably the most important change of it all, before I used some bash scripts to automate certain actions in the result HTML files, like generating the description automatically. -Now, this was all done with [url https://www.gnu.org/software/gawk/manual/gawk.html awk], a programming language specifically designed for making text changes to files. -awk's flexibility permitted me to create stuff like [url /talks/demo.html the slide presentation system] without too much trouble. +Now, this was all done with {url awk;https://www.gnu.org/software/gawk/manual/gawk.html}, a programming language specifically designed for making text changes to files. +awk's flexibility permitted me to create stuff like {url the slide presentation system;/talks/demo.html} without too much trouble. ### now As of the writing of this post, not too much has changed since the last release. -There have been new posts, like this one and [url /blog/taming-the-fun-too Taming the Fun-too] but the overall design is here to stay, at least until I learn more about creating web styles and/or get bored of the current one. +There have been new posts, like this one and {url Taming the Fun-too;/blog/taming-the-fun-too} but the overall design is here to stay, at least until I learn more about creating web styles and/or get bored of the current one. Happy holidays everyone! ### Appendix This post has been in the works since 01 August 2020. -At the time it was just called [url https://gitlab.com/Syndamia/syndamiadotcom/-/tree/501942b638c34582de2f73dc31423c9322eb81fd/src/blog/syndamiadotcom "syndamiadotcom"] and was listed under the now defunct "Projects" section. -It was actually still available on the website, under [`/blog/syndamiadotcom/`], but I didn't list it in the blogs page. +At the time it was just called {url "syndamiadotcom";https://gitlab.com/Syndamia/syndamiadotcom/-/tree/501942b638c34582de2f73dc31423c9322eb81fd/src/blog/syndamiadotcom} and was listed under the now defunct "Projects" section. +It was actually still available on the website, under {` /blog/syndamiadotcom/}, but I didn't list it in the blogs page. That first iteration looked at the layout in a much stiffer and uninteresting way. I was talking about what exact color codes I used for crying out loud. But it was left as-is because I struggled on how to approach it. -I'm still not entirely happy with this version either, [url #v2.2 v2.2] was probably the most interesting and valuable part of the whole thing and the rest was fairly meh. +I'm still not entirely happy with this version either, {url v2.2;#v2.2} was probably the most interesting and valuable part of the whole thing and the rest was fairly meh. Oh well, maybe I'll rewrite it again one day. However, for the time being, I believe it's better for me to expect a bit less and just put stuff out there. @@ -252,4 +252,4 @@ As you saw, learning the little I know about web design was a slow trial and err The same will happen with making blog posts and other articles. I'm not a writer and I'm not interested enough to learn things properly. -[*P.S.*] Expect this post to be updated in the future, when I make new releases! +{i P.S.} Expect this post to be updated in the future, when I make new releases! diff --git a/src/blog/bash-is-weird/index.du b/src/blog/bash-is-weird/index.du index 3fbc2cd..8fe78cf 100644 --- a/src/blog/bash-is-weird/index.du +++ b/src/blog/bash-is-weird/index.du @@ -1,30 +1,31 @@ -# BASH is weird +'def title BASH is weird +'def desc Interesting quirks of BASH -'define expected-reading 4 min -'define created 01 May 2023 -'define edited 02 May 2023 -[$pagenav] +# {title} -'footnote parameter-expansion Of course this is just one of the many ways to reference and work with variables. -For very basic stuff, BASH is decently simple and intuitive, for example variables are set with the format [`name=value`] and they're referenced with [`\$name`] [$parameter-expansion]. -However, that changes once you start diving deeper (as I had to do for my [url /talks/linuxgraphy-by-strabo Linuxgraphy by Strabo] presentation). +{pagenav 4 min;01 May 2023;02 May 2023} + +For very basic stuff, BASH is decently simple and intuitive, for example variables are set with the format {` name=value} and they're referenced with {` $name} {fn Of course this is just one of the many ways to reference and work with variables.}. +However, that changes once you start diving deeper (as I had to do for my {url Linuxgraphy by Strabo;/talks/linuxgraphy-by-strabo} presentation). An example which illustrates my point would be: ```bash +'emplace myvar=($(echo A B C)) myvar=1234 -echo $((myvar += 46)) ${myvar[\${myvar:0:1}]} +echo $((myvar += 46)) ${myvar[${myvar:0:1}]} +'endemplace It has 3 things which really bothered me: :ordered -1. The output of [`\$(echo A B C)`] is replaced "literally", and then the whole expression is evaluated. - Meaning, [`myvar=($(echo A B C))`] turns into [`myvar=(A B C)`], which creates an array with those three letters. +1. The output of {` $(echo A B C)} is replaced "literally", and then the whole expression is evaluated. + Meaning, {` myvar=($(echo A B C))} turns into {` myvar=(A B C)}, which creates an array with those three letters. .p - I thought the "returned" value of [`\$(echo A B C)`] would be the whole string "A B C", so the array would have one element, that string. - However, [`\$()`] isn't really a function, which takes arguments, "creates" commands and returns their output. - It's [url https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html Command [=Substitution=]], the text gets executed and it's output [=replaces=] the [`\$(...)`] itself (slightly reminiscent of [url https://lispcookbook.github.io/cl-cookbook/macros.html LISP macros]). + I thought the "returned" value of {` $(echo A B C)} would be the whole string "A B C", so the array would have one element, that string. + However, {` $()} isn't really a function, which takes arguments, "creates" commands and returns their output. + It's {url Command {b Substitution};https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html}, the text gets executed and it's output {b replaces} the {` $(...)} itself (slightly reminiscent of {url LISP macros;https://lispcookbook.github.io/cl-cookbook/macros.html}). .p Side note: obviously, the original expected behaviour can happen if we use some quotes: @@ -32,34 +33,36 @@ It has 3 things which really bothered me: ```bash myvar=("$(echo A B C)") -2. On the second line, [`myvar`] [*becomes*] an integer and then we do an arithmetic operation on it, nothing wrong here. - [`\${parameter:offset:length}`] returns the substring from [`parameter`] from [`offset`] with size [`length`], but we're giving it a "number", so it should either throw some sort of error or return something default, like 0. +2. On the second line, {` myvar} {i becomes} an integer and then we do an arithmetic operation on it, nothing wrong here. + {` $\{parameter:offset:length\}} returns the substring from {` parameter} from {` offset} with size {` length}, but we're giving it a "number", so it should either throw some sort of error or return something default, like 0. However it correctly returns the number 1 (and no, that isn't a default, the number is correctly parsed as a string). .p This shows that numbers are actually strings too, and numerical operations are just weird string operations. - Contrary to any dynamically-typed language, it's not like the type of a variable is inferred from it's value, [url https://tldp.org/LDP/abs/html/untyped.html there isn't a type at all]! - Which makes everything even more weird, considering you [*can*] [url https://www.gnu.org/software/bash/manual/bash.html#index-declare create variables with a specific type]. + Contrary to any dynamically-typed language, it's not like the type of a variable is inferred from it's value, {url there isn't a type at all;https://tldp.org/LDP/abs/html/untyped.html}! + Which makes everything even more weird, considering you {i can} {url create variables with a specific type;https://www.gnu.org/software/bash/manual/bash.html#index-declare}. -3. Finally, the arguably biggest weirdness of it all, is [`\${myvar[1]}`]. - It doesn't matter how it is represented, at first [`myvar`] was the list of values A, B, C and now it's a number, this should return nothing. - Per contra, the value [`B`] is returned instead! +3. Finally, the arguably biggest weirdness of it all, is {` $\{myvar[1]\}}. + It doesn't matter how it is represented, at first {` myvar} was the list of values A, B, C and now it's a number, this should return nothing. + Per contra, the value {` B} is returned instead! .p - Via trial and error, we find that our number will be returned when the index is 0, and with index 2 we get [`C`]. + Via trial and error, we find that our number will be returned when the index is 0, and with index 2 we get {` C}. So all variables are arrays, and by default for integer and string operations, the first value is used? .p - This is strange, but it cannot be the full picture, because [url https://linux.die.net/Bash-Beginners-Guide/sect_10_01.html names have attributes], alongside it's type, a variable (name) can be read-only, but also have the "trace" flag, which only works with functions. + This is strange, but it cannot be the full picture, because {url names have attributes;https://linux.die.net/Bash-Beginners-Guide/sect_10_01.html}, alongside it's type, a variable (name) can be read-only, but also have the "trace" flag, which only works with functions. So, variables and functions are the same "object"? Unfortunately, I couldn't find any definitive information on the topic, so this train of thought will have to be left unresolved. -And this is just one example, more bizarreness can be found with [url https://www.vidarholen.net/contents/blog/?p=25 square brackets] and [url https://mywiki.wooledge.org/BashPitfalls most ok looking code]. -[url https://chrisdone.com/posts/shell-conduit/ Some people] even go as far to say: +And this is just one example, more bizarreness can be found with {url square brackets;https://www.vidarholen.net/contents/blog/?p=25} and {url most ok looking code;https://mywiki.wooledge.org/BashPitfalls}. +{url Some people;https://chrisdone.com/posts/shell-conduit/} even go as far to say: .quote Its syntax is insane, incredibly error prone, its defaults are awful, and it’s not a real big person programming language. -But I believe that is a step too far, [url http://www.binaryphile.com/bash/2018/07/26/approach-bash-like-a-developer-part-1-intro.html there are benefits, especially when approaching it seriously]. +But I believe that is a step too far, {url there are benefits, especially when approaching it seriously;http://www.binaryphile.com/bash/2018/07/26/approach-bash-like-a-developer-part-1-intro.html}. Every language has mind-numbing oddities, some get the out of the way from the start (like BASH), and others much later. + +{footnotes} diff --git a/src/blog/connect-to-mysql-in-dotnet-ef/index.du b/src/blog/connect-to-mysql-in-dotnet-ef/index.du index e745f16..d1c48ab 100644 --- a/src/blog/connect-to-mysql-in-dotnet-ef/index.du +++ b/src/blog/connect-to-mysql-in-dotnet-ef/index.du @@ -1,66 +1,68 @@ -# Connect to MySql in .NET and Entity Framework +'def title Connect to MySql in .NET and Entity Framework +'def desc Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me. -'define expected-reading 3 min -'define created 21 May 2020 -'define edited 19 June 2021 -[$pagenav] +# {title} + +{pagenav 3 min;21 May 2020;19 June 2021} :contents .numbered -1. [url #nuget-packages NuGet packages] -2. [url #connection-string Connection string] -3. [url #connecting Connecting] +1. {uhref NuGet packages} +2. {uhref Connection string} +3. {uhref Connecting} .numbered - 1. [url #asp.net-startup ASP.NET Startup] - 2. [url #dbcontext-child-class DBContext child class] + 1. {uhref ASP.NET Startup} + 2. {uhref DBContext child class} -I have found that connecting a [`.NET`] application to a [`MySql`] database (with Entity Framework) can be tricky. Here is what works for me. +I have found that connecting a {` .NET} application to a {` MySql} database (with Entity Framework) can be tricky. Here is what works for me. -Also, [url https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/ MySql.Data.EntityFrameworkCore] has been [=depricated=] since [*October 2020*]. If you need setup instructions with it, read [url https://gitlab.com/Syndamia/syndamiadotcom/-/blob/0510e29526c6d7681587fff4c98a339e8c69e9b5/src/blog/connect-to-mysql-in-csharp-ef/article.md this]. +Also, {url MySql.Data.EntityFrameworkCore;https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/} has been {b depricated} since {i October 2020}. If you need setup instructions with it, read {url this;https://gitlab.com/Syndamia/syndamiadotcom/-/blob/0510e29526c6d7681587fff4c98a339e8c69e9b5/src/blog/connect-to-mysql-in-csharp-ef/article.md}. ## NuGet packages -You'll need to install [url https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/ Pomelo.EntityFrameworkCore.MySql]. It provides the stuff necessary for connecting and using a [`MySql`] database. +You'll need to install {url Pomelo.EntityFrameworkCore.MySql;https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/}. It provides the stuff necessary for connecting and using a {` MySql} database. ## Connection string -There are [url https://www.connectionstrings.com/mysql/ a lot] of ways to setup the connection string but I've found that this one works the best: +There are {url a lot;https://www.connectionstrings.com/mysql/} of ways to setup the connection string but I've found that this one works the best: ``` "server=localhost; port=YOUR-PORT; user id=YOUR-USER-ID; password=YOUR-PASSWORD; database=NAME-OF-DATABASE; SslMode=none" -If you are using [`MySQL Workbench`] and you don't know your port and id, you can look at the server information from the [`MySQL Connections`] page. +If you are using {` MySQL Workbench} and you don't know your port and id, you can look at the server information from the {` MySQL Connections} page. -[image ./img/connections.png MyServer root 127.0.0.1:3306] In this example, the user id is _root_ and the port is _3306_. +{img MyServer root 127.0.0.1:3306;./img/connections.png} In this example, the user id is _root_ and the port is _3306_. ## Connecting -To connect, you'll need to call the [`UseMySql`] method, either in [url #asp.net-startup ASP.NET Startup] or in a [url #dbcontext-child-class DBContext child class]. +To connect, you'll need to call the {` UseMySql} method, either in {url ASP.NET Startup;#asp.net-startup} or in a {url DBContext child class;#dbcontext-child-class}. -The method requires at least two arguments: connection string and [`MySql`] server version. The latter you can find, by going to the [`Help/About Workbench`] window inside [`MySQL Workbench`]. +The method requires at least two arguments: connection string and {` MySql} server version. The latter you can find, by going to the {` Help/About Workbench} window inside {` MySQL Workbench}. -[image ./img/about-workbench.png] -[image ./img/workbench-version.png] +{img ./img/about-workbench.png} +{img ./img/workbench-version.png} -For the server version argument, create a new object of type [`MySqlServerVersion`] and give it's constructor a new object of type [`Version`], to which you give the version numbers. The result should look something like this: +For the server version argument, create a new object of type {` MySqlServerVersion} and give it's constructor a new object of type {` Version}, to which you give the version numbers. The result should look something like this: -```c# +```csharp +'emplace .UseMySql(CONNECTION_STRING, new MySqlServerVersion(new System.Version(8, 0, 21))) +'endemplace -Where [`CONNECTION_STRING`] is a (constant) variable that contains your connection string, and 8, 0, 21 are the version numbers. +Where {` CONNECTION_STRING} is a (constant) variable that contains your connection string, and 8, 0, 21 are the version numbers. ### ASP.NET Startup -For [`ASP.NET`] applications, the connection must be put inside the [`ConfigureServices`] method of the [`Startup.cs`] file. If you already have a [`.UseSQL`] method call in there, just replace it with your [`.UseMySql`] method and arguments. +For {` ASP.NET} applications, the connection must be put inside the {` ConfigureServices} method of the {` Startup.cs} file. If you already have a {` .UseSQL} method call in there, just replace it with your {` .UseMySql} method and arguments. The result should look something along the lines of: -```c# +```csharp // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - ... + \... services.AddDbContext(opt => { opt.UseMySql(...); @@ -69,9 +71,9 @@ public void ConfigureServices(IServiceCollection services) ### DBContext child class -Another way to connect is via a [`DBContext`] child class (so, inside your own DB context). Just, override the [`OnConfiguring`] method and call the [`.UseMySql`] method from the [`optionsBuilder`] parameter. +Another way to connect is via a {` DBContext} child class (so, inside your own DB context). Just, override the {` OnConfiguring} method and call the {` .UseMySql} method from the {` optionsBuilder} parameter. -```c# +```csharp protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql(...); diff --git a/src/blog/disable-sticky-keys-popup/index.du b/src/blog/disable-sticky-keys-popup/index.du index a51a7a1..ccacd9e 100644 --- a/src/blog/disable-sticky-keys-popup/index.du +++ b/src/blog/disable-sticky-keys-popup/index.du @@ -1,31 +1,31 @@ -# How to disable Sticky Keys prompt +'def title How to disable Sticky Keys prompt +'def desc Quick and easy instructions on disabling the Windows prompt 'Do you want to turn on Sticky Keys?' -'define expected-reading 1 min -'define created 01 November 2021 -'define edited 01 November 2021 -[$pagenav] +# {title} -We've all been there: you're playing a game and after pressing [`Shift`] multiple times, you get a popup about "Sticky Keys", similar to this one: +{pagenav 1 min;01 November 2021;01 November 2021} -[image ./img/windows-sticky-keys-prompt.png] +We've all been there: you're playing a game and after pressing {` Shift} multiple times, you get a popup about "Sticky Keys", similar to this one: + +{img ./img/windows-sticky-keys-prompt.png} This is how to stop the popup from showing up ever again: :ordered -1. Press [=Windows key + R=], type in [`control access.cpl`], and then press [=OK=] +1. Press {b Windows key + R}, type in {` control access.cpl}, and then press {b OK} - [image ./img/windows-run-control-access.png] + {img ./img/windows-run-control-access.png} -2. Inside the opened up window, press [=Make the keyboard easier to use=] +2. Inside the opened up window, press {b Make the keyboard easier to use} - [image ./img/windows-make-keyboard-highlighted.png] + {img ./img/windows-make-keyboard-highlighted.png} -3. After that, press [=Set up Sticky Keys=] +3. After that, press {b Set up Sticky Keys} - [image ./img/windows-sticky-keys-highlighted.png] + {img ./img/windows-sticky-keys-highlighted.png} -4. Uncheck the [=Turn on Sticky Keys when SHIFT is pressed five times=] +4. Uncheck the {b Turn on Sticky Keys when SHIFT is pressed five times} - [image ./img/windows-sticky-keys-disable.png] + {img ./img/windows-sticky-keys-disable.png} -5. Finally, press [=OK=] and close the window +5. Finally, press {b OK} and close the window diff --git a/src/blog/encrypted-email/index.du b/src/blog/encrypted-email/index.du index 4ed85d7..5c32917 100644 --- a/src/blog/encrypted-email/index.du +++ b/src/blog/encrypted-email/index.du @@ -1,69 +1,69 @@ -# Encrypted email +'def title Encrypted email +'def desc Outlining and explanation of encrypted email systems -'define expected-reading 10 min -'define created 10 September 2022 -'define edited 16 September 2022 -[$pagenav] +# {title} + +{pagenav 10 min;10 September 2022;16 September 2022} :contents :numbered -1. [url #encryption-and-signature Encryption and signature] -2. [url #openpgp OpenPGP] +1. {uhref Encryption and signature} +2. {uhref OpenPGP} .numbered - 1. [url #pgpinline PGP/Inline] - 2. [url #pgpmime PGP/MIME] + 1. {uhref PGP/Inline} + 2. {uhref PGP/MIME} -3. [url #smime S/MIME] -4. [url #reop reop] -5. [url #post-email-systems Post-email systems] -6. [url #centralized-non-email-systems Centralized non-email systems] +3. {uhref S/MIME} +4. {uhref reop} +5. {uhref Post-email systems} +6. {uhref Centralized non-email systems} .numbered - 1. [url #protonmail Protonmail] - 2. [url #tutanota Tutanota] + 1. {uhref Protonmail} + 2. {uhref Tutanota} -7. [url #conclusion Conclusion] +7. {uhref Conclusion} -When you try and look around for articles, regarding encrypted emails, all you'll find is people complaining about it's difficulties and shortcomings. But, no one actually explains what to do if you, nevertheless, want to encrypt your emails! At best most articles will just [url https://www.virtru.com/blog/arent-people-using-email-encryption shove some product up your face]. +When you try and look around for articles, regarding encrypted emails, all you'll find is people complaining about it's difficulties and shortcomings. But, no one actually explains what to do if you, nevertheless, want to encrypt your emails! At best most articles will just {url shove some product up your face;https://www.virtru.com/blog/arent-people-using-email-encryption}. -That's why, after a fairly lengthy research process, I've decided to do just that. These are the more common ways to encrypt your email with their strengths and weaknesses. I also wrote a (somewhat rough) [url /blog/how-to-encrypt-email tutorial on how to setup] [url #openpgp OpenPGP] or [url #smime S/MIME] in practice. +That's why, after a fairly lengthy research process, I've decided to do just that. These are the more common ways to encrypt your email with their strengths and weaknesses. I also wrote a (somewhat rough) {url tutorial on how to setup;/blog/how-to-encrypt-email} {url OpenPGP;#openpgp} or {url S/MIME;#smime} in practice. -[*Note:*] What I'm referring to is end-to-end encryption, where you send an encrypted email, and the recipient decrypts it. Encryption between you and a mail server is practically a given and is setup by the mail server administrator. +{i Note:} What I'm referring to is end-to-end encryption, where you send an encrypted email, and the recipient decrypts it. Encryption between you and a mail server is practically a given and is setup by the mail server administrator. ## Encryption and signature -Unless stated otherwise, all of the listed encryption (and signature) schemes work by utilizing [url https://en.wikipedia.org/wiki/Public-key_cryptography public-key cryptography]. +Unless stated otherwise, all of the listed encryption (and signature) schemes work by utilizing {url public-key cryptography;https://en.wikipedia.org/wiki/Public-key_cryptography}. -In brief, if you are sending an encrypted email, the [=recipient=] needs to have generated a public and private key pair. Then you need to have acquired [=their public key=]. Finally, if you want to send them an encrypted email: +In brief, if you are sending an encrypted email, the {b recipient} needs to have generated a public and private key pair. Then you need to have acquired {b their public key}. Finally, if you want to send them an encrypted email: .numbered -1. You encrypt [=your=] email with [=their public key=] -2. The recipient decrypts [=your=] message with [=their private key=] +1. You encrypt {b your} email with {b their public key} +2. The recipient decrypts {b your} message with {b their private key} -And if someone wants to send [=you=] an encrypted email, [=you=] need to generate a public and private key pair, share [=your public key=] with them, and when you receive the message, decrypt it with [=your private key=]. +And if someone wants to send {b you} an encrypted email, {b you} need to generate a public and private key pair, share {b your public key} with them, and when you receive the message, decrypt it with {b your private key}. -Every email you send can be [url https://en.wikipedia.org/wiki/Digital_signature digitally signed] (not to be confused with [url https://en.wikipedia.org/wiki/Digital_signature electronic signatures]), meaning the message is (cryptographically) "signed", and with this signature, the recipient can check if the message was changed during transit. Digital signatures also use public-key cryptography, but the other way around: +Every email you send can be {url digitally signed;https://en.wikipedia.org/wiki/Digital_signature} (not to be confused with {url electronic signatures;https://en.wikipedia.org/wiki/Digital_signature}), meaning the message is (cryptographically) "signed", and with this signature, the recipient can check if the message was changed during transit. Digital signatures also use public-key cryptography, but the other way around: .numbered -1. You sign [=your=] email with [=your private key=] -2. Then the recipient verifies [=your=] message with [=your public key=]. +1. You sign {b your} email with {b your private key} +2. Then the recipient verifies {b your} message with {b your public key}. -This might sound a bit complicated, but all you need to worry about is you and the recipient generating these public-private key pairs, exchanging public keys, and your email client should handle the rest. And if you use a tool like [url https://www.pep.security/en/ pEp], the creation and exchange of keys can be easily automated. +This might sound a bit complicated, but all you need to worry about is you and the recipient generating these public-private key pairs, exchanging public keys, and your email client should handle the rest. And if you use a tool like {url pEp;https://www.pep.security/en/}, the creation and exchange of keys can be easily automated. ## OpenPGP -By far, the most popular way to encrypt your emails is with [url https://en.wikipedia.org/wiki/Pretty_Good_Privacy OpenPGP]. PGP is the original program which implemented the encryption scheme, while OpenPGP is the standard/encryption scheme, which was created from PGP (so when I say OpenPGP, I mean a program that implements OpenPGP). +By far, the most popular way to encrypt your emails is with {url OpenPGP;https://en.wikipedia.org/wiki/Pretty_Good_Privacy}. PGP is the original program which implemented the encryption scheme, while OpenPGP is the standard/encryption scheme, which was created from PGP (so when I say OpenPGP, I mean a program that implements OpenPGP). -By design, it relies on a [url https://en.wikipedia.org/wiki/Web_of_trust web of trust], the idea being, different people sign each others public keys (sometimes at [url https://en.wikipedia.org/wiki/Key_signing_party key signing parties]), and you know that a specific key corresponds to a specific person, only when a large amount of people have signed it. +By design, it relies on a {url web of trust;https://en.wikipedia.org/wiki/Web_of_trust}, the idea being, different people sign each others public keys (sometimes at {url key signing parties;https://en.wikipedia.org/wiki/Key_signing_party}), and you know that a specific key corresponds to a specific person, only when a large amount of people have signed it. -OpenPGP divides the security community quite a lot, some [url https://restoreprivacy.com/let-pgp-die/ abolish it] while other still [url https://arstechnica.com/information-technology/2016/12/signal-does-not-replace-pgp/ defend it], but at the end of the day, it's very widespread and if someone encrypts their email, chances are it's with OpenPGP (unless they're in a business, where [url #smime S/MIME] rules). +OpenPGP divides the security community quite a lot, some {url abolish it;https://restoreprivacy.com/let-pgp-die/} while other still {url defend it;https://arstechnica.com/information-technology/2016/12/signal-does-not-replace-pgp/}, but at the end of the day, it's very widespread and if someone encrypts their email, chances are it's with OpenPGP (unless they're in a business, where {url S/MIME;#smime} rules). There are two main ways to encrypt an email with OpenPGP: ### PGP/Inline -The first is called "PGP/Inline", with which you encrypt only the message itself. That's it. And there are [url https://josefsson.org/inline-openpgp-considered-harmful.html other limitations] too, to name a few: +The first is called "PGP/Inline", with which you encrypt only the message itself. That's it. And there are {url other limitations;https://josefsson.org/inline-openpgp-considered-harmful.html} too, to name a few: .numbered 1. You can't encrypt attachments, period. @@ -73,67 +73,67 @@ Though, it's not all bad. If you can survive only sending text to other people, .numbered 1. It's much easier to work with, you can directly copy the encrypted PGP message and decrypt it however you like -2. The other option, PGP/MIME, is much harder to implement properly and there have been cases where [url https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime it's implementation is flawed] +2. The other option, PGP/MIME, is much harder to implement properly and there have been cases where {url it's implementation is flawed;https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime} ### PGP/MIME -"PGP/MIME" is the second option. As it's name suggests, you can encrypt [url https://en.wikipedia.org/wiki/MIME MIME] data with PGP, which by definition means it supports any content type. This includes: +"PGP/MIME" is the second option. As it's name suggests, you can encrypt {url MIME;https://en.wikipedia.org/wiki/MIME} data with PGP, which by definition means it supports any content type. This includes: .numbered 1. Support for Unicode characters and HTML messages 2. Attachments of any type 3. Delivery status report -Basically, any [url https://en.wikipedia.org/wiki/MIME#Multipart_subtypes multipart subtype]. Also, I should mention, the message structure and all metadata is hidden by design. +Basically, any {url multipart subtype;https://en.wikipedia.org/wiki/MIME#Multipart_subtypes}. Also, I should mention, the message structure and all metadata is hidden by design. -PGP/MIME is capable of a lot more, and is [url https://www.mailpile.is/blog/2014-11-21_To_PGP_MIME_Or_Not.html generally preferred] over PGP/Inline. Nonetheless, it has it's shortcomings: +PGP/MIME is capable of a lot more, and is {url generally preferred;https://www.mailpile.is/blog/2014-11-21_To_PGP_MIME_Or_Not.html} over PGP/Inline. Nonetheless, it has it's shortcomings: .numbered -1. As already mentioned, it is hard to implement and [url https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime flawed implementations] have been made +1. As already mentioned, it is hard to implement and {url flawed implementations;https://web.archive.org/web/20180625054201/https://www.whonix.org/blog/pgp-inline-vs-mime} have been made 2. Everything is encrypted together, so you'll need to download the whole email, including all attachments, to decrypt it 3. If your client doesn't support it, manual decryption takes a bit more work ## S/MIME -[url https://en.wikipedia.org/wiki/S/MIME S/MIME], roughly said, combines and extends the [url https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax Cryptograhic Message Syntax] encryption scheme and [url https://en.wikipedia.org/wiki/MIME MIME] standard to create a singular, email-oriented standard. +{url S/MIME;https://en.wikipedia.org/wiki/S/MIME}, roughly said, combines and extends the {url Cryptograhic Message Syntax;https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax} encryption scheme and {url MIME;https://en.wikipedia.org/wiki/MIME} standard to create a singular, email-oriented standard. -Unlike OpenPGP it doesn't use a web of trust, but a [url https://en.wikipedia.org/wiki/Public_key_infrastructure Public key infrastructure]. This means that, rather than people exchanging certificates between themselves, a [url https://en.wikipedia.org/wiki/Certificate_authority Certificate Authroity] connects public keys with entities (people or organizations for example). +Unlike OpenPGP it doesn't use a web of trust, but a {url Public key infrastructure;https://en.wikipedia.org/wiki/Public_key_infrastructure}. This means that, rather than people exchanging certificates between themselves, a {url Certificate Authroity;https://en.wikipedia.org/wiki/Certificate_authority} connects public keys with entities (people or organizations for example). -So, already, it has a huge advantage, you don't need to exchange keys, since the email client will handle it. S/MIME is most often used by corporations/organizations, so support in commercial mail clients like [url https://support.google.com/a/answer/6374496?hl=en#zippy= Google Workspace Enterprise Edition] and [url https://support.microsoft.com/en-us/office/encrypt-messages-by-using-s-mime-in-outlook-on-the-web-878c79fc-7088-4b39-966f-14512658f480 Outlook Enterprise/Business] ([url https://docs.microsoft.com/en-us/exchange/security-and-compliance/smime-exo/configure-smime-exo?view=o365-worldwide Exchange Online has to be configured] by an administrator and can be used only with [url https://docs.microsoft.com/en-us/deployoffice/endofsupport/microsoft-365-services-connectivity paid clients]) is available. +So, already, it has a huge advantage, you don't need to exchange keys, since the email client will handle it. S/MIME is most often used by corporations/organizations, so support in commercial mail clients like {url Google Workspace Enterprise Edition;https://support.google.com/a/answer/6374496?hl=en#zippy=} and {url Outlook Enterprise/Business;https://support.microsoft.com/en-us/office/encrypt-messages-by-using-s-mime-in-outlook-on-the-web-878c79fc-7088-4b39-966f-14512658f480} ({url Exchange Online has to be configured;https://docs.microsoft.com/en-us/exchange/security-and-compliance/smime-exo/configure-smime-exo?view=o365-worldwide} by an administrator and can be used only with {url paid clients;https://docs.microsoft.com/en-us/deployoffice/endofsupport/microsoft-365-services-connectivity}) is available. -On the other hand, you can browse [url https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730 Google's] and [url https://docs.microsoft.com/en-us/security/trusted-root/participants-list Microsoft's] trusted (root) CAs all you want, but you'll find that there is only one place where you could register a certificate for free: [url https://www.actalis.com/s-mime-certificates.aspx Actalis]. A good tutorial on the procedure can be found [url https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/ here], but beware, [*they*] generate the private key. +On the other hand, you can browse {url Google's;https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730} and {url Microsoft's;https://docs.microsoft.com/en-us/security/trusted-root/participants-list} trusted (root) CAs all you want, but you'll find that there is only one place where you could register a certificate for free: {url Actalis;https://www.actalis.com/s-mime-certificates.aspx}. A good tutorial on the procedure can be found {url here;https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/}, but beware, {i they} generate the private key. -Otherwise, it's email encryption capabilities are the same as those outlined in [url #pgpmime PGP/MIME]. +Otherwise, it's email encryption capabilities are the same as those outlined in {url PGP/MIME;#pgpmime}. ## reop -[url https://flak.tedunangst.com/post/reop reop] is a very new, simple and "completed" system. The thing is, it's only a single command line utility that uses some encryption schemes (picked by the [url http://nacl.cr.yp.to/index.html nacl] library) for it's own unique system. Currently, there doesn't seem to be any email clients that support it. +{url reop;https://flak.tedunangst.com/post/reop} is a very new, simple and "completed" system. The thing is, it's only a single command line utility that uses some encryption schemes (picked by the {url nacl;http://nacl.cr.yp.to/index.html} library) for it's own unique system. Currently, there doesn't seem to be any email clients that support it. It is also fairly limited: .quote no support for key revocation, or long chains of certificates, or partial trust, or key servers -However, as explained in it's [url https://flak.tedunangst.com/post/reop article], that might not be that big of a deal. Finally, there are very very few people that use it. From experience, I have only seen [url https://hacktivis.me/about Haelwenn Monnier] use it. +However, as explained in it's {url article;https://flak.tedunangst.com/post/reop}, that might not be that big of a deal. Finally, there are very very few people that use it. From experience, I have only seen {url Haelwenn Monnier;https://hacktivis.me/about} use it. The only reason for using reop is if you want a very small system with a very simple source code behind it. Nevertheless, it's still a viable alternative. ## Post-email systems -There is a somewhat old [url https://github.com/OpenTechFund/secure-email document], created by the [url https://www.opentech.fund/ OpenTechFunc], which outlines very thoroughly all "next generation secure email or email-like communication" technologies. +There is a somewhat old {url document;https://github.com/OpenTechFund/secure-email}, created by the {url OpenTechFunc;https://www.opentech.fund/}, which outlines very thoroughly all "next generation secure email or email-like communication" technologies. -In it, they define the term "[url https://github.com/OpenTechFund/secure-email#post-email-alternatives post-mail]" as: +In it, they define the term "{url post-mail;https://github.com/OpenTechFund/secure-email#post-email-alternatives}" as: .quote projects to create alternatives to email that are more secure yet still email-like -And outline zero trust and fingerprinting as the main advantages of these systems. Also most of these systems are [url https://en.wikipedia.org/wiki/Peer-to-peer peer-to-peer]. +And outline zero trust and fingerprinting as the main advantages of these systems. Also most of these systems are {url peer-to-peer;https://en.wikipedia.org/wiki/Peer-to-peer}. -Given that these projects aren't really email, I won't dive much deeper into it. But I will mention, almost all listed projects seem to have been abandoned. Those still under active development are [url http://goldbug.sourceforge.net/ goldbug] and [url https://retroshare.cc/ retroshare]. Until 2021, zeronet [*was*] updated, but the [url https://github.com/shortcutme author] seems to have [url https://github.com/HelloZeroNet/ZeroNet/issues/2808#issuecomment-1132820787 disappeared]. +Given that these projects aren't really email, I won't dive much deeper into it. But I will mention, almost all listed projects seem to have been abandoned. Those still under active development are {url goldbug;http://goldbug.sourceforge.net/} and {url retroshare;https://retroshare.cc/}. Until 2021, zeronet {i was} updated, but the {url author;https://github.com/shortcutme} seems to have {url disappeared;https://github.com/HelloZeroNet/ZeroNet/issues/2808#issuecomment-1132820787}. ## Centralized non-email systems -"Centralized non-email systems" is another term, which as far as I can tell, is also coined by [url https://github.com/OpenTechFund/secure-email this document] from [url https://www.opentech.fund/ OpenTechFunc]. They define it as "centralized email-like messaging platform" and further divide it into: +"Centralized non-email systems" is another term, which as far as I can tell, is also coined by {url this document;https://github.com/OpenTechFund/secure-email} from {url OpenTechFunc;https://www.opentech.fund/}. They define it as "centralized email-like messaging platform" and further divide it into: :quote :numbered @@ -147,28 +147,28 @@ Given that these projects aren't really email, I won't dive much deeper into it. -Out of the listed options, Enlocked doesn't work anymore and was [url https://adammonsen.com/post/853/ a bad system] to begin with, ShazzleMail is pretty much [url https://www.reddit.com/r/privacytoolsIO/comments/nv6gzu/comment/hf338kq/?utm_source=share&utm_medium=web2x&context=3 dead] and Walnut also isn't up. +Out of the listed options, Enlocked doesn't work anymore and was {url a bad system;https://adammonsen.com/post/853/} to begin with, ShazzleMail is pretty much {url dead;https://www.reddit.com/r/privacytoolsIO/comments/nv6gzu/comment/hf338kq/?utm_source=share&utm_medium=web2x&context=3} and Walnut also isn't up. That leaves us with the two last-standing providers: ### Protonmail -Protonmail, or [url https://proton.me/ proton.me] as they are called now, which uses good old [url #openpgp OpenPGP]. That means they have end-to-end encryption and zero-access encryption by default for all protonmail accounts. They also [url https://proton.me/support/how-to-use-pgp support encrypted conversations with non-protonmail users]. +Protonmail, or {url proton.me;https://proton.me/} as they are called now, which uses good old {url OpenPGP;#openpgp}. That means they have end-to-end encryption and zero-access encryption by default for all protonmail accounts. They also {url support encrypted conversations with non-protonmail users;https://proton.me/support/how-to-use-pgp}. -Funnily enough, Protonmail doesn't really fit in any of the listed categories, since encrypted emails outside the system will work as any [url #openpgp OpenPGP] encrypted one. +Funnily enough, Protonmail doesn't really fit in any of the listed categories, since encrypted emails outside the system will work as any {url OpenPGP;#openpgp} encrypted one. -Protonmail's services have a free tier, which should be enough for lighter usage, but restricts [=heavily=] storage, label and folder count, amount of sent messages per day, etc. At the time of writing, their second tier pretty much lifts all restrictions for 5 euro per month (without annual contracts). Check out their pricing [url https://proton.me/pricing here]. +Protonmail's services have a free tier, which should be enough for lighter usage, but restricts {b heavily} storage, label and folder count, amount of sent messages per day, etc. At the time of writing, their second tier pretty much lifts all restrictions for 5 euro per month (without annual contracts). Check out their pricing {url here;https://proton.me/pricing}. ### Tutanota -[url https://tutanota.com/ Tutanota] uses it's own special system for security. In brief, all of your emails are (zero-access) stored and end-to-end encrypted with (mostly) [url https://en.wikipedia.org/wiki/Advanced_Encryption_Standard AES 128], and while they generate and hold your public and private keys, your password is needed to decrypt your private key (do check out their [url https://tutanota.com/security/ security page] for more details). +{url Tutanota;https://tutanota.com/} uses it's own special system for security. In brief, all of your emails are (zero-access) stored and end-to-end encrypted with (mostly) {url AES 128;https://en.wikipedia.org/wiki/Advanced_Encryption_Standard}, and while they generate and hold your public and private keys, your password is needed to decrypt your private key (do check out their {url security page;https://tutanota.com/security/} for more details). -However, it's crucial to note that they are a type [*2. Semi-closed system*]. If you send an encrypted email to a non-tutanota recipient, the recipient will get a URL from which they will be able to reply, through Tutanota's web client. +However, it's crucial to note that they are a type {i 2. Semi-closed system}. If you send an encrypted email to a non-tutanota recipient, the recipient will get a URL from which they will be able to reply, through Tutanota's web client. -Finally, pricing. In general, they have a lot less features than [url #protonmail Protonmail], but their free tier is a lot more capable than [url #protonmail Protonmail]'s. Their pricing is extremely flexible, being able to buy specific features by themselves, like storage or mail aliases. Check it out [url https://tutanota.com/pricing/ here]. +Finally, pricing. In general, they have a lot less features than {url Protonmail;#protonmail}, but their free tier is a lot more capable than {url Protonmail;#protonmail}'s. Their pricing is extremely flexible, being able to buy specific features by themselves, like storage or mail aliases. Check it out {url here;https://tutanota.com/pricing/}. ## Conclusion -In brief, almost all email encryption systems use [url #encryption-and-signature public-key cryptography]. The most popular of these systems for personal use is [url #openpgp OpenPGP], but in the business space, [url #smime S/MIME] is quite a bit more prominent. [url #reop reop] is a viable, but limited, very new and lightweight systems for encrypting your email messages. +In brief, almost all email encryption systems use {url public-key cryptography;#encryption-and-signature}. The most popular of these systems for personal use is {url OpenPGP;#openpgp}, but in the business space, {url S/MIME;#smime} is quite a bit more prominent. {url reop;#reop} is a viable, but limited, very new and lightweight systems for encrypting your email messages. -[url #protonmail Protonmail] is an email provider, which has [url #openpgp OpenPGP] built-in, enabling and supporting encryption by default, but their free tier leaves what to be desired. [url #tutanota Tutanota] is another provider, with their own entirely different system, where encrypted emails to non-tutanota users force the recipients to use their web client. +{url Protonmail;#protonmail} is an email provider, which has {url OpenPGP;#openpgp} built-in, enabling and supporting encryption by default, but their free tier leaves what to be desired. {url Tutanota;#tutanota} is another provider, with their own entirely different system, where encrypted emails to non-tutanota users force the recipients to use their web client. diff --git a/src/blog/export-skype/index.du b/src/blog/export-skype/index.du index 9f88ce7..be76ad6 100644 --- a/src/blog/export-skype/index.du +++ b/src/blog/export-skype/index.du @@ -1,15 +1,15 @@ -# How to export Skype data +'def title How to export Skype data +'def desc You navigate to Skype's data-export page, download your data, then you open it with Skype's official tool or with an improved fork of it. -'define expected-reading 3 min -'define created 03 October 2021 -'define edited 03 October 2021 -[$pagenav] +# {title} + +{pagenav 3 min;03 October 2021;03 October 2021} :contents .numbered -1. [url #downloading-files Downloading files] -2. [url #viewing-your-export-official-tool Viewing your export - Official Tool] -3. [url #viewing-your-export-artemveremienko-fork Viewing your export - ArtemVeremienko Fork] +1. {uhref Downloading files} +2. {uhref Viewing your export - Official Tool} +3. {uhref Viewing your export - ArtemVeremienko Fork} Skype has always allowed to export your chat history (and files), but it's not as straight forward as it should. @@ -18,53 +18,53 @@ Continue reading for the required steps on doing it. ## Downloading files :ordered -1. Open [url https://secure.skype.com/en/data-export secure.skype.com/en/data-export] +1. Open {url secure.skype.com/en/data-export;https://secure.skype.com/en/data-export} .unordered - You could be asked to sign in. - After signing in you'll need to [*open the link again*], since you would be redirected to the wrong place. + After signing in you'll need to {i open the link again}, since you would be redirected to the wrong place. 2. After opening the link you should be greeted by something like this. - Check the two checkboxes next to [=Conversations=] and [=Files=] [*(pointed to by the red arrows)*]. + Check the two checkboxes next to {b Conversations} and {b Files} {i (pointed to by the red arrows)}. - [image ./img/initial-screen.png] + {img ./img/initial-screen.png} -3. Press [=Submit request=]. - After being greeted by this screen, press [=Continue=]. +3. Press {b Submit request}. + After being greeted by this screen, press {b Continue}. - [image ./img/export-prepared.png] + {img ./img/export-prepared.png} .bulleted - - You should now see an [=Available exports=] section near the top of the page. - The status will be [=Pending=]. - .p [image ./img/available-exports.png] + - You should now see an {b Available exports} section near the top of the page. + The status will be {b Pending}. + .p {img ./img/available-exports.png} -5. Reload the page after a bit of time. When your export is ready, you'll find a [=Download=] button next to it, click it. +5. Reload the page after a bit of time. When your export is ready, you'll find a {b Download} button next to it, click it. - [image ./img/download-button.png] + {img ./img/download-button.png} -Your export will be downloaded as a [`.tar`] archive file. -You'll need an archiver utility to extract the files, something like [url https://www.rarlab.com/download.htm WinRAR] or [url https://www.7-zip.org/ 7-Zip] [*(I personally recommend 7-Zip, it is completely free (no need to worry about your [url https://youtu.be/fTgZRVVr3_Y infinite trial]) and works faster)*]. +Your export will be downloaded as a {` .tar} archive file. +You'll need an archiver utility to extract the files, something like {url WinRAR;https://www.rarlab.com/download.htm} or {url 7-Zip;https://www.7-zip.org/} {i (I personally recommend 7-Zip, it is completely free (no need to worry about your {url infinite trial;https://youtu.be/fTgZRVVr3_Y}) and works faster)}. ## Viewing your export - Official Tool :ordered 1. Extract your archive -2. Open the [url https://go.skype.com/skype-parser Skype Parser Download], which will prompt you to save [`skype-parser.zip`] +2. Open the {url Skype Parser Download;https://go.skype.com/skype-parser}, which will prompt you to save {` skype-parser.zip} -3. Extract [`skype-parser.zip`] +3. Extract {` skype-parser.zip} -4. Inside the [`skype-parser`] folder, open [`index.html`] (it might be named just [`index`]). You'll be greeted by this page in your browser: - [image ./img/default-skype-parser-index.png] +4. Inside the {` skype-parser} folder, open {` index.html} (it might be named just {` index}). You'll be greeted by this page in your browser: + {img ./img/default-skype-parser-index.png} -5. Click the [`Choose File`] option and select the [`messages.json`] (it might be named just [`messages`]) file from your export. - [image ./img/choose-file.png] +5. Click the {` Choose File} option and select the {` messages.json} (it might be named just {` messages}) file from your export. + {img ./img/choose-file.png} -6. Press the [`Load`] button right below, and you're done. +6. Press the {` Load} button right below, and you're done. On the left side you have your conversations, and when opening one, your messages will be displayed to the right (just like in Skype itself) - [image ./img/archived-conversations-skype-default.png] + {img ./img/archived-conversations-skype-default.png} There is only one issue with this method - the official tool is somewhat broken. @@ -74,15 +74,15 @@ The fix is using an alternative to the official tool. ## Viewing your export - ArtemVeremienko Fork -[url https://github.com/ArtemVeremienko ArtemVeremienko] is a GitHub user that took the official parser and fixed it. -Their source code can be found over at [url https://github.com/ArtemVeremienko/skype-parser github.com/ArtemVeremienko/skype-parser]. +{url ArtemVeremienko;https://github.com/ArtemVeremienko} is a GitHub user that took the official parser and fixed it. +Their source code can be found over at {url github.com/ArtemVeremienko/skype-parser;https://github.com/ArtemVeremienko/skype-parser}. :ordered -1. Go to the [url https://github.com/ArtemVeremienko/skype-parser/releases/latest latest release of his skype-parser] and download [`skype-parser.zip`] +1. Go to the {url latest release of his skype-parser;https://github.com/ArtemVeremienko/skype-parser/releases/latest} and download {` skype-parser.zip} - [image ./img/github-skype-parser-download.png] + {img ./img/github-skype-parser-download.png} 2. Extract all of the files. - They'll be in the same folder as the [`skype-parser.zip`] file, so find the [`index.html`] file and open it. + They'll be in the same folder as the {` skype-parser.zip} file, so find the {` index.html} file and open it. -3. Continue from step 5 onward of the [url #viewing-your-export-official-tool Viewing your export - Official Tool] section +3. Continue from step 5 onward of the {url Viewing your export - Official Tool;#viewing-your-export-official-tool} section diff --git a/src/blog/fix-network-brother-printers/index.du b/src/blog/fix-network-brother-printers/index.du index 045bb39..15a5126 100644 --- a/src/blog/fix-network-brother-printers/index.du +++ b/src/blog/fix-network-brother-printers/index.du @@ -1,28 +1,28 @@ -# Fix networked Brother printers not working in Linux +'def title Fix networked Brother printers not working in Linux +'def desc To fix a networked Brother printer under linux: check CUPS recongnises it on the network, check support, find drivers -'define expected-reading 4 min -'define created 28 June 2023 -'define edited 28 June 2023 -[$pagenav] +# {title} + +{pagenav 4 min;28 June 2023;28 June 2023} Before we start, make sure you have CUPS and avahi installed and running. ## Make sure CUPS recognises it -Go to [url https://localhost:631/printers/ localhost:631/printers] and make sure your printer is listed there. -If [=not=], go to [`Administration/Add Printer`] and select your printer. -If it's [=not=] listed even there, then you have some other network connectivity issue. +Go to {url localhost:631/printers;https://localhost:631/printers/} and make sure your printer is listed there. +If {b not}, go to {` Administration/Add Printer} and select your printer. +If it's {b not} listed even there, then you have some other network connectivity issue. -Otherwise [url #try-to-print-a-test-page try to print a test page]. +Otherwise {url try to print a test page;#try-to-print-a-test-page}. -### Check if it [=is=] recognised on the network. +### Check if it {b is} recognised on the network. Execute in the command line: ```bash avahi-browse --all -t -r -There will be a lot of output, but scroll down until you find something [*like*]: +There will be a lot of output, but scroll down until you find something {i like}: ``` = enp0s25 IPv4 Brother HL-L2350DW series _pdl-datastream._tcp local @@ -30,7 +30,7 @@ hostname = [BRW9C305B9EC83D.local] address = [192.168.0.110] The exact values aren't important, just make sure the part after IPv4 is the model of your printer. -[`address`] is the local printer address, ping it. +{` address} is the local printer address, ping it. In this example, the command would be: ```bash @@ -38,21 +38,21 @@ ping 192.168.0.110 .bulleted - If the ping is successful, you might also want to put that IP address in your browser. - With the example, you would open the link [`http://192.168.0.110`]. - Your printer [=may=] or [=may not=] support Web Based Management, which would allow you to edit it's setting from the browser. + With the example, you would open the link {` http://192.168.0.110}. + Your printer {b may} or {b may not} support Web Based Management, which would allow you to edit it's setting from the browser. If the page isn't available, don't worry about it. -If output is [=not=] something like [`64 bytes from ...`] (so, if it is [`Destination Host Unreachable`] or ping just hangs, without output), then it's an issue with your network or printer network configuration. +If output is {b not} something like {` 64 bytes from ...} (so, if it is {` Destination Host Unreachable} or ping just hangs, without output), then it's an issue with your network or printer network configuration. Make sure the printer is properly connected to the network.\n Otherwise, this shows that your computer has network access to the printer, and all problems are local. ### Check if your printer is supported by Linux. -Go to [url https://www.openprinting.org/printers www.openprinting.org/printers] and enter your model. +Go to {url www.openprinting.org/printers;https://www.openprinting.org/printers} and enter your model. If it isn't listed then it doesn't work for sure. -Alternatively, if it is and the rating [url https://wiki.linuxfoundation.org/openprinting/database/databaseintro#about_the_data isn't "Perfectly"], then read the whole page, in case networking is listed as nonfunctional. -If it [=is=] supported, then: +Alternatively, if it is and the rating {url isn't "Perfectly";https://wiki.linuxfoundation.org/openprinting/database/databaseintro#about_the_data}, then read the whole page, in case networking is listed as nonfunctional. +If it {b is} supported, then: ### Check if there are drivers available @@ -61,8 +61,8 @@ Run in the command line: ```bash lpinfo -v -If you only get entries like [`network WORD`], without anything which looks like a URL (URI), then you may not have a working driver. -Make sure you have installed any or tried all of the drivers listed in the printer's [url https://www.openprinting.org/printers www.openprinting.org] page. +If you only get entries like {` network WORD}, without anything which looks like a URL (URI), then you may not have a working driver. +Make sure you have installed any or tried all of the drivers listed in the printer's {url www.openprinting.org;https://www.openprinting.org/printers} page. ## Try to print a test page @@ -73,7 +73,7 @@ After a little while, the "State" should change from "pending" to "processing" ( ### Unable to locate printer "SOMETHING.local" If you also have the error "Unable to locate printer "SOMETHING.local"." (obviously SOMETHING is the exact value you get), then that means the printer is accessed via the domain name "SOMETHING.local". -[`.local`] domains require a special DNS server to be resolved, so inside [`/etc/nsswitch.conf`], on the line that starts with [`hosts`], add to it's end the value [`mdns_minimal`]. +{` .local} domains require a special DNS server to be resolved, so inside {` /etc/nsswitch.conf}, on the line that starts with {` hosts}, add to it's end the value {` mdns_minimal}. It should look something like: ``` @@ -82,4 +82,4 @@ hosts: files dns mdns_minimal After saving your changes, your printer should pretty quickly start printing the test page, no need to restart anything. .bulleted -- if your printer supports Web Based Management, then you should be able to go open the page [`http://SOMETHING.local`] in your browser and edit your printer settings from there. +- if your printer supports Web Based Management, then you should be able to go open the page {` http://SOMETHING.local} in your browser and edit your printer settings from there. diff --git a/src/blog/fix-no-frame-buffer-plan9/index.du b/src/blog/fix-no-frame-buffer-plan9/index.du index 8d63c0b..fe21454 100644 --- a/src/blog/fix-no-frame-buffer-plan9/index.du +++ b/src/blog/fix-no-frame-buffer-plan9/index.du @@ -1,20 +1,20 @@ -# Fix "No frame buffer" error in Plan 9 +'def title Fix 'No frame buffer' error in Plan 9 +'def desc Installing Plan 9 by Bell Labs on QEMU/KVM might give an initdisplay error. To fix it, you'll need to change the monitor type from xga to vesa. -'define expected-reading 3 min -'define created 30 July 2022 -'define edited 30 July 2022 -[$pagenav] +# {title} -Let's say you installed [url https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs Plan 9 by Bell Labs] on a QEMU/KVM virtual machine by just following the prompts and entering defaults. In certain cases, you might find your install booting to a shell with the errors: +{pagenav 3 min;30 July 2022;30 July 2022} + +Let's say you installed {url Plan 9 by Bell Labs;https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs} on a QEMU/KVM virtual machine by just following the prompts and entering defaults. In certain cases, you might find your install booting to a shell with the errors: ``` aux/vga: inportl(0xc100): permission denied rio: can't open display: initdisplay: /dev/draw/new: no frame buffer init: rc exit status: rio 31: display open -[image ./img/boot-prompt-no-frame-buffer-error.png] +{img ./img/boot-prompt-no-frame-buffer-error.png} -For some reason, on certain configurations, the [`xga`] ([`vga`]) monitor type does not work when booting into Plan 9, even though it works fine during install. The fix is to adjust monitor settings to [`vesa`]: +For some reason, on certain configurations, the {` xga} ({` vga}) monitor type does not work when booting into Plan 9, even though it works fine during install. The fix is to adjust monitor settings to {` vesa}: :ordered 1. In the shell prompt enter @@ -22,9 +22,10 @@ For some reason, on certain configurations, the [`xga`] ([`vga`]) monitor type d ``` aux/vga -m vesa -l + .p You should get a cursor and a cleared prompt. - [image ./img/manual-prompt.png] + {img ./img/manual-prompt.png} 2. In this "new" shell prompt, enter @@ -33,7 +34,7 @@ rio You should now get a grey background with the cursor in it. - [image ./img/manual-rio.png] + {img ./img/manual-rio.png} .bulleted - You are now in a graphical environment, so technically you can stop here. The other steps are for configuring it so you wont ever have that problem again. @@ -50,7 +51,7 @@ sam /n/9fat/plan9.ini this is the configuration file we will be changing. - [image ./img/rio-9fat-commands.png] + {img ./img/rio-9fat-commands.png} .bulleted - How to make a window: right click, hold, hover over "New" and release the right click. Now right click somewhere in the top left, hold, drag to somewhere in bottom right, release. @@ -62,12 +63,12 @@ sam /n/9fat/plan9.ini b /n/9fat/plan9.ini and click the green-backgrounded box. - Then replace [`xga`] with [`vesa`]: + Then replace {` xga} with {` vesa}: ``` , x/xga/ s/xga/vesa - and click the green-backgrounded box again. We're almost done here, enter [`w`], wait a bit, and finally enter [`q`]. + and click the green-backgrounded box again. We're almost done here, enter {` w}, wait a bit, and finally enter {` q}. :unordered - If you want to check whether the file was properly saved, feel free to run @@ -77,14 +78,14 @@ cat /n/9fat/plan9.ini and check that monitor is equal to vesa (you can scroll with the arrow keys, or with left and right mouse buttons, acting as up and down). - [image ./img/rio-plan9ini-cat.png] + {img ./img/rio-plan9ini-cat.png} - - The first command opens the [`plan9.ini`] file for editing, and the second command, finds every line that contains [`xga`] (there should probably be only one) and on each matching line replaces [`xga`] with [`vesa`]. Refer to the [url https://p9f.org/sys/doc/sam/sam.html docs] for more information. + - The first command opens the {` plan9.ini} file for editing, and the second command, finds every line that contains {` xga} (there should probably be only one) and on each matching line replaces {` xga} with {` vesa}. Refer to the {url docs;https://p9f.org/sys/doc/sam/sam.html} for more information. -5. That's it, all we have to do is halt our file system with [`fshalt`] (or type out the command in the [url https://9p.io/wiki/plan9/Installing_Plan_9_on_Qemu/ Qemu installation guide]) and Force Reset the virtual machine. +5. That's it, all we have to do is halt our file system with {` fshalt} (or type out the command in the {url Qemu installation guide;https://9p.io/wiki/plan9/Installing_Plan_9_on_Qemu/}) and Force Reset the virtual machine. The next time you boot into Plan 9 and into your user, the graphical environment should load fine. Enjoy Plan 9! -[image ./img/rio-default-login.png] +{img ./img/rio-default-login.png} diff --git a/src/blog/fix-qc-timeout/index.du b/src/blog/fix-qc-timeout/index.du index 11dfa32..42ee9c1 100644 --- a/src/blog/fix-qc-timeout/index.du +++ b/src/blog/fix-qc-timeout/index.du @@ -1,12 +1,12 @@ -# Fix "qc timeout" kernel log error +'def title Fix 'qc timeout' kernel log error +'def desc Depending on your harddrive, you may get a 15 second boot delay, cause by a qc timeout error. The solution is to tell the kernel that DMA logs are not supported. -'define expected-reading 4 min -'define created 16 December 2023 -'define edited 20 August 2025 -[$pagenav] +# {title} + +{pagenav 4 min;16 December 2023;20 August 2025} Depending on your harddrive, you may get a 15 second delay on boot. -Looking at the kernel logs (with [`dmesg`]), you may find the following errors: +Looking at the kernel logs (with {` dmesg}), you may find the following errors: ``` kernel: ata1.00: qc timeout after 15000 msecs (cmd 0x47) @@ -23,13 +23,13 @@ Meaning, add the following parameter: ``` libata.force=1.00:nodmalog -where [`1.00`] is the thing between "ata" and ":". +where {` 1.00} is the thing between "ata" and ":". So, if your logs were ``` kernel: ata3.01: qc timeout after 15000 msecs (cmd 0x47) -... +\... then the parameter would be: @@ -42,7 +42,7 @@ libata.force=3.01:nodmalog ### Update 20 August 2025 .p -About a month ago I stumbled upon this [url https://de.comp.hardware.laufwerke.festplatten.narkive.com/F8WstP5i/fix-frage-zu-sata-read-log-0x00-page-0x00-failed-emask-0x40 mailing list] (Google-powered translation to English [url https://de-comp-hardware-laufwerke-festplatten-narkive-com.translate.goog/F8WstP5i/fix-frage-zu-sata-read-log-0x00-page-0x00-failed-emask-0x40?_x_tr_sl=bg&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp here]). +About a month ago I stumbled upon this {url mailing list;https://de.comp.hardware.laufwerke.festplatten.narkive.com/F8WstP5i/fix-frage-zu-sata-read-log-0x00-page-0x00-failed-emask-0x40} (Google-powered translation to English {url here;https://de-comp-hardware-laufwerke-festplatten-narkive-com.translate.goog/F8WstP5i/fix-frage-zu-sata-read-log-0x00-page-0x00-failed-emask-0x40?_x_tr_sl=bg&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp}). .p A user had the same issue as outlined in this post and were discussing the situation. @@ -63,21 +63,21 @@ I'm leaving my original explanation, since some of it is still true. The following is how I understand the issue, but I did not find definitive proof thats exactly what happens.\n Take this section with a grain of salt. -A harddrive can support [url https://en.wikipedia.org/wiki/Direct_memory_access dma transfers], normally the CPU would handle data transfer from the harddrive to the system memory (RAM), meaning it asks for a bit of data, waits, when the data comes, puts it in memory, then asks for next bit and so on. +A harddrive can support {url dma transfers;https://en.wikipedia.org/wiki/Direct_memory_access}, normally the CPU would handle data transfer from the harddrive to the system memory (RAM), meaning it asks for a bit of data, waits, when the data comes, puts it in memory, then asks for next bit and so on. With DMA, the CPU could ask the drive for everythng it wants (not a tiny bit), and then the DMA controller (DMAC) on the drive will handle the actual data transfer from the drive to the memory (when the transfer is done, the drive will tell the CPU). The benefit is that the CPU can do other work while the transfer is going on, greatly improving efficiency, but the downside is that the harddrive has to support it (have a DMAC chip on it). Normally it would be useful for the DMAC to keep logs in a special place on the drive. -[~This is where the issue comes from: your harddrive supports DMA but does not support logs for it. +{s This is where the issue comes from: your harddrive supports DMA but does not support logs for it. However, the Linux kernel has no good way of knowing that, there is no "property" on the drive which tells us this. -The only way is to try and read from that log: if it succeeds, then there is support, if it fails, then there isn't.~] +The only way is to try and read from that log: if it succeeds, then there is support, if it fails, then there isn't.} -[~But what does it mean to fail? +{s But what does it mean to fail? The simplest definition would be for the drive to return an error singal, but in our case, the drive would just not return anything, ignoring our request. In that case, how would we know if the drive just doesn't know how to respond (meaning it doesn't support the logs) or if it's just very slow? -Well, we can't, so we put a time limit, if it doesn't respond in 15 seconds, then it probably doesn't support it.~] +Well, we can't, so we put a time limit, if it doesn't respond in 15 seconds, then it probably doesn't support it.} -That's what the error is saying: [`qc`] is short for [url https://docs.kernel.org/driver-api/libata.html#origins-of-commands "queued command"], it's used to represent a (S)ATA command (hence the [`cmd`] at the end, telling us which command it's referring to). +That's what the error is saying: {` qc} is short for {url "queued command";https://docs.kernel.org/driver-api/libata.html#origins-of-commands}, it's used to represent a (S)ATA command (hence the {` cmd} at the end, telling us which command it's referring to). So, the kernel is telling us "The hard drive (ATA) command to read (DMA) logs timed out after 15 seconds" (it first says a command timed out, then it says which one). By adding that kernel parameter, we're telling Linux that the drive doesn't support DMA logs, therefore the kernel doesn't need to do this "wait 15 seconds for response if support exists" routine. diff --git a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du index 0796818..602622f 100644 --- a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du +++ b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/balove-2021.du @@ -1,17 +1,17 @@ -# Балове 2021 +'def title Балове 2021 +'def desc Кандидатстудентски балове за Компютърни Науки, Софтуерно Инженерство и Информатика във ФМИ през 2021 -'define expected-reading 3 min -'define created 13 July 2023 -'define edited 14 July 2023 -[$pagenav] +# {title} -[*Тази страница е разширение на [url ./ "ФМИ и висшето образование в програмистката индустрия"].*] +{pagenav 3 min;13 July 2023;14 July 2023} + +{i Тази страница е разширение на {url "ФМИ и висшето образование в програмистката индустрия";./}.} Благодарение на електронната система за кандидатстване, имам минимални балове на трите класирания през 2021 за компютърни науки, софтуерно инженерство и информатика (без информационни системи, защото не исках да влизам там). Понеже такава информация много не се разпространява, тук ще я споделя подробно. Очевидна бележка: това са баловете за мъже, за жени са различни. -Също в бележките под линия на оригиналната статия съм дал стойности и източници за [url ./#fn4 бройка кандидати през 2021]. +Също в бележките под линия на оригиналната статия съм дал стойности и източници за {url бройка кандидати през 2021;./#fn4}. Напомням, че 2021 беше последната година с два изпита по математика: Математика I и Математика II. Първият беше по-обикновен, със затворени и отворени въпроси, и задачи с решения. @@ -19,9 +19,9 @@ Балът се формираше така: .bulleted -- 3 по оценката от Математика II [*или*] 2.5 по оценката от Математика I (което от двете носи по-голямо число) +- 3 по оценката от Математика II {i или} 2.5 по оценката от Математика I (което от двете носи по-голямо число) - + -- ако си ходил на държавен зрелостен изпит по математика, оценката от него, [*иначе*] оценката по математика от дипломата +- ако си ходил на държавен зрелостен изпит по математика, оценката от него, {i иначе} оценката по математика от дипломата За някакво усещане за баловете, ще напиша минималната нужна оценка от изпитите, считайки оценката от ДЗИ или дипломата за 6,00. Ако балът е под 13.5, то тогава със сигурност са приети студенти, които са имали по-малко от 6.00 на ДЗИ/диплома и са компенсирали с резултати на изпитите по математика (не може да кандидатстваш с оценка, по-ниска от 3.000). @@ -30,7 +30,8 @@ ## Първо класиране -:table_4 +:table +:4 |= Специалност - форма на обучение |= Минимален бал |= Мин. оценка по Математика I @@ -67,14 +68,16 @@ |: 3.877 |: Информатика - платено редовно -|: [*11.62*] +|: {i 11.62} |: 3.000 |: 3.000 + ## Второ класиране -:table_4 +:table +:4 |= Специалност - форма на обучение |= Минимален бал |= Мин. оценка по Математика I @@ -91,7 +94,7 @@ |: 4.263 |: Информатика - редовно -|: [*10.64*] +|: {i 10.64} |: 3.000 |: 3.000 @@ -116,9 +119,11 @@ |: - + ## Трето класиране -:table_4 +:table +:4 |= Специалност - форма на обучение |= Минимален бал |= Мин. оценка по Математика I @@ -135,7 +140,7 @@ |: 4.406 |: Информатика - редовно -|: [*12.00*] +|: {i 12.00} |: 3.000 |: 3.000 diff --git a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du index ec2f9b8..75fbcbf 100644 --- a/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du +++ b/src/blog/fmi-i-vissheto-obrazovanie-v-programistkata-industriq/index.du @@ -1,46 +1,46 @@ -# ФМИ и висшето образование в програмистката индустрия +'def title ФМИ и висшето образование в програмистката индустрия +'def desc Сравнение на различни български университети с ФМИ, разглеждане на предметите във ФМИ и общо мнение за факултета -'define expected-reading 39 min -'define created 12 July 2023 -'define edited 14 July 2023 -[$pagenav] +# {title} + +{pagenav 39 min;12 July 2023;14 July 2023} :contents :numbered -1. [url #section-2 Кой съм аз] -2. [url #section-3 Университетите в България (София)] +1. {uhref Кой съм аз} +2. {uhref Университетите в България (София)} .numbered - 1. [url #section-4 УниБит] - 2. [url #section-5 НБУ] - 3. [url #section-6 Технически университет] + 1. {uhref УниБит} + 2. {uhref НБУ} + 3. {uhref Технически университет} -4. [url #section-7 ФМИ] +4. {uhref ФМИ} :numbered - 1. [url #section-8 Специалности] - 2. [url #section-9 Влизане] - 3. [url #section-10 Следване и оцеляване] + 1. {uhref Специалности} + 2. {uhref Влизане} + 3. {uhref Следване и оцеляване} .numbered - 1. [url #section-11 Оценяване, влачене и повтаряне] - 2. [url #section-12 Седмична заетост] - 3. [url #section-13 Преподаватели] - 4. [url #section-14 Избираеми дисциплини и работа] + 1. {uhref Оценяване, влачене и повтаряне} + 2. {uhref Седмична заетост} + 3. {uhref Преподаватели} + 4. {uhref Избираеми дисциплини и работа} - 4. [url #-2 Какво се учи в КН2] + 4. {uhref Какво се учи в КН2} :numbered - 1. [url #section-15 Училищната математика\nсрещу университетската математика] - 2. [url #section-16 Първи курс: М-то във ФМИ означава МатеМатика] + 1. {uhref Училищната математика\nсрещу университетската математика} + 2. {uhref Първи курс: М-то във ФМИ означава МатеМатика} .numbered - 1. [url #section-17 Зимен семестър] - 2. [url #section-18 Летен семестър] + 1. {uhref Зимен семестър} + 2. {uhref Летен семестър} - 3. [url #section-19 Втори курс: И-то във ФМИ означава математИка] + 3. {uhref Втори курс: И-то във ФМИ означава математИка} .numbered - 1. [url #section-20 Зимен семестър] - 2. [url #section-21 Летен семестър] + 1. {uhref Зимен семестър} + 2. {uhref Летен семестър} -5. [url #section-22 Има ли смисъл от следване във фми? ДА!] +5. {uhref Има ли смисъл от следване във фми? ДА!} @@ -49,15 +49,15 @@ И цялата тази дискусия се намира в постове от преди 5-10 години... Аз вече съм следвал 2 години в университет, плюс това имам сериозен опит от преди това. -Макар и този блогпост да е главно за [url https://www.fmi.uni-sofia.bg/ Факултета по Математика и Информатика] към [url https://www.uni-sofia.bg/index.php Софийски Университет], по-общата ми цел е да споделя всичко , което знам свързано с образованието в индустрията. +Макар и този блогпост да е главно за {url Факултета по Математика и Информатика;https://www.fmi.uni-sofia.bg/} към {url Софийски Университет;https://www.uni-sofia.bg/index.php}, по-общата ми цел е да споделя всичко , което знам свързано с образованието в индустрията. -Бърза бележка: всичко казано [=важи за моя випуск=], с времето нещата се изменят и може повечето информация тук да бъде [=остаряла=]. -Допълнително, [url ./balove-2021.html тук] имам изкарани баловете във ФМИ (на СУ) за 2021 година. +Бърза бележка: всичко казано {b важи за моя випуск}, с времето нещата се изменят и може повечето информация тук да бъде {b остаряла}. +Допълнително, {url тук;./balove-2021.html} имам изкарани баловете във ФМИ (на СУ) за 2021 година. ## Кой съм аз Този блогпост няма да бъде напълно неутрален и ще включва моето мнение, затова е добре да знаеш от къде идва моята гледна точка. -Завършил съм [url https://www.feg.bg/ 9 Френска езикова гимназия], обаче едновременно от 10 до 12 клас участвах интензивно в националната програма [url https://it-kariera.mon.bg/e-learning/ ИТ-кариера]. +Завършил съм {url 9 Френска езикова гимназия;https://www.feg.bg/}, обаче едновременно от 10 до 12 клас участвах интензивно в националната програма {url ИТ-кариера;https://it-kariera.mon.bg/e-learning/}. Накратко, в тази програма изучавах практически неща, главните няколко типове програмирания, и към края се занимавах с разработване на софтуер на сравнително индустриално ниво (или поне най-близкото до това). От цялата програма бях единствения от център София с пълно отличие. @@ -73,7 +73,7 @@ ## Университетите в България (София) Сега ще обсъдим какви са алтернативите на ФМИ, и защо те не са толкова добри. -В София има четири (смислени) университета, които предлагат някаква форма на софтуерно образование: [url https://www.uni-sofia.bg/ Софийски университет], [url https://nbu.bg/ Нов Български Университет], [url https://www.tu-sofia.bg/ Техническия Университет] и [url https://www.unibit.bg/ Университет по Библеотекознание и Информационни технологии]. +В София има четири (смислени) университета, които предлагат някаква форма на софтуерно образование: {url Софийски университет;https://www.uni-sofia.bg/}, {url Нов Български Университет;https://nbu.bg/}, {url Техническия Университет;https://www.tu-sofia.bg/} и {url Университет по Библеотекознание и Информационни технологии;https://www.unibit.bg/}. Този пост ще бъде посветен на първата от тези опции, но все пак покрай приятели и колеги имам добра представа за другите опции. ### УниБит @@ -103,8 +103,8 @@ ### Технически университет -Не съм чувал много, но техническият университет се занимава повече с инженерство, така че [url https://tu-sofia.bg/uplan/%D0%A4%D0%9A%D0%A1%D0%A2/%D0%91%D0%B0%D0%BA%D0%B0%D0%BB%D0%B0%D0%B2%D1%8A%D1%80/FKSU_UPlan_BCSCe_zadochno.pdf се учат не толкова свързани предмети], като физика, проектиране и електротехника. -[url https://old.reddit.com/r/bulgaria/comments/tqy9l4/%D1%84%D0%BC%D0%B8_%D0%B8%D0%BB%D0%B8_%D1%82%D1%83/ Доколкото виждам онлайн, мненията не са позитивни]: +Не съм чувал много, но техническият университет се занимава повече с инженерство, така че {url се учат не толкова свързани предмети;https://tu-sofia.bg/uplan/%D0%A4%D0%9A%D0%A1%D0%A2/%D0%91%D0%B0%D0%BA%D0%B0%D0%BB%D0%B0%D0%B2%D1%8A%D1%80/FKSU_UPlan_BCSCe_zadochno.pdf}, като физика, проектиране и електротехника. +{url Доколкото виждам онлайн, мненията не са позитивни;https://old.reddit.com/r/bulgaria/comments/tqy9l4/%D1%84%D0%BC%D0%B8_%D0%B8%D0%BB%D0%B8_%D1%82%D1%83/}: .quote За IT ТУ е абсолютна загуба на време - редовно ми идват стажанти от там. Ако не са се занимавали с програмиране от преди това, почваме от 0 @@ -126,10 +126,10 @@ Във ФМИ много от предметите са математики и програмиранията се говори, че не са много добре. Онлайн има стотици часове материали и курсове, повечето от които са безплатни, на всяка тема свързана с програмиране. -Допълнително имаш [url https://www.telerikacademy.com/ Telerik Academy] и [url https://softuni.bg/ SoftUni] (само искам да напомня, че [=СофтУни не е университет=], макар и така да се казват) - две места които предлагат разнообразни програмистки и чисто практически курсове (и също дават сертификати). +Допълнително имаш {url Telerik Academy;https://www.telerikacademy.com/} и {url SoftUni;https://softuni.bg/} (само искам да напомня, че {b СофтУни не е университет}, макар и така да се казват) - две места които предлагат разнообразни програмистки и чисто практически курсове (и също дават сертификати). А и повечето програмисти нямат висше и са самоуки, тоест този път не е изобщо странен, даже е най-често следвания. -Финалното ми мнение се намира [url #section-19 най-долу], но един такова решение трябва да се вземе с възможно най-много информация. +Финалното ми мнение се намира {url най-долу;#section-19}, но един такова решение трябва да се вземе с възможно най-много информация. ### Специалности @@ -137,18 +137,16 @@ Технически всяка се занимава с различни неща, но на практика всички влезли искат да са програмисти. От тях, най-желани са компютърни науки и софтуерно инженерство (тези ще наричам "хубавите" специалности). -В информатика се влизаше много лесно, там балът беше [url ./balove-2021.html безнадеждно нисък], обаче следването е най-трудно от всички останали дисциплини. -Късането е брутално, особено първи курс: по Алгебра 1 от към 200 човека (това включваше и минали години май) само един човек беше [*допуснат*] до изпит (ама си го мина де). +В информатика се влизаше много лесно, там балът беше {url безнадеждно нисък;./balove-2021.html}, обаче следването е най-трудно от всички останали дисциплини. +Късането е брутално, особено първи курс: по Алгебра 1 от към 200 човека (това включваше и минали години май) само един човек беше {i допуснат} до изпит (ама си го мина де). По дискретни структури бяха повече, цели 10тима човека. -Общо от 1ви курс преминаха успешно 20-30 човека във 2ри курс (за да минеш не е нужно всички изпити да си минал, ама детайли [url #section-10 по-късно]). +Общо от 1ви курс преминаха успешно 20-30 човека във 2ри курс (за да минеш не е нужно всички изпити да си минал, ама детайли {url по-късно;#section-10}). Има няколко причини за това: .bulleted - от една страна бала като е най-нисък, хората с най-ниски умения по математика се намират там, така че успехите ще са най-ниски, - от друга страна има и преподаватели които са прекомерно неадекватни като изпитване и преподаване. -'footnote inf-sistemi Признавам, за тази информация използвах [url https://forums.bgdev.org/index.php?showtopic=34217&st=0&#entry255351 това мнение от форум], никой не обсъжда ИС. - -Информационни системи от своя страна сякаш се занимава повече с бази данни и проектиране на информационни системи[$inf-sistemi], не толкова чисто програмиране и нещата около него. +Информационни системи от своя страна сякаш се занимава повече с бази данни и проектиране на информационни системи{fn Признавам, за тази информация използвах {url това мнение от форум;https://forums.bgdev.org/index.php?showtopic=34217&st=0&#entry255351}, никой не обсъжда ИС.}, не толкова чисто програмиране и нещата около него. Признавам, че не съм чувал много за тях, ама балът не изглежда да е много висок (мисля че е по-висок от информатика) и мисля, че следването е най-лесно от 4те специалности. Сега, компютърни науки и софтуерно инженерство. @@ -164,30 +162,28 @@ Само по Алгебра 1 и Геометрия минават към 20-30 човека от първия път, по останалите си минават повечето. Макар че сравнително непланирано им сложиха доста взискателни преподаватели през 2ри курс, не знам дали те ще останат в бъдещи години, така че разликата между КН1 и КН2 може да се стопи. -'footnote minali-1-kurs Тази статистика е взета директно от таблици с оценки на редовни студенти на [url https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=228877 първи курс по Дискретни структури] и [url https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=283034 втори курс по Дизайн и Анализ на Алгоритми]. Тези таблици са правени от лектора по списъци от СУСИ (онлайн системата за студенти). Ще спомена по-късно, но дългите факултетни номера, в които има и букви, са на студентите, влезли през 2021, докато кратките пет-цифрени са на студенти от минали години, които повтарят. - КН2 вече е доста по-трудно, тук ежегодно по Диференциално и интегрално смятане минават 20-30 човека, а по Дискретни структури минават по 10тина. Напомням, че аз влязох тук. -Приблизително 44%[$minali-1-kurs] от редовните студенти (които не повтарят) успешно минаха (минахме ;)) към втори курс. +Приблизително 44%{fn Тази статистика е взета директно от таблици с оценки на редовни студенти на {url първи курс по Дискретни структури;https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=228877} и {url втори курс по Дизайн и Анализ на Алгоритми;https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=283034}. Тези таблици са правени от лектора по списъци от СУСИ (онлайн системата за студенти). Ще спомена по-късно, но дългите факултетни номера, в които има и букви, са на студентите, влезли през 2021, докато кратките пет-цифрени са на студенти от минали години, които повтарят.} от редовните студенти (които не повтарят) успешно минаха (минахме ;)) към втори курс. Иначе имам впечатлението, че най-умните и умелите хора измежду компютърни науки и софтуерно инженерство се намират тук, макар че това зависи от випуска: няма гаранция, че един много умен кандидат-студент ще реши да се запише за КН (и ще попадне в КН2). Като обобщение, това са дисциплините подредени от най-трудна за минаване към най-лесна: :ordered -1. [=Информатика=]: много трудно, не по много основателни причини, макар че като цяло малцинството което успява да завърши са на високо ниво. +1. {b Информатика}: много трудно, не по много основателни причини, макар че като цяло малцинството което успява да завърши са на високо ниво. Не препоръчвам, ако не си много издържлив и КН и СИ не са се получили. -2. [=Компютърни науки, 2ри поток=]: трудно, но като цяло е сравнително основателно (пак на моменти е малко нечестно, но не толкова колкото при информатика), нивото просто е високо. +2. {b Компютърни науки, 2ри поток}: трудно, но като цяло е сравнително основателно (пак на моменти е малко нечестно, но не толкова колкото при информатика), нивото просто е високо. Поне от моя випуск, повечето от най-добрите се намират тук. Ако си представим, че има някакво перфектно ниво на обучение, където не е твърде лесно, но и не е твърде трудно, бих казал че КН2 се намира малко над това ниво. -3. [=Компютърни науки, 1ви поток=]: малко по-лесно от КН2, но с малко понижаване на качеството. +3. {b Компютърни науки, 1ви поток}: малко по-лесно от КН2, но с малко понижаване на качеството. Има добро количество материал, което в КН2 ти е набито в главата, докато при КН1 си го забравил след лятната ваканция (не че това не важи в обратната посока, но в КН2 ни вкарват повече неща в умовете). В сравнение с перфектното ниво, КН1 е малко под него. Обаче трябва да се има в предвид, че 2ри курс сложиха доста взискателни преподаватели. Ако това се запази, разликата между двата потока може да изчезне. -4. [=Софтуерно инженерство=]: забележимо по-лесно от компютърни науки, повечето хора по повечето дисциплини минават без твърде много проблеми. +4. {b Софтуерно инженерство}: забележимо по-лесно от компютърни науки, повечето хора по повечето дисциплини минават без твърде много проблеми. Ама нивото също спада забележително, макар и бала да е най-висок. Както споменах, при компютърни науки е по-добре, ама нивото на СИ пак е сравнително ок. -5. [=Информационни системи=]: нисичък бал и сравнително лесно, но не ми изглежда да е супер развиващо за програмисти. +5. {b Информационни системи}: нисичък бал и сравнително лесно, но не ми изглежда да е супер развиващо за програмисти. Не бих препоръчал, освен ако алтернативата не е информатика. @@ -200,35 +196,23 @@ Сега главният определящ изпит е просто "Математика" и включва сложни въпроси като "кое от следните числа е най-голямо" и "намерете броя решения на уравнението". Разбира се, с това си идват свои трудности, и най-малката грешка може да постави 10-20 човека над тебе като успех, но в края на деня не се изисква толкова много тренинг както при моите изпити. -'footnote mat-i-ii Макар че това не е много добра причина за смяна на изпитването, понеже схемата с два такива изпита (единия стандартен и другия с малко задачи, но с пълни решения) си е държала още от времето на комунизма. Моето предположение за тази промяна, е че новата система е влошила качеството на обучение твърде много и искат минималните оценки за влизане се повишават обратно към околността на 6ца, но това вече са мои си конспирации. - -'footnote 2021-kandidati Такива статистики много не се намират публично и линковете не са сложени на достъпно място, но успях да изровя директните линкове към разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/249347/1644279/version/1/file/2021-04-24_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf първа изпитна сесия по Математика II], [url https://www.uni-sofia.bg/index.php/bul/content/download/250518/1651896/version/1/file/2021-05-23_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+I.pdf първата изпитна сесия по Математика I] и [url https://www.uni-sofia.bg/index.php/bul/content/download/250730/1653146/version/1/file/2021-05-30_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf втората изпитна сесия по Математика II] през 2021 година (ако някой от тях спре да работи, архивирани са на [url https://web.archive.org/ archive.org]). До всяка зала пише колко човека са разпределени за там, така че общата бройка е една проста сума. Най-много хора са се явили на първата сесися по Математика II: 593, на Математика I са 514 и на втората сесия по Математика II са 568. - -Моята генерация беше последната по старата програма на обучение[$mat-i-ii], така че при кандидатстване се вземаше една от оценките на изпитите Математика I или Математика II (като втория изпит допринася повече към бала). +Моята генерация беше последната по старата програма на обучение{fn Макар че това не е много добра причина за смяна на изпитването, понеже схемата с два такива изпита (единия стандартен и другия с малко задачи, но с пълни решения) си е държала още от времето на комунизма. Моето предположение за тази промяна, е че новата система е влошила качеството на обучение твърде много и искат минималните оценки за влизане се повишават обратно към околността на 6ца, но това вече са мои си конспирации.}, така че при кандидатстване се вземаше една от оценките на изпитите Математика I или Математика II (като втория изпит допринася повече към бала). Математика I беше сравнително стандартен, напомнящ на модерната "Математика" или матурата, обаче Математика II беше съвсем друго животно: там имаш 8 задачи, всяка с отворен отговор и изисквано решение. -Този изпит беше трудният и до голяма степен определящият, от максимум 593[$2021-kandidati] човека се рееха слухове че само 20тина са имали 6,00. - -'footnote 2021-mesta Този документ вече е лесно достъпен в [url https://www.uni-sofia.bg/index.php/bul/content/download/259611/1706172/version/1/file/%D0%9C%D0%B5%D1%81%D1%82%D0%B0+%D0%94%D0%9F.pdf сайта на СУ]. Също говоря за нормалните места по държавна субсидия: без платено обучение и българи, живеещи в чужбина. - -'footnote visoki-iziskvaniq Доколкото съм чувал, тази схема е била валидна до към 2014, поне за специалности като компютърни науки и софтуерно инженерство. Сякаш малко след това баловете на всичко започват яко да падат, ама такива статистики вече хептен ги няма публично. Единствената така информация имат кандидат-студенти, и то за своята година в която влизат, и не се познавам с достатъчно хора, за да разпитвам. +Този изпит беше трудният и до голяма степен определящият, от максимум 593{fn Такива статистики много не се намират публично и линковете не са сложени на достъпно място, но успях да изровя директните линкове към разпределението по зали за {url първа изпитна сесия по Математика II;https://www.uni-sofia.bg/index.php/bul/content/download/249347/1644279/version/1/file/2021-04-24_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf}, {url първата изпитна сесия по Математика I;https://www.uni-sofia.bg/index.php/bul/content/download/250518/1651896/version/1/file/2021-05-23_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+I.pdf} и {url втората изпитна сесия по Математика II;https://www.uni-sofia.bg/index.php/bul/content/download/250730/1653146/version/1/file/2021-05-30_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0+II.pdf} през 2021 година (ако някой от тях спре да работи, архивирани са на {url archive.org;https://web.archive.org/}). До всяка зала пише колко човека са разпределени за там, така че общата бройка е една проста сума. Най-много хора са се явили на първата сесися по Математика II: 593, на Математика I са 514 и на втората сесия по Математика II са 568.} човека се рееха слухове че само 20тина са имали 6,00. -Въпреки това, влизането във ФМИ беше лесно, общо имаше 525[$2021-mesta] места, предостатъчно, имайки предвид, че не всички явили се на тези изпити, кандидатстваха в компютърна специалност (оценката важи за физическия и стопанския факултет). +Въпреки това, влизането във ФМИ беше лесно, общо имаше 525{fn Този документ вече е лесно достъпен в {url сайта на СУ;https://www.uni-sofia.bg/index.php/bul/content/download/259611/1706172/version/1/file/%D0%9C%D0%B5%D1%81%D1%82%D0%B0+%D0%94%D0%9F.pdf}. Също говоря за нормалните места по държавна субсидия: без платено обучение и българи, живеещи в чужбина.} места, предостатъчно, имайки предвид, че не всички явили се на тези изпити, кандидатстваха в компютърна специалност (оценката важи за физическия и стопанския факултет). Вече за конкретни специалности беше малко по-трудно, 300 от тези места бяха в хубавите компютърни специалности, така че конкуренцията беше горе-долу двама човека за едно място. Също е добре да спомена, че баловете бяха супер ниски, в компютърни науки влязох с 4.70 (на Математика II) на първо класиране, на второ можеше и с 4.30 да вляза. -Конкретни стойности за баловете от тази година съм изкарал [url ./balove-2021.html тук]. -В Софтуерно инженерство бяха малко по-високи изискванията (а там бяха най-високи от компютърните специалности), ама пак, далеч от времето, когато с 5.40 е можело и да не влезеш[$visoki-iziskvaniq]. +Конкретни стойности за баловете от тази година съм изкарал {url тук;./balove-2021.html}. +В Софтуерно инженерство бяха малко по-високи изискванията (а там бяха най-високи от компютърните специалности), ама пак, далеч от времето, когато с 5.40 е можело и да не влезеш{fn Доколкото съм чувал, тази схема е била валидна до към 2014, поне за специалности като компютърни науки и софтуерно инженерство. Сякаш малко след това баловете на всичко започват яко да падат, ама такива статистики вече хептен ги няма публично. Единствената така информация имат кандидат-студенти, и то за своята година в която влизат, и не се познавам с достатъчно хора, за да разпитвам.}. -'footnote 2022-kandidati Както за 2021, пак трябваше да се ровя, но намерих разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/266692/1750342/version/1/file/2022-04-03_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf единствената изпитна сесия по Математика] през 2022 (също архивирано в [url https://web.archive.org/ archive.org]). - -'footnote 2023-kandidati Както за 2021, пак имаше ровене, но намерих разпределението по зали за [url https://www.uni-sofia.bg/index.php/bul/content/download/285793/1865079/version/1/file/2023-04-02_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%E2%80%93%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB.pdf първата изпитна сесия по Математика] и [url https://www.uni-sofia.bg/index.php/bul/content/download/290157/1891849/version/1/file/2023-06-11_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf втората изпитна сесия по математика] (както винаги, налични в [url https://web.archive.org/ archive.org]). На първата са се явили 979 и 875 на втората. - -С новия изпит вече конкуренцията е малко по-висока, все пак са се явили 969[$2022-kandidati] ученици на Математика през 2022 и максимум 979[$2023-kandidati] през 2023. +С новия изпит вече конкуренцията е малко по-висока, все пак са се явили 969{fn Както за 2021, пак трябваше да се ровя, но намерих разпределението по зали за {url единствената изпитна сесия по Математика;https://www.uni-sofia.bg/index.php/bul/content/download/266692/1750342/version/1/file/2022-04-03_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf} през 2022 (също архивирано в {url archive.org;https://web.archive.org/}).} ученици на Математика през 2022 и максимум 979{fn Както за 2021, пак имаше ровене, но намерих разпределението по зали за {url първата изпитна сесия по Математика;https://www.uni-sofia.bg/index.php/bul/content/download/285793/1865079/version/1/file/2023-04-02_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%E2%80%93%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB.pdf} и {url втората изпитна сесия по математика;https://www.uni-sofia.bg/index.php/bul/content/download/290157/1891849/version/1/file/2023-06-11_09-00_%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0.pdf} (както винаги, налични в {url archive.org;https://web.archive.org/}). На първата са се явили 979 и 875 на втората.} през 2023. Местата са същия брой, така че излиза към примерно трима човека за едно място и ако примерно имаш 3ка или 4ка може и да не влезеш във ФМИ. -Обаче, [=най-важното: материалът във ФМИ не се е изменил!=] +Обаче, {b най-важното: материалът във ФМИ не се е изменил!} Макар и изпитът да е значително по-лесен, трудността на материала не се е снижила (или поне толкова, колкото изпита) и в същото време математиката се изучава доста. Тоест, един човек, влязъл с най-ниския бал на Математика ще е далеч по-неподготвен за ФМИ от човек с минимален бал на Математика II. -Затова [=препоръчвам всеки кандидат-студент да може да реши някоя Математика II за към 4-4.50!=] +Затова {b препоръчвам всеки кандидат-студент да може да реши някоя Математика II за към 4-4.50!} Това са горе-долу 5-6 от 8те задачи. Иначе ако не можеш редовно да учиш математика и не можеш да се справиш с такива задачи (които са по-прости като характер в сравнение с това, което учим в университета), следването ти ще бъде твърде трудно според мен. @@ -253,12 +237,10 @@ Оценката се формира по различни начини при различните предмети, но най-често контролните и домашните през семестъра носят 40-50% и през сесията си изкарваш останалата част от оценката. Също понякога, ако си се справил достатъчно добре на контролните през семестъра, може да бъдеш освободен от изпит-задачи (не е нужно да ходиш и като оценка на него ти се пише средно аритметично от контролните). -Обаче почти винаги [=ако изкараш двойка на някой от изпитите през сесията, цялата ти оценка за предмета става двойка!=] - -'footnote september Разговорно на поправителната сесия им викаме септември, макар и само един-два дена от нея да са в този месец. Причината е, че просто до преди няколко години наистина е била през септември, но са я изместили назад. Защо са я изместили, не знам. +Обаче почти винаги {b ако изкараш двойка на някой от изпитите през сесията, цялата ти оценка за предмета става двойка!} Когато не си минал един предмет, ти го "влачиш". -За всеки предмет имаш две дати през академичната година, през които може да го вземеш: редовната сесията след семестър (тоест когато по принцип се изпитват хора по този предмет) и поправителната сесия, която се случва във втората половина от август[$september]. +За всеки предмет имаш две дати през академичната година, през които може да го вземеш: редовната сесията след семестър (тоест когато по принцип се изпитват хора по този предмет) и поправителната сесия, която се случва във втората половина от август{fn Разговорно на поправителната сесия им викаме септември, макар и само един-два дена от нея да са в този месец. Причината е, че просто до преди няколко години наистина е била през септември, но са я изместили назад. Защо са я изместили, не знам.}. По принцип имаш и ликвидационна сесия, ама идеята е, ако два изпита през поправителната сесия ти се препокриват, през поправителната да отидеш на единия и на ликвидационната да може да отидеш на другия (трябва да подадеш документ, че това си направил, не можеш да отложиш изпити ей така). Можеш да преминеш към следващия курс без проблеми ако влачиш максимум 3 предмета от годината. @@ -282,7 +264,7 @@ Количеството подготовка за едно контролно зависи от човек на човек, но ако нищо не си учил, бих казал че е поне една-две интензивни седмици за сериозните предмети са достатъчни. За домашните е по-малко, защото по принцип те са върху неща, изучавани на упражнения, така че ако си си водел записки (или споделящи колеги са водели) ще знаеш как да решиш всички задачи (разбира се, има изключения). -Това обаче е [=само за контролни-задачи по някои предмети=], все пак имаш теория и имаш задачи за които ти трябва теория, и тя вече не може да се научи толкова бързо. +Това обаче е {b само за контролни-задачи по някои предмети}, все пак имаш теория и имаш задачи за които ти трябва теория, и тя вече не може да се научи толкова бързо. Нещо много хубаво е, че никой не следи за присъствие на занятия и не се пишат отсъствия както в училище. Разбира се, това не означава, че не е нужно да се ходи на всички занятия, напротив, но ако искаш винаги може да пропуснеш нещо. @@ -305,16 +287,16 @@ Обаче, си задължен и да ходиш на избираеми дисциплини: имаш минимален брой избираеми за всеки семестър, минимален общ брой за всичките години и минимален брой ECTS кредити за всичките години. За разлика от училище, имаш доста голям избор и много от тях са интересни и полезни. -Обаче, [=не записвай избираеми през първи курс!=] -Скоро ще обсъдим предметите, обаче [=първи курс е най-труден и изисква цялото ти работно време!=] -Това трябва да навежда на мисълта, че [=не трябва да работиш по време на първи курс=], освен ако не ти се налага или не си от най-умните хора в специалността. +Обаче, {b не записвай избираеми през първи курс!} +Скоро ще обсъдим предметите, обаче {b първи курс е най-труден и изисква цялото ти работно време!} +Това трябва да навежда на мисълта, че {b не трябва да работиш по време на първи курс}, освен ако не ти се налага или не си от най-умните хора в специалността. Материалът е нещо напълно ново, не само като изучавани неща, ами и като концепции и модел на учене. -Ама каквото и да си говорим, [=най-доброто обучение се намира в избираемите дисциплини!=] +Ама каквото и да си говорим, {b най-доброто обучение се намира в избираемите дисциплини!} Не е задължително да си доцент или професор, за да направиш избираема, и може да я направиш както си искаш. Има много такива, които се водят от бивши студенти на ФМИ, които сега работят в големи компании, и предоставят супер практично и готино обучение. -За някои неща даже не можеш да намериш в България курсове, като [url https://intranet.fmi.uni-sofia.bg/index.php/s/uGI4XDReO3WoUok Реализация на езици за програмиране], където се разглежда как се правят компилатори или [url https://intranet.fmi.uni-sofia.bg/index.php/s/v2v4WlP2GdDbWtb Употреба и скриптиране на Vim], където подробно поглежда един от най-добрите текстови редактори някога създавани. +За някои неща даже не можеш да намериш в България курсове, като {url Реализация на езици за програмиране;https://intranet.fmi.uni-sofia.bg/index.php/s/uGI4XDReO3WoUok}, където се разглежда как се правят компилатори или {url Употреба и скриптиране на Vim;https://intranet.fmi.uni-sofia.bg/index.php/s/v2v4WlP2GdDbWtb}, където подробно поглежда един от най-добрите текстови редактори някога създавани. ### Какво се учи в КН2 @@ -336,17 +318,13 @@ Твърденията са неща, които казваме че са верни за дадена конструкция, тоест за нещо, което си измислим (и което не противоречи на аксиомите). Конструкция е ключова дума, понеже сътворяваме с въображение някакъв обект, нещо с някакви свойства и после доказваме, чисто формално и прецизно със стриктно определени уреди, че дадения обект прави това, което искаме. -'footnote def-set Формално няма дефиниция на множество, понеже става малко бездънно: какво е множество, еми колекция от елементи, какво е колекция от елементи, еми съвкупност от елементи, какво е съвкупност, еми множество от елементи. Формално казваме, че множество е първично понятие, тоест че няма дефиниция и се надяваме, че читателя схваща за какво се говори. - -'footnote axiom-of-choice В интерес на истината, това със сигурност е вярно само когато приемаме [url https://en.wikipedia.org/wiki/Axiom_of_choice аксиомата за избора], ако не я приемем, тогава доооста неща стават супер неинтуитивни и изглеждат грешни, обаче чисто формално и математически са верни. - Трудно ми е да дам лесен пример, понеже нищо в училище не може и да се сравнява, но нека да пробваме следното: нека да разгледаме множества. -Множество е просто някаква колекция от елементи[$def-set], представи си кутия с някакви предмети в нея. +Множество е просто някаква колекция от елементи{fn Формално няма дефиниция на множество, понеже става малко бездънно: какво е множество, еми колекция от елементи, какво е колекция от елементи, еми съвкупност от елементи, какво е съвкупност, еми множество от елементи. Формално казваме, че множество е първично понятие, тоест че няма дефиниция и се надяваме, че читателя схваща за какво се говори.}, представи си кутия с някакви предмети в нея. Аз твърдя, че едно празно множество е елемент на друго празно множество, тоест че една празната кутия се съдържа в друга празна кутия. -Това е очевидно грешно[$axiom-of-choice], нашето доказателство е, че щом кутията е празна, то по дефиниция няма елементи, следователно няма как да има друга кутия в нея. +Това е очевидно грешно{fn В интерес на истината, това със сигурност е вярно само когато приемаме {url аксиомата за избора;https://en.wikipedia.org/wiki/Axiom_of_choice}, ако не я приемем, тогава доооста неща стават супер неинтуитивни и изглеждат грешни, обаче чисто формално и математически са верни.}, нашето доказателство е, че щом кутията е празна, то по дефиниция няма елементи, следователно няма как да има друга кутия в нея. Ето: конструкция, твърдение и доказателство, доста елементарно и очевидно, но все пак се опитвам да не навлизам в детайли, а и в математиката има такива резултати, които не са хич очевидни. -Също, доказателството, че нещо не е вярно може би изглежда безполезно, но някои от [url https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem най-големите теореми на математиката са формулиране така]. +Също, доказателството, че нещо не е вярно може би изглежда безполезно, но някои от {url най-големите теореми на математиката са формулиране така;https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem}. Сега вече ще обсъдим конкретно изучаваните предмети в детайл. @@ -357,7 +335,7 @@ ##### Зимен семестър -[=Алгебра 1=]: пълното име е линейна алгебра. +{b Алгебра 1}: пълното име е линейна алгебра. Занимава се главно с линейни уравнения (ax + by + ... + mz = k), обаче интересното идва като изследваме операции върху тях и ги навържем в пространства. Много фундаментален предмет, използват се поне части от него в много клони на математиката и инженерството (защото много неща могат да се моделират с нея). Има употреби в machine learning, в компютърната графика, в алгоритми за препоръки (търсачки примерно), обработка на изображения и много други. @@ -365,7 +343,7 @@ Има по една малка задача всяка седмица, но не са трудни, изисква постоянство. Предметът се минава без твърде много трудности, лекционните записки са много прецизно написани и упражненията са супер. -[=Диференциално и интегрално смятане 1=]: с други думи, реален анализ. +{b Диференциално и интегрално смятане 1}: с други думи, реален анализ. Главно разглеждаме свойства и операции върху функции и редици числа. В училище учим производни; глаголът да правиш производни разговорно може да се нарече "производиране", обаче терминът е диференциране. Интегрирането е обраното действие на диференцирането, тоест намирането на функция, имайки само нейната производна. @@ -376,7 +354,7 @@ Главната цедка е теорията, на която имаш теоретични задачи, при които дори за 3ка ще трябва да приложиш малко усет към предмета. Като цяло просто изискванията са високи, иначе екипа са готини и бих казал, че оценяването е честно. -[=Дискретни структури=]: този предмет е малко смесица от три предмета - булева алгебра, увод в теория на множествата, комбинаторика и теория на графите. +{b Дискретни структури}: този предмет е малко смесица от три предмета - булева алгебра, увод в теория на множествата, комбинаторика и теория на графите. От всичките математики, това е може би най-важната за програмиране. В определен смисъл на думата, ДИС се занимава с безкрайно много и безкрайно малки елементи: на една функция може да и подадеш числото 1, но и 1.1, и 1.11 и так. нат., без проблем. Обаче ДСТР разглежда дискретни обекти, тоест някакъв краен брой конкретни неща. @@ -397,7 +375,7 @@ Ама трябва да предупредя, че не получаваш точки за половинчати решения, като цяло или си решил задачата коректно или не. Бих казал че при този предмет се появяват нечестности или прекомерно високи изисквания на моменти, но се минава. -[=Увод в програмирането=], неговото значение трябва да е очевидно. +{b Увод в програмирането}, неговото значение трябва да е очевидно. Изучава се C++, макар и някои неща да не са направени по най-добрите начини. Налага се да знаеш и ползваш точно нещата, които ти се преподават и нищо друго. Не бих казал, че е лошо направен, има някакво основание за тази методика, обаче някои неща се разглеждат твърде формално и програмирането не се изучава като динамичен предмет, в който може да решиш проблеми по много начини, а като задача по математика, където се изисква определено решение. @@ -410,9 +388,9 @@ ##### Летен семестър -[=Диференциално и интегрално смятане 2=]: директно продължение на ДИС1. +{b Диференциално и интегрално смятане 2}: директно продължение на ДИС1. -[=Геометрия=]: истинското име на този предмет е аналитична геометрия и няма нищо общо с училищната евклидова геометрия. +{b Геометрия}: истинското име на този предмет е аналитична геометрия и няма нищо общо с училищната евклидова геометрия. Разглеждаме пространствата и геометричните обекти като по-абстрактни неща, или по-конкретно, разглеждаме повече числата и зависимостите между конкретни обекти. Централно в компютърната графика и всичко около нея (обработка на изображения, 3D моделиране, ...). @@ -420,18 +398,18 @@ Упражненията са супер, има и много добри записки по тях. Минава се без твърде много проблеми. -[=Езици, автомати и изчислимост=]: вторият най-важен предмет от математиките, на английски се казва Theoretical Computer Science. +{b Езици, автомати и изчислимост}: вторият най-важен предмет от математиките, на английски се казва Theoretical Computer Science. Занимава се с различни теоретични обекти, които могат да правят изчисления върху текстови низове. Всичко свързано с анализ или шаблони върху текст използва нещата тук, а пък и отвъд. Ако някога си чувал за машина на Тюринг, Тюринг-завършеност на програмни езици или проблемът за спирането, от тука идват. Благодарение на тази наука е възможно да имплементираш компилатори на програмни езици и да правиш всички форми на разбор на текст (като обработката на уебстраници и интернет пакети). -Записките са много добри, даже публично се намират, заедно с минали изпитни теми, [url http://logic.fmi.uni-sofia.bg/eai.html тук]. +Записките са много добри, даже публично се намират, заедно с минали изпитни теми, {url тук;http://logic.fmi.uni-sofia.bg/eai.html}. И както по дискретни структури, асистентите не са консистентни и нивото малко криви. Ама в края на деня преподавателите са готини и не искат да прецакват хора, така че се минава спокойно. -[=Обектно ориентирано програмиране=]: това е най-популярният начин/парадигма за програмиране. -Обект е групиране на данни с функциите върху тях, като са изпълнени [url https://en.wikipedia.org/wiki/Object-oriented_design#Object-oriented_concepts няколко свойства]. +{b Обектно ориентирано програмиране}: това е най-популярният начин/парадигма за програмиране. +Обект е групиране на данни с функциите върху тях, като са изпълнени {url няколко свойства;https://en.wikipedia.org/wiki/Object-oriented_design#Object-oriented_concepts}. Кажи-речи всяка компания и всеки модерен програмен език, който се използва в индустрията, поддържа ООП. Екипът е същия като при УП, така че общото ми мнение е същото, макар че при ООП ситуацията е може би една идея по-релаксирана. @@ -444,7 +422,7 @@ ##### Зимен семестър -[=Компютърни архитектури=]: описание на хардуера. +{b Компютърни архитектури}: описание на хардуера. Малко се доближава и до електротехниката, но се разглеждат много фундаменталните хардуерни компоненти и техните функционалности в един компютър. Разглеждаме основните компонентни схеми за изчисления и хардуерно как се ползват и работят нещата. Не е кой знае колко полезен за средния програмист, освен ако не се занимаваш със системно програмиране, ама е много важен фундамент. @@ -453,22 +431,22 @@ Това е първият предмет при който няма задължителни упражнения, но никой не препоръчва да се ходи на избираемия практикум, понеже не е координиран много добре с лекциите и някои неща стават твърде трудни. Иначе минаването е лесно. -[=Основи на компютърната графика=]: има ли изобщо какво да обяснявам. +{b Основи на компютърната графика}: има ли изобщо какво да обяснявам. Разглеждаме част от математиката, но повече се занимаваме с 3D моделиране и идеите на сложните неща, не толкова тяхното имплементиране. Минаването е лесно, трябва да си малко консистентен със седмичните задачи обаче. И този лектор ми е един от любимите. Презентациите в които се намира материала са перфектно направени и упражненията са много приятни. -Ето [url https://boytchev.github.io/scorm/ тук] има редици малки задачки/игри с които можеше да изкараш малък бонус към оценката. +Ето {url тук;https://boytchev.github.io/scorm/} има редици малки задачки/игри с които можеше да изкараш малък бонус към оценката. -[=Структури от данни и програмиране=]: нещо като въведение в дизайн и анализ на алгоритмите. +{b Структури от данни и програмиране}: нещо като въведение в дизайн и анализ на алгоритмите. Занимаваме се с някои много важни структури от данни, като стек и опашка, и разглеждаме алгоритми върху тях. Супер важно за всеки програмист. Екипът пак е същия, както при УП и ООП, така че мнението ми продължава, но тук поне изискванията за писане на код са по-основателни. Все пак разглеждаме конкретни структури от данни и алгоритми, ако не ги ползваш в решенията на задачи, малко би се обезсмислила цялата история. -[=Функционално програмиране=]: втората най-използвана парадигма след ООП. +{b Функционално програмиране}: втората най-използвана парадигма след ООП. Идеята е, че разглеждаме всичко като функции, във всеки момент една функция връща нещо или приема нещо и никъде не пазим състояния. Тоест, една стойност се намира или като аргумент или като върната стойност. Също супер важно да се знае и може. @@ -478,18 +456,18 @@ ##### Летен семестър -[=Алгебра 2=]: дефакто разглеждаме теория на групите, което на английски съм го виждал и като "Modern algebra". +{b Алгебра 2}: дефакто разглеждаме теория на групите, което на английски съм го виждал и като "Modern algebra". Група е някакво множество от елементи и операция върху тях, като за операцията са изпълнени няколко свойства. Допълнително имаме и пръстен, където вече имаш множество и две операции върху тях. -Може би звучи странно, но е една от [url https://www.youtube.com/watch?v=mH0oCDa74tE най-интересните и шантави математики]. +Може би звучи странно, но е една от {url най-интересните и шантави математики;https://www.youtube.com/watch?v=mH0oCDa74tE}. Криптографията се основава на нея и има употреби в теория на графите. Екипът същия като при Алгебра 1, така че нямам оплаквания. Макар че този път няма седмични задачи - ура! -[=Дизайн и анализ на алгоритми=]: също едно име, което обяснява себе си. +{b Дизайн и анализ на алгоритми}: също едно име, което обяснява себе си. Разглеждаме методиките за сравняване на алгоритми (асимптотика) и как да докажем тяхната коректност. -Също разглеждаме доста основни и често използвани алгоритми, както и се допираме до [url https://en.wikipedia.org/wiki/NP_%28complexity%29 NP сложност]. +Също разглеждаме доста основни и често използвани алгоритми, както и се допираме до {url NP сложност;https://en.wikipedia.org/wiki/NP_%28complexity%29}. Още един много важен предмет. Тук сякаш асистентите преподават по-добре и нивото е по-изравнено. @@ -497,7 +475,7 @@ Обаче смятам, че на доста моменти навлиза твърде много в математиката и теорията, и има същите проблеми с оценяването както по ДСТР. Цели 15 човека минаха от първия път, така че нивото е горе-долу същото. -[=Изследване на операциите=]: решава оптимизационни задачи, тоест задачи при които искаш минимум или максимум, като за всяка променлива имаш някакво ограничение (на английски се казва Linear Programming, но няма нищо общо с програмиране). +{b Изследване на операциите}: решава оптимизационни задачи, тоест задачи при които искаш минимум или максимум, като за всяка променлива имаш някакво ограничение (на английски се казва Linear Programming, но няма нищо общо с програмиране). Една оптимизационна задача е примерно ако имаме фабрики за автомобили, всяка произвеждаща различно количество коли и складове в други градове, с различни капацитети, и имаме цената на пътя между градовете и складовете, как най-евтно ще пренесем всички автомобили в складовете. Има употреба ако се опитваш да решиш такъв тип задачи, но ми се струва от по-безполезните неща за един програмист. @@ -505,7 +483,7 @@ Лекторът е готин. Минаването е лесно, нещата не са супер трудни. -[=Компютърни мрежи=]: пак име, което само се обяснява. +{b Компютърни мрежи}: пак име, което само се обяснява. Абсолютно всичко свързано с интернет и мрежите, от протоколи до методи за маршрутизация. Като КАРХ не е от най-полезните за ежедневието, но е много важен фундамент. @@ -513,7 +491,7 @@ Както и по други предмети, лектора не иска да ни прецаква, затова минаването не е проблем. Даже бих казал, че е твърде лесно. -[=Операционни системи=]: може би най-важният не-математически предмет, ако беше направен свестно. +{b Операционни системи}: може би най-важният не-математически предмет, ако беше направен свестно. Имам много силно мнение за него, като цяло предмета се свежда до 70% менижиране на процеси, 20% менижиране на памет и 10% случайни неща. Имаше потенциалът да е от най-добрите предмети в целия бакалавър, ама програмата и изпитването беше наистина зле направено. @@ -527,7 +505,7 @@ Не бих казал, че се учат стари неща, които не са актуални, но за най-новите технологии трябва да се обърнеш към избираеми. Обучението е далеч от перфектно, обаче каквото и да си говорим, обучението никъде не е перфектно. -Бих казал, че качеството на курсове също [url https://kleopetrov.me/2017/01/31/return-return-and-how-to-breack-it/ може да бъде много по-ниско]. +Бих казал, че качеството на курсове също {url може да бъде много по-ниско;https://kleopetrov.me/2017/01/31/return-return-and-how-to-breack-it/}. Това е много голяма тема, обаче въпреки че не учим най-новите и използваемите неща, основите с които излизаш ти позволяват да научиш новите технологии значително по-бързо и в значително по-голяма дълбочина. Колкото и да не се харесва, математиката е в основата на всички кътчета от компютрите. Разбира се, има пре-достатъчно работа, която не изисква и елементарно събиране да знаеш, но ако се стремиш нагоре, математиката е нужна. @@ -539,4 +517,6 @@ 2. Студентстването като изживяване е веднъж в живота, все пак характерът става по-издържлив когато те скъсат по няколко изпита, за които си учил много. 3. Каквото и да си говорим, ФМИ е доста авторитетно учебно заведение, макар и диплома за един програмист да не е задължителна, със сигурност ще помогне значително. -И даже бих аргументирал, че е [=по-добре да следваш една година във ФМИ и да се откажеш, отколкото да следваш 4 години и да завършиш в който и да е друг университет!=] +И даже бих аргументирал, че е {b по-добре да следваш една година във ФМИ и да се откажеш, отколкото да следваш 4 години и да завършиш в който и да е друг университет!} + +{footnotes} diff --git a/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du b/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du index 1c6d67b..a4cd802 100644 --- a/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du +++ b/src/blog/friendship-ended-with-funtoo-now-gentoo-is-my-best-friend/index.du @@ -1,21 +1,21 @@ -# Friendship ended with Funtoo, now Gentoo is my best friend +'def title Friendship ended with Funtoo, now Gentoo is my best friend +'def desc Explaining why I switched from Funtoo to Gentoo as my main OS -'define expected-reading 11 min -'define created 28 May 2023 -'define edited 07 June 2023 -[$pagenav] +# {title} + +{pagenav 11 min;28 May 2023;07 June 2023} .contents .numbered -1. [url #terminology Terminology] -2. [url #public-enemy-no-1-packages Public Enemy No 1: Packages] -3. [url #i-didnt-follow-the-wolf-pack-philosophy I didn't follow the wolf pack philosophy] -4. [url #why-did-i-choose-funtoo-in-the-first-place Why did I choose Funtoo in the first place?] +1. {uhref Terminology} +2. {uhref Public Enemy No 1: Packages} +3. {uhref I didn't follow the wolf pack philosophy} +4. {uhref Why did I choose Funtoo in the first place?} .numbered - 1. [url #debunking-benefits Debunking benefits] - 2. [url #personal-advantages-over-gentoo Personal advantages over Gentoo] + 1. {uhref Debunking benefits} + 2. {uhref Personal advantages over Gentoo} -Around 6 months ago I wrote [url /blog/taming-the-fun-too Taming The Fun-too], a blog post sharing my personal experiences with the Funtoo linux distribution. +Around 6 months ago I wrote {url Taming The Fun-too;/blog/taming-the-fun-too}, a blog post sharing my personal experiences with the Funtoo linux distribution. What you don't know is that less than a month later, at the end of December, I installed Gentoo on my desktop computer, and an additional 3 months later my laptop followed. Here is what happened. @@ -24,19 +24,19 @@ Here is what happened. Before we begin, I want to take a second and explain some Gentoo/Funtoo terminology: :unordered -- [`emerge`] (as a verb): what does "install" mean? I would argue it means copying a program and the file it depends on somewhere on a system, with the goal of being able to run this program. +- {` emerge} (as a verb): what does "install" mean? I would argue it means copying a program and the file it depends on somewhere on a system, with the goal of being able to run this program. .p Now, in Gentoo and Funtoo, most programs are compiled from source code, so before you install you download it's source and compile. - For this reason, on such systems you would usually say a certain program/package is [*being emerged, not installed*] (and the words comes from the [url https://wiki.gentoo.org/wiki/Emerge package-manager command-line utility of the same name]). + For this reason, on such systems you would usually say a certain program/package is {i being emerged, not installed} (and the words comes from the {url package-manager command-line utility of the same name;https://wiki.gentoo.org/wiki/Emerge}). -- [`ebuild`] (file): the exact steps needed to emerge a package differ from one project to another, but how do you manage packages then? +- {` ebuild} (file): the exact steps needed to emerge a package differ from one project to another, but how do you manage packages then? The solution is that when you try to emerge something, a special file with detailed instructions is looked up: an ebuild file. - repository tree: the collection of all ebuilds -- [`use`] flags: every program can be built with different flags (aka options), which enable or disable certain features from being available in the result package. - For example, the text editor [url https://packages.gentoo.org/packages/app-editors/vim vim] supports sound, but not everyone would want to have that feature. +- {` use} flags: every program can be built with different flags (aka options), which enable or disable certain features from being available in the result package. + For example, the text editor {url vim;https://packages.gentoo.org/packages/app-editors/vim} supports sound, but not everyone would want to have that feature. ## Public Enemy No 1: Packages @@ -47,41 +47,41 @@ Most packages and their dependencies on Funtoo go unmaintained and untested for 'footnote required-3.8 Required might be a strong word, I don't remember if I tried (though I'm sure I did) just downgrading the Python version in the ebuild. Nevertheless, there were for sure useful packages which really did need it. -Python was stuck at version 3.7, while a lot of packages like barrier, libplacebo, mpv and pulseeffects[$packages-in-repo-tree] required[$required-3.8] at least 3.8. +Python was stuck at version 3.7, while a lot of packages like barrier, libplacebo, mpv and pulseeffects{packages-in-repo-tree} required{required-3.8} at least 3.8. So, with a lot of effort and poking around, I got python 3.8 to work, just barely. -What's even better is that eventually I reached an [=unfixable=] circular python dependency (between dev-python/packaging and dev-python/setuptools). +What's even better is that eventually I reached an {b unfixable} circular python dependency (between dev-python/packaging and dev-python/setuptools). -'footnote glibc This point may not be completely fair, since Funtoo has a system for [url https://web.archive.org/web/20230528115518/https://projects.funtoo.org/metatools/docs/autogen.html ebuild generation], which means that they might've made configuration changes and/or applied patches which "fix" that version, but still, it really isn't a good look. +'footnote glibc This point may not be completely fair, since Funtoo has a system for {url ebuild generation;https://web.archive.org/web/20230528115518/https://projects.funtoo.org/metatools/docs/autogen.html}, which means that they might've made configuration changes and/or applied patches which "fix" that version, but still, it really isn't a good look. -Another problem child was glibc, it is [*currently*] at [url https://github.com/funtoo/core-kit/tree/1.4-release/sys-libs/glibc version 2.33-r2], which under Gentoo [url https://gitweb.gentoo.org/repo/gentoo.git/tree/profiles/package.mask#n542 is officially masked and discouraged for usage][$glibc] and wouldn't you know it, also prevents some packages from being compiled (mainly I remember ungoogled-chromium). +Another problem child was glibc, it is {i currently} at {url version 2.33-r2;https://github.com/funtoo/core-kit/tree/1.4-release/sys-libs/glibc}, which under Gentoo {url is officially masked and discouraged for usage;https://gitweb.gentoo.org/repo/gentoo.git/tree/profiles/package.mask#n542}{glibc} and wouldn't you know it, also prevents some packages from being compiled (mainly I remember ungoogled-chromium). There were a lot more problematic packages, but I've forgotten most details. What I do remember is that the day I decided to hop to Gentoo, I tried to update my system and yet again I got some sort of issue, either a package couldn't compile properly or there was some dependency conflict. That was preceded by my unsuccessful attempts at getting the kicad package to work a couple of days prior. At that point, this had become completely normal. -[=But=] Funtoo shouldn't be blamed for it! +{b But} Funtoo shouldn't be blamed for it! ## I didn't follow the wolf pack philosophy -On the [url https://www.funtoo.org/Welcome Welcome] page of Funtoo's website, in the second paragraph, we are linked the [url https://www.funtoo.org/Wolf_Pack_Philosophy Wolf Pack Philosophy] page. +On the {url Welcome;https://www.funtoo.org/Welcome} page of Funtoo's website, in the second paragraph, we are linked the {url Wolf Pack Philosophy;https://www.funtoo.org/Wolf_Pack_Philosophy} page. This is essentially a document describing how a member of the community should behave, and I didn't follow it. Any member of the pack is supposed to: .unordered -- [=Be Mindful of the Pack=] by tackling challenges with the community\n +- {b Be Mindful of the Pack} by tackling challenges with the community\n but as I found (package) challenges, I tackled them on my own, not trying to consult anyone or ask for help -- [=Be Interconnected=] by supporting and being supported by the community\n +- {b Be Interconnected} by supporting and being supported by the community\n but I didn't connect with anyone on my issues -- [=Howl=] by expressing their needs and sharing their "adventures"\n +- {b Howl} by expressing their needs and sharing their "adventures"\n but I didn't express them and didn't share the work I've done Or more simply put, Funtoo is a small project, and you need to communicate with others to get things done. -'footnote kicad On that aforementioned kicad package, drobbins, the benevolent dictator for life of Funtoo, categorized it as a [url https://bugs.funtoo.org/browse/FL-8435?focusedId=52907&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-52907 package which people aren't interested in]. +'footnote kicad On that aforementioned kicad package, drobbins, the benevolent dictator for life of Funtoo, categorized it as a {url package which people aren't interested in;https://bugs.funtoo.org/browse/FL-8435?focusedId=52907&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-52907}. -Another way to look at it is that in a project of this scale, what gets supported is what the community uses, so in a way, I was trying to use Funtoo in the [*wrong*] way. +Another way to look at it is that in a project of this scale, what gets supported is what the community uses, so in a way, I was trying to use Funtoo in the {i wrong} way. This may sound ridiculous, but then again, they aren't making a project which "just works" for everyone (like Ubuntu or Linux Mint), this is a project by the community for the community. -You can't expect them to support everything that a big-scale distro does, like Gentoo, with a fraction of the manpower, so if nobody supports a package (which exists in the repository tree) that doesn't work and you don't at least speak up, it will probably stay broken[$kicad] (this kind of relates to the [=Is Territorial=] point in the philosophy). +You can't expect them to support everything that a big-scale distro does, like Gentoo, with a fraction of the manpower, so if nobody supports a package (which exists in the repository tree) that doesn't work and you don't at least speak up, it will probably stay broken{kicad} (this kind of relates to the {b Is Territorial} point in the philosophy). However, in my defense, I didn't open bug reports or create forum posts because my issues weren't "directly" related to Funtoo, or a normal Funtoo installation. Most of the time I would have an issue with a package, then get it's Gentoo counterpart, try to get all dependencies working one by one, and it will fail with some unsearchable error. @@ -102,12 +102,12 @@ Looking at these with the benefit of hindsight: .quote git > rsync By default, on Gentoo synchronization of ebuild files is done via rsync, while on Funtoo it's done with git. -Gentoo has actually supported git synchronization for quite a while, and [url https://wiki.gentoo.org/wiki/Portage_with_Git the setup is easy], so in the modern day it's really a matter of preference. -Though, [url https://lwn.net/Articles/759578/ rsync is probably better with bad internet connections]. +Gentoo has actually supported git synchronization for quite a while, and {url the setup is easy;https://wiki.gentoo.org/wiki/Portage_with_Git}, so in the modern day it's really a matter of preference. +Though, {url rsync is probably better with bad internet connections;https://lwn.net/Articles/759578/}. .quote profiles (flavors and mix-ins) -Funtoo has a system called [url https://www.funtoo.org/Funtoo_Profiles profiles]. +Funtoo has a system called {url profiles;https://www.funtoo.org/Funtoo_Profiles}. The idea is that you can group a whole set of packages and use flags into one name with the ability to turn them off and on again. So, if you want to install gnome on your system, you don't have to worry about flags and potential dependency problems, just use the gnome mix-in and everything will be ready to go for emerging. @@ -115,19 +115,19 @@ This is pretty cool but it's also somewhat unnecessary. You would save time on your very first install ever, but once you've set your flags on one machine, you'll just need to copy some files over (make.conf and package.use) and be done with it. There is a case to be made for people who often emerge and unmerge packages, but they are very much a minority (which I'm not a part of). -.quote Funtoo has [url https://wiki.gentoo.org/wiki/Stage_tarball stage 3 tarballs] with already setup DEs +.quote Funtoo has {url stage 3 tarballs;https://wiki.gentoo.org/wiki/Stage_tarball} with already setup DEs This means that on a Funtoo system, you could directly unpack the tarball (the initial prebuilt binaries), and without emerging anything, have a ready-to-go desktop environment. The huge benefit is that you can very quickly reboot into your "install" (after setting up the booting of course), and use your computer with the comfort of a graphical environment while everything else is being emerged. -Again, this is really cool, but at the end of the day, a normal "text-only" installation isn't very difficult, the [url https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation Gentoo handbook] is very detailed and well written, you install a system once so in the long term it wouldn't matter and I personally use a custom desktop environment setup, so those DEs would be bloat. +Again, this is really cool, but at the end of the day, a normal "text-only" installation isn't very difficult, the {url Gentoo handbook;https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation} is very detailed and well written, you install a system once so in the long term it wouldn't matter and I personally use a custom desktop environment setup, so those DEs would be bloat. .quote fixed release model -[url https://forums.funtoo.org/topic/1945-funtoo-release-model/#comment-9321 Funtoo releases fixed version of their distro], which means, in theory, packages will be way more stable and tested than normally. +{url Funtoo releases fixed version of their distro;https://forums.funtoo.org/topic/1945-funtoo-release-model/#comment-9321}, which means, in theory, packages will be way more stable and tested than normally. I've never found problems with packages being "too new", and this is more relevant to how the packages are managed by the maintainers, so it doesn't make that much of a difference to the end user, in my opinion. -.quote [url https://www.funtoo.org/Autogen autogens] +.quote {url autogens;https://www.funtoo.org/Autogen} Rather than making ebuilds manually, on Funtoo you can automatically generate them with simple Python code. This system probably reduces management time quite a lot, especially for a smaller team of maintainers, but you would still need to understand ebuild files. @@ -146,8 +146,8 @@ Unfortunately, for Gentoo it's the opposite effect, I couldn't compile most pack .quote package.use > make.conf -There is a big emphasis on writing your use flags in a separate [`/etc/portage/package.use`] file (or make it a folder and add use flags in different subfiles), and to try and change [`/etc/portage/make.conf`] as little as possible. -I generally believe this is a significantly better system than stuffing everything into [`make.conf`], and it isn't pushed that hard on Gentoo. +There is a big emphasis on writing your use flags in a separate {` /etc/portage/package.use} file (or make it a folder and add use flags in different subfiles), and to try and change {` /etc/portage/make.conf} as little as possible. +I generally believe this is a significantly better system than stuffing everything into {` make.conf}, and it isn't pushed that hard on Gentoo. That said, Gentoo still supports it, so I'm not missing out, but I probably wouldn't have used it. diff --git a/src/blog/gns3-initsh-no-such-file/index.du b/src/blog/gns3-initsh-no-such-file/index.du index 2b6f908..fdd666e 100644 --- a/src/blog/gns3-initsh-no-such-file/index.du +++ b/src/blog/gns3-initsh-no-such-file/index.du @@ -1,12 +1,12 @@ -# Fix "exec /gns3/init.sh: no such file or directory" +'def title Fix 'exec /gns3/init.sh: no such file or directory' +'def desc This problem occurs on new installations, the solution is to make GNS3 use Debian's busybox implementation. -'define expected-reading 1 min -'define created 14 June 2023 -'define edited 14 June 2023 -[$pagenav] +# {title} + +{pagenav 1 min;14 June 2023;14 June 2023} This problem can easily occur on new installations and can be hard to figure out. -In a [url https://github.com/GNS3/gns3-server/issues/2069#issuecomment-1296741195 GitHub issue], the solution that fixed it for me was using Debian's busybox: +In a {url GitHub issue;https://github.com/GNS3/gns3-server/issues/2069#issuecomment-1296741195}, the solution that fixed it for me was using Debian's busybox: :ordered 0. Get into a temporary folder diff --git a/src/blog/how-to-encrypt-email/index.du b/src/blog/how-to-encrypt-email/index.du index ec9d546..13b49a5 100644 --- a/src/blog/how-to-encrypt-email/index.du +++ b/src/blog/how-to-encrypt-email/index.du @@ -1,70 +1,70 @@ -# How to encrypt email +'def title How to encrypt email +'def desc For PGP add keys in your client. For S/MIME another article is linked. Also contains a comparison of a lot of mail clients. -'define expected-reading 5 min -'define created 16 September 2022 -'define edited 16 November 2022 -[$pagenav] +# {title} + +{pagenav 5 min;16 September 2022;16 November 2022} :contents :numbered -1. [url #getting-keys Getting keys] +1. {uhref Getting keys} :numbered - 1. [url #pgp PGP] + 1. {uhref PGP} .numbered - 1. [url #pgptool.org pgptool.org] - 2. [url #gnu-privacy-guard GNU Privacy Guard] + 1. {uhref pgptool.org} + 2. {uhref GNU Privacy Guard} - 2. [url #smime S/MIME] + 2. {uhref S/MIME} -2. [url #exchanging-keys Exchanging keys] -3. [url #configuring-clients Configuring clients] +2. {uhref Exchanging keys} +3. {uhref Configuring clients} -In [url /blog/encrypted-email this] blog post I shared the most common technologies for email encryption and a bit of how they work. PGP and S/MIME are the most popular schemes, with support from a lot of clients. +In {url this;/blog/encrypted-email} blog post I shared the most common technologies for email encryption and a bit of how they work. PGP and S/MIME are the most popular schemes, with support from a lot of clients. These are all the steps required to go from having no encryption, to encrypting all of your future emails. ## Getting keys -PGP and S/MIME are both built upon [url https://en.wikipedia.org/wiki/Public-key_cryptography public-key cryptography] so you and all of your recipients need to have a pair of public and private keys. +PGP and S/MIME are both built upon {url public-key cryptography;https://en.wikipedia.org/wiki/Public-key_cryptography} so you and all of your recipients need to have a pair of public and private keys. ### PGP -As [url /blog/encrypted-email/#pgp discussed], PGP relies on a [url https://en.wikipedia.org/wiki/Web_of_trust web of trust], meaning you can generate your keys by yourself. +As {url discussed;/blog/encrypted-email/#pgp}, PGP relies on a {url web of trust;https://en.wikipedia.org/wiki/Web_of_trust}, meaning you can generate your keys by yourself. #### pgptool.org -By far, the easiest way to do this is via the website [url https://pgptool.org/ pgptool.org]. Just open the link, fill out your details, select the recommended values (select never as your expiration time) and wait a couple minutes. After they are done, you can click the two red buttons to download your public and private keys. +By far, the easiest way to do this is via the website {url pgptool.org;https://pgptool.org/}. Just open the link, fill out your details, select the recommended values (select never as your expiration time) and wait a couple minutes. After they are done, you can click the two red buttons to download your public and private keys. #### GNU Privacy Guard -As an alternative, you can use a desktop program. The most popular one is [url https://www.gnupg.org/ GNU Privacy Guard] (GPG for short). It is [url https://gnupg.org/download/#binary available] on most desktop operating systems, including [url https://gpg4win.org/download.html Windows] and [url https://gpgtools.org/ MacOS]. +As an alternative, you can use a desktop program. The most popular one is {url GNU Privacy Guard;https://www.gnupg.org/} (GPG for short). It is {url available;https://gnupg.org/download/#binary} on most desktop operating systems, including {url Windows;https://gpg4win.org/download.html} and {url MacOS;https://gpgtools.org/}. -The [*Windows*] version comes with a graphical user interface, so it's easiest to use that: +The {i Windows} version comes with a graphical user interface, so it's easiest to use that: :ordered 1. Open the application "Kleopatra" -2. Click on [`File`] -> [`New Certificate`] +2. Click on {` File} -> {` New Certificate} -3. Input your details and press [`OK`] +3. Input your details and press {` OK} .bulleted - - Feel free to click on [`Advanced Settings`] and look if if the value for [`RSA`] is [`4096 bit`], the value for [`+ RSA`] is enabled and is [`4096 bits`], and finally both [`Signing`] and [`Authentication`] are selected + - Feel free to click on {` Advanced Settings} and look if if the value for {` RSA} is {` 4096 bit}, the value for {` + RSA} is enabled and is {` 4096 bits}, and finally both {` Signing} and {` Authentication} are selected -4. On the next screen, press [`Create`] +4. On the next screen, press {` Create} 5. You'll be asked for a password. Make one up, and enter it, but do not forget it! .bulleted - - The password is used for your private key. If anyone gets ahold if it, they [=will=] be able to impersonate you. A password makes sure that doesn't happen, at least until you tell everyone that your key was leaked. + - The password is used for your private key. If anyone gets ahold if it, they {b will} be able to impersonate you. A password makes sure that doesn't happen, at least until you tell everyone that your key was leaked. -6. On the final screen, click [`Finish`] +6. On the final screen, click {` Finish} -7. To help with the next chapter, we'll extract your public key. In "Kleopatra" you should see a line, containing your name and email. Right-click on it, and select [`Export Certificate`]. +7. To help with the next chapter, we'll extract your public key. In "Kleopatra" you should see a line, containing your name and email. Right-click on it, and select {` Export Certificate}. -On [*Linux*] and [*MacOS*], you can use the command line: +On {i Linux} and {i MacOS}, you can use the command line: :ordered 1. Enter this command in your favorite terminal @@ -72,7 +72,7 @@ On [*Linux*] and [*MacOS*], you can use the command line: ```bash gpg --full-generate-key -2. Follow the prompt on the screen (sample pictures available in [url https://www.encryptionconsulting.com/how-to-generate-pgp-key-pair/ encryptionconsulting.com]) +2. Follow the prompt on the screen (sample pictures available in {url encryptionconsulting.com;https://www.encryptionconsulting.com/how-to-generate-pgp-key-pair/}) 3. Export your public key (of course, change me@email.com and the location to the one you want, but don't forget the .asc extension) @@ -82,15 +82,15 @@ gpg --armor --export me@email.com > ~/Documents/me-email.com-publickey.asc ### S/MIME -Contrary to PGP, S/MIME relies on a certificate authority, meaning you'll have to buy your keys from someone. Any provider from [url https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730 Google]'s list of trusted CAs will work. +Contrary to PGP, S/MIME relies on a certificate authority, meaning you'll have to buy your keys from someone. Any provider from {url Google;https://support.google.com/a/answer/7448393?hl=en&ref_topic=9061730}'s list of trusted CAs will work. -Currently, the only one that provides free certificates is [url https://www.actalis.com/s-mime-certificates.aspx Actalis]. Their process is pretty straight forward, just follow the instructions (shown in [url https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/ this] article). +Currently, the only one that provides free certificates is {url Actalis;https://www.actalis.com/s-mime-certificates.aspx}. Their process is pretty straight forward, just follow the instructions (shown in {url this;https://www.dannyguo.com/blog/how-to-get-a-free-s-mime-certificate/} article). ## Exchanging keys You should now have a text file with your public key in it. When you want to send an encrypted email to someone, ask them for their public key, and meanwhile send them your public key. It doesn't matter how you do that, even if it's with unencrypted emails. -Remember, [=never=] send your [=private=] key to anyone! +Remember, {b never} send your {b private} key to anyone! ## Configuring clients @@ -98,13 +98,14 @@ Now we need to configure your email application to automatically encrypt and dec When writing a message, don't forget to check if encryption is turned on for this email! On most clients, in the compose window, you'll have to select an option to enable encryption, but others do that automatically. -[*Freemium means it has a free and a paid tier. Premium means you have to pay for it. FOSS means it's free and open source. FreemiumOSS means it is free and open source, but also has paid tiers.*] +{i Freemium means it has a free and a paid tier. Premium means you have to pay for it. FOSS means it's free and open source. FreemiumOSS means it is free and open source, but also has paid tiers.} -:table_6 -'define 1 [^[url #1 1]^] -'define 2 [^[url #2 2]^] -'define 3 [^[url #3 3]^] -'define * [^[url #* *]^] +:table +:6 +'def 1 {^ {url 1;#1}} +'def 2 {^ {url 2;#2}} +'def 3 {^ {url 3;#3}} +'def * {^ {url *;#*}} |= Client |= Type @@ -123,23 +124,23 @@ When writing a message, don't forget to check if encryption is turned on for thi |: Gmail |: Freemium |: Web -|: [url https://flowcrypt.com/ Yes][$1] -|: [url https://flowcrypt.com/ Yes][$1] -|: [url https://support.google.com/a/answer/6374496?hl=en&ref_topic=9061730 Yes][$2] +|: {url Yes;https://flowcrypt.com/}{1} +|: {url Yes;https://flowcrypt.com/}{1} +|: {url Yes;https://support.google.com/a/answer/6374496?hl=en&ref_topic=9061730}{2} |: Outlook |: Freemium |: Web |: No |: No -|: [url https:://support.microsoft.com/en-us/office/encrypt-email-messages-373339cb-bf1a-4509-b296-802a39d801dc#bkmk_encryptwithsmime Yes][$2] +|: {url Yes;https:://support.microsoft.com/en-us/office/encrypt-email-messages-373339cb-bf1a-4509-b296-802a39d801dc#bkmk_encryptwithsmime}{2} |: iCloud mail |: Freemium |: Web -|: [url https://support.apple.com/en-us/HT201214 Yes] -|: [url https://support.apple.com/en-us/HT201214 Yes] -|: [url https://support.apple.com/en-us/HT202345 Yes] +|: {url Yes;https://support.apple.com/en-us/HT201214} +|: {url Yes;https://support.apple.com/en-us/HT201214} +|: {url Yes;https://support.apple.com/en-us/HT202345} |: Yahoo! |: Freemium @@ -151,22 +152,22 @@ When writing a message, don't forget to check if encryption is turned on for thi |: Protonmail |: Freemium |: Web -|: [url https://proton.me/support/how-to-use-pgp Yes] -|: [url https://proton.me/support/how-to-use-pgp Yes] +|: {url Yes;https://proton.me/support/how-to-use-pgp} +|: {url Yes;https://proton.me/support/how-to-use-pgp} |: No |: Roundcube |: Self-hosted |: Web -|: [url https://github.com/roundcube/roundcubemail/tree/master/plugins/enigma Yes][$1] -|: [url https://github.com/roundcube/roundcubemail/tree/master/plugins/enigma Yes][$1] -|: [url https://github.com/roundcube/roundcubemail/issues/4977 No] +|: {url Yes;https://github.com/roundcube/roundcubemail/tree/master/plugins/enigma}{1} +|: {url Yes;https://github.com/roundcube/roundcubemail/tree/master/plugins/enigma}{1} +|: {url No;https://github.com/roundcube/roundcubemail/issues/4977} |: Rainloop |: Self-hosted |: Web |: Yes -|: [url https://github.com/RainLoop/rainloop-webmail/issues/1798 No] +|: {url No;https://github.com/RainLoop/rainloop-webmail/issues/1798} |: No |= Desktop @@ -179,44 +180,44 @@ When writing a message, don't forget to check if encryption is turned on for thi |: Thunderbird |: FOSS |: Windows, MacOS, Linux -|: [url https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq#w_i-have-never-used-openpgp-with-thunderbird-before-how-do-i-setup-openpgp Yes] -|: [url https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq#w_i-have-never-used-openpgp-with-thunderbird-before-how-do-i-setup-openpgp Yes] -|: [url https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq Yes] +|: {url Yes;https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq#w_i-have-never-used-openpgp-with-thunderbird-before-how-do-i-setup-openpgp} +|: {url Yes;https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq#w_i-have-never-used-openpgp-with-thunderbird-before-how-do-i-setup-openpgp} +|: {url Yes;https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq} |: Outlook |: Premium |: Windows, MacOS |: No |: No -|: [url https://support.microsoft.com/en-us/office/encrypt-email-messages-373339cb-bf1a-4509-b296-802a39d801dc#bkmk_encryptwithsmime Yes] +|: {url Yes;https://support.microsoft.com/en-us/office/encrypt-email-messages-373339cb-bf1a-4509-b296-802a39d801dc#bkmk_encryptwithsmime} |: Mailbird |: Premium |: Windows -|: [url https://mailbird.featureupvote.com/suggestions/74494/pgp-encryption-support No] -|: [url https://mailbird.featureupvote.com/suggestions/74494/pgp-encryption-support No] -|: [url https://mailbird.featureupvote.com/suggestions/160861/smime-support No] +|: {url No;https://mailbird.featureupvote.com/suggestions/74494/pgp-encryption-support} +|: {url No;https://mailbird.featureupvote.com/suggestions/74494/pgp-encryption-support} +|: {url No;https://mailbird.featureupvote.com/suggestions/160861/smime-support} |: Evolution |: FOSS |: Linux -|: [url https://help.gnome.org/users/evolution/stable/mail-encryption-gpg-set-up.html.en Yes] -|: [url https://help.gnome.org/users/evolution/stable/mail-encryption-gpg-set-up.html.en Yes] -|: [url https://help.gnome.org/users/evolution/stable/mail-encryption-s-mime-manage.html.en Yes] +|: {url Yes;https://help.gnome.org/users/evolution/stable/mail-encryption-gpg-set-up.html.en} +|: {url Yes;https://help.gnome.org/users/evolution/stable/mail-encryption-gpg-set-up.html.en} +|: {url Yes;https://help.gnome.org/users/evolution/stable/mail-encryption-s-mime-manage.html.en} |: Sylpheed |: FOSS |: Windows, MacOS, Linux -|: [url https://sylpheed.sraoss.jp/doc/manual/en/sylpheed-8.html#ss8.2 Yes] -|: [url https://sylpheed.sraoss.jp/doc/manual/en/sylpheed-8.html#ss8.2 Yes] -|: [url https://www.sraoss.jp/pipermail/sylpheed/2011-May/004551.html No] +|: {url Yes;https://sylpheed.sraoss.jp/doc/manual/en/sylpheed-8.html#ss8.2} +|: {url Yes;https://sylpheed.sraoss.jp/doc/manual/en/sylpheed-8.html#ss8.2} +|: {url No;https://www.sraoss.jp/pipermail/sylpheed/2011-May/004551.html} |: Claws-mail |: FOSS |: Windows, Linux -|: [url https://claws-mail.org/plugin.:php?plugin=gpg Yes][$1] -|: [url https://claws-mail.org/plugin.php?plugin=gpg Yes][$1] -|: [url https://claws-mail.org/plugins.php Yes][$1] +|: {url Yes;https://claws-mail.org/plugin.:php?plugin=gpg}{1} +|: {url Yes;https://claws-mail.org/plugin.php?plugin=gpg}{1} +|: {url Yes;https://claws-mail.org/plugins.php}{1} |= Mobile |: @@ -230,14 +231,14 @@ When writing a message, don't forget to check if encryption is turned on for thi |: Android, iOS |: No |: No -|: Yes[$3] +|: Yes{3} |: Outlook |: Free |: Android, iOS |: No |: No -|: Yes[$3] +|: Yes{3} |: Apple Mail |: Free @@ -263,26 +264,30 @@ When writing a message, don't forget to check if encryption is turned on for thi |: Protonmail |: Free |: Android, iOS -|: [url https://proton.me/support/how-to-use-pgp Yes] -|: [url https://proton.me/support/how-to-use-pgp Yes] +|: {url Yes;https://proton.me/support/how-to-use-pgp} +|: {url Yes;https://proton.me/support/how-to-use-pgp} |: No |: K-9 Mail |: FOSS |: Android -|: [url https://docs.k9mail.app/en/current/security/pgp/ Yes] -|: [url https://docs.k9mail.app/en/current/security/pgp/ Yes] -|: [url https://docs.k9mail.app/en/current/security/overview/#end-to-end-encryption No] +|: {url Yes;https://docs.k9mail.app/en/current/security/pgp/} +|: {url Yes;https://docs.k9mail.app/en/current/security/pgp/} +|: {url No;https://docs.k9mail.app/en/current/security/overview/#end-to-end-encryption} |: FairEmail |: FreemiumOSS |: Android -|: [url https://github.com/M66B/FairEmail/blob/master/FAQ.md Yes] -|: [url https://github.com/M66B/FairEmail/blob/master/FAQ.md Yes] -|: [url https://github.com/M66B/FairEmail/blob/master/FAQ.md Yes][$*] +|: {url Yes;https://github.com/M66B/FairEmail/blob/master/FAQ.md} +|: {url Yes;https://github.com/M66B/FairEmail/blob/master/FAQ.md} +|: {url Yes;https://github.com/M66B/FairEmail/blob/master/FAQ.md}{*} + -[^1^] Available with an extension/plugin\n -[^2^] Available in a paid version of the software (assuming the software is Freemium; this is true for all Premium software)\n -[^3^] Available with a Premium account (even if the software is Free)\n -[^*^] You can read S/MIME messages, but signing and encrypting is a pro feature +{^ 1} Available with an extension/plugin\n +{^ 2} Available in a paid version of the software (assuming the software is Freemium; this is true for all Premium software)\n +{^ 3} Available with a Premium account (even if the software is Free)\n +{^ *} You can read S/MIME messages, but signing and encrypting is a pro feature +'def 1 +'def 2 +'def 3 diff --git a/src/blog/how-to-use-jira/bug.du b/src/blog/how-to-use-jira/bug.du index d776367..3b29ef3 100644 --- a/src/blog/how-to-use-jira/bug.du +++ b/src/blog/how-to-use-jira/bug.du @@ -1,21 +1,18 @@ -# Bug tracking template - How to use Jira +'def title Bug tracking template - How to use Jira +'def desc The bug tracking template offers only issue tracking, no boards, no cards, no backlog. -'define expected-reading 1 min -'define created 24 July 2020 -'define edited 16 September 2020 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./scrum.html Scrum template -'define next_link ./releases.html Releases -[$pagination_middle] +{pagenav 1 min;24 July 2020;edited 16 September 2020} -The Bug Tracking template is completely different from the [url ./scrum.html Scrum] and [url ./kanban.html Kanban] templates, because it [=offers only issue tracking=]. +{pagination ./;Scrum template;./scrum.html;Releases;./releases.html} -[=There are no boards, no cards, no backlog=]. All issues are accessed from the [`Issues`] page from the sidebar. +The Bug Tracking template is completely different from the {url Scrum;./scrum.html} and {url Kanban;./kanban.html} templates, because it {b offers only issue tracking}. -[image ./img/issues-sidebar.png] +{b There are no boards, no cards, no backlog}. All issues are accessed from the {` Issues} page from the sidebar. -That's why this template is [=available only when creating a project=]. +{img ./img/issues-sidebar.png} -Of course, [=you can add boards at any time=], but this project template doesn't add any by itself. +That's why this template is {b available only when creating a project}. + +Of course, {b you can add boards at any time}, but this project template doesn't add any by itself. diff --git a/src/blog/how-to-use-jira/cards.du b/src/blog/how-to-use-jira/cards.du index 8a5f1b7..a2bcb1d 100644 --- a/src/blog/how-to-use-jira/cards.du +++ b/src/blog/how-to-use-jira/cards.du @@ -1,161 +1,158 @@ -# Cards - How to use Jira +'def title Cards - How to use Jira +'def desc Each issue is represented as an object with properties. More specifically, these objects are called 'cards'. -'define expected-reading 4 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./filters.html Filters -'define next_link ./projects.html Projects -[$pagination_middle] +{pagenav 4 min;24 July 2020;03 June 2021} + +{pagination ./;Filters;./filters.html;Projects;./projects.html} .contents .numbered -1. [url #properties Properties] -2. [url #creating Creating] -3. [url #viewing Viewing] -4. [url #how-to-use How to use] +1. {uhref Properties} +2. {uhref Creating} +3. {uhref Viewing} +4. {uhref How to use} .numbered - 1. [url #right-side Right side] - 2. [url #work-log Work log] - 3. [url #issue-flagging Issue flagging] - 4. [url #basic-issue-information Basic issue information] + 1. {uhref Right side} + 2. {uhref Work log} + 3. {uhref Issue flagging} + 4. {uhref Basic issue information} -[=Each issue is represented as an object with properties=]. More specifically, these objects are called 'cards'. +{b Each issue is represented as an object with properties}. More specifically, these objects are called 'cards'. -[image ./img/kanban-cards.png] +{img ./img/kanban-cards.png} ## Properties Each card has the following properties: -[image ./img/fields-cards.png] +{img ./img/fields-cards.png} :unordered -- [=Project=] - the [url ./projects.html project] this card is stored in +- {b Project} - the {url project;./projects.html} this card is stored in - [image ./img/project-create-card.png] + {img ./img/project-create-card.png} -- [=Issue type=] - the basic purpose of an issue (Improvement, Bug, ...) +- {b Issue type} - the basic purpose of an issue (Improvement, Bug, ...) - [image ./img/issue-types.png] + {img ./img/issue-types.png} :bulleted - - [image ./img/story-type.png Story] - functionality or feature expressed as a goal, something like "As a user, I want to be able to pay for my order via PayPal" + - {img Story;./img/story-type.png} - functionality or feature expressed as a goal, something like "As a user, I want to be able to pay for my order via PayPal" - - [image ./img/bug-type.png Bug] - a problem/error + - {img Bug;./img/bug-type.png} - a problem/error - - [image ./img/epic-type.png Epic] - a collection of issues, issues are linked through 'Epic link' (see below) + - {img Epic;./img/epic-type.png} - a collection of issues, issues are linked through 'Epic link' (see below) - - [image ./img/task-type.png Task] - a small piece of work + - {img Task;./img/task-type.png} - a small piece of work - - [image ./img/sub-task-type.png Sub-task] - an issue that is directly connected to another issue. This is used for when a given issue needs to be broken down into separate even smaller issues. + - {img Sub-task;./img/sub-task-type.png} - an issue that is directly connected to another issue. This is used for when a given issue needs to be broken down into separate even smaller issues. -- [=Summary=] - a (required) brief explanation of the issue +- {b Summary} - a (required) brief explanation of the issue - [image ./img/summary-create-card.png] + {img ./img/summary-create-card.png} -- [=Description=] - detailed explanation of the issue +- {b Description} - detailed explanation of the issue - [image ./img/description-create-card.png] + {img ./img/description-create-card.png} -- [=Reporter=] - person who created the issue +- {b Reporter} - person who created the issue - [image ./img/reporter-create-card.png] + {img ./img/reporter-create-card.png} -- [=Assignee=] - person who will work on the issue +- {b Assignee} - person who will work on the issue - [image ./img/assignee-create-card.png] + {img ./img/assignee-create-card.png} -- [=Labels=] - tags with which you can organise even more the issue +- {b Labels} - tags with which you can organise even more the issue - [image ./img/label-create-card.png] + {img ./img/label-create-card.png} -- [=Epic link=] - link of issue with type Epic +- {b Epic link} - link of issue with type Epic - [image ./img/epic-link-create-card.png] + {img ./img/epic-link-create-card.png} ## Creating -To create a card yourself, you need to [=press the [`Create`] button on the top bar=]. +To create a card yourself, you need to {b press the {` Create} button on the top bar}. -[image ./img/create-header.png] +{img ./img/create-header.png} ## Viewing -[=All=] cards (issues) can be viewed from a [url ./projects.html project]'s side menu, under 'Issues'. +{b All} cards (issues) can be viewed from a {url project;./projects.html}'s side menu, under 'Issues'. -[image ./img/issues-sidebar.png] +{img ./img/issues-sidebar.png} -Of course, they can also be viewed through [=[url ./filters.html filters]=] and a [=[url ./projects.html project]'s board=]. +Of course, they can also be viewed through {b {url filters;./filters.html}} and a {b {url project;./projects.html}'s board}. ## How to use -By default, opening a card presents, at the top, it's [=key=] (think of it as an ID), +By default, opening a card presents, at the top, it's {b key} (think of it as an ID), -[image ./img/card-key.png] +{img ./img/card-key.png} -it's [=summary=] below it, +it's {b summary} below it, -[image ./img/card-summary.png] +{img ./img/card-summary.png} -options for adding [=attachments=], [=subtasks=], [=linking issues=] and [=adding more apps=] (think of apps like extensions), +options for adding {b attachments}, {b subtasks}, {b linking issues} and {b adding more apps} (think of apps like extensions), -[image ./img/card-attach-subtask.png] +{img ./img/card-attach-subtask.png} -following are the [=description=], [=actual attachments=], [=subtasks=], [=linked issues=], etc., +following are the {b description}, {b actual attachments}, {b subtasks}, {b linked issues}, etc., -[image ./img/desc-att-sub-link.png] +{img ./img/desc-att-sub-link.png} -and at the bottom you have the [=activity=], consisting of [=comments=] on the issue, +and at the bottom you have the {b activity}, consisting of {b comments} on the issue, -[image ./img/activity-comments.png] +{img ./img/activity-comments.png} -[=history=] of things that have happened to that issue, +{b history} of things that have happened to that issue, -[image ./img/activity-history.png] +{img ./img/activity-history.png} -and [=work logs=] (a bit later we talk about them in more detail). +and {b work logs} (a bit later we talk about them in more detail). -[image ./img/activity-work-log.png] +{img ./img/activity-work-log.png} ### Right side -To the right side, you have all of the different [=properties=] (some fields without a value will be hidden). +To the right side, you have all of the different {b properties} (some fields without a value will be hidden). -[image ./img/card-right-side.png] +{img ./img/card-right-side.png} -On the top right you can change [=watch options=] ([url https://www.idalko.com/jira-watch-issues/ watching an issue] means you get notified by all changes done to it), you can [=share=] the card and do [=actions=] (the three dots). +On the top right you can change {b watch options} ({url watching an issue;https://www.idalko.com/jira-watch-issues/} means you get notified by all changes done to it), you can {b share} the card and do {b actions} (the three dots). -[image ./img/card-top-right.png] +{img ./img/card-top-right.png} -[=Actions=] are things you can do to the whole card, like moving or deleting it. +{b Actions} are things you can do to the whole card, like moving or deleting it. -[image ./img/card-actions.png] +{img ./img/card-actions.png} -The most notable options are [`[url https://confluence.atlassian.com/jirasoftwarecloud/logging-work-on-issues-902499028.html Log work]`] and [`Add flag`]. +The most notable options are {` {url Log work;https://confluence.atlassian.com/jirasoftwarecloud/logging-work-on-issues-902499028.html}} and {` Add flag}. ### Work log -In Jira, you can [=estimate how long an issue will take for it to be resolved=]. This is done through [=logging work=]. +In Jira, you can {b estimate how long an issue will take for it to be resolved}. This is done through {b logging work}. -In the [`Log work`] screen, you'll be met with a [`Time spent`] and [`Time remaining`] fields, that you'll need to fill with the appropriate information. +In the {` Log work} screen, you'll be met with a {` Time spent} and {` Time remaining} fields, that you'll need to fill with the appropriate information. -[image ./img/time-tracking.png] +{img ./img/time-tracking.png} -The time remaining takes a [=default=] value from the [=previous time log=], so you don't need to specify it every time. +The time remaining takes a {b default} value from the {b previous time log}, so you don't need to specify it every time. ### Issue flagging -A [=flagged issue=] is an issue that is very important. Flagged issues are displayed in yellow to signify their needed attention. +A {b flagged issue} is an issue that is very important. Flagged issues are displayed in yellow to signify their needed attention. -[image ./img/flagged-card.png] +{img ./img/flagged-card.png} ### Basic issue information -On the bottom right you can see [=when the issue was created=] and [=when it was last updated=]. You can also access the field configuration menu from the [`Configure`] button. It won't be covered in this tutorial, you can read about it [url https://confluence.atlassian.com/adminjiracloud/changing-a-field-configuration-844500798.html here]. +On the bottom right you can see {b when the issue was created} and {b when it was last updated}. You can also access the field configuration menu from the {` Configure} button. It won't be covered in this tutorial, you can read about it {url here;https://confluence.atlassian.com/adminjiracloud/changing-a-field-configuration-844500798.html}. -[image ./img/time-and-configure.png] +{img ./img/time-and-configure.png} diff --git a/src/blog/how-to-use-jira/components.du b/src/blog/how-to-use-jira/components.du index 5f22167..71c77f4 100644 --- a/src/blog/how-to-use-jira/components.du +++ b/src/blog/how-to-use-jira/components.du @@ -1,50 +1,47 @@ -# Components - How to use Jira +'def title Components - How to use Jira +'def desc Components are yet another way to group issues together. They don't have any specific meaning like versions, their usage depends on the project's organisation. -'define expected-reading 2 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./pages.html Pages -'define next_link ./dashboards.html Dashboards -[$pagination_middle] +{pagenav 2 min;24 July 2020;03 June 2021} + +{pagination ./;Pages;./pages.html;Dashboards;./dashboards.html} .contents .numbered -1. [url #creating-and-editing Creating and editing] -2. [url #adding-issues Adding issues] +1. {uhref Creating and editing} +2. {uhref Adding issues} -Components are [=yet another way to group issues together=]. They don't have any specific meaning like versions, their usage depends on the project's organisation. +Components are {b yet another way to group issues together}. They don't have any specific meaning like versions, their usage depends on the project's organisation. ## Creating and editing -Creating and editing them is done from the [=[`Components`] menu in the sidebar=]. +Creating and editing them is done from the {b {` Components} menu in the sidebar}. -[image ./img/components-sidebar.png] +{img ./img/components-sidebar.png} -Creating one is done through the button on the top right (in the center if you don't have any components) by the name of [`Create component`]. +Creating one is done through the button on the top right (in the center if you don't have any components) by the name of {` Create component}. -[image ./img/create-component-empty.png] +{img ./img/create-component-empty.png} -[image ./img/create-component-full.png] +{img ./img/create-component-full.png} Clicking on it presents you with a screen where you input it's information. -[image ./img/create-component-page.png] +{img ./img/create-component-page.png} -[=A name is the only requirement=]. You can also add a [=description=], [=a lead(er) for the component=] and [=person who gets assigned to an issue by default=]. +{b A name is the only requirement}. You can also add a {b description}, {b a lead(er) for the component} and {b person who gets assigned to an issue by default}. ## Adding issues -Adding an issue to a component can be done either [=when creating it=] or [=when viewing it=]. +Adding an issue to a component can be done either {b when creating it} or {b when viewing it}. -[=Right under the summary=], there is a place for indicating a component, named [`Components`]. +{b Right under the summary}, there is a place for indicating a component, named {` Components}. -[image ./img/components-create-card.png] +{img ./img/components-create-card.png} -When viewing an issue, you can add one from the [`Components`] field to the right (you might need to first click on [`Show more fields`]). +When viewing an issue, you can add one from the {` Components} field to the right (you might need to first click on {` Show more fields}). -[image ./img/show-fields.png] +{img ./img/show-fields.png} -[image ./img/components-field.png] +{img ./img/components-field.png} diff --git a/src/blog/how-to-use-jira/dashboards.du b/src/blog/how-to-use-jira/dashboards.du index ddac024..d91a373 100644 --- a/src/blog/how-to-use-jira/dashboards.du +++ b/src/blog/how-to-use-jira/dashboards.du @@ -1,65 +1,63 @@ -# Dashboards - How to use Jira +'def title Dashboards - How to use Jira +'def desc Dashboards are a place where you can view a lot of information. -'define expected-reading 2 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./components.html Components -[$pagination_end] +{pagenav 2 min;24 July 2020;03 June 2021} + +{pagination ./;Components;./components.html} .contents .numbered -1. [url #adding-a-dashboard Adding a dashboard] -2. [url #adding-gadgets Adding gadgets] +1. {uhref Adding a dashboard} +2. {uhref Adding gadgets} -Dashboards are a [=place where you can view a lot of information=]. +Dashboards are a {b place where you can view a lot of information}. -[image ./img/default-dashboard.png] +{img ./img/default-dashboard.png} -Dashboards are composed of [=gadgets=]. +Dashboards are composed of {b gadgets}. -[image ./img/gadgets.png] +{img ./img/gadgets.png} -Gadgets have functionality for [=displaying certain information=], like [`Average Age Chart`] or [`Issues in progress`]. Each gadget can be setup to [=take information from one or more projects and/or saved filters=]. +Gadgets have functionality for {b displaying certain information}, like {` Average Age Chart} or {` Issues in progress}. Each gadget can be setup to {b take information from one or more projects and/or saved filters}. ## Adding a dashboard -Dashboard can be added from the top bar, under [`Create dashboard`] in the [`Dashboards`] menu +Dashboard can be added from the top bar, under {` Create dashboard} in the {` Dashboards} menu -[image ./img/create-dashboard-top.png] +{img ./img/create-dashboard-top.png} -or, if you are already in a dashboard, from [`Create dashboard`] in the three dots menu. +or, if you are already in a dashboard, from {` Create dashboard} in the three dots menu. -[image ./img/create-dashboard-dots.png] +{img ./img/create-dashboard-dots.png} ## Adding gadgets -[=Note=]: you cannot add gadgets to the default dashboard. +{b Note}: you cannot add gadgets to the default dashboard. -You can add gadgets either [=through the [`Add gadget`] button in the top right=] +You can add gadgets either {b through the {` Add gadget} button in the top right} -[image ./img/add-gadget-top.png] +{img ./img/add-gadget-top.png} -or, [=if you don't have any gadets=], [=from the [`add a new gadget`] message(s)=]. +or, {b if you don't have any gadets}, {b from the {` add a new gadget} message(s)}. -[image ./img/add-a-gadget.png] +{img ./img/add-a-gadget.png} -After that, you are greeted by a window that [=shows all of the avalable ones=] (you might need to [=press [`Load all gadgets`]=]). +After that, you are greeted by a window that {b shows all of the avalable ones} (you might need to {b press {` Load all gadgets}}). -[image ./img/load-all.png] +{img ./img/load-all.png} -[image ./img/add-gadget.png] +{img ./img/add-gadget.png} -Adding a gadget is as simple as clicking the button [`Add gadget`] next to the name of the gadget you want to add. +Adding a gadget is as simple as clicking the button {` Add gadget} next to the name of the gadget you want to add. -[image ./img/introduction-add.png] +{img ./img/introduction-add.png} -After it is added, you'll [=need to configure it=], usually a gadget [=requires atleast a filter/project=]. +After it is added, you'll {b need to configure it}, usually a gadget {b requires atleast a filter/project}. -[image ./img/bubble.png] +{img ./img/bubble.png} -Options for different gadgets can be found on [=their top right corner, in the three dots menu=]. +Options for different gadgets can be found on {b their top right corner, in the three dots menu}. -[image ./img/bubble-dots.png] +{img ./img/bubble-dots.png} diff --git a/src/blog/how-to-use-jira/filters.du b/src/blog/how-to-use-jira/filters.du index f66b78c..484e121 100644 --- a/src/blog/how-to-use-jira/filters.du +++ b/src/blog/how-to-use-jira/filters.du @@ -1,44 +1,42 @@ -# Filters - How to use Jira +'def title Filters - How to use Jira +'def desc Filters work like an advanced issue search that you can save. With filters you filter issues from chosen project(s) by their properties. -'define expected-reading 1 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define prev_link ./ Introduction -'define next_link ./cards.html Cards -[$pagination_second] +{pagenav 1 min;24 July 2020;03 June 2021} + +{pagination ;Introduction;./;Cards;./cards.html} .contents .numbered -1. [url #criteria Criteria] -2. [url #jql JQL] +1. {uhref Criteria} +2. {uhref JQL} -[=Filters work like an advanced issue search that you can save=]. With filters you filter issues from chosen project(s) by their properties (status, type, start date, etc.). +{b Filters work like an advanced issue search that you can save}. With filters you filter issues from chosen project(s) by their properties (status, type, start date, etc.). -Making filters is done through the [`Advanced issue search`] page, from the [`Filters`] menu. +Making filters is done through the {` Advanced issue search} page, from the {` Filters} menu. -[image ./img/filters-advanced-issue-search.png] +{img ./img/filters-advanced-issue-search.png} ## Criteria -From here you can see some criteria: [`Project`], [`Type`], [`Status`], [`Assignee`]. +From here you can see some criteria: {` Project}, {` Type}, {` Status}, {` Assignee}. -[image ./img/criteria-advanced-issue-search.png] +{img ./img/criteria-advanced-issue-search.png} -Clicking on the criteria will reveal what options you can choose for it. Access to more criteria can be obtained via the [`+ More`] menu. +Clicking on the criteria will reveal what options you can choose for it. Access to more criteria can be obtained via the {` + More} menu. -[image ./img/plus-more-advanced-issue-search.png] +{img ./img/plus-more-advanced-issue-search.png} -After configuring your desired options, you can [=save the filter=] and use it later. To do so, simply click on [`Save as`] and enter a name for it. +After configuring your desired options, you can {b save the filter} and use it later. To do so, simply click on {` Save as} and enter a name for it. -[image ./img/save-as-advanced-issue-search.png] -[image ./img/save-filter-filters-advanced-issue-search.png] +{img ./img/save-as-advanced-issue-search.png} +{img ./img/save-filter-filters-advanced-issue-search.png} -You can view all of your filters from the conveniently named [`View all filters`] option in the [`Filters`] menu. +You can view all of your filters from the conveniently named {` View all filters} option in the {` Filters} menu. -[image ./img/view-all-filters-advanced-issue-search.png] +{img ./img/view-all-filters-advanced-issue-search.png} ## JQL -You can do [=more advanced search=] through [`JQL`] (Jira Query Language), but we won't be covering this topic. I can recommend [url https://www.atlassian.com/blog/jira-software/jql-the-most-flexible-way-to-search-jira-14 this article] on the subject. +You can do {b more advanced search} through {` JQL} (Jira Query Language), but we won't be covering this topic. I can recommend {url this article;https://www.atlassian.com/blog/jira-software/jql-the-most-flexible-way-to-search-jira-14} on the subject. diff --git a/src/blog/how-to-use-jira/index.du b/src/blog/how-to-use-jira/index.du index 9ea578d..879c817 100644 --- a/src/blog/how-to-use-jira/index.du +++ b/src/blog/how-to-use-jira/index.du @@ -1,75 +1,74 @@ -# Introduction - How to use Jira +'def title Introduction - How to use Jira +'def desc Jira is one of the most used project management and issue tracking products out there. It has a lot of features and can be overwhelming to newcomers. -'define expected-reading 19 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define next_link ./filters.html Filters -[$pagination_start] +{pagenav 19 min;24 July 2020;03 June 2021} + +{pagination ;;;Filters;./filters.html} :contents :numbered -1. [url ./filters.html Filters] +1. {url Filters;./filters.html} .numbered - 1. [url ./filters.html#criteria Criteria] - 2. [url ./filters.html#jql JQL] + 1. {url Criteria;./filters.html#criteria} + 2. {url JQL;./filters.html#jql} -2. [url ./cards.html Cards] +2. {url Cards;./cards.html} .numbered - 1. [url ./cards.html#properties Properties] - 2. [url ./cards.html#creating Creating] - 3. [url ./cards.html#viewing Viewing] - 4. [url ./cards.html#how-to-use How to use] + 1. {url Properties;./cards.html#properties} + 2. {url Creating;./cards.html#creating} + 3. {url Viewing;./cards.html#viewing} + 4. {url How to use;./cards.html#how-to-use} .numbered - 1. [url ./cards.html#right-side Right side] - 2. [url ./cards.html#work-log Work log] - 3. [url ./cards.html#issue-flagging Issue flagging] - 4. [url ./cards.html#basic-issue-information Basic issue information] + 1. {url Right side;./cards.html#right-side} + 2. {url Work log;./cards.html#work-log} + 3. {url Issue flagging;./cards.html#issue-flagging} + 4. {url Basic issue information;./cards.html#basic-issue-information} -3. [url ./projects.html Projects] +3. {url Projects;./projects.html} :numbered - 1. [url ./projects.html#creating-a-project Creating a project] - 2. [url ./projects.html#boards Boards] + 1. {url Creating a project;./projects.html#creating-a-project} + 2. {url Boards;./projects.html#boards} .numbered - 1. [url ./projects.html#columns Columns] - 2. [url ./projects.html#adding-more-boards-to-a-project Adding more boards to a project] + 1. {url Columns;./projects.html#columns} + 2. {url Adding more boards to a project;./projects.html#adding-more-boards-to-a-project} - 3. [url ./projects.html#backlog Backlog] - 4. [url ./projects.html#add-item Add item] + 3. {url Backlog;./projects.html#backlog} + 4. {url Add item;./projects.html#add-item} -4. [url ./kanban.html Kanban template] +4. {url Kanban template;./kanban.html} .numbered - 1. [url ./kanban.html#create-board Create board] - 2. [url ./kanban.html#backlog Backlog] + 1. {url Create board;./kanban.html#create-board} + 2. {url Backlog;./kanban.html#backlog} -5. [url ./scrum.html Scrum template] +5. {url Scrum template;./scrum.html} .numbered - 1. [url ./scrum.html#backlog Backlog] - 2. [url ./scrum.html#boards-and-issues Boards and Issues] - 3. [url ./scrum.html#create-board Create board] + 1. {url Backlog;./scrum.html#backlog} + 2. {url Boards and Issues;./scrum.html#boards-and-issues} + 3. {url Create board;./scrum.html#create-board} -6. [url ./bug.html Bug tracking template] +6. {url Bug tracking template;./bug.html} -7. [url ./releases.html Releases] +7. {url Releases;./releases.html} -8. [url ./pages.html Pages] +8. {url Pages;./pages.html} -9. [url ./components.html Components] +9. {url Components;./components.html} .numbered - 1. [url ./components.html#creating-and-editing Creating and editing] - 2. [url ./components.html#adding-issues Adding issues] + 1. {url Creating and editing;./components.html#creating-and-editing} + 2. {url Adding issues;./components.html#adding-issues} -10. [url ./dashboards.html Dashboards] +10. {url Dashboards;./dashboards.html} .numbered - 1. [url ./dashboards.html#adding-a-dashboard Adding a dashboard] - 2. [url ./dashboards.html#adding-gadgets Adding gadgets] + 1. {url Adding a dashboard;./dashboards.html#adding-a-dashboard} + 2. {url Adding gadgets;./dashboards.html#adding-gadgets} -[url https://www.atlassian.com/software/jira Jira] is one of the most used project management and issue tracking products out there. +{url Jira;https://www.atlassian.com/software/jira} is one of the most used project management and issue tracking products out there. It has a lot of features that can be quite overwhelming for new comers, especially these who are new to project management software. That's why I'm writing this tutorial. -[=Note=]: certain actions can be done only from a project administrator +{b Note}: certain actions can be done only from a project administrator diff --git a/src/blog/how-to-use-jira/kanban.du b/src/blog/how-to-use-jira/kanban.du index 0a6e707..215641b 100644 --- a/src/blog/how-to-use-jira/kanban.du +++ b/src/blog/how-to-use-jira/kanban.du @@ -1,38 +1,35 @@ -# Kanban template - How to use Jira +'def title Kanban template - How to use Jira +'def desc Kanban is a way for visually organising work items (issues). Kanban consists of columns and cards, where cards are the work items and are moved from column to column. -'define expected-reading 1 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./projects.html Projects -'define next_link ./scrum.html Scrum template -[$pagination_middle] +{pagenav 1 min;24 July 2020;03 June 2021} + +{pagination ./;Projects;./projects.html;Scrum template;./scrum.html} .contents .numbered -1. [url #create-board Create board] -2. [url #backlog Backlog] +1. {uhref Create board} +2. {uhref Backlog} -Kanban is a [=way for visually organising work items=] (issues in our case). Kanban consists of [=columns=] and [=cards=], where cards are the work items and are [=moved from one column to another=] depending on the situation. This should sound [=familiar=], because that is how [url ./projects.md Boards] work. +Kanban is a {b way for visually organising work items} (issues in our case). Kanban consists of {b columns} and {b cards}, where cards are the work items and are {b moved from one column to another} depending on the situation. This should sound {b familiar}, because that is how {url Boards;./projects.md} work. In a projects that uses the kanban template, boards can access directly all of the available issues. -This tutorial focuses on the basics, but you can find a lot of information in [url https://www.atlassian.com/agile/kanban these sets of articles] from Atlassian. +This tutorial focuses on the basics, but you can find a lot of information in {url these sets of articles;https://www.atlassian.com/agile/kanban} from Atlassian. ## Create board -This template can be chosen when [=creating a project=] +This template can be chosen when {b creating a project} -[image ./img/choose-classic-template.png] +{img ./img/choose-classic-template.png} -and [=from the [`Create board`] screen=]. +and {b from the {` Create board} screen}. -[image ./img/scrum-kanban-board.png] +{img ./img/scrum-kanban-board.png} ## Backlog -In kanban, [=the backlog is just another column in your board(s)=]. It can be removed entirely. +In kanban, {b the backlog is just another column in your board(s)}. It can be removed entirely. -[image ./img/backlog-kanban.png] +{img ./img/backlog-kanban.png} diff --git a/src/blog/how-to-use-jira/pages.du b/src/blog/how-to-use-jira/pages.du index 5340091..9b07971 100644 --- a/src/blog/how-to-use-jira/pages.du +++ b/src/blog/how-to-use-jira/pages.du @@ -1,22 +1,18 @@ -# Pages - How to use Jira +'def title Pages - How to use Jira +'def desc Pages are a place for documents for your team. The goal is to have a centralised location where everyone in your team can share knowledge. -'define expected-reading 1 min -'define created 24 July 2020 -'define edited 16 September 2020 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./releases.html Releases -'define next_link ./components.html Components -[$pagination_middle] +{pagenav 1 min;24 July 2020;edited 16 September 2020} -[=Pages are a place for documents for your team=]. The goal is to have a centralised location where everyone in your team can share knowledge. +{pagination ./;Releases;./releases.html;Components;./components.html} -[image ./img/test-page.png] +{b Pages are a place for documents for your team}. The goal is to have a centralised location where everyone in your team can share knowledge. -Pages are powered by another Atlasian product, named [`Confluence`]. It is a [=subscription-based software=], but it does also offer a free 30-day trial. +{img ./img/test-page.png} -[=All documents=] (pages) that you write are [=organised into [`Spaces`]=]. When creating a page you can choose one of many templates or just start off with a blank one. +Pages are powered by another Atlasian product, named {` Confluence}. It is a {b subscription-based software}, but it does also offer a free 30-day trial. -[=Confluence won't be covered in this tutorial=]. You can read more about it [url https://www.atlassian.com/software/confluence/guides/get-started/set-up here]. +{b All documents} (pages) that you write are {b organised into {` Spaces}}. When creating a page you can choose one of many templates or just start off with a blank one. +{b Confluence won't be covered in this tutorial}. You can read more about it {url here;https://www.atlassian.com/software/confluence/guides/get-started/set-up}. diff --git a/src/blog/how-to-use-jira/projects.du b/src/blog/how-to-use-jira/projects.du index fd64c86..77642a4 100644 --- a/src/blog/how-to-use-jira/projects.du +++ b/src/blog/how-to-use-jira/projects.du @@ -1,158 +1,155 @@ -# Projects - How to use Jira +'def title Projects - How to use Jira +'def desc Projects are a collection of issues with added functionality for organising them, getting statistics, etc. -'define expected-reading 4 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./cards.html Cards -'define next_link ./kanban.html Kanban template -[$pagination_middle] +{pagenav 4 min;24 July 2020;03 June 2021} + +{pagination ./;Cards;./cards.html;Kanban template;./kanban.html} :contents :numbered -1. [url #creating-a-project Creating a project] -2. [url #boards Boards] +1. {uhref Creating a project} +2. {uhref Boards} .numbered - 1. [url #columns Columns] - 2. [url #adding-more-boards-to-a-project Adding more boards to a project] + 1. {uhref Columns} + 2. {uhref Adding more boards to a project} -3. [url #backlog Backlog] -4. [url #add-item Add item] +3. {uhref Backlog} +4. {uhref Add item} -In short, [=projects are a collection of issues=] with added functionality for [=organising them, getting statistics, etc=]. +In short, {b projects are a collection of issues} with added functionality for {b organising them, getting statistics, etc}. -[image ./img/projects.png] +{img ./img/projects.png} ## Creating a project -To create a project, either [=click on [`Create project`] from the menu [`Projects`] in the top bar=], +To create a project, either {b click on {` Create project} from the menu {` Projects} in the top bar}, -[image ./img/create-project-top.png] +{img ./img/create-project-top.png} -or [=click on the [`Create project`] button in the [`View all projects`] page=]. +or {b click on the {` Create project} button in the {` View all projects} page}. -[image ./img/view-all-projects-top.png] +{img ./img/view-all-projects-top.png} -[image ./img/create-project.png] +{img ./img/create-project.png} -[=Note=]: when you [=have created your account=] the first thing you'll see is the [`Create project`] page. +{b Note}: when you {b have created your account} the first thing you'll see is the {` Create project} page. -You'll be met by the [`Choose project type`] screen. From here choose [`Classic project`], in this tutorial the [`Next-gen project`] types [=won't be covered=]. +You'll be met by the {` Choose project type} screen. From here choose {` Classic project}, in this tutorial the {` Next-gen project} types {b won't be covered}. -[image ./img/choose-project-type.png] +{img ./img/choose-project-type.png} -After that you'll need to put a [=name=] for your project, set a [=key=] (used as an ID for issues ; it is automatically generated, but you can change it if you want) and select a [=template=]. +After that you'll need to put a {b name} for your project, set a {b key} (used as an ID for issues ; it is automatically generated, but you can change it if you want) and select a {b template}. -[image ./img/create-project-new.png] +{img ./img/create-project-new.png} -This tutorial covers [=only=] the three classic software templates: [=[url ./kanban.html Kanban]=], [=[url ./scrum.html Scrum]=] and [=[url ./bug.html Bug tracking]=]. +This tutorial covers {b only} the three classic software templates: {b {url Kanban;./kanban.html}}, {b {url Scrum;./scrum.html}} and {b {url Bug tracking;./bug.html}}. -[image ./img/choose-classic-template.png] +{img ./img/choose-classic-template.png} -In a nutshell, [=templates=] govern how [=boards and issues should work together=]. Later in the tutorial we cover the differences between these templates. +In a nutshell, {b templates} govern how {b boards and issues should work together}. Later in the tutorial we cover the differences between these templates. -Projects also have [url ./releases.html Releases], [url ./pages.html Pages] and [url ./components.html Components], that are also explored. +Projects also have {url Releases;./releases.html}, {url Pages;./pages.html} and {url Components;./components.html}, that are also explored. ## Boards -Each project contains, amongst many other things, boards. [=Boards are a way to better organise results from [url ./filters.html filters]=]. By default every project gets a board with a filter for all of the project's issues. +Each project contains, amongst many other things, boards. {b Boards are a way to better organise results from {url filters;./filters.html}}. By default every project gets a board with a filter for all of the project's issues. ### Columns -[=Boards are divided into columns=] that contain the cards (issues). A card can move [=freely=] from one column to another. +{b Boards are divided into columns} that contain the cards (issues). A card can move {b freely} from one column to another. -[image ./img/SOD.png] +{img ./img/SOD.png} -To illustrate how this could be useful, let's say we have three columns: [`TO DO`], [`DOING`] and [`DONE`]. +To illustrate how this could be useful, let's say we have three columns: {` TO DO}, {` DOING} and {` DONE}. -[image ./img/todo-doing-done.png] +{img ./img/todo-doing-done.png} -When you create an issue you initially put it in the [`TO DO`] column. After someone has started working on it, they put the issue in the [`DOING`] column. Finally, when the issue is resolved, it is put in the [`DONE`] column. +When you create an issue you initially put it in the {` TO DO} column. After someone has started working on it, they put the issue in the {` DOING} column. Finally, when the issue is resolved, it is put in the {` DONE} column. -Of course, the name, quantity and purpose of different columns [=depend on the project's organisation=]. +Of course, the name, quantity and purpose of different columns {b depend on the project's organisation}. -Adding and removing columns can be done from the [`Columns`] tab in the [`Board settings`] menu (three dots on the top right of a board). +Adding and removing columns can be done from the {` Columns} tab in the {` Board settings} menu (three dots on the top right of a board). -[image ./img/board-settings.png] +{img ./img/board-settings.png} -[image ./img/columns-edit.png] +{img ./img/columns-edit.png} ### Adding more boards to a project -You can also add to a project as many [=[url ./scrum.html Scrum]=] and [=[url ./kanban.html Kanban]=] templated boards as you want. +You can also add to a project as many {b {url Scrum;./scrum.html}} and {b {url Kanban;./kanban.html}} templated boards as you want. -This can be done, either while in a board, from [=clicking the three dots and choosing [`Create board`]=] +This can be done, either while in a board, from {b clicking the three dots and choosing {` Create board}} -[image ./img/create-board.png] +{img ./img/create-board.png} -or [=in the sidebar, from the [`Board`] menu=]. +or {b in the sidebar, from the {` Board} menu}. -[image ./img/sidebar-create-board.png] +{img ./img/sidebar-create-board.png} -After that, you are met with the [`Create a board`] window, where you can choose your template. +After that, you are met with the {` Create a board} window, where you can choose your template. -[image ./img/scrum-kanban-board.png] +{img ./img/scrum-kanban-board.png} Once you've made your choice, you will be met with three options: -[image ./img/board-from.png] +{img ./img/board-from.png} :unordered -- [=Board created with new Software project=] - creates a new project with a new board (has the name of the project). +- {b Board created with new Software project} - creates a new project with a new board (has the name of the project). - [image ./img/npb.png] + {img ./img/npb.png} -- [=Board from existing project=] - creates a board that gets the filter from another project +- {b Board from existing project} - creates a board that gets the filter from another project - [image ./img/ntb.png] + {img ./img/ntb.png} -- [=Board from an existing Saved Filter=] - as it says, you add to the project (indicated in the [`Location`] field) a board based on a saved filter +- {b Board from an existing Saved Filter} - as it says, you add to the project (indicated in the {` Location} field) a board based on a saved filter - [image ./img/ntb-filter.png] + {img ./img/ntb-filter.png} ## Backlog -[=The backlog is a place for issues that outline a general task/feature=]. +{b The backlog is a place for issues that outline a general task/feature}. -Depending on your project template, the backlog will either be a [=separate window ([url ./scrum.html Scrum])=], +Depending on your project template, the backlog will either be a {b separate window ({url Scrum;./scrum.html})}, -[image ./img/scrum-backlog.png] +{img ./img/scrum-backlog.png} -[=just a column in a board ([url ./kanban.html Kanban])=], +{b just a column in a board ({url Kanban;./kanban.html})}, -[image ./img/backlog-kanban.png] +{img ./img/backlog-kanban.png} -or [=nonexistent ([url ./bug.md bug tracking])=]. +or {b nonexistent ({url bug tracking;./bug.md})}. The purpose of the backlog depends on the template and it is described in the page of each template. ## Add item -[=You can also add some resources to the sidebar of your project=] for everyone to use. That is done through the [`Add Item`] menu. +{b You can also add some resources to the sidebar of your project} for everyone to use. That is done through the {` Add Item} menu. -[image ./img/add-item-kanban.png] +{img ./img/add-item-kanban.png} -From here you can [=add a website shortcut=], simply by putting the web address and giving it a name. +From here you can {b add a website shortcut}, simply by putting the web address and giving it a name. -[image ./img/add-item-to-project.png] +{img ./img/add-item-to-project.png} -[image ./img/add-shortcut.png] +{img ./img/add-shortcut.png} The name is used for showing the shortcut on the sidebar. -[image ./img/added-site.png] +{img ./img/added-site.png} -You can also add a [`Bitbucket`] or [`GitHub`] repository which you can [=leave=] only as a [=shortcut=], or you can [=integrate=] it so that [=issues are transferred to Jira=]. +You can also add a {` Bitbucket} or {` GitHub} repository which you can {b leave} only as a {b shortcut}, or you can {b integrate} it so that {b issues are transferred to Jira}. -[image ./img/test-repo.png] +{img ./img/test-repo.png} -[image ./img/test-repo-sidebar.png] +{img ./img/test-repo-sidebar.png} -[=Integration won't be covered in this tutorial=], but I can recommend [url https://www.idalko.com/jira-github-integration/ this] article for [`GitHub`] integration and [url https://www.idalko.com/jira-bitbucket-integration/ this] one for [`Bitbucket`] integration. +{b Integration won't be covered in this tutorial}, but I can recommend {url this;https://www.idalko.com/jira-github-integration/} article for {` GitHub} integration and {url this;https://www.idalko.com/jira-bitbucket-integration/} one for {` Bitbucket} integration. -From the [`Add Item`] menu you can also [=toggle the shortcut to [url ./pages.html Pages]=]. +From the {` Add Item} menu you can also {b toggle the shortcut to {url Pages;./pages.html}}. diff --git a/src/blog/how-to-use-jira/releases.du b/src/blog/how-to-use-jira/releases.du index 1642c61..f3fc54f 100644 --- a/src/blog/how-to-use-jira/releases.du +++ b/src/blog/how-to-use-jira/releases.du @@ -1,21 +1,18 @@ -# Releases - How to use Jira +'def title Releases - How to use Jira +'def desc The Releases page in a project shows versions, the ones in development and the ones that are completed. -'define expected-reading 1 min -'define created 24 July 2020 -'define edited 16 September 2020 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./bug.html Bug tracking template -'define next_link ./pages.html Pages -[$pagination_middle] +{pagenav 1 min;24 July 2020;edited 16 September 2020} -The [`Releases`] page in a project shows [=versions=], the ones in development and the ones that are completed. +{pagination ./;Bug tracking template;./bug.html;Pages;./pages.html} -[=Versions are just a big collection of issues=] and the [=goal of a released version=] is for [=all of it's issues to be resolved=]. It serves as a point in time for the development of a project. +The {` Releases} page in a project shows {b versions}, the ones in development and the ones that are completed. + +{b Versions are just a big collection of issues} and the {b goal of a released version} is for {b all of it's issues to be resolved}. It serves as a point in time for the development of a project. ## Adding issues to a version -When creating an issue, you can specify a version in the [`Fix versions`] property. +When creating an issue, you can specify a version in the {` Fix versions} property. -[image ./img/fix-versions.png] +{img ./img/fix-versions.png} diff --git a/src/blog/how-to-use-jira/scrum.du b/src/blog/how-to-use-jira/scrum.du index dffe4ec..64a524a 100644 --- a/src/blog/how-to-use-jira/scrum.du +++ b/src/blog/how-to-use-jira/scrum.du @@ -1,55 +1,52 @@ -# Scrum template - How to use Jira +'def title Scrum template - How to use Jira +'def desc The scrum template is very similar to the kanban template with one big difference: sprints. -'define expected-reading 2 min -'define created 24 July 2020 -'define edited 03 June 2021 -[$pagenav] +# {title} -'define start_link ./ -'define prev_link ./kanban.html Kanban template -'define next_link ./bug.html Bug tracking template -[$pagination_middle] +{pagenav 2 min;24 July 2020;03 June 2021} + +{pagination ./;Kanban template;./kanban.html;Bug tracking template;./bug.html} .contents .numbered -1. [url #backlog Backlog] -2. [url #boards-and-issues Boards and Issues] -3. [url #create-board Create board] +1. {uhref Backlog} +2. {uhref Boards and Issues} +3. {uhref Create board} -The scrum template is very similar to the kanban template, with one big difference: [=sprints=]. +The scrum template is very similar to the kanban template, with one big difference: {b sprints}. -[=All issues=] are put into the [=backlog=] (which is now a [=separate page=]). From there, they are organised into [=sprints=]. +{b All issues} are put into the {b backlog} (which is now a {b separate page}). From there, they are organised into {b sprints}. -In general [url https://www.atlassian.com/agile agile software development], a [=sprint is a small duration of time=] (one to four weeks) where the team focuses on a [=set of tasks=] and at the end everyone [=evaluates the results=] and plans the next sprint. +In general {url agile software development;https://www.atlassian.com/agile}, a {b sprint is a small duration of time} (one to four weeks) where the team focuses on a {b set of tasks} and at the end everyone {b evaluates the results} and plans the next sprint. -Your [=boards only work on the issues of the currently active sprint=]. +Your {b boards only work on the issues of the currently active sprint}. ## Backlog -As we've discussed, the [=backlog=] is used for organising [=all issues=] into [=sprints=]. +As we've discussed, the {b backlog} is used for organising {b all issues} into {b sprints}. -[image ./img/sample-scrum-backlog.png] +{img ./img/sample-scrum-backlog.png} -From here you can also organise [=Versions=] (refer to [url ./releases.html Releases]) and [=Epics=] (refer to [url ./cards.html Cards]). An important note is that Epics in this context don't need to have their linked issues in only one sprint. +From here you can also organise {b Versions} (refer to {url Releases;./releases.html}) and {b Epics} (refer to {url Cards;./cards.html}). An important note is that Epics in this context don't need to have their linked issues in only one sprint. -[image ./img/versions-and-epics.png] +{img ./img/versions-and-epics.png} -Creating a sprint is done from the conveniently named [`Create sprint`] button. It shows a box on top where you can either move issues from the backlog to the sprint or create entirely new issues. +Creating a sprint is done from the conveniently named {` Create sprint} button. It shows a box on top where you can either move issues from the backlog to the sprint or create entirely new issues. -[image ./img/sample-sprint.png] +{img ./img/sample-sprint.png} ## Boards and Issues -As previously mentioned, boards have access only to the issues in the active sprint. This is also reflected in the user interface. After selecting a board from the sidebar, you view it from the [`Active sprints`] page. +As previously mentioned, boards have access only to the issues in the active sprint. This is also reflected in the user interface. After selecting a board from the sidebar, you view it from the {` Active sprints} page. -[image ./img/active-sprints.png] +{img ./img/active-sprints.png} ## Create board -This template can be chosen when [=creating a project=] +This template can be chosen when {b creating a project} -[image ./img/choose-classic-template.png] +{img ./img/choose-classic-template.png} -and [=from the [`Create board`] screen=]. +and {b from the {` Create board} screen}. -[image ./img/scrum-kanban-board.png] +{img ./img/scrum-kanban-board.png} diff --git a/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du b/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du index 35e9fcf..744eac3 100644 --- a/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du +++ b/src/blog/icon-fonts-arent-evil-you-just-have-to-care/index.du @@ -1,48 +1,48 @@ -# Icon fonts aren't evil, you just have to care +'def title Icon fonts aren't evil, you just have to care +'def desc Arguing that icon fonts provide useful features and using them can be done in a non-disruptive way to accessibility -'define expected-reading 9 min -'define created 19 July 2023 -'define edited 19 July 2023 -[$pagenav] +# {title} + +{pagenav 9 min;19 July 2023;19 July 2023} .contents .numbered -1. [url #the-problem-with-svgs The problem with SVGs] -2. [url #icon-fonts Icon fonts] +1. {uhref The problem with SVGs} +2. {uhref Icon fonts} .numbered - 1. [url #text-antialiasing-unavoidable Text antialiasing: unavoidable] - 2. [url #better-control-over-svgs-not-always-needed Better control over SVGs: not always needed] - 3. [url #fetching-failures-and-accessible-fonts-fixable-with-care Fetching failures and accessible fonts: fixable with care] - 4. [url #screen-reader-accessibility-almost-unavoidable Screen reader accessibility: almost unavoidable] - 5. [url #file-size-fixable-with-care File size: fixable with care] - -Recently I did a [url https://gitlab.com/Syndamia/syndamiadotcom/-/merge_requests/10 whole bunch of changes to the way this website works] and one of them included replacing all SVG icons with an icon font. -While doing research, I found [url https://www.youtube.com/watch?v=9xXBYcWgCHA Seren Davies' talk] as well as [url https://www.irigoyen.dev/blog/2021/02/17/stop-using-icon-fonts/ many] [url http://technotes.iangreenleaf.com/posts/font-awesome-not-awesome.html other] [url https://www.ianfeather.co.uk/ten-reasons-we-switched-from-an-icon-font-to-svg/ posts] being against them. + 1. {uhref Text antialiasing: unavoidable} + 2. {uhref Better control over SVGs: not always needed} + 3. {uhref Fetching failures and accessible fonts: fixable with care} + 4. {uhref Screen reader accessibility: almost unavoidable} + 5. {uhref File size: fixable with care} + +Recently I did a {url whole bunch of changes to the way this website works;https://gitlab.com/Syndamia/syndamiadotcom/-/merge_requests/10} and one of them included replacing all SVG icons with an icon font. +While doing research, I found {url Seren Davies' talk;https://www.youtube.com/watch?v=9xXBYcWgCHA} as well as {url many;https://www.irigoyen.dev/blog/2021/02/17/stop-using-icon-fonts/} {url other;http://technotes.iangreenleaf.com/posts/font-awesome-not-awesome.html} {url posts;https://www.ianfeather.co.uk/ten-reasons-we-switched-from-an-icon-font-to-svg/} being against them. A lot of these concerns and issues are valid and multiple times I stopped that rework, but in the end I believe, with enough care, you could make them work almost perfectly. ## The problem with SVGs First, we have to get acquaintanced with why I wanted change: before the big rework, this website used SVG images for all icons. -For [url https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v3.0 quite a while] I've added support for an alternative light theme, but ever since the beginning icons have been an issue. +For {url quite a while;https://gitlab.com/Syndamia/syndamiadotcom/-/releases/v3.0} I've added support for an alternative light theme, but ever since the beginning icons have been an issue. How can you change the color, or more specifically, the internal styling of an SVG? -You have a [url https://stackoverflow.com/questions/22252472/how-can-i-change-the-color-of-an-svg-element couple of options], if you include it with a normal [``] tag, as I was doing, you could do some [url https://stackoverflow.com/a/53336754 magic with filters] to change the exact color, though this is kinda difficult and [url https://caniuse.com/css-filters browsers support filters since somewhat recently]. +You have a {url couple of options;https://stackoverflow.com/questions/22252472/how-can-i-change-the-color-of-an-svg-element}, if you include it with a normal {` {nohtml }} tag, as I was doing, you could do some {url magic with filters;https://stackoverflow.com/a/53336754} to change the exact color, though this is kinda difficult and {url browsers support filters since somewhat recently;https://caniuse.com/css-filters}. This is a deal-breaker, because I care about older browsers and without that CSS property, icons become very difficult to see on the light theme. -Another option is to load it with an [`\`], [`\`] or [`\ @@ -182,20 +182,20 @@ ## Как ще ги водим -[$br2] +{br2} .unordered - В началото на часа давам задачи, вие ги решавате. - Всички текстови редактори/IDE-та са позволени. -- До края на часа трябва да предадете написаното от вас в [url ./github_classroom.html#-github-classroom-1 GitHub Classroom] -- Ще връщам обратна връзка към предаденото, [*моля да я четете!*] +- До края на часа трябва да предадете написаното от вас в {url GitHub Classroom;./github_classroom.html#-github-classroom-1} +- Ще връщам обратна връзка към предаденото, {i моля да я четете!} :slide ## Видове задачи -[$br1] +{br1} .defs ; За решаване @@ -203,7 +203,7 @@ ; За самоподготовка : По-сложни задачи, които ще описват възможни проблеми от реалния свят ; За любознателните -: 1-2 сложни задачи, чиято цел е да се реализира [*реалистичен*] използваем софтуерен компонент +: 1-2 сложни задачи, чиято цел е да се реализира {i реалистичен} използваем софтуерен компонент :middle_slide35 @@ -218,23 +218,23 @@ ## Изкуствен интелект -[$br4] +{br4} .unordered - Ще чуете и други мнения от екипа по тематa - Анализ на генериран изход от ИИ ще бъде разглеждан в курса -- На практикумите ви е позволено да го ползвате, [=но=] не го окуражавам +- На практикумите ви е позволено да го ползвате, {b но} не го окуражавам :slide35 -[$br2] +{br2} .p Различни умения са: .numbered -1. да [=напишеш сам=] код от нулата -2. да [=четеш=] код и разбереш какво прави -3. да [=модифицираш/допълниш=] вече написан код +1. да {b напишеш сам} код от нулата +2. да {b четеш} код и разбереш какво прави +3. да {b модифицираш/допълниш} вече написан код .unordered - Чрез ИИ избягвате да правите първото. @@ -244,4 +244,4 @@ :title_slide35 -.p [url ./concepts.html?a Към "Общи концепции"] +.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 index cf7a9d4..e1f943d 100644 --- a/src/teaching/upp-2025/week01/visual_studio.du +++ b/src/teaching/upp-2025/week01/visual_studio.du @@ -1,11 +1,11 @@ -# Visual Studio упътване - УПП, Седмица 1, 02.10.2025 +'def title Visual Studio упътване - УПП, Седмица 1, 02.10.2025 +'def desc Упътване как да инсталирате, настроите и използвате Visual Studio. -'define expected-reading 6 min -'define created 27 September 2025 -'define edited 28 September 2025 -[$pagenav] +# {title} -[$presentation-controller] +{pagenav 6 min;27 September 2025;28 September 2025} + +{presentation-controller} :title_slide35 @@ -16,17 +16,17 @@ ## Къде пишем код? -[$br2] +{br2} .p -[=Кодът е чисто и просто текст=], компилаторът е специалната програма, която превръща този текст в нещо, което може компютъра да изпълни. +{b Кодът е чисто и просто текст}, компилаторът е специалната програма, която превръща този текст в нещо, което може компютъра да изпълни. .p -За писане и редактиране на текст ползваме [=текстови редактори=]. +За писане и редактиране на текст ползваме {b текстови редактори}. Програмистите са искали да улеснят работата си, затова модерните текстови редактори поддържат много помощни функционалности: показване на грешки на точния ред, автоматично форматиране, ... .p -За някои и това не е било достатъчно удобно, затова са създадени [=Integrated Development Environment=] (IDE), програми които съдържат в себе си всичко нужно за разработка на код. +За някои и това не е било достатъчно удобно, затова са създадени {b Integrated Development Environment} (IDE), програми които съдържат в себе си всичко нужно за разработка на код. Тоест, те са текстови редактори, но "вградено" могат да компилират код, да менажират сегашното repository, ... @@ -57,13 +57,13 @@ Visual Studio е вече инсталирано там. ### Инсталация -[$br5] +{br5} .p -За Visual Studio, отивате на [url https://visualstudio.microsoft.com/ visualstudio.microsoft.com], скролвате малко надолу, избирате "Download Visual Studio" и след това "Community 2022". +За Visual Studio, отивате на {url visualstudio.microsoft.com;https://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], разликата между версиите не е съществена, затова не се притеснявайте. +- Ако искате да ползвате по-стара ОС, като Windows 8.1 или Windows 7 ще трябва да използвате "Community 2019"{vs-2022-old-win}, разликата между версиите не е съществена, затова не се притеснявайте. :slide @@ -76,7 +76,7 @@ Visual Studio е вече инсталирано там. Би трябвало да заема към 11 GB памет и в моето тестване се инсталира за 10тина минути. .centered -.width80% [image ../../upp-2023/week1/img/vs-install.gif] +.width80% {img ../../upp-2023/week1/img/vs-install.gif} :slide @@ -92,9 +92,9 @@ Visual Studio е вече инсталирано там. :width75% :row -.p [image ../../upp-2023/week1/img/vs-signin.gif] +.p {img ../../upp-2023/week1/img/vs-signin.gif} -.p [image ../../upp-2023/week1/img/vs-start-env.gif] +.p {img ../../upp-2023/week1/img/vs-start-env.gif} @@ -114,7 +114,7 @@ Visual Studio е вече инсталирано там. В лявата колона имате скорошни проекти, в дясната имате начини да създадете нов проект. :centered -:width80% [image ../../upp-2023/week1/img/vs-open-recent.gif] +:width80% {img ../../upp-2023/week1/img/vs-open-recent.gif} @@ -127,7 +127,7 @@ Visual Studio е вече инсталирано там. В този курс ще работим само и единствено с "Console App", затова изберете него и кликнете "Next". :centered -:width75% [image ../../upp-2023/week1/img/vs-create-project.gif] +:width75% {img ../../upp-2023/week1/img/vs-create-project.gif} @@ -139,7 +139,7 @@ Visual Studio е вече инсталирано там. Тук единствено може да искате да промените Project Name и Location, другото не е важно. :centered -:width80% [image ../../upp-2023/week1/img/vs-configure-project.gif] +:width80% {img ../../upp-2023/week1/img/vs-configure-project.gif} @@ -171,7 +171,7 @@ Visual Studio е вече инсталирано там. :centered :width60% -.p [image ../../upp-2023/week1/img/vs-general.gif] +.p {img ../../upp-2023/week1/img/vs-general.gif} @@ -179,7 +179,7 @@ Visual Studio е вече инсталирано там. В Solution Explorer имате всички файлове от проекта (Visual Studio позволява да групирате няколко проекта в едно, наречено Solution, не е нужно да се занимавате). .p -Тук [=единственото важно за вас се намира в папката "Source Files"=]. +Тук {b единственото важно за вас се намира в папката "Source Files"}. В нея ще се намира вашия код, всичко останало са допълнителни неща, които са релевантни за по-големи проекти. @@ -192,7 +192,7 @@ Visual Studio е вече инсталирано там. :width50% :fright -.p [image ../../upp-2023/week1/img/vs-debug-menu.gif] +.p {img ../../upp-2023/week1/img/vs-debug-menu.gif} @@ -200,14 +200,14 @@ Visual Studio е вече инсталирано там. .p След малко чакане, би трябвало да излезе един прозорец, който изглежда горе-долу така: -.p [image ../../upp-2023/week1/img/vs-console.gif] +.p {img ../../upp-2023/week1/img/vs-console.gif} :slide ### Дебъгване -[$br1] +{br1} .p Bug е когато нещо непланирано се случи в кода. @@ -220,7 +220,7 @@ Visual Studio предоставя много функционалности, к .p При компилиране, ще получим съобщение за грешки по време на компилирането. -.p [image ../../upp-2023/week1/img/vs-build-errors.gif] +.p {img ../../upp-2023/week1/img/vs-build-errors.gif} :slide @@ -235,11 +235,11 @@ Visual Studio предоставя много функционалности, к Той се появява когато при компилиране получим грешки и изчезва когато няма. :centered -:width70% [image ../../upp-2023/week1/img/vs-errors.gif] +:width70% {img ../../upp-2023/week1/img/vs-errors.gif} :title_slide35 -.p [url ./zip.html?a Към "ZIP архиви упътване"] +.p {url Към "ZIP архиви упътване";./zip.html?a} diff --git a/src/teaching/upp-2025/week01/zip.du b/src/teaching/upp-2025/week01/zip.du index d81320a..5b73cd9 100644 --- a/src/teaching/upp-2025/week01/zip.du +++ b/src/teaching/upp-2025/week01/zip.du @@ -1,11 +1,11 @@ -# ZIP архиви упътване - УПП, Седмица 1, 01.09.2025 +'def title ZIP архиви упътване - УПП, Седмица 1, 02.10.2025 +'def desc Упътване какво да инсталирате за създаване на ZIP архиви и как да ги създадете. -'define expected-reading 2 min -'define created 27 September 2025 -'define edited 28 September 2025 -[$pagenav] +# {title} -[$presentation-controller] +{pagenav 2 min;27 September 2025;28 September 2025} + +{presentation-controller} :title_slide35 @@ -23,10 +23,10 @@ ## Windows 11 -[$br4] +{br4} :unordered -- Под Windows 11 с [*новото*] меню което излиза при натискане на десен бутон, можете директно да архивирате селектираните файлове +- Под Windows 11 с {i новото} меню което излиза при натискане на десен бутон, можете директно да архивирате селектираните файлове - Тоест, процедурата е .numbered 1. Селекция на файловете за архивиране @@ -41,30 +41,30 @@ ## Windows 2000 - Windows 11 -[$br3] +{br3} :unordered - Ще трябва да инсталирате програма за ZIP файлове. -- Тази която аз препоръчвам е [url https://www.7-zip.org/ 7-Zip], спрямо WinRAR: +- Тази която аз препоръчвам е {url 7-Zip;https://www.7-zip.org/}, спрямо WinRAR: .unordered - Няма дразненето с безплатния trial - Поддържа повече формати - Налично е за повече ОС -- Инсталацията е стандартна: от [url https://www.7-zip.org/ заглавната страница] изтегляте 64bit-овата версия, пускате инсталатора +- Инсталацията е стандартна: от {url заглавната страница;https://www.7-zip.org/} изтегляте 64bit-овата версия, пускате инсталатора :slide -[$br3] +{br3} .ordered 1. Селектирате файловете които искате да архивирате -2. Десен бутон [*(под Windows 11 трябва да натиснете "Show more options")*] +2. Десен бутон {i (под Windows 11 трябва да натиснете "Show more options")} 3. Задържате курсора върху "7-Zip" -4. Избирате [`Add to "SOMETHING.[=zip=]"`], където [`SOMETHING`] ще е името на папката в която се намирате. +4. Избирате {` Add to "SOMETHING.{b zip}"}, където {` SOMETHING} ще е името на папката в която се намирате. Това директно създава архив с името на текущата папка. -5. Алтернативно избирате [`Add to archive...`]. +5. Алтернативно избирате {` Add to archive...}. От там се отваря прозорец с настройки, най-важно под "Archive format" да изберете ZIP. Другите неща не е нужно да променяте. @@ -73,7 +73,7 @@ ## MacOS -[$br6] +{br6} .ordered 1. Селектирате файловете които искате да архивирате @@ -87,14 +87,14 @@ .p .font20 -[*Ползваш Linux и се нуждаеш от туториал? Слабо.*] +{i Ползваш Linux и се нуждаеш от туториал? Слабо.} -[$br5] +{br5} ### Чрез командния ред .ordered -1. Инсталираш [`zip`] командата (пакета почти винаги също се казва [`zip`]) +1. Инсталираш {` zip} командата (пакета почти винаги също се казва {` zip}) 2. Извикваш команда във следната форма: ```bash zip archive.zip file1 file2 ... @@ -104,7 +104,7 @@ zip archive.zip file1 file2 ... ### Графично приложение -[$br7] +{br7} .unordered - Отваряш съответния "App Store", търсиш "zip", инсталираш първото и ползваш. @@ -113,4 +113,4 @@ zip archive.zip file1 file2 ... :title_slide35 -.p [url ./index.html Към задачите] +.p {url Към задачите;./index.html} diff --git a/src/teaching/upp-2025/week02/index.du b/src/teaching/upp-2025/week02/index.du index d1be61f..efaf969 100644 --- a/src/teaching/upp-2025/week02/index.du +++ b/src/teaching/upp-2025/week02/index.du @@ -1,85 +1,85 @@ -# Задачи - УПП, Седмица 2, 09.10.2025 +'def title Задачи - УПП, Седмица 2, 09.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 2 min -'define created 05 October 2025 -'define edited 11 October 2025 -[$pagenav] +# {title} + +{pagenav 2 min;05 October 2025;11 October 2025} .warn -Всички задачи от днес са върху [url ./machine.html "машинната таблица"]. +Всички задачи от днес са върху {url "машинната таблица";./machine.html}. GitHub Classroom: [url https://classroom.github.com/a/DRjtkc6f] ## Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение01.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение01.csv} Покажете числото 1337 в "popup". ## Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение02.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение02.csv} -Покажете сумата на [`INPUT1`] и 8 в "popup". +Покажете сумата на {` INPUT1} и 8 в "popup". ## Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение03.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение03.csv} -Покажете числото [`INPUT1`] в "popup", но с обърнат знак. +Покажете числото {` INPUT1} в "popup", но с обърнат знак. ## Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение04.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение04.csv} -Покажете [`INPUT1`] умножено по две в "popup". +Покажете {` INPUT1} умножено по две в "popup". ## Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение05.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение05.csv} -Ако [`INPUT1`] е равно на 10, покажете в "popup" стойността 1. +Ако {` INPUT1} е равно на 10, покажете в "popup" стойността 1. Иначе, покажете стойността 0. ## Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение06.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение06.csv} -Покажете в "popup" числото 1 ако [`INPUT1`] [=или=] [`INPUT2`] е равно на 5. +Покажете в "popup" числото 1 ако {` INPUT1} {b или} {` INPUT2} е равно на 5. Иначе покажете 0. ## Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение07.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение07.csv} -Покажете в "popup" числото 1 ако [`INPUT1`] [=и=] [`INPUT2`] са равни на 5. +Покажете в "popup" числото 1 ако {` INPUT1} {b и} {` INPUT2} са равни на 5. Иначе покажете 0. ## Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение08.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение08.csv} -Покажете в "popup" умножението на [`INPUT1`] и [`INPUT2`]. -Допускаме, че [`INPUT2`] е неотрицателно цяло число. +Покажете в "popup" умножението на {` INPUT1} и {` INPUT2}. +Допускаме, че {` INPUT2} е неотрицателно цяло число. ## Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение09.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение09.csv} -Нека [`INPUT1`] да обозначава разликата на аритметична прогресия (разликата между два съседни елементa) и [`INPUT2`] да обозначава индекса на елемент в тази прогресия. +Нека {` INPUT1} да обозначава разликата на аритметична прогресия (разликата между два съседни елементa) и {` INPUT2} да обозначава индекса на елемент в тази прогресия. -Покажаете в "popup" числото на [`INPUT2`] позиция от аритметичната прогресия. +Покажаете в "popup" числото на {` INPUT2} позиция от аритметичната прогресия. Нека първия елемент винаги е 0 и неговия индекс е 1. -Допускаме, че [`INPUT2`] е неотрицателно цяло число. +Допускаме, че {` INPUT2} е неотрицателно цяло число. ## Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение10.csv Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week02/Решение10.csv} .note -[=(11.09.2025)=] Вече в условието и [`INPUT1`] е неотрицателно, иначе решението става твърде голямо. +{b (11.09.2025)} Вече в условието и {` INPUT1} е неотрицателно, иначе решението става твърде голямо. -Покажете в "popup" делението на [`INPUT1`] и [`INPUT2`], закръглено нагоре. -Допускаме, че [`INPUT1`] и [`INPUT2`] са неотрицателни цели числа. +Покажете в "popup" делението на {` INPUT1} и {` INPUT2}, закръглено нагоре. +Допускаме, че {` INPUT1} и {` INPUT2} са неотрицателни цели числа. Може да зачитате, че резултата при деление на 0 е 0. diff --git a/src/teaching/upp-2025/week02/machine.du b/src/teaching/upp-2025/week02/machine.du index 6c63d22..72d89fc 100644 --- a/src/teaching/upp-2025/week02/machine.du +++ b/src/teaching/upp-2025/week02/machine.du @@ -1,17 +1,17 @@ -# Машинна таблица - УПП, Седмица 2, 09.10.2025 +'def title Машинна таблица - УПП, Седмица 2, 09.10.2025 +'def desc Страница където може да работите с машинната таблица -'define expected-reading 2 min -'define created 05 October 2025 -'define edited 11 October 2025 -[$pagenav] +# {title} + +{pagenav 2 min;05 October 2025;11 October 2025} В тази таблица може да редактирате клетките на колона A и тези срещу INPUT1 и INPUT2. При изпълнение, всяка клетка в A се обикаля отгоре-надолу (показано с жълто). -Ако срещне [=команда=] тогава потенциално прочита и долната клетка, и извършва някакво действие. +Ако срещне {b команда} тогава потенциално прочита и долната клетка, и извършва някакво действие. -Повече подробности в [url ./machine_manual.html упътването]. -Списък от налични команди [url #section-1 в дъното на страницата]. +Повече подробности в {url упътването;./machine_manual.html}. +Списък от налични команди {url в дъното на страницата;#section-1}. .text 'snippet 8 $ ./machine_table.html @@ -19,25 +19,25 @@ ## Команди :defs -; [`ASUM`] -: Прави [`A = A + <числото в долната клетка>`] +; {` ASUM} +: Прави {` A = A + <числото в долната клетка>} -; [`ASUBTRACT`] -: Прави [`A = A - <числото в долната клетка>`] +; {` ASUBTRACT} +: Прави {` A = A - <числото в долната клетка>} -; [`ASHOW`] -: Показва стойността на [`A`] като pop-up. +; {` ASHOW} +: Показва стойността на {` A} като pop-up. -; [`BSUM`] -: Прави [`B = B + <числото в долната клетка>`] +; {` BSUM} +: Прави {` B = B + <числото в долната клетка>} -; [`BSUBTRACT`] -: Прави [`B = B - <числото в долната клетка>`] +; {` BSUBTRACT} +: Прави {` B = B - <числото в долната клетка>} -; [`GOTOBZ`] -: Ако [`B`] [=е=] 0, тогава отива на реда, посочен от следващата клетка. +; {` GOTOBZ} +: Ако {` B} {b е} 0, тогава отива на реда, посочен от следващата клетка. Иначе продължава нататък. -; [`GOTOBN`] -: Ако [`B`] [=е по-голямо или равно на=] 0, тогава отива на реда, посочен от следващата клетка. +; {` GOTOBN} +: Ако {` B} {b е по-голямо или равно на} 0, тогава отива на реда, посочен от следващата клетка. Иначе продължава нататък. diff --git a/src/teaching/upp-2025/week02/machine_manual.du b/src/teaching/upp-2025/week02/machine_manual.du index 7090a12..1104907 100644 --- a/src/teaching/upp-2025/week02/machine_manual.du +++ b/src/teaching/upp-2025/week02/machine_manual.du @@ -1,11 +1,11 @@ -# Упътване на машинната таблица - УПП, Седмица 2, 09.10.2025 +'def title Упътване на машинната таблица - УПП, Седмица 2, 09.10.2025 +'def desc Какво е машинната таблица, как работи, какви команди поддържа. -'define expected-reading 3 min -'define created 05 October 2025 -'define edited 05 October 2025 -[$pagenav] +# {title} -[$presentation-controller] +{pagenav 3 min;05 October 2025;05 October 2025} + +{presentation-controller} :title_slide35 @@ -18,8 +18,8 @@ - Целта е да разиграем мисленето за програмиране - Без да пишем истински код - "Машинната таблица" е специална таблица, която създадох за този практикум\n - [*(щеше да е на Excel ама...)*] -- Тя симулира действието на един [=много=] прост компютър + {i (щеше да е на Excel ама...)} +- Тя симулира действието на един {b много} прост компютър :slide35 @@ -27,7 +27,7 @@ ## Принцип на действие .centered -[image ./img/machine_table.png] +{img ./img/machine_table.png} :middle_slide35 @@ -37,55 +37,55 @@ .centered .font18 -[*(По принцип ще спре при първия празен ред)*] +{i (По принцип ще спре при първия празен ред)} .centered .p -[image ./img/table_execution_continuous.gif] +{img ./img/table_execution_continuous.gif} :middle_slide35 .centered .p -Продължава да обикаля клетки, докато не срещне [=празна клетка=] или не свършат всички клетки +Продължава да обикаля клетки, докато не срещне {b празна клетка} или не свършат всички клетки .centered .p -[image ./img/table_execution_empty.gif] +{img ./img/table_execution_empty.gif} :middle_slide35 .unordered -- Във всяка една клетка може да срещне [=команда=] или [=число=] +- Във всяка една клетка може да срещне {b команда} или {b число} - Очаква последователност от команди в колона A -- След [=някои=] команди, може да се срещне и число +- След {b някои} команди, може да се срещне и число - Стойности могат да се въвеждат в колоната A - Клетките "A" и "B" стават 0 при изпълнение -- Всяка команда работи със стойността на клетката "A" [=или=] "B" +- Всяка команда работи със стойността на клетката "A" {b или} "B" :middle_slide35 -## Командата [`ASHOW`] +## Командата {` ASHOW} .p Показва стойността на клетката A като popup .p -[image ./img/table_ashow.gif] +{img ./img/table_ashow.gif} :middle_slide35 -## Командата [`ASUM`] +## Командата {` ASUM} .p Поглежда числото в долната клетка и го сумира към клетката "А". .p -[image ./img/table_asum.gif] +{img ./img/table_asum.gif} :middle_slide35 @@ -96,18 +96,18 @@ Нека да покажем "A", добавим 5 към него и пак го покажем .p -[image ./img/table_ashow_and_asum.gif] +{img ./img/table_ashow_and_asum.gif} :middle_slide35 -## Командата [`ASUBTRACT`] +## Командата {` ASUBTRACT} .p -Като [`ASUM`], но изважда вместо да събере. +Като {` ASUM}, но изважда вместо да събере. .p -[image ./img/table_asubtract.gif] +{img ./img/table_asubtract.gif} :middle_slide35 @@ -127,7 +127,7 @@ Нека да добавим стойността на INPUT1 към "A" .p -[image ./img/table_asum_input1.gif] +{img ./img/table_asum_input1.gif} :middle_slide35 @@ -138,65 +138,65 @@ Нека добавим стойността на INPUT1 и INPUT2 към "А" .p -[image ./img/table_asum_input1_input2.gif] +{img ./img/table_asum_input1_input2.gif} :middle_slide35 -## Командата [`BSUM`] +## Командата {` BSUM} .p -Същото като [`ASUM`], но с клетка "B". +Същото като {` ASUM}, но с клетка "B". -## Командата [`BSUBTRACT`] +## Командата {` BSUBTRACT} .p -Същото като [`ASUBTRACT`], но с клетка "B". +Същото като {` ASUBTRACT}, но с клетка "B". -[$br1] +{br1} .p -[=Нямаме [`BSHOW`]!=] +{b Нямаме {` BSHOW}!} Но имаме други специални команди. :middle_slide35 -## Командата [`GOTOBZ`] +## Командата {` GOTOBZ} .p -[=Ако=] клетка "B" е равна на 0, тогава прочита следващата клетка и отива на посочения ред. +{b Ако} клетка "B" е равна на 0, тогава прочита следващата клетка и отива на посочения ред. .p -[image ./img/table_gotobz.gif] +{img ./img/table_gotobz.gif} :middle_slide .p -[=Иначе=] продължава напред +{b Иначе} продължава напред .p -[image ./img/table_gotobz_false.gif] +{img ./img/table_gotobz_false.gif} :middle_slide35 -## Командата [`GOTOBN`] +## Командата {` GOTOBN} .p -Същата като [`GOTOBZ`], обаче отива на посочения ред когато "B" е [=по-голямо или равно=] на 0 (неотрицателно). +Същата като {` GOTOBZ}, обаче отива на посочения ред когато "B" е {b по-голямо или равно} на 0 (неотрицателно). :middle_slide35 .unordered - Употребата на останалите бутони трябва да е явна. -- "Запази" запазва [=само=] колона A! +- "Запази" запазва {b само} колона A! :middle_slide35 .p .centered -[url ./index.html Към задачите] +{url Към задачите;./index.html} diff --git a/src/teaching/upp-2025/week03/index.du b/src/teaching/upp-2025/week03/index.du index 6eeb8f4..17a8ee7 100644 --- a/src/teaching/upp-2025/week03/index.du +++ b/src/teaching/upp-2025/week03/index.du @@ -1,12 +1,12 @@ -# Задачи - УПП, Седмица 3, 16.10.2025 +'def title Задачи - УПП, Седмица 3, 16.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 9 min -'define created 11 October 2025 -'define edited 18 October 2025 -[$pagenav] +# {title} + +{pagenav 9 min;11 October 2025;18 October 2025} .warn -Не сте учили побитови операции, затова някои задачи са преместени в [url #section-3 За любознателните]. +Не сте учили побитови операции, затова някои задачи са преместени в {url За любознателните;#section-3}. GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] @@ -14,12 +14,13 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise01.cpp} Получавате цяло число. Трябва да върнете 0 ако е нечетно и 1 ако е четно. -:table_2 +:table +:2 |= Вход |= Изход @@ -30,14 +31,16 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise02.cpp} Получавате главна буква. Трябва да върнете съответната малка буква. -:table_2 +:table +:2 |= Вход |= Изход @@ -51,13 +54,15 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: u + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise03.cpp} Получавате 3 цели числа, трябва да върнете 1 ако образуват аритметична прогресия и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -74,16 +79,18 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise05.cpp} -Получавате десетично число: сума в [=левове=]. -Трябва да върнете същата сума в [=евро=], като [`1 € = 1.95583 лв`]. +Получавате десетично число: сума в {b левове}. +Трябва да върнете същата сума в {b евро}, като {` 1 € = 1.95583 лв}. -[*Поради прецизност при такива числа, вашите изходи може с много малко да се различават.*] +{i Поради прецизност при такива числа, вашите изходи може с много малко да се различават.} -:table_2 +:table +:2 |= Вход |= Изход @@ -103,9 +110,10 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 230.081 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise06.cpp} Получавате две булеви стойности. Трябва да върнете 1 ако свойството "би-импликация" е изпълнено за тях. @@ -113,9 +121,10 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] Припомняме, че би-импликацията и импликацията се дефинират по следния начин: -[image ./img/biimplication.png] +{img ./img/biimplication.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -132,19 +141,21 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise07.cpp} Получавате 4 цели числа от входа. За тях трябва да изкарате: .bulleted - средно аритметично, - сума, -- сума от вида [`1/<първо число> + 1/<второ число> + ...`], +- сума от вида {` 1/<първо число> + 1/<второ число> + ...}, - умножение. -:table_2 +:table +:2 |= Вход |= Изход @@ -158,19 +169,21 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: -72.0 -288 inf 0 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise08.cpp} -Получавате 5 реални числа: коефициентите на полином от трета степен [`a`] ([`a`] различно от 0), [`b`], [`c`], [`d`] и потенциален негов корен [`x`]. +Получавате 5 реални числа: коефициентите на полином от трета степен {` a} ({` a} различно от 0), {` b}, {` c}, {` d} и потенциален негов корен {` x}. -Трябва да върнете 1 ако [`x`] е корен на уравнението и 0 ако не е. +Трябва да върнете 1 ако {` x} е корен на уравнението и 0 ако не е. -Припомняме, че [`x`] е корен на кубично уравнение, когато: +Припомняме, че {` x} е корен на кубично уравнение, когато: -[image ./img/cubic.png] +{img ./img/cubic.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -193,18 +206,20 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise10.cpp} Получавате 6 реални числа: коефициентите на два (ортонормирани) триизмерни вектора. Върнете тяхното точково умножение. Припомняме, че алгебричата дефиниция на точковото умножение е: -[image ./img/dotproduct.png] +{img ./img/dotproduct.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -221,24 +236,26 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 30 + ## За самоподготовка ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise12.cpp} -Първите релефни етикети (които човек може сам да попълни) са въведени през 1958 от [url https://en.wikipedia.org/wiki/Dymo_Corporation#History DYMO]. +Първите релефни етикети (които човек може сам да попълни) са въведени през 1958 от {url DYMO;https://en.wikipedia.org/wiki/Dymo_Corporation#History}. Механични устройства съдържат диск с букви (знаци), който се завърта докато не се избере желаната буква. Чрез стискане на дръжката, малък чук прищипва лентата върху диска (който има релефи на буквите), пластмасовата лента се изкривява и буква се отпечтва (подобно на пишеща машина). -[image ./img/dymo.JPG] +{img ./img/dymo.JPG} Нека нашия диск съдържа само малки букви. Във входа получавате две малки букви: коя буква е избрана в момента и коя буква е желана. Трябва да върнете с колко позиции на ляво (обратно на часовниковата стрелка) трябва да се завърти диска, така че желаната буква да се избере. -:table_2 +:table +:2 |= Вход |= Изход @@ -261,28 +278,30 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 7 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week03/Exercise13.cpp} -През 629, индийския математик [url https://en.wikipedia.org/wiki/Bh%C4%81skara_I Бхаскара 1ви] представя една забележителна апроксимация на синус функцията (в радиани): +През 629, индийския математик {url Бхаскара 1ви;https://en.wikipedia.org/wiki/Bh%C4%81skara_I} представя една забележителна апроксимация на синус функцията (в радиани): -[image ./img/sineapprox.png] +{img ./img/sineapprox.png} От входа ще получите два ъгъла в радиани, α и β, чиято сума е между 0 и π/2 (включително). -Използвайки [=единствено=] апроксимацията на Бхаскара 1ви, пресметнете [`tg(α + β)`].\n -[=Не може да използвате коренуване!=] +Използвайки {b единствено} апроксимацията на Бхаскара 1ви, пресметнете {` tg(α + β)}.\n +{b Не може да използвате коренуване!} За константата π, използвайте поне 5 цифри след десетичната запетая. .text
-[*Подсказка*] -Използвайте факта, че [url https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity може да представите косинус чрез отместване на синус]. +{i Подсказка} +Използвайте факта, че {url може да представите косинус чрез отместване на синус;https://en.wikipedia.org/wiki/List_of_trigonometric_identities#Shifts_and_periodicity}.
-:table_2 +:table +:2 |= Вход |= Изход @@ -305,6 +324,7 @@ GitHub Classroom: [url https://classroom.github.com/a/UMc2WhVX] |: 1.30265 + .comment pi / 2 = 1.570795 pi / 3 = 1.047196 @@ -320,7 +340,8 @@ pi / 8 = 0.392698 Трябва да върнете 1 ако правоъгълниците се пресичат и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -340,6 +361,7 @@ pi / 8 = 0.392698 |: 1 + ## За любознателните .note @@ -351,7 +373,8 @@ pi / 8 = 0.392698 Трябва да върнете бит-а на съответната позиция в числото, като индекс 0 е най-десния бит (младши), докато 31 е най-левия бит (старши). -:table_2 +:table +:2 |= Вход |= Изход @@ -371,12 +394,14 @@ pi / 8 = 0.392698 |: 1 + ### Задача 9 Получавате цяло неотрицателно 8-битово число. Трябва да върнете 1 ако броя единици в числото е нечетно и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -396,6 +421,7 @@ pi / 8 = 0.392698 |: 1 + ### Задача 11 Нека да разделим едно цяло неотрицателно 32-битово число на 4 части, всяка по 8 бита. @@ -404,9 +430,10 @@ pi / 8 = 0.392698 Примерно, числото 2148271109 в двоичната бройна система е 10000000000011000000010000000101, което се разделя на подчислата 10000000, 00001100, 00000100 и 00000101 (128, 12, 4 и 5). Получавате две 32-битови цели неотрицателни числа. -Сумирайте [=съответните=] подчисла в двете числа и изкарайте резултаното "надчисло". +Сумирайте {b съответните} подчисла в двете числа и изкарайте резултаното "надчисло". -:table_2 +:table +:2 |= Вход |= Изход @@ -429,6 +456,7 @@ pi / 8 = 0.392698 |: 10291711 + .comment 0.0.0.3 + 0.0.0.4 = 7 0.0.0.255 + 0.0.0.1 = 0 @@ -449,7 +477,8 @@ pi / 8 = 0.392698 То представлява UNIX време. Трябва да изкарате UTC часа и датата, в "човешки" формат ("час:минути:секунди ден месец година"). -:table_2 +:table +:2 |= Вход |= Изход @@ -472,9 +501,10 @@ pi / 8 = 0.392698 |: 7:6:14 12 10 2025 + ### Задача 15 -В модерния интернет, всяко устройство се обозначава с [*уникален*] адрес. +В модерния интернет, всяко устройство се обозначава с {i уникален} адрес. Това е 32-битово цяло неотрицателно число. За човешко удобоство, това число се представя чрез "dot-decimal notation": всеки 8 бита се представят като десетично число и тези 4 числа се слепват с точки между тях. @@ -485,7 +515,8 @@ pi / 8 = 0.392698 От входа получавате цяло неотрицателно 32-битово число. Трябва да изкарате стойността му в "dot-decimal notation". -:table_2 +:table +:2 |= Вход |= Изход @@ -508,14 +539,15 @@ pi / 8 = 0.392698 |: 216.24.57.7 + ### Задача 17 -В автомобилите, за комуникация между всички електронни компоненти се използва [url https://en.wikipedia.org/wiki/CAN_bus Controller Area Network bus]. +В автомобилите, за комуникация между всички електронни компоненти се използва {url Controller Area Network bus;https://en.wikipedia.org/wiki/CAN_bus}. Различни устройства се свързват в една мрежа и си комуникират помежду си. Единичен трансфер на данни се нарича "frame". Всеки "frame" следва стандартен формат, описващ какви данни се пренасят, колко и т.н. -Как изглежда този формат може да намерите на: [url https://en.wikipedia.org/wiki/ISO_15765-2] +Как изглежда този формат може да намерите на: {url https://en.wikipedia.org/wiki/ISO_15765-2} От входа получавате осем 8-битови числа. Те представляват един CAN frame. diff --git a/src/teaching/upp-2025/week04/index.du b/src/teaching/upp-2025/week04/index.du index 8b138fa..89cd0db 100644 --- a/src/teaching/upp-2025/week04/index.du +++ b/src/teaching/upp-2025/week04/index.du @@ -1,17 +1,17 @@ -# Задачи - УПП, Седмица 4, 23.10.2025 +'def title Задачи - УПП, Седмица 4, 23.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 9 min -'define created 18 October 2025 -'define edited 25 October 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/rOzekyCs] +{pagenav 9 min;18 October 2025;25 October 2025} + +GitHub Classroom: {url https://classroom.github.com/a/rOzekyCs} :important .p -При [`if`]-ове [=ще=] вземаме точки за изрази от типа: +При {` if}-ове {b ще} вземаме точки за изрази от типа: -```c++ +```cpp if (condition) std::cout << 1; else @@ -20,7 +20,7 @@ else .p или -```c++ +```cpp if (condition) std::cout << false; else @@ -29,7 +29,7 @@ else .p или -```c++ +```cpp if (condition) std::cout << '0'; else @@ -43,12 +43,13 @@ else ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise01.cpp} От входа получавате две реални числа. Трябва да ги върнете в нарастващ ред. -:table_2 +:table +:2 |= Вход |= Изход @@ -62,9 +63,10 @@ else |: -11.1 -2.5 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise02.cpp} От входа получавате буква. Трябва да изкрате: @@ -74,7 +76,8 @@ else - "Digit" ако е цифра и - "Other" в останалите случаи. -:table_2 +:table +:2 |= Вход |= Изход @@ -91,14 +94,16 @@ else |: Other + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise03.cpp} От входа получавате ден в месеца (допускаме 30-дневен месец, където първи ден е Понеделник; като месец Септември от тази година). Трябва да върнете името на деня от седмицата. -:table_2 +:table +:2 |= Вход |= Изход @@ -118,18 +123,20 @@ else |: Tuesday + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise04.cpp} -От входа получавате реални коефициенти на квадратно уравнение: [`a`], [`b`] и [`c`]. +От входа получавате реални коефициенти на квадратно уравнение: {` a}, {` b} и {` c}. Трябва да изкарате корените на уравнението, като: .bulleted - ако има два корена, изкарвате и двата, -- ако има един корен, изкарвате [=само=] него, +- ако има един корен, изкарвате {b само} него, - ако няма реални корени, изкарвате "No real roots". -:table_2 +:table +:2 |= Вход |= Изход @@ -143,21 +150,23 @@ else |: 1.5 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise05.cpp} От входа получавате буква, съответстваща на операция върху числа: .bulleted -- [`_`] за закръгляне надолу на число -- [`+`] за събиране на две числа -- [`*`] за умножение на две числа -- [`x`] за умножение на три числа -- [`.`] за умножение на четири числа +- {` _} за закръгляне надолу на число +- {` +} за събиране на две числа +- {` *} за умножение на две числа +- {` x} за умножение на три числа +- {` .} за умножение на четири числа След тази буква ще получите съответния брой реални числа и трябва да изкарате резултата от операцията. -:table_2 +:table +:2 |= Вход |= Изход @@ -177,16 +186,17 @@ else |: -8 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise06.cpp} От входа получавате число, което определя фигура. Това число може да бъде: .bulleted -- [`1`] за окръжност, -- [`2`] за правоъгълник и -- [`3`] за триъгълник. +- {` 1} за окръжност, +- {` 2} за правоъгълник и +- {` 3} за триъгълник. Спрямо типа фигура, ще приемете различен брой реални числа: .bulleted @@ -197,7 +207,8 @@ else Използвайки тези числа, трябва да изкарате периметър (дължина) на фигурата. За константата π използвайте поне 5 цифри след запетаята. -:table_2 +:table +:2 |= Вход |= Изход @@ -211,16 +222,18 @@ else |: 1849.63 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise07.cpp} От входа получавате цяло число. Изкарайте за него таблицата на умножение от 1 до 10 включително. -[=Използвайте цикъл!=] +{b Използвайте цикъл!} -:table_2 +:table +:2 |= Вход |= Изход @@ -253,14 +266,16 @@ else 10 -80 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise08.cpp} -От входа получавате две цели положителни числа, [`a`] и [`x`]. -Пресметнете [`a`] на степен [`x`]. +От входа получавате две цели положителни числа, {` a} и {` x}. +Пресметнете {` a} на степен {` x}. -:table_2 +:table +:2 |= Вход |= Изход @@ -277,15 +292,17 @@ else |: 844596301 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise09.cpp} От входа получавате цяло положително число. -Трябва [=поотделно=] да сумирате всички четни и нечетни числа от 1 до подаденото число, включително. +Трябва {b поотделно} да сумирате всички четни и нечетни числа от 1 до подаденото число, включително. Накрая изкарайте двете суми. -:table_2 +:table +:2 |= Вход |= Изход @@ -299,14 +316,16 @@ else |: 1056 1024 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise10.cpp} От входа получавате цяло положително число. Изкарайте за него "Prime" ако е просто и "Not prime" ако не е, последвано от най-малкия делител (различен от 1 и самото число). -:table_2 +:table +:2 |= Вход |= Изход @@ -323,14 +342,16 @@ else |: Not prime 1187 + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise11.cpp} От входа получавате цели числа докато не срещнете числото 0. Трябва да върнете умножението на всички тези числа (без нулата). -:table_2 +:table +:2 |= Вход |= Изход @@ -344,20 +365,22 @@ else |: -1479870000 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise12.cpp} От входа получавате знак. -Ако този знак е аритметична операция ([`+`], [`-`], [`*`], [`/`]), тогава ще получите две цели числа. +Ако този знак е аритметична операция ({` +}, {` -}, {` *}, {` /}), тогава ще получите две цели числа. Трябва да пресметнете резултата на операцията върху тези числа, да го изкарате и пак да очаквате знак. Ако този знак е точка, тогава спирате програмата. -[*При вас вход и изход ще са смесени.*] +{i При вас вход и изход ще са смесени.} -:table_2 +:table +:2 |= Вход |= Изход @@ -371,16 +394,18 @@ else |: 8192 5 49 100 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise13.cpp} -[url https://en.wikipedia.org/wiki/Fibonacci_sequence Редицата на Фибоначи] е последователност от числа, където всяко следващо е равно на сумата на предходните две. +{url Редицата на Фибоначи;https://en.wikipedia.org/wiki/Fibonacci_sequence} е последователност от числа, където всяко следващо е равно на сумата на предходните две. По-точно, първото число (на индекс 0) е 0, второто число (на индекс 1) е 1 и всяко следващо се определя от предходните две. От входа получавате неотрицателен индекс и трябва да изкарате съответното число на фибоначи. -:table_2 +:table +:2 |= Вход |= Изход @@ -406,14 +431,16 @@ else |: 3524578 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise14.cpp} От входа получавате цяло неотрицателно число. Трябва да обърнете реда на цифрите в числото и да изкарате резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -430,11 +457,12 @@ else |: 73444672 + ## За самоподготовка ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise15.cpp} Получавате реално число: оценка по шестобалната система. Трябва да върнете "наименованието" на оценката спрямо стойността: @@ -446,7 +474,8 @@ else - "Weak" (оценки от 2.99 до 2.0) и - "Bad" (по-малко от двойка) -:table_2 +:table +:2 |= Вход |= Изход @@ -469,9 +498,10 @@ else |: Bad + ### Задача 16 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise16.cpp} Получавате три реални числа: ъгли в градуси. Трябва да върнете дали триъгълник с тези ъгли може да съществува, и ако да, дали е: @@ -482,7 +512,8 @@ else - тъп ("Obtuse") или - правоъгълен ("Right"). -:table_2 +:table +:2 |= Вход |= Изход @@ -502,16 +533,18 @@ else |: Obtuse triangle + ### Задача 17 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise17.cpp} -[url https://en.wikipedia.org/wiki/Factorial Факториел] е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително. +{url Факториел;https://en.wikipedia.org/wiki/Factorial} е функция върху число, която представлява умножението на всички цели числа от 1 до самото число включително. От входа получавате цяло положително число. Трябва да изкарате неговия факториел. -:table_2 +:table +:2 |= Вход |= Изход @@ -531,9 +564,10 @@ else |: 6 + ### Задача 18 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise18.cpp} Във вашата програма запазете цяла неотрицателна константа. От входа получавате цели неотрицателни числа: опити да се познае. @@ -542,9 +576,10 @@ else Ако е по-голямо, трябва да върнете "Lower". Ако бъде познато, трябва да върнете "You guessed it!" и да спрете програмата. -[*В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.*] +{i В следните примери числото е 1337. Вашия вход и изход ще бъдат смесени.} -:table_2 +:table +:2 |= Вход |= Изход @@ -578,15 +613,16 @@ You guessed it! ### Задача 19 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise19.cpp} -[url https://en.wikipedia.org/wiki/Harmonic_series_(mathematics) Хармоничния ред] е редица числа, където n-тото число се определя по формулата: +{url Хармоничния ред;https://en.wikipedia.org/wiki/Harmonic_series_(mathematics)} е редица числа, където n-тото число се определя по формулата: -[image ./img/harmonic_element.png] +{img ./img/harmonic_element.png} От входа ще получите положително цяло число n, трябва да върнете n-тото число в хармоничния ред. -:table_2 +:table +:2 |= Вход |= Изход @@ -606,21 +642,23 @@ You guessed it! |: 3.59774 + ### Задача 20 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise20.cpp} От входа получавате реално ненулево "целево" число и реално "обсег" число (в проценти). След това получавате редица реални ненулеви числа. -Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента [*близкост*] до целевото число. +Продължавате да приемате реални числа, докато сумата на всички числа в редицата не е поне с "обсег" процента {i близкост} до целевото число. Накрая на програмата изкарайте тази сума. Формулата за процентова разлика между числа а и b е: -[image ./img/percent_diff.png] +{img ./img/percent_diff.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -637,20 +675,21 @@ You guessed it! |: 20 + ## За любознателните ### Задача 21 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week04/Exercise21.cpp} В година 60та, преди близко до 2000 години, гръцкия математик Херон описва алгоритъм за пресмятане на корен квадратен на подадено число S. -Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки [url https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method просто линейно взаимоотношение]. +Описва се редица от числа x, където всяко следващо е равно на предходното, следвайки {url просто линейно взаимоотношение;https://en.wikipedia.org/wiki/Square_root_algorithms#Heron's_method}. Всеки следващ член на редицата става все по-близък до истинската стойност на корена. Първия член е произволно първоначално приближение. Разбира се, колко е по-близко приближението до истинската стойност, толкова по-бързо се приближаваме. -Нека за нашите цели да използваме [url https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates хиперболичното приближение]. +Нека за нашите цели да използваме {url хиперболичното приближение;https://en.wikipedia.org/wiki/Square_root_algorithms#Hyperbolic_estimates}. Получавате цяло число S и индекс на член в редицата n. Трябва да върнете корена на числото по метода на Херон. diff --git a/src/teaching/upp-2025/week05/index.du b/src/teaching/upp-2025/week05/index.du index f19ff04..6e545e7 100644 --- a/src/teaching/upp-2025/week05/index.du +++ b/src/teaching/upp-2025/week05/index.du @@ -1,9 +1,9 @@ -# Задачи - УПП, Седмица 5, 30.10.2025 +'def title Задачи - УПП, Седмица 5, 30.10.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 14 min -'define created 26 October 2025 -'define edited 01 November 2025 -[$pagenav] +# {title} + +{pagenav 14 min;26 October 2025;01 November 2025} GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] @@ -14,12 +14,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise01.cpp} От входа получавате 10 реални числа. Трябва да ги върнете в обратен ред. -:table_2 +:table +:2 |= Вход |= Изход @@ -30,14 +31,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 39.8 6 69.21 84.55 100.001 18.62 34.799 65 89.95 41.4 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise02.cpp} От входа получавате 7 букви. Трябва да изкарате буквите в същата последователност, обаче завъртяни надясно с 3 позиции. -:table_2 +:table +:2 |= Вход |= Изход @@ -48,15 +51,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: j l b k l m l + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise03.cpp} От входа получавате 14 цели неотрицателни числа. Трябва да изкарате второто най-голямо число. Ако няма такова, просто изкарайте най-голямото. -:table_2 +:table +:2 |= Вход |= Изход @@ -70,17 +75,19 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 9 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise04.cpp} От входа получавате две цели положителни числа. -Трябва да върнете [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от първото число, който факториел е повдигнат на степен второто число. +Трябва да върнете {url факториел;https://en.wikipedia.org/wiki/Factorial#Definition} от първото число, който факториел е повдигнат на степен второто число. Факториел на едно (неотрицателно цяло) число е умножението на всички цели числа от 1 до самото число включително. -Примерно, факториел от 5 е [`1 * 2 * 3 * 4 * 5 = 120`]. +Примерно, факториел от 5 е {` 1 * 2 * 3 * 4 * 5 = 120}. -:table_2 +:table +:2 |= Вход |= Изход @@ -103,14 +110,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 256 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise05.cpp} От входа получавате 18 цели числа. Трябва да изкарате същата поредица числа, обаче всички нули са в началото на редицата. -:table_2 +:table +:2 |= Вход |= Изход @@ -121,12 +130,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 0 0 0 0 839 643 42 -694 57 650 729 -434 35 155 176 873 40 658 + .question Нужни ли са масиви, ако в условието трябваше да изкарвате нулите в края на поредицата? ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise06.cpp} От входа получавате 15 цели числа. Трябва да изкарате дължината на най-дългата последователност от числа, която е подредена в нарастващ ред. @@ -134,9 +144,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] Последователност от числа, която съдържа еднакви числа, също се зачита за сортирана в нарастващ ред. .note -[=(01.11.2025)=] Поправен е изхода в първия пример, от 6 на 8. +{b (01.11.2025)} Поправен е изхода в първия пример, от 6 на 8. -:table_2 +:table +:2 |= Вход |= Изход @@ -159,14 +170,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 5 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise07.cpp} От входата получавате цяло неотрицателно число. Върнете дали то е перфектно: дали е равно на сумата на всички свои делители, освен себе си. -:table_2 +:table +:2 |= Вход |= Изход @@ -201,16 +214,18 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: Perfect + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise08.cpp} От входа получавате две редици от по 10 реални числа (т.е. първите 10 числа са от първата редица, и вторите 10 числа образуват втората редица). -След това получавате знак - аритметича операция ([`+`], [`-`], [`*`], [`/`]). +След това получавате знак - аритметича операция ({` +}, {` -}, {` *}, {` /}). Трябва да изпълните операцията върху всяка съответна двойка числа от двете редици и да върнете резултатите. -:table_2 +:table +:2 |= Вход |= Изход @@ -231,19 +246,21 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: inf -2 16.175 16.41 100.011 -inf 4 31.714 71 -nan + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise09.cpp} От входа получавате реално число z между 0 (изключително) и 2 (включително), заедно с дължина n. -Трябва да намерите стойността на логаритъм с основа ℯ ([url https://en.wikipedia.org/wiki/E_(mathematical_constant) Неперово число]) от това число, използвайки развитието по ред на Тейлър: +Трябва да намерите стойността на логаритъм с основа ℯ ({url Неперово число;https://en.wikipedia.org/wiki/E_(mathematical_constant)}) от това число, използвайки развитието по ред на Тейлър: -[image ./img/ln_taylor_series.png] +{img ./img/ln_taylor_series.png} като n определя колко елемента от реда да използвате. -:table_2 +:table +:2 |= Вход |= Изход @@ -281,22 +298,24 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: -4.60517 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise10.cpp} От входа получавате цяло неотрицатено число с максимум 8 цифри. -Това число представлява сериен номер под [url https://en.wikipedia.org/wiki/S10_(UPU_standard) S10 стандарта за идентификационни номера на пратки]. +Това число представлява сериен номер под {url S10 стандарта за идентификационни номера на пратки;https://en.wikipedia.org/wiki/S10_(UPU_standard)}. Трябва да пресметнете "контролната цифра" (check digit) на серийния номер. Това става по следния начин: .numbered 1. От ляво на дясно, трябва да умножите всяка цифра със съответната си "тежест": 8, 6, 4, 2, 3, 5, 9, 7 2. Сумирате умножените цифри -3. Пресмятате контролната цифра по формулата: [`11 - <сума> mod 11`], където +3. Пресмятате контролната цифра по формулата: {` 11 - <сума> mod 11}, където ако резултата е 10, цифрата е 0 и ако резултата е 11, цифрата е 5. -:table_2 +:table +:2 |= Вход |= Изход @@ -325,28 +344,30 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 5 + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise11.cpp} От входа получавате цяло неотрицателно число. -Изкарвате [url https://en.wikipedia.org/wiki/Lucas_number числото на Лукас] след толкова на брой позиции и ако числото [=не=] е било 0, приемаме ново число и повтаряте логиката. +Изкарвате {url числото на Лукас;https://en.wikipedia.org/wiki/Lucas_number} след толкова на брой позиции и ако числото {b не} е било 0, приемаме ново число и повтаряте логиката. -Тоест, ако първото число е n, тогава връщате [`n`]-тото число на Лукас.\n -Ако второто число е m, тогава връщате [`n + m`]-тото число на Лукас. +Тоест, ако първото число е n, тогава връщате {` n}-тото число на Лукас.\n +Ако второто число е m, тогава връщате {` n + m}-тото число на Лукас. И така нататък. Числата на Лукас се определят по следния начин: -[image ./img/lucas_def.png] +{img ./img/lucas_def.png} .note -[=(01.11.2025)=] Входа на последния пример е поправен. +{b (01.11.2025)} Входа на последния пример е поправен. -[*Вашия вход и изход може да са смесени!*] +{i Вашия вход и изход може да са смесени!} -:table_2 +:table +:2 |= Вход |= Изход @@ -369,9 +390,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 47 2207 3571 3571 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise12.cpp} От входа получавате 20 цели числа, всяко от които е индекс на елемент в масива (т.е. всяко е между 0 и 19 включително). @@ -384,9 +406,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] Ако се поражда цикъл (посетим някое число повече от един път), тогава трябва да изкарате "Infinity". .note -[=(01.11.2025)=] Входа на първия пример е поправен. +{b (01.11.2025)} Входа на първия пример е поправен. -:table_2 +:table +:2 |= Вход |= Изход @@ -406,18 +429,20 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: Infinity + ## За самоподготовка ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise13.cpp} От входа получавате 8 цели числа. След това получавате 9то цяло число. Трябва да върнете, сред 8те цели числа, колко често се среща 9тото. -:table_2 +:table +:2 |= Вход |= Изход @@ -434,14 +459,16 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 8 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise14.cpp} От входа получавате 16 цели числа. Трябва да изкарате, на два реда, първо всички четни числа и после всички нечетни. -:table_2 +:table +:2 |= Вход |= Изход @@ -458,9 +485,10 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] -961 871 657 -297 -5 -9 255 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise15.cpp} От входа получавате 12 реални числа. Трябва да върнете, на отделни редове, двойки числа от тази поредица: @@ -469,7 +497,8 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] - Втората двойка има второто и пред-посленото число. - И така нататък. -:table_2 +:table +:2 |= Вход |= Изход @@ -494,15 +523,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] 769.89 505 + ### Задача 16 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise16.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise16.cpp} От входа получавате две редици от по 5 цели числа (т.е. първите 5 числа са част от първата редица и вторите 5 числа са част от втората). Трябва да изкарате една редица от числа, където двете редици са преплетени: първо имаме първото число от първата редица, след това първото число от втората редица, след това второто число от първата редица и така нататък. -:table_2 +:table +:2 |= Вход |= Изход @@ -513,15 +544,17 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: 0 1 1 0 0 1 1 0 0 1 + ### Задача 17 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise17.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise17.cpp} От входа получавате цяло число в десетична бройна система. -Трябва да изкарате дали то е [url https://en.wikipedia.org/wiki/Narcissistic_number число на Армстронг]: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото. +Трябва да изкарате дали то е {url число на Армстронг;https://en.wikipedia.org/wiki/Narcissistic_number}: число, което е равно на сумата на цифрите си, където всяка цифра е повдигната на степен, дължината на числото. -:table_2 +:table +:2 |= Вход |= Изход @@ -544,12 +577,13 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: Narcissistic + ### Задача 18 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise18.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise18.cpp} .note -[=(01.11.2025)=] Поправени бройката на входните цели числа и втория пример. +{b (01.11.2025)} Поправени бройката на входните цели числа и втория пример. От входа получавате 7 цели числа. @@ -557,7 +591,8 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] Ако такаъв индекс не съществува, изкарате "No such index". -:table_2 +:table +:2 |= Вход |= Изход @@ -568,19 +603,21 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: No such index + ### Задача 19 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise19.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise19.cpp} От входа получавате две числа: реален ъгъл в радиани x и положителен максимален индекс n. Трябва да върнете стойността на синус от този ъгъл, използвайки реда на Тейлър: -[image ./img/sinx_taylor_series.png] +{img ./img/sinx_taylor_series.png} където n определя с колко елемента от реда да смятаме. -:table_2 +:table +:2 |= Вход |= Изход @@ -597,27 +634,29 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: -1.08189 + ### Задача 20 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise20.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise20.cpp} От входа получавате цяло положително число. -Трябва да валидирате това число използвайки [url https://en.wikipedia.org/wiki/Luhn_algorithm алгоритъма на Luhn]: +Трябва да валидирате това число използвайки {url алгоритъма на Luhn;https://en.wikipedia.org/wiki/Luhn_algorithm}: .numbered 1. Най-дясната цифра е "цифра за проверка", тя трябва да бъде изкарана за после. 2. Започвайки от най-дясната цифра (от останалите цифри, т.е. втората най-дясна в числото), трябва да умножите всяка втора цифра по две. - Ако цифрата стане по-голяма от 9, трябва да [*извадите*] 9. + Ако цифрата стане по-голяма от 9, трябва да {i извадите} 9. 3. Сумирате всички цифри (всички умножени и неумножени). -4. Проверявате дали цифрата за проверка е равна на [`(10 - (сумa mod 10)) mod 10`] +4. Проверявате дали цифрата за проверка е равна на {` (10 - (сумa mod 10)) mod 10} Този алгоритъм се използва главно в проверката на номера на дебитни/кредитни карти. Главната цел е да се засекат някои механични грешки при въвеждане на номера. .note -[=(01.11.2025)=] Поправен е входа на третия пример. +{b (01.11.2025)} Поправен е входа на третия пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -640,21 +679,23 @@ GitHub Classroom: [url https://classroom.github.com/a/6oPRMxJx] |: Invalid + ### Задача 21 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise21.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week05/Exercise21.cpp} От входа получавате цяло неотрицателно число. -Трябва да върнете съответното по индекс [url https://en.wikipedia.org/wiki/Catalan_number число на Каталан]. +Трябва да върнете съответното по индекс {url число на Каталан;https://en.wikipedia.org/wiki/Catalan_number}. n-тото число на Каталан се дефинира по следния начин: -[image ./img/catalan_def.png] +{img ./img/catalan_def.png} -Където [`x!`] е [url https://en.wikipedia.org/wiki/Factorial#Definition факториел] от x. +Където {` x!} е {url факториел;https://en.wikipedia.org/wiki/Factorial#Definition} от x. Припомняме, че факториел на едно число е умножението на всички цели числа от 1 до самото число включително. -:table_2 +:table +:2 |= Вход |= Изход diff --git a/src/teaching/upp-2025/week06/index.du b/src/teaching/upp-2025/week06/index.du index a1660f8..dcdd607 100644 --- a/src/teaching/upp-2025/week06/index.du +++ b/src/teaching/upp-2025/week06/index.du @@ -1,27 +1,28 @@ -# Задачи - УПП, Седмица 6, 06.11.2025 +'def title Задачи - УПП, Седмица 6, 06.11.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 10 min -'define created 01 November 2025 -'define edited 06 November 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/JSB1UK_f] +{pagenav 10 min;01 November 2025;06 November 2025} + +GitHub Classroom: {url https://classroom.github.com/a/JSB1UK_f} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise01.cpp} -През 1837 година, [url https://en.wikipedia.org/wiki/Charles_Babbage Чарлз Бабидж] пита въпроса: +През 1837 година, {url Чарлз Бабидж;https://en.wikipedia.org/wiki/Charles_Babbage} пита въпроса: .quote What is the smallest positive integer whose square ends in the digits 269,696? Според него това число е 99736 (чиито квадрат е 9947269696). -Напишете програма, която [=намира=] най-малкото число, отговарящо на въпроса. +Напишете програма, която {b намира} най-малкото число, отговарящо на въпроса. -:table_2 +:table +:2 |= Вход |= Изход @@ -29,14 +30,16 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 25264 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise02.cpp} От входа получавате 8 цели положителни числа. Трябва да изкарате най-голямото общо делимо между всички тези числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -50,16 +53,18 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 1 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise03.cpp} Получавате цяло положително число. В него трябва да замените всички срещания на най-срещаната цифра с 0. Ако има няколко такива цифри, трябва да замените само най голямата от тях. -:table_2 +:table +:2 |= Вход |= Изход @@ -88,14 +93,16 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 535035030 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise04.cpp} Получавате една редица от 15 цели числа и след това втора редица с 5 цели уникални числа. Трябва да върнете броя срещания в първата редица на всяко от числата във втората редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -106,21 +113,23 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 0 2 7 6 0 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise05.cpp} От входа получавате две реални числа: координати на точка в равнината. Спрямо следното изображение: -[image ./img/rectangle_and_line.png] +{img ./img/rectangle_and_line.png} изкарайте дали точката е в защрихованата област или не. -Областта [=не=] включва правата и правоъгълника! +Областта {b не} включва правата и правоъгълника! Зачитайте, че черните прави отбелязват главните оси, а разстоянията между съседни сиви оси е единица. -:table_2 +:table +:2 |= Вход |= Изход @@ -164,12 +173,13 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Inside + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise06.cpp} От входа получавате цяло положително число. -Трябва да върнете дали то е [url https://en.wikipedia.org/wiki/Happy_number щастливо]. +Трябва да върнете дали то е {url щастливо;https://en.wikipedia.org/wiki/Happy_number}. Нека да вземем нашето число и да го заменим със сумата на всички свои цифри, повдигнати на квадрат. Оригиналното число е щастливо, ако след краен брой прилагания на тази операция, получим числото 1. @@ -177,7 +187,8 @@ What is the smallest positive integer whose square ends in the digits 269,696? Когато число не е щастливо, влизаме в безкрайния цикъл 4, 16, 37, 58, 89, 145, 42, 20, 4, 16, ... Това е единствения възможен цикъл в който нещастно число може да попадне. -:table_2 +:table +:2 |= Вход |= Изход @@ -206,18 +217,20 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Happy + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise07.cpp} От входа получавате 6 реални числа. -Пресметнете съответните 6 [url https://en.wikipedia.org/wiki/Prefix_sum префиксни суми] и ги изкарайте. +Пресметнете съответните 6 {url префиксни суми;https://en.wikipedia.org/wiki/Prefix_sum} и ги изкарайте. Това са сумите на всички числа до сега. Тоест, префиксната сума на второто число е сумата на първото и второто число. Префиксата сума на третото число е сумата на първото, второто и третото число. -:table_2 +:table +:2 |= Вход |= Изход @@ -228,21 +241,23 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 30.86 998.074 1083.07 1598.34 1145.34 1107.55 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise08.cpp} От входа получавате две реални числа: координати на точка в равнината. Спрямо следното изображение: -[image ./img/two_circles.png] +{img ./img/two_circles.png} изкарайте дали точката е в защрихованата област или не. -Областта [=не=] включва самите окръжности! +Областта {b не} включва самите окръжности! Зачитайте, че черните прави отбелязват главните оси, а разстоянията между съседни сиви оси е единица. -:table_2 +:table +:2 |= Вход |= Изход @@ -289,14 +304,16 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Outside + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise09.cpp} От входа получавате 10 цели числа. Трябва да върнете дали сред тях същестуват три числа (на различни позиции), чиято сума е равна на 0. -:table_2 +:table +:2 |= Вход |= Изход @@ -310,16 +327,18 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Doesn't exist + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise10.cpp} От входа получавате четири трицифрени цели неотрицателн числа. Трябва да върнете най-голямото възможно цяло число, което се получава след "слепване" на тези числа. -[*Не е нужно да използвате сортиращ алгоритъм!*] +{i Не е нужно да използвате сортиращ алгоритъм!} -:table_2 +:table +:2 |= Вход |= Изход @@ -333,20 +352,22 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 492382352289 + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise11.cpp} От входа получавате две реални числа: координати на точка в равнината. Спрямо следното изображение: -[image ./img/triangle_and_circle.png] +{img ./img/triangle_and_circle.png} -Областта [=не=] включва правата и правоъгълника! +Областта {b не} включва правата и правоъгълника! Зачитайте, че черните прави отбелязват главните оси, а разстоянията между съседни сиви оси е единица. -:table_2 +:table +:2 |= Вход |= Изход @@ -390,18 +411,20 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Outside + ## За самоподготовка ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise12.cpp} От входа получавате цяло неотрицателно число. -Трябва да върнете дали е [url https://en.wikipedia.org/wiki/Sum-product_number число на "сума-произведение"]. +Трябва да върнете дали е {url число на "сума-произведение";https://en.wikipedia.org/wiki/Sum-product_number}. С други думи, дали е равно на сумата на цифрите си, умножено по умнежнието на цифрите. -:table_2 +:table +:2 |= Вход |= Изход @@ -421,14 +444,16 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Not a sum-product number + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise13.cpp} От входа получавате цяло положително число. Трябва да върнете всички негови делители. -:table_2 +:table +:2 |= Вход |= Изход @@ -448,19 +473,21 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 1 2 3 4 6 8 9 12 16 18 24 27 32 36 48 54 72 96 108 144 216 288 432 864 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise14.cpp} От входа получавате две цели неотрицателни числа. -Трябва да намерите [url https://en.wikipedia.org/wiki/Tetration тетрацията] на първото числото на степен второто число. +Трябва да намерите {url тетрацията;https://en.wikipedia.org/wiki/Tetration} на първото числото на степен второто число. Както нормалното степенуване е повторено умножение, така тетрацията е повторено степенуване. Число на тетрация "степен" озачава, че числото се повдига на нормална степен себе си, тетрация степен на брой пъти. Тетрацията расте бързо, използвайте най-големия възможен тип. -:table_2 +:table +:2 |= Вход |= Изход @@ -480,16 +507,18 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 16777216 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise15.cpp} От входа получавате 8 цели неотрицателни числа. Трябва да върнете най-малкото общо кратно на всеки две съседни числа. Най-малко общо кратно е най-малкото число, което се дели без остатък на двете числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -500,18 +529,20 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: 12 18 3501 5057 13 26 8 + ### Задача 16 От входа получавате две реални числа: координати на точка в равнината. Спрямо следното изображение: -[image ./img/rectangles_and_circle.png] +{img ./img/rectangles_and_circle.png} изкарайте дали точката е в защрихованата област или не. Зачитайте, че всяка сива права отбелязва брой единици разстояние от нулата. -:table_2 +:table +:2 |= Вход |= Изход @@ -540,16 +571,18 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Outside + ### Задача 17 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise17.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise17.cpp} -От входа получавате две естествени числа, [`a`] и [`b`]. -Трябва да върнете дали [`a`] е [url https://en.wikipedia.org/wiki/Unitary_divisor унитарен делител] на [`b`]. +От входа получавате две естествени числа, {` a} и {` b}. +Трябва да върнете дали {` a} е {url унитарен делител;https://en.wikipedia.org/wiki/Unitary_divisor} на {` b}. -Това е изпълнено, когато [`a`] е делител на [`b`] и най-големия общ делител на [`a`] и [`b / a`] е 1. +Това е изпълнено, когато {` a} е делител на {` b} и най-големия общ делител на {` a} и {` b / a} е 1. -:table_2 +:table +:2 |= Вход |= Изход @@ -569,14 +602,16 @@ What is the smallest positive integer whose square ends in the digits 269,696? |: Not a unitary divisor + ### Задача 18 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise18.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week06/Exercise18.cpp} От входа получавате 10 реални числа. -Трябва да върнете най-голямата възможна сума, получена чрез събиране на колкото и дълга [=последователна=] редица от елементи. +Трябва да върнете най-голямата възможна сума, получена чрез събиране на колкото и дълга {b последователна} редица от елементи. -:table_2 +:table +:2 |= Вход |= Изход diff --git a/src/teaching/upp-2025/week07/index.du b/src/teaching/upp-2025/week07/index.du index 3f671b0..8c1cbfc 100644 --- a/src/teaching/upp-2025/week07/index.du +++ b/src/teaching/upp-2025/week07/index.du @@ -1,17 +1,17 @@ -# Задачи - УПП, Седмица 7, 13.11.2025 +'def title Задачи - УПП, Седмица 7, 13.11.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 13 min -'define created 10 November 2025 -'define edited 14 November 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/clYBilXQ] +{pagenav 13 min;10 November 2025;14 November 2025} + +GitHub Classroom: {url https://classroom.github.com/a/clYBilXQ} :important -.p Както при [`if`]-ове, следното е лоша практика и ще се вземат точки: +.p Както при {` if}-ове, следното е лоша практика и ще се вземат точки: -```c++ +```cpp bool f() { if (condition) return true; @@ -22,9 +22,9 @@ bool f() { :important -.p Следното е [=грешно=] и ще се вземат точки: +.p Следното е {b грешно} и ще се вземат точки: -```c++ +```cpp int* f() { int numbers[5] = { 0 }; return numbers; @@ -35,18 +35,19 @@ int* f() { ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise01.cpp} Напишете функция, която приема цяло число и връща дали е четно и положително. Нека вашата функция да следва декларацията: -```c++ +```cpp bool evenAndPositive(int x); От входа получавате цяло число. -Използвайки [`evenAndPositive`], върнете дали е четно и положително. +Използвайки {` evenAndPositive}, върнете дали е четно и положително. -:table_2 +:table +:2 |= Вход |= Изход @@ -60,22 +61,24 @@ bool evenAndPositive(int x); |: Not even and positive + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise02.cpp} -Напишете функция, която приема цяло неотрицателно число [`n`] и връща n-тото число на фибоначи. +Напишете функция, която приема цяло неотрицателно число {` n} и връща n-тото число на фибоначи. Припомняме, че нулевото число на фибоначи е 0, първото число е 1 и всяко следващо е сумата на предходните две. Нека вашата функция да следва декларацията: -```c++ +```cpp unsigned int fib(unsigned int n); От входа получавате цяло неотрицателно число. -Използвайки [`fib`], трябва да изкарате n-тото число на фибоначи. +Използвайки {` fib}, трябва да изкарате n-тото число на фибоначи. -:table_2 +:table +:2 |= Вход |= Изход @@ -98,23 +101,25 @@ unsigned int fib(unsigned int n); |: 3524578 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise03.cpp} Напишете функция, която приема масив от 15 цели числа и намира средното аритметично на всички тях. Нека вашата функция да следва декларацията: -```c++ +```cpp double average(int numbers[15]); От входа получавате 15 цели числа. -Използвайки [`average`], трябва да изкарате средното аритметично на всички тях. +Използвайки {` average}, трябва да изкарате средното аритметично на всички тях. .note -[*(14.11.2025)*] Оправен изхода на втори пример. +{i (14.11.2025)} Оправен изхода на втори пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -128,24 +133,26 @@ double average(int numbers[15]); |: -4.93333 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise04.cpp} -Напишете функция, която приема число с плаваща запетая и [*връща*] две числа: +Напишете функция, която приема число с плаваща запетая и {i връща} две числа: .numbered 1. числото, разделено на половина и 2. числото, закръглено надолу към най-близкото цяло число. Нека вашата функция да следва декларацията: -```c++ +```cpp void calc(float number, double &half, int* integer); От входа получавате число с плаваща запетая. -Използвайки [`calc`], трябва да изкарате двете [*върнати*] стойности. +Използвайки {` calc}, трябва да изкарате двете {i върнати} стойности. -:table_2 +:table +:2 |= Вход |= Изход @@ -156,19 +163,21 @@ void calc(float number, double &half, int* integer); |: -4.995 -9 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise05.cpp} -Напишете функция [`maxElem`], която приема масив от числа с плаваща запетая и негов размер [=поотделно=]! +Напишете функция {` maxElem}, която приема масив от числа с плаваща запетая и негов размер {b поотделно}! Това означава, че на функцията може да ѝ бъде подаден масив с 10, 15, 2 или ... елемента. Нека вашата функция да върне най-големия елемент в масива. От входа получавате една редица от 5 реални числа и втора редица от 7 реални числа. -Използвайки [`maxElem`], върнете най-големия елемент в първата и във втората редица. +Използвайки {` maxElem}, върнете най-големия елемент в първата и във втората редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -187,20 +196,22 @@ void calc(float number, double &half, int* integer); |: 50.5 37.9 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise06.cpp} -Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и [*върнете*] най-големия и най-малкия му елемент. +Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и {i върнете} най-големия и най-малкия му елемент. Нека вашата функция да следва декларацията: -```c++ +```cpp void minmaxElems(int* arr, unsigned size, int* min, int* max); От входа получавате две редици от по 10 и 8 цели числа съответно. -Използвайки [`minmaxElems`], върнете най-големия и най-малкия елемент на всяка редица. +Използвайки {` minmaxElems}, върнете най-големия и най-малкия елемент на всяка редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -225,9 +236,10 @@ void minmaxElems(int* arr, unsigned size, int* min, int* max); 86 -97 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise07.cpp} Напишете функция, която приема масив с произволна дължина, съставен от цели числа, и връща сумата на всички елементи. Нека вашата функция да следва декларацията: @@ -236,14 +248,15 @@ void minmaxElems(int* arr, unsigned size, int* min, int* max); unsigned sumElems(int* arr, unsigned size); От входа получавате 11 цели числа. -Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки [`sumElems`]. +Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки {` sumElems}. Ако няма такава, не изкарвайте нищо. .note -[*(14.11.2025)*] Оправен изхода на трети пример. +{i (14.11.2025)} Оправен изхода на трети пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -257,24 +270,26 @@ unsigned sumElems(int* arr, unsigned size); |: -1 0 1 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise08.cpp} Напишете функция, която приема масив с произволен размер, съставен от цели неотрицателни числа, и неотрицателно число: ротация. Трябва да завъртите елементите в масива с ротация на брой позиции на дясно. -Тоест, ако масива е [`1 2 3 4`], тогава след ротация с една позиция, масива ще е [`4 1 2 3`]. -Ако имахме две ротации, тогава щяхме да получим [`3 4 1 2`]. +Тоест, ако масива е {` 1 2 3 4}, тогава след ротация с една позиция, масива ще е {` 4 1 2 3}. +Ако имахме две ротации, тогава щяхме да получим {` 3 4 1 2}. Не модифицирайте оригиналния масив! -Трябва да [*върнете*] друг масив със завъртяните елементи. +Трябва да {i върнете} друг масив със завъртяните елементи. От входа получавате две редици от по 6 и 7 цели числа. След всяка редица получавате ротация. Трябва да изкарате двете редици, обаче завъртяни, използвайки вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -299,37 +314,39 @@ unsigned sumElems(int* arr, unsigned size); 5 6 7 1 2 3 4 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise09.cpp} .note -[*(14.11.2025)*] Оправена декларацията на функцията, примери и добавено упътване. +{i (14.11.2025)} Оправена декларацията на функцията, примери и добавено упътване. .warn -НЕ може да използвате "вградената" функция [`pow`]! +НЕ може да използвате "вградената" функция {` pow}! Напишете функция, която приема число с плаваща запетая и цяло неотрицателно число, и връща първото число на степен второто. Нека вашата функция да следва декларацията: -```c++ +```cpp double topower(double x, unsigned int a); От входа получавате 11 реални числа. Първите 10 са коефициентите в полином от 10та степен. 11тото е потенциален корен. -Трябва да върнете дали 11тото действително е корен на уравнението, използвайки [`topower`]. +Трябва да върнете дали 11тото действително е корен на уравнението, използвайки {` topower}. -Припомняме, че едно число [`x`] е корен на полином от 10та степен, когато: +Припомняме, че едно число {` x} е корен на полином от 10та степен, когато: -[image ./img/polynomial.png] +{img ./img/polynomial.png} -[=Упътване:=] +{b Упътване:} За някои примери, прецизността на въведения корен не е достатъчна. Може да приемете, че ако (абсолютната стойност на) сумата е по-малка от 0.0001, то сумата на практика е 0. -:table_2 +:table +:2 |= Вход |= Изход @@ -358,25 +375,27 @@ double topower(double x, unsigned int a); |: Not a root + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise10.cpp} Напишете функция, която приема два масива с произволни размери, съставени от цели числа, и връща колко от елементите на двата масива съвпадат по стойност на еднакви индекси. Тоест, на колко еднакви позиции срещаме еднакви елементи. Нека вашата функция да следва декларацията: -```c++ +```cpp unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* arr2, unsigned int size2); От входа получавате две редици от по 10 и 15 цели числа. -Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки [`countSameElementsOnSameIndecies`]. +Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки {` countSameElementsOnSameIndecies}. .note -[*14.11.2025*] Оправен вход на последния пример. +{i 14.11.2025} Оправен вход на последния пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -402,18 +421,20 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 4 + ## За самоподготовка ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise11.cpp} Напишете функция, която приема неотрицателно цяло число и връща дали е просто. От входа получавате две естествени числа. Трябва да върнете бройката на всички прости числа между тези две числа (включително), използвайки вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -427,16 +448,18 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 139 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise12.cpp} Напишете функция, която получава масив с произволен размер, съствен от цели числа, и инкрементира всеки елемент. Получавате две редици от по 10 и 9 елемента. Трябва да върнете двете редици, обаче всеки елемент е инкрементиран, използвайки вашата фунцкия. -:table_2 +:table +:2 |= Вход |= Изход @@ -461,18 +484,20 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* 26 101 29 -31 33 -69 -94 -97 -85 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise13.cpp} Напишете функция, която получава масив от 4 букви и връща дали трите буква образуват последователност "буква, цифра, буква, цифра". От входа получавате 12 букви и трябва да върнете дали целия масив образува последователността "буква, цифра, буква, цифра, буква, цифрва, ...", използвайки вашата функция. .note -[*(14.11.2025)*] Оправен трети пример. +{i (14.11.2025)} Оправен трети пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -486,21 +511,23 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: Follows pattern + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise14.cpp} -Напишете функция, която получава масив от 10 реални числа и [*връща*] масив от 5 реални числа. +Напишете функция, която получава масив от 10 реални числа и {i връща} масив от 5 реални числа. Резултатния масив се формира по следния начин: .numbered -1. Първия елемент на [*върнатия*] масив е разликата на втория от първия елемент на входния (получения) масив. -2. Втория елемент на [*върнатия*] масив е разликата на четвъртия от третия елемент на входния масив. +1. Първия елемент на {i върнатия} масив е разликата на втория от първия елемент на входния (получения) масив. +2. Втория елемент на {i върнатия} масив е разликата на четвъртия от третия елемент на входния масив. 3. И така нататък. От входа получавате масив с 10 елемента. -Трябва да [*върнете*] резултатния 5-елементен масив от вашата функция. +Трябва да {i върнете} резултатния 5-елементен масив от вашата функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -517,9 +544,10 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* |: 32 118 69 82 -49 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week07/Exercise15.cpp} Напишете две функции, всяка от които приема масив с 5 естествени числа. Нека първата да повдига всяко число на втора степен и втората да умножава всяко число по 3. @@ -532,9 +560,10 @@ unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* Допуснете, че винаги ще срещнете целевото число. Използвайте вашите функции. .note -[*(14.11.2025)*] Оправени входове на първите два примера. +{i (14.11.2025)} Оправени входове на първите два примера. -:table_2 +:table +:2 |= Вход |= Изход diff --git a/src/teaching/upp-2025/week08/index.du b/src/teaching/upp-2025/week08/index.du index 4b75284..f7b2eaa 100644 --- a/src/teaching/upp-2025/week08/index.du +++ b/src/teaching/upp-2025/week08/index.du @@ -1,22 +1,23 @@ -# Задачи - УПП, Седмица 8, 20.11.2025 +'def title Задачи - УПП, Седмица 8, 20.11.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 34 min -'define created 15 November 2025 -'define edited 23 November 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/rhpKbNmH] +{pagenav 34 min;15 November 2025;23 November 2025} + +GitHub Classroom: {url https://classroom.github.com/a/rhpKbNmH} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise01.cpp} От входа получавате матрица 5 на 5 от цели числа. -Трябва да върнете дали е разредена матрица: дали има [*повече*] нули отколкото други числа. +Трябва да върнете дали е разредена матрица: дали има {i повече} нули отколкото други числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -45,9 +46,10 @@ Not sparse Sparse + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise02.cpp} Напишете функция, която получава матрица с произволен размер и масив, чиято дължина е същата като на един ред в матрицата. @@ -56,7 +58,8 @@ Sparse От входа получавате матрица 7 на 3 от цели неотрицателни числа. Използвайки вашата функция, намерете сумата на всички редове и я изкарайте. -:table_2 +:table +:2 |= Вход |= Изход @@ -89,9 +92,10 @@ Sparse 204 208 379 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise03.cpp} Напишете функция, която получава две матрици с произволни размери, съствени от реални числа. Може да допуснете, че размера на втората матрица е по-малък от тази на първата. @@ -100,14 +104,15 @@ Sparse Тоест, всички елементи от горния ляв ъгъл, надолу и надясно колкото е размера на втората матрица. От входа получавате матрица 6 на 6 от реални числа. -След това получавате 4 неотрицателни числа: първите две са координат в матрицата (където горния ляв ъгъл е [`(0, 0)`]), вторите две са нейни размери. +След това получавате 4 неотрицателни числа: първите две са координат в матрицата (където горния ляв ъгъл е {` (0, 0)}), вторите две са нейни размери. -Използвайки вашата функция, трябва да изкарате подматрицата с начало подадения координат и размери подадените размери [=използвайки=] вашата функция. +Използвайки вашата функция, трябва да изкарате подматрицата с начало подадения координат и размери подадените размери {b използвайки} вашата функция. .note -[=(23.11.2025)=] Опростени някои примери. +{b (23.11.2025)} Опростени някои примери. -:table_2 +:table +:2 |= Вход |= Изход @@ -180,26 +185,28 @@ Sparse 100 64 46.204 30812 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise04.cpp} City Bloxx е известна мобилна игра за строене на сгради. В нейния "Build city" режим, целта е построените сгради да се подредят в матрица 5 на 5. Нека да разгледаме следните правила за сгради (в самата игра има някои разлики): .numbered -1. [*Жилищните сгради*] може да се поставят навсякъде. -2. [*Търговските сгради*] трябва да бъдат поставени до поне една жилищна сграда. -3. [*Офис сградите*] трябва да бъдат поставени до поне една жилищна и една търговска. -4. [*Луксозните сгради*] трябва да бъдат поставени до поне една жилищна, една търговска и една офис сграда. +1. {i Жилищните сгради} може да се поставят навсякъде. +2. {i Търговските сгради} трябва да бъдат поставени до поне една жилищна сграда. +3. {i Офис сградите} трябва да бъдат поставени до поне една жилищна и една търговска. +4. {i Луксозните сгради} трябва да бъдат поставени до поне една жилищна, една търговска и една офис сграда. -Сгради са съседни само по вертикал и хоризонтал, [=не=] по диагонал. +Сгради са съседни само по вертикал и хоризонтал, {b не} по диагонал. От входа получавате масив 5 на 5 с цели числа, където с 1 до 4 се обозначават сградите, от жилищни до луксозни. Изкарайте дали подредбата на сградите е позволена (следва горните правила). -:table_2 +:table +:2 |= Вход |= Изход @@ -254,14 +261,16 @@ City Bloxx е известна мобилна игра за строене на |: Valid + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise05.cpp} От входа получавате матрица 3 на 3, съствена от цели числа. Трябва да я транспонирате: да смените елементите над и под главния диагонал, и да изкарате резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -290,9 +299,10 @@ City Bloxx е известна мобилна игра за строене на 0 2 5 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise06.cpp} Напишете функция, която приема матрица с произволни размери, съствена от реални числа, заедно с два индекса. Разменете колоните на подадените индекси, ако това е възможно. @@ -302,9 +312,10 @@ City Bloxx е известна мобилна игра за строене на Трябва да размените двете колони, използвайки вашата функция, и да изкарате резултата. -[*Вашия изход не е нужно да бъде подравнен.*] +{i Вашия изход не е нужно да бъде подравнен.} -:table_2 +:table +:2 |= Вход |= Изход @@ -348,17 +359,19 @@ City Bloxx е известна мобилна игра за строене на 16.84 53.84 0 -21.11 23.22 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise07.cpp} От входа получавате матрица от букви 3 на 3. -Тя определя шаблон, където буквата [`*`] означава, че всяка стойност е позволена. +Тя определя шаблон, където буквата {` *} означава, че всяка стойност е позволена. След това от входа получавате матрица 6 на 6, съствена от букви. -Трябва да намерите всички срещания на шаблона в тази матрица, като [=срещанията може да се застъпват!=] +Трябва да намерите всички срещания на шаблона в тази матрица, като {b срещанията може да се застъпват!} -:table_2 +:table +:2 |= Вход |= Изход @@ -419,17 +432,19 @@ City Bloxx е известна мобилна игра за строене на |: 16 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise08.cpp} От входа получавате две матрици 3 на 3, съствени от цели неотрицателни числа. Пресметнете умножението на матриците (ред по стълб) и изкарайте резултата. .note -[=(23.11.2025)=] Оправен входа на втория пример. +{b (23.11.2025)} Оправен входа на втория пример. -:table_2 +:table +:2 |= Вход |= Изход @@ -464,30 +479,32 @@ City Bloxx е известна мобилна игра за строене на 17 13 14 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise09.cpp} При изграждането на устройства като клавиатури, често се използва "бутонна матрица". -Няма да навлизаме в електрониката, но идеята е че когато натиснеш бутон, съответната колона [=и=] ред са "свързани"/активни. +Няма да навлизаме в електрониката, но идеята е че когато натиснеш бутон, съответната колона {b и} ред са "свързани"/активни. -[=Тоест, когато активни ред и колона се пресичат, тогава съответния бутон е натиснат.=] +{b Тоест, когато активни ред и колона се пресичат, тогава съответния бутон е натиснат.} Това означава, че се нуждаем да погледнем само състоянията на всеки ред и колона, и ще знаем всички натиснати бутони (вместо да поглеждаме всеки бутон поотделно). 'footnote keypad_image_attrib Изображение от Sakurambo - създадено чрез Adobe Illustrator CS2, Публичен домейн, [url https://commons.wikimedia.org/w/index.php?curid=2048341] -Нека да разглеждаме стандартна 4 на 3 телефонна клавиатура[$keypad_image_attrib]: +Нека да разглеждаме стандартна 4 на 3 телефонна клавиатура{keypad_image_attrib}: -[image https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Telephone-keypad2.svg/330px-Telephone-keypad2.svg.png] +{img https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Telephone-keypad2.svg/330px-Telephone-keypad2.svg.png} От входа първо получавате 4 булеви стойности: дали реда е активен (отгоре надолу). След това получавате още 3 булеви стойности: дали колоната е активна (отляво надясно). -Изкарайте кои бутони са натиснати, използвайки цифровите знаци, звезда ([`*`]) и диез ([`#`]). +Изкарайте кои бутони са натиснати, използвайки цифровите знаци, звезда ({` *}) и диез ({` #}). Ако няма натиснати, изкарайте съответно съобщение. -:table_2 +:table +:2 |= Вход |= Изход @@ -510,43 +527,44 @@ City Bloxx е известна мобилна игра за строене на |: Nothing pressed + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise10.cpp} -[url https://en.wikipedia.org/wiki/Pascal%27s_triangle Триъгълника на Паскал] е изчисление, при което се конструира триъгълник от числа. +{url Триъгълника на Паскал;https://en.wikipedia.org/wiki/Pascal%27s_triangle} е изчисление, при което се конструира триъгълник от числа. По двете "рамене" има единици, и всяко вътрешно число е сумата на горните две. 'footnote pascal_animation_attrib Анимация от Hersfold - собствен труд, Публичен домейн, [url https://commons.wikimedia.org/w/index.php?curid=3902538] -Пояснителна анимация[$pascal_animation_attrib]: +Пояснителна анимация{pascal_animation_attrib}: -[image https://upload.wikimedia.org/wikipedia/commons/0/0d/PascalTriangleAnimated2.gif] +{img https://upload.wikimedia.org/wikipedia/commons/0/0d/PascalTriangleAnimated2.gif} -[=Генерирайте=] и изкарайте триъгълника на паскал в матрица 11 на 11, където двете страни на триъгълника са първата колона и главния диагонал. +{b Генерирайте} и изкарайте триъгълника на паскал в матрица 11 на 11, където двете страни на триъгълника са първата колона и главния диагонал. Нека стойностите извън триъгълника да са нули. -[=Изход:=] [*(не е нужно да бъде подравнен)*] +{b Изход:} {i (не е нужно да бъде подравнен)} .comment https://www.fcfung2000.com/ufcfiles/ufcmatrk.htm ``` -[=1=] 0 0 0 0 0 0 0 0 0 0 -[=1=] [=1=] 0 0 0 0 0 0 0 0 0 -[=1=] 2 [=1=] 0 0 0 0 0 0 0 0 -[=1=] 3 3 [=1=] 0 0 0 0 0 0 0 -[=1=] 4 6 4 [=1=] 0 0 0 0 0 0 -[=1=] 5 10 10 5 [=1=] 0 0 0 0 0 -[=1=] 6 15 20 15 6 [=1=] 0 0 0 0 -[=1=] 7 21 35 35 21 7 [=1=] 0 0 0 -[=1=] 8 28 56 70 56 28 8 [=1=] 0 0 -[=1=] 9 36 84 126 126 84 36 9 [=1=] 0 -[=1=] 10 45 120 210 252 210 120 45 10 [=1=] +{b 1} 0 0 0 0 0 0 0 0 0 0 +{b 1} {b 1} 0 0 0 0 0 0 0 0 0 +{b 1} 2 {b 1} 0 0 0 0 0 0 0 0 +{b 1} 3 3 {b 1} 0 0 0 0 0 0 0 +{b 1} 4 6 4 {b 1} 0 0 0 0 0 0 +{b 1} 5 10 10 5 {b 1} 0 0 0 0 0 +{b 1} 6 15 20 15 6 {b 1} 0 0 0 0 +{b 1} 7 21 35 35 21 7 {b 1} 0 0 0 +{b 1} 8 28 56 70 56 28 8 {b 1} 0 0 +{b 1} 9 36 84 126 126 84 36 9 {b 1} 0 +{b 1} 10 45 120 210 252 210 120 45 10 {b 1} ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise11.cpp} От входа получавате матрица 10 на 10 от цели неотрицателни числа. След това получавате размер между 0 и 10. @@ -559,11 +577,12 @@ City Bloxx е известна мобилна игра за строене на Не добавяйте към средното аритметично несъществуващи клетки (напр. клетката в горния ляв ъгъл няма клетки над или в ляво от себе си). .note -[=(23.11.2025)=] Добавени още примери. +{b (23.11.2025)} Добавени още примери. -[*(Вашия изход не е нужно да бъде подравнен.)*] +{i (Вашия изход не е нужно да бъде подравнен.)} -:table_2 +:table +:2 |= Вход |= Изход @@ -649,61 +668,65 @@ City Bloxx е известна мобилна игра за строене на 0 0 0 0 0 0 2 0 0 0 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise12.cpp} От входа получавате два реални координата, между (0,0) и (10,10). -Трябва да върнете матрица 10 на 10 от знаци, която се съставя единствено от шпации (spaces) и хиксове ([`x`]). +Трябва да върнете матрица 10 на 10 от знаци, която се съставя единствено от шпации (spaces) и хиксове ({` x}). Зачитаме, че координатите директно съответстват на матрицата, като (0,0) се намира в горния ляв ъгъл и (10,10) в долния десен. В тази матрица, по подразбиране стоят само шпации. Хиксовете се намират там, където начертаната отсечка между входните точки би застъпила матрицата. Примерна диаграма: -[image ./img/line_interpolation.png] +{img ./img/line_interpolation.png} Тази операция се нарича интерполация. .note -[=(23.11.2025)=] Добавени още примери. +{b (23.11.2025)} Добавени още примери. -:table_2 +:table +:2 |= Вход |= Изход |: 1 8.5 8.5 2.5 |: ``` -'include ./text/output_interpolation_1.txt +'snippet 1 $ ./text/output_interpolation_1.txt |: 0 0 10 10 |: ``` -'include ./text/output_interpolation_2.txt +'snippet 1 $ ./text/output_interpolation_2.txt |: 2.3 1.8 9.9 7 |: ``` -'include ./text/output_interpolation_3.txt +'snippet 1 $ ./text/output_interpolation_3.txt |: 0 5 10 5 |: ``` -'include ./text/output_interpolation_4.txt +'snippet 1 $ ./text/output_interpolation_4.txt + ## За самоподготовка ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise13.cpp} От входа получавате матрица 8 на 8, съставена от символите точка и плюс. Трябва да върнете височината и ширината на най-големия правоъгълник, който застъпва всички плюсове. -:table_2 +:table +:2 |= Вход |= Изход @@ -747,14 +770,16 @@ City Bloxx е известна мобилна игра за строене на |: 8 8 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise14.cpp} От входа приемате масив от 6 елемента и матрица с 6 реда и 3 колони, всички съставени от реални числа. Трябва да реализирате умножение на вектор по матрица (където масива е вектора). -:table_2 +:table +:2 |= Вход |= Изход @@ -783,16 +808,18 @@ City Bloxx е известна мобилна игра за строене на |: 8 7 41.8 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08/Exercise15.cpp} От входа получавате матрица 9 на 7 с реални числа. След това получавате още едно реално число: максимална разлика. Проверете дали данните са гладки: стойността във всяка една клетка да се различава с най-много максималната разлика от всички свои съседни клетки (по хоризонтала, вертикала и диагонала). -:table_2 +:table +:2 |= Вход |= Изход @@ -857,6 +884,7 @@ City Bloxx е известна мобилна игра за строене на |: Not smooth + ### Задача 16 Напишете функция която приема матрица с произволни размери и "връща" матрица, която е като входната матрица, но всички елементи са "завъртяни" на дясно с 90 градуса. @@ -867,9 +895,10 @@ City Bloxx е известна мобилна игра за строене на Ако не можете, не записвайте нищо във върнатата. От входа получавате матрица 4 на 8, съставена от цели числа. -[=Използвайки вашата функция=], завъртете матрицата и изкарайте резултата. +{b Използвайки вашата функция}, завъртете матрицата и изкарайте резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -892,6 +921,7 @@ City Bloxx е известна мобилна игра за строене на 32 24 16 8 + ### Задача 17 Трябва да реализирате (опростен вариант на) "pixel binning": спрямо подаден коефициент, стойностите в клетки се смесват. @@ -901,7 +931,8 @@ City Bloxx е известна мобилна игра за строене на От входа получавате матрица 12 на 12 с цели неотрицателни числа и неотрицателен binning коефициент. Трябва да върнете матрицата след приложен binning. -:table_2 +:table +:2 |= Вход |= Изход @@ -937,6 +968,7 @@ City Bloxx е известна мобилна игра за строене на 2 2 0 0 0 0 0 0 0 0 12 12 + ### Задача 18 От входа получавате матрица 10 на 10 с цели неотрицателни числа. @@ -945,7 +977,8 @@ City Bloxx е известна мобилна игра за строене на Сравнявайте матриците по техния размер, тоест броя елементи. Ако има няколко еднакво големи подматрици, може да изкарате която и да е от тях. -:table_2 +:table +:2 |= Вход |= Изход @@ -970,6 +1003,7 @@ City Bloxx е известна мобилна игра за строене на 1 1 1 + ### Задача 19 От входа получавате матрица 8 на 8 от реални числа. @@ -984,7 +1018,8 @@ City Bloxx е известна мобилна игра за строене на Накрая изкарате резултатното число. -:table_2 +:table +:2 |= Вход |= Изход @@ -1020,9 +1055,10 @@ City Bloxx е известна мобилна игра за строене на 160 155 + ### Задача 20 -[=Генерирайте=] и изкарайте [url https://en.wikipedia.org/wiki/Bell_triangle триъгълника на Бел] в долния ляв ъгъл на матрица 11 на 11. +{b Генерирайте} и изкарайте {url триъгълника на Бел;https://en.wikipedia.org/wiki/Bell_triangle} в долния ляв ъгъл на матрица 11 на 11. Това означава, че страните на триъгълника включват първата колона и главния диагонал. .bulleted @@ -1033,13 +1069,13 @@ City Bloxx е известна мобилна игра за строене на 'footnote bell_animation_attrib Анимация от Xanthoxyl - собствен труд, CC BY-SA 3.0, [url https://commons.wikimedia.org/w/index.php?curid=5832904] -Пояснителна анимация[$bell_animation_attrib]: +Пояснителна анимация{bell_animation_attrib}: -[image https://upload.wikimedia.org/wikipedia/commons/a/ab/BellNumberAnimated.gif] +{img https://upload.wikimedia.org/wikipedia/commons/a/ab/BellNumberAnimated.gif} -Тази задача е подобна на [url #-10 Задача 10]. +Тази задача е подобна на {url Задача 10;#-10}. -[=Изход:=] [*(не е нужно да бъде подравнен)*] +{b Изход:} {i (не е нужно да бъде подравнен)} .comment https://oeis.org/A011971 @@ -1068,7 +1104,8 @@ https://www.apcomputersciencetutoring.com/2d-array-practice-exercises/#grow-meth Ако изходната матрица е по-голяма, попълнете празните позиции с нули. -:table_2 +:table +:2 |= Вход |= Изход @@ -1101,6 +1138,7 @@ https://www.apcomputersciencetutoring.com/2d-array-practice-exercises/#grow-meth 7 8 + ### Задача 22 От входа получавате матрица 3 на 3 със знаци. @@ -1108,11 +1146,12 @@ https://www.apcomputersciencetutoring.com/2d-array-practice-exercises/#grow-meth Трябва да изкарате матрица със знаци 9 на 9, в която е попълнено изображението спрямо режима. .numbered -1. [=Режим 1=] обозначава повтаряне, където изображението се повтаря последователно -2. [=Режим 2=] обозначава "border", където изображението се слага в центъра и останалта част се попълва със знак диес [`#`]. -3. [=Режим 3=] обозначава "clamp", изображението се слага в центъра и останалата част се попълва като се повтаря последната буква. Тоест, дясното 3 на 3 се попълва с повторение на десния знак. +1. {b Режим 1} обозначава повтаряне, където изображението се повтаря последователно +2. {b Режим 2} обозначава "border", където изображението се слага в центъра и останалта част се попълва със знак диес {` #}. +3. {b Режим 3} обозначава "clamp", изображението се слага в центъра и останалата част се попълва като се повтаря последната буква. Тоест, дясното 3 на 3 се попълва с повторение на десния знак. -:table_2 +:table +:2 |= Вход |= Изход @@ -1144,6 +1183,7 @@ f g h |: ``` +'emplace # # # # # # # # # # # # # # # # # # # # # # # # # # # @@ -1153,6 +1193,7 @@ f g h # # # # # # # # # # # # # # # # # # # # # # # # # # # +'endemplace |: ``` @@ -1174,6 +1215,7 @@ f f f g g g h h h f f f g g g h h h + ### Задача 23 От входа получавате цяло неотрицателно число, по-малко от 50. @@ -1181,9 +1223,10 @@ f f f g g g h h h Зачитайте, че 0 винаги е в центъра на спиралата и се въртите първо с една позиция разстояние, после с две и так. нат. -[*(Вашия изход не е нужно да бъде подравнен.)*] +{i (Вашия изход не е нужно да бъде подравнен.)} -:table_2 +:table +:2 |= Вход |= Изход @@ -1215,6 +1258,7 @@ f f f g g g h h h 15 14 13 12 + ## За любознателни ### Задача 24 @@ -1222,24 +1266,24 @@ f f f g g g h h h Реализирайте матричен калкулатор. От входа получавате матрица 4 на 4 с реални числа и след това получавате редица операции. -Всяка операция започва с буква, като буквата [`$`] сигнализира край на програмата. +Всяка операция започва с буква, като буквата {` $} сигнализира край на програмата. След всеки знак има няколко аргумента, т.е. допълнителни стойности които трябва да се въведат, преди операцията да се изпълни. .bulleted -- Операцията [`*`] обозначава умножение на ред, и след знака има цяло неотрицателно число за индекс на ред и след него е реално число (коефициент с който да умножим реда). -- Операцията [`+`] обозначава сума на редове, след знака се очакват два неотрицателни индекса на редове, първия ред се сумира в втория -- Операцията [`^`] обозначава размяна на редове, след знака се очакват два неотрицателни индекса на редове и стойностите им се разменят. +- Операцията {` *} обозначава умножение на ред, и след знака има цяло неотрицателно число за индекс на ред и след него е реално число (коефициент с който да умножим реда). +- Операцията {` +} обозначава сума на редове, след знака се очакват два неотрицателни индекса на редове, първия ред се сумира в втория +- Операцията {` ^} обозначава размяна на редове, след знака се очакват два неотрицателни индекса на редове и стойностите им се разменят. -След всяка операция (освен [`$`]) трябва да изкарате състоянието на матрицата. +След всяка операция (освен {` $}) трябва да изкарате състоянието на матрицата. ### Задача 25 -Трябва да реализирате [url https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life Играта "Живот"]. +Трябва да реализирате {url Играта "Живот";https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life}. От входа получавате матрица 10 на 10 с булеви стойности. След това получавате неотрицателно число: брой генерации (ходове). -Всяка клетка наричаме жива или мъртва (съответно на [`true`] или [`false`]). +Всяка клетка наричаме жива или мъртва (съответно на {` true} или {` false}). В една генерация (ход) на играта, всяка клетка променя своя статус (стойност) по следните правила: .bulleted - всяка жива клетка с по-малко от два живи съседа (вертикално, хоризонтално и диагонално) умира diff --git a/src/teaching/upp-2025/week09/index.du b/src/teaching/upp-2025/week09/index.du index 55febbf..a737cae 100644 --- a/src/teaching/upp-2025/week09/index.du +++ b/src/teaching/upp-2025/week09/index.du @@ -1,14 +1,14 @@ -# Задачи - УПП, Седмица 9, 27.11.2025 +'def title Задачи - УПП, Седмица 9, 27.11.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 12 min -'define created 24 November 2025 -'define edited 26 November 2025 -[$pagenav] +# {title} + +{pagenav 12 min;24 November 2025;26 November 2025} .important Реализирайте единствено архитектурни решения! -GitHub Classroom: [url https://classroom.github.com/a/ZYFDdLi4] +GitHub Classroom: {url https://classroom.github.com/a/ZYFDdLi4} ## За решаване @@ -30,41 +30,41 @@ GitHub Classroom: [url https://classroom.github.com/a/ZYFDdLi4] Всеки хигрометър измерва процента влажност. В условието не са дадени подробности относно формата на тази стойност, затова ще използваме тип с плаваща запетая, който ще покрие всички реални стойности. -Ще изведем в глобална константа [`SIZE`] размера на едно измерение на матрицата, и самата матрица ще съдържа влажността в стойности от тип [`double`]. +Ще изведем в глобална константа {` SIZE} размера на едно измерение на матрицата, и самата матрица ще съдържа влажността в стойности от тип {` double}. -За намиране на средната влажност в града, ще изградим функцията [`average`], която изглежда по следния начин: +За намиране на средната влажност в града, ще изградим функцията {` average}, която изглежда по следния начин: -```c++ +```cpp double average(const double hygrometers[SIZE][SIZE]); Функцията приема матрицата със стойности на влажност от всеки хигрометър и връща средната стойност. Реализацията изисква линейно итериране през цялата матрица, като се пази сума на всички елементи. Върнатата стойност е сумата, разделена на броя хигрометри. -За намиране на най-влажен и най-сух квадрант ще реализираме функцията [`quadrantHumidity`], чиято декларация е: +За намиране на най-влажен и най-сух квадрант ще реализираме функцията {` quadrantHumidity}, чиято декларация е: -```c++ +```cpp double quadrantHumidity(const double hygrometers[SIZE][SIZE], unsigned startRow, unsigned startCol); Функцията приема матрицата с влажности и начални индекси по ред и колона на съответния квадрант. Знаем, че един квадрант ще бъде една четвърт от размера на матрицата (половината височина и ширина), затова не е нужно той да бъде подаден. -В имплементацията, ще итерираме през матрицата, като започнем от началните редове и колона, и обиколим точно [`SIZE / 2`] реда и колони. +В имплементацията, ще итерираме през матрицата, като започнем от началните редове и колона, и обиколим точно {` SIZE / 2} реда и колони. Ще пазим сума на всички елементи и накрая ще разделим на броя елементи, т.е. ще върнем средната стойност на влажност в квадранта. В заглавната функция ще дефинираме матрицата и ще попълним входните влажности. -След това ще изкараме стойността, върната от извикване на [`average`]. +След това ще изкараме стойността, върната от извикване на {` average}. За сух и влажен квадрант, ще създадем две променливи за най-голяма и най-малка стойност. -След това ще извикваме [`quadrantHumidity`], като ще запазим върната стойност като най-голяма и най-малка спрямо текущите стойности. +След това ще извикваме {` quadrantHumidity}, като ще запазим върната стойност като най-голяма и най-малка спрямо текущите стойности. -Началните ред и колона ще подаваме с вложен цикъл, който ще итерира колоните и редовете от най-първите (на индекси 0,0) и ще увеличава всеки индекс с размера на страната на квадрант ([`SIZE / 2`]). +Началните ред и колона ще подаваме с вложен цикъл, който ще итерира колоните и редовете от най-първите (на индекси 0,0) и ще увеличава всеки индекс с размера на страната на квадрант ({` SIZE / 2}). След цикъла и всички извиквания ще имаме стойностите в нашите променливи и ще ги изкараме. ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise01.txt Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise01.txt} Сграда разполага с два асансьора и 5 етажа. Инженерите на асансьорите са забелязали, че асансьора се качва по-бързо отколкото слиза. @@ -74,7 +74,7 @@ double quadrantHumidity(const double hygrometers[SIZE][SIZE], unsigned startRow, ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise02.txt Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise02.txt} Автобусна фирма в един град трябва да замени всички свои автобуси. В града има 6 автобусни линии и всяка линия има между 5 и 17 спирки. @@ -86,7 +86,7 @@ double quadrantHumidity(const double hygrometers[SIZE][SIZE], unsigned startRow, ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise03.txt Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week09/Exercise03.txt} Фабрика купува 5 нови машини, всяка от които изработва по 10000 градивни елемента на час. Всеки час от 8 часов работен ден, работниците във фабриката отбелязват в счетоводни таблици дали всеки един елемент е дефектен или не. diff --git a/src/teaching/upp-2025/week10/index.du b/src/teaching/upp-2025/week10/index.du index 5ec2926..c8d7f63 100644 --- a/src/teaching/upp-2025/week10/index.du +++ b/src/teaching/upp-2025/week10/index.du @@ -1,20 +1,20 @@ -# Задачи - УПП, Седмица 10, 04.12.2025 +'def title Задачи - УПП, Седмица 10, 04.12.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 12 min -'define created 01 December 2025 -'define edited 03 December 2025 -[$pagenav] +# {title} + +{pagenav 12 min;01 December 2025;03 December 2025} .important -Едно от най-важните неща: [=всяка динамично-заделена памет трябва да се освободи преди края на програмата!=] +Едно от най-важните неща: {b всяка динамично-заделена памет трябва да се освободи преди края на програмата!} -GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] +GitHub Classroom: {url https://classroom.github.com/a/kDfmWmy7} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise01.cpp} Потребителя ще въведе цяло неотрицателно число n. След това ще въведе n на брой реални числа. @@ -22,7 +22,8 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] Няма ограничения върху размера n. -:table_2 +:table +:2 |= Вход |= Изход @@ -33,16 +34,18 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] |: -24 -69 -45 93 -43 89 6 -91 -100 -15 -70 -82 -31.1 37 -53 -12 54 70 -56 86 -91 24 55 40 -19 94 -72 -90 5 91 70.01 57 -59 -59 87 -39 -46 10 -39 59 44 78 -28 63 -22 -98 45 -97 40.8 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise02.cpp} -Реализирайте функцията [`average`], която приема масив, съставен от цели числа, с произволен размер, и връща средното аритметично на всички тези числа. +Реализирайте функцията {` average}, която приема масив, съставен от цели числа, с произволен размер, и връща средното аритметично на всички тези числа. От входа ще получите размер n и след това 2n на брой цели числа. Използвайки вашата функция, трябва да върнете средното аритметично на тези числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -50,17 +53,19 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] |: -20.125 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise03.cpp} От входа получавате размерите на матрица, съставена от неотрицателни целочислени стойности, и след това всички стойности в самата матрица. -[=В паметта=] обърнете реда на редовете и изкарайте резултата. +{b В паметта} обърнете реда на редовете и изкарайте резултата. .question Може ли да се направи по по-прост начин, отколкото ако матрицата беше статично-заделена? -:table_2 +:table +:2 |= Вход |= Изход @@ -80,16 +85,18 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] 1 2 3 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise04.cpp} От входа получавате две матрици и трябва да върнете тяхното умножение (ред по стълб). За всяка матрица, първо получавате две цели неотрицателни стойности, размерите на матрицата, и след това получавате съответния брой реални числа. Ако умножението не е възможно, изкарайте съобщение за грешка. -:table_2 +:table +:2 |= Вход |= Изход @@ -127,19 +134,21 @@ GitHub Classroom: [url https://classroom.github.com/a/kDfmWmy7] Cannot multiply! + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise05.cpp} .note -[*(07.12.2025)*] Оправено условие и пример +{i (07.12.2025)} Оправено условие и пример -Реализирайте функция [`largest`], която приема матрица, съставена от цели числа, с произволни размери, и връща най-големия елемент в нея. +Реализирайте функция {` largest}, която приема матрица, съставена от цели числа, с произволни размери, и връща най-големия елемент в нея. От входа получавате две числа, размери на матрица, и след това всички елементи в матрицата. Използвайки вашата функция, върнете най-голямото число. -:table_2 +:table +:2 |= Вход |= Изход @@ -157,15 +166,17 @@ Cannot multiply! |: 97 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise06.cpp} От входа получавате цели числа, докато не получите числото 0. Трябва да върнете редицата, където всяко число е равно на сумата на себе си и следващото число. Последното число не го променяйте. -:table_2 +:table +:2 |= Вход |= Изход @@ -176,9 +187,10 @@ Cannot multiply! |: 1292 1284 1266 1300 1291 1280 780 777 0 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise07.cpp} Змия пълзи върху произволно голяма дъска, разделена на квадратна решетка. Тя започва в клетка (0,0), която ще зачитаме за горния ляв ъгъл на дъската. @@ -190,9 +202,10 @@ Cannot multiply! След това получавате координат в дъската, трябва да върнете дали змията някога е посетила тази клетка. .note -[*(07.12.2025)*] Разменени ред и колона в примерите +{i (07.12.2025)} Разменени ред и колона в примерите -:table_2 +:table +:2 |= Вход |= Изход @@ -215,9 +228,10 @@ Cannot multiply! |: Not visited + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise08.cpp} От входа получавате преплетени елементите в два масива, съдържащи цели числа. Тоест, първия елемент е първи на първия масив, втори елемент е първи на втория масив, третия елемент е втори на първия масив и так. нат. @@ -226,7 +240,8 @@ Cannot multiply! Числото 0 обозначава край на преплетената редица. -:table_2 +:table +:2 |= Вход |= Изход @@ -237,9 +252,10 @@ Cannot multiply! |: 10 1 2 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise09.cpp} От входа получавате стойностите на "jagged" матрица: такава, където редовете имат различни размери в паметта. Тоест, получавате размер на текущия ред и след това всичките му стойности. @@ -248,7 +264,8 @@ Cannot multiply! Трябва да изкарате, на отделни редове, стойностите във всяка "колона" отгоре надолу, започвайки от последната "колона" към първата. Игнорирайте "дупки" от елементи. -:table_2 +:table +:2 |= Вход |= Изход @@ -269,9 +286,10 @@ Cannot multiply! 1 5 7 3 + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise10.cpp} .important Заемайте възможно най-малко памет! @@ -286,9 +304,10 @@ Cannot multiply! Трябва да върнете елементите по контура (краищата) на часовника, следвайки горното правило. .note -[*(07.12.2025)*] Поправен примера с четния размер +{i (07.12.2025)} Поправен примера с четния размер -:table_2 +:table +:2 |= Вход |= Изход @@ -323,11 +342,12 @@ Cannot multiply! |: 1 2 3 4 5 8 9 0 3 4 5 6 7 2 9 6 + ## За упражнение ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise11.cpp} От входа получавате цяло неотрицатлно число n, което обозначава степеннта на полином. След това получавате реалните коефициенти пред всяка степен (започвайки от най-голямата, n). @@ -336,9 +356,10 @@ Cannot multiply! Трябва да върнете дали числото е корен на съответния полином. .note -[*(07.12.2025)*] Поправени примерите с първа степен полином +{i (07.12.2025)} Поправени примерите с първа степен полином -:table_2 +:table +:2 |= Вход |= Изход @@ -367,9 +388,10 @@ Cannot multiply! |: Is a root + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week10/Exercise12.cpp} .important Заемайте възможно най-малко памет! @@ -381,7 +403,8 @@ Cannot multiply! След това получавате индекс и трябва да върнете стойността на съответния елемент. -:table_2 +:table +:2 |= Вход |= Изход @@ -392,6 +415,7 @@ Cannot multiply! |: 0 + ### Задача 13 Магазин продава всеки ден стоки. @@ -400,24 +424,24 @@ Cannot multiply! След това влизате в "потребителски интерфейс", където от входа получавате буква, обозначаваща команда върху дневника. Командите са: .bulleted -- [`e`] обозначава край на програмата -- [`m`], получавате индекс на ден и трябва да върнете максималната продажба в този ден -- [`M`], трябва да върнете индекса на най-печелившия ден +- {` e} обозначава край на програмата +- {` m}, получавате индекс на ден и трябва да върнете максималната продажба в този ден +- {` M}, трябва да върнете индекса на най-печелившия ден -[=Пример:=] [*(вход и изход са смесени, изходът е удебелен)*] +{b Пример:} {i (вход и изход са смесени, изходът е удебелен)} ``` 3 4 0.5 100 19.99 7 0 2 500 8 m 0 -[=100=] +{b 100} m 1 -[=0=] +{b 0} m 2 -[=500=] +{b 500} M -[=2=] +{b 2} e ### Задача 14 @@ -435,7 +459,8 @@ e След това, от входа получавате ред и колона. Трябва да изкарате матрицата, без съответния ред и стълб. -:table_2 +:table +:2 |= Вход |= Изход diff --git a/src/teaching/upp-2025/week11/index.du b/src/teaching/upp-2025/week11/index.du index a381246..b88bd75 100644 --- a/src/teaching/upp-2025/week11/index.du +++ b/src/teaching/upp-2025/week11/index.du @@ -1,18 +1,18 @@ -# Задачи - УПП, Седмица 11, 11.12.2025 +'def title Задачи - УПП, Седмица 11, 11.12.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 7 min -'define created 10 December 2025 -'define edited 14 December 2025 -[$pagenav] +# {title} + +{pagenav 7 min;10 December 2025;14 December 2025} :question Има два начина да приемем низ от входа: -```c++ +```cpp cin.getline(char*, size_t, char); -```c++ +```cpp cin.get(char&); Кога бихме избрали всеки от тях? @@ -24,12 +24,13 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8] ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise01.cpp} От входа получавате 20 буквен низ: име. -Трябва да изкарате съобщението "Hello [*[име]*]!" +Трябва да изкарате съобщението "Hello {i [име]}!" -:table_2 +:table +:2 |= Вход |= Изход @@ -40,14 +41,16 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8] |: Hello Aleksandur! + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise02.cpp} От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя букви (малки или големи) в изречението. -:table_2 +:table +:2 |= Вход |= Изход @@ -58,9 +61,10 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8] |: 10 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise03.cpp} От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя полета в низа. @@ -69,31 +73,33 @@ GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8] Изключвайте крайната точка в бройката на полетата. .note -[*(14.12.2025)*] Добавени точки в края на изреченията. +{i (14.12.2025)} Добавени точки в края на изреченията. -:table_2 +:table +:2 |= Вход |= Изход -|: [`first second third fourth.`] +|: {` first second third fourth.} |: 4 -|: [`I'm glad you're here.`] +|: {` I'm glad you're here.} |: 4 -|: [` a b c d 8 k * * .`] +|: {` a b c d 8 k * * .} |: 8 ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise04.cpp} От входа получавате текст, докато не срещнете първия празен ред. Трябва да изкарате броя редове в текста. -:table_2 +:table +:2 |= Вход |= Изход @@ -115,14 +121,16 @@ trail led eastward through the fat spruce timberland.\n |: 4 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise05.cpp} От входа получавате низ, завършващ на двоеточие и след това две реални числа. За всяко срещане на думата "sum" в низа, трябва да изкарате сумата на числата, и за всяко срещане на "sub" в низа, трябва да изкарате разликата на числата. -:table_2 +:table +:2 |= Вход |= Изход @@ -139,19 +147,21 @@ trail led eastward through the fat spruce timberland.\n |: 3 -1 3 + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise06.cpp} От входа получавате ред, обозначаващ число в 16-тича бройна система. -Тоест, реда започва с [`0x`] и останалото са 16-тични цифри. +Тоест, реда започва с {` 0x} и останалото са 16-тични цифри. -Трябва да изкарате стойността на числото в 10-тична бройна система, [=като направите конвертирането ръчно!=] -Тоест [=не е позволено да използвате функционалност от стандартната библиотека!=] +Трябва да изкарате стойността на числото в 10-тична бройна система, {b като направите конвертирането ръчно!} +Тоест {b не е позволено да използвате функционалност от стандартната библиотека!} -Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. [`0x0001`]). +Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. {` 0x0001}). -:table_2 +:table +:2 |= Вход |= Изход @@ -180,14 +190,16 @@ trail led eastward through the fat spruce timberland.\n |: 1597463007 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise07.cpp} От входа получавате 5 буквен низ и след това един ред текст. Трябва да изкарате всички срещания на първия низ във втория (като препокривания са позволени). -:table_2 +:table +:2 |= Вход |= Изход @@ -206,16 +218,18 @@ aaaaaaaaaaaaaaaaaaaa |: 16 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise08.cpp} От входа получавате букви, докато не срещнете низа "end". Трябва да изкарате всички полета в обратен ред. Поле наричаме всяка последователност от букви, която не съдържа шпация. -:table_2 +:table +:2 |= Вход |= Изход @@ -226,14 +240,16 @@ aaaaaaaaaaaaaaaaaaaa |: weekend the on free is he said They + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise09.cpp} От входа получавате две полета, съставени от главни и малки латински букви. Трябва да върнете общата бройка срещания на всяка буква от второто поле в първото. -:table_2 +:table +:2 |= Вход |= Изход @@ -244,16 +260,18 @@ aaaaaaaaaaaaaaaaaaaa |: 0 + ## За упражнение ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise10.cpp} От входа получавате ред с текст. -Трябва да върнете дали е [url https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0 панграма] на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка). +Трябва да върнете дали е {url панграма;https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0} на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка). -:table_2 +:table +:2 |= Вход |= Изход @@ -267,14 +285,16 @@ aaaaaaaaaaaaaaaaaaaa |: Not a pangram + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise11.cpp} От входа получавате два реда. Трябва да премахнете всяко срещане на втория ред в първия и да изкарате резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -297,9 +317,10 @@ buffalo Buffalo Buffalo Buffalo + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise12.cpp} От входа получавате ред с текст. Зачитайки го за парола, трябва да върнете колко силна е паролата. @@ -315,9 +336,10 @@ Buffalo Buffalo Buffalo Накрая тряба да върнете оценката на паролата. .note -[*(14.12.2025)*] Оправени оценки в примерите +{i (14.12.2025)} Оправени оценки в примерите -:table_2 +:table +:2 |= Вход |= Изход @@ -334,12 +356,13 @@ Buffalo Buffalo Buffalo |: 5 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise13.cpp} Хешираща функция е функция, която превръща низ в число. -Една много често използвана е функцията на [url https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function Fowler-Noll-Vo]. +Една много често използвана е функцията на {url Fowler-Noll-Vo;https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function}. Тя работи по следния начин: .bulleted @@ -352,36 +375,39 @@ Buffalo Buffalo Buffalo Използвайки 32-битовите offset basis (2166136261) и FNV простото число (16777619), изкарайте хешираната стойност на подадения ред текст. .note -[*(14.12.2025)*] Поправен хеш на последния пример. +{i (14.12.2025)} Поправен хеш на последния пример. -:table_2 +:table +:2 |= Вход |= Изход -|: [`Hello World`] +|: {` Hello World} |: 310551791 -|: [`Nothing`] +|: {` Nothing} |: 383317984 -|: [`!`] +|: {` !} |: 84696382 -|: [`The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.`] +|: {` The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.} |: 2408366471 + ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week11/Exercise14.cpp} От входа получавате два реда с текст. -Трябва да върнете дали първия ред е [url https://en.wikipedia.org/wiki/Anagram анаграма] на втория, +Трябва да върнете дали първия ред е {url анаграма;https://en.wikipedia.org/wiki/Anagram} на втория, тоест дали втория низ може да се получи след някакво разместване на всички (латински) букви в първия низ. Игнорирайте дали буквата е главна или малка. -:table_2 +:table +:2 |= Вход |= Изход @@ -421,12 +447,13 @@ I am Lord Voldemort |: Anagram + ## За любознателните ### Задача 15 От входа получавате два реда с текст. -Трябва да пресметнете [url https://en.wikipedia.org/wiki/Levenshtein_distance разстоянието на Ливенщайн] между тях. +Трябва да пресметнете {url разстоянието на Ливенщайн;https://en.wikipedia.org/wiki/Levenshtein_distance} между тях. То се пресмята така: .numbered diff --git a/src/teaching/upp-2025/week12/index.du b/src/teaching/upp-2025/week12/index.du index 5fc86b8..1d1ff4d 100644 --- a/src/teaching/upp-2025/week12/index.du +++ b/src/teaching/upp-2025/week12/index.du @@ -1,19 +1,19 @@ -# Задачи - УПП, Седмица 12, 18.12.2025 +'def title Задачи - УПП, Седмица 12, 18.12.2025 +'def desc Условията на задачите за упражнение. -'define expected-reading 14 min -'define created 17 December 2025 -'define edited 23 December 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] +{pagenav 14 min;17 December 2025;23 December 2025} + +GitHub Classroom: {url https://classroom.github.com/a/zvYPAVPS} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise01.cpp} -[url https://en.wikipedia.org/wiki/Caesar_cipher Шифъра на Цезар] е античен шифър, при който всяка буква от азбуката се отмества и замества. +{url Шифъра на Цезар;https://en.wikipedia.org/wiki/Caesar_cipher} е античен шифър, при който всяка буква от азбуката се отмества и замества. Например, при отместване от 3, A става D, B става E, Z става C и така нататък. От входа получавате един ред с текст на английски, който е шифриран с шифъра на Цезар. @@ -24,7 +24,8 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] Игнорирайте дали буквите са главни или малки във вашите проверки по време на дешифриране. -:table_2 +:table +:2 |= Вход |= Изход @@ -38,9 +39,10 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] |: DAY HAD DAWNED COLD AND GRAY WHEN the man turned aside from the main Yukon trail + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise02.cpp} От входа получавате един ред текст. След това получавате положително число: брой колони (където всяка една колона съдържа един знак). @@ -50,7 +52,8 @@ GitHub Classroom: [url https://classroom.github.com/a/zvYPAVPS] С други думи, не може да разделяте думи (полета) на повече от един ред! Ако има поле, което е по-дълго от броя колони, то ще запълни цял ред и ще "прелее" извън броя колони. -:table_2 +:table +:2 |= Вход |= Изход @@ -104,26 +107,28 @@ sky. It was a clear day. + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise03.cpp} От входа получавате две полета (низове, които не съдържат шпации). След това получавате положително число: брой колони (където една колона съдържа един знак). Трябва да разположите двете полета в колоните така, че разстоянието между полетата и разтоянията между всяко поле и краищата са еднакви. -С други думи, ако сме получили [`Hello`], [`World`] и 25 колони, трябва да изкараме следния низ (където [`|`] обграждат всичките колони): +С други думи, ако сме получили {` Hello}, {` World} и 25 колони, трябва да изкараме следния низ (където {` |} обграждат всичките колони): ``` | Hello World | -Разстоянието между [`|`] и [`H`] е същото като между [`o`] и [`W`], и между [`d`] и [`|`], а иммено 5 шпации. +Разстоянието между {` |} и {` H} е същото като между {` o} и {` W}, и между {` d} и {` |}, а иммено 5 шпации. Когато разстоянията не могат да са точни, трябва или средното да е по-късото, или и двата края да са по-къси. Ако буквите в думите са повече от броя колоните, тогава изкарайте думите слепени. -:table_2 +:table +:2 |= Вход |= Изход @@ -158,22 +163,24 @@ Loremipsum Lorem ipsum + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise04.cpp} От входа получавате едно поле (последователност от букви, която не съдържа шпация). Трябва да върнете типа на полето, спрямо тези правила: .ordered -1. [=Тип "integer":=] може да започне с [`+`] или [`-`] и всички останали букви са цифри -2. [=Тип "float":=] може да започне с [`+`] или [`-`] и след това съдържа цифри и точка, която точка трябва да се намира между цифри (т.е. не е преди или след всички цифри) -3. [=Тип "word":=] ако съдържа само латински букви (главни или малки) -4. [=Тип "time":=] може да започне или завърши с "AM" или "PM", след това (допускайки че е започва с низа) съдържа 1-2 цифри (часа), които са между 0 и 24 вкл., знака двоеточие [`:`] и накрая завършва на две цифри (минутите), които са между 0 и 59 вкл. -5. [=Тип "percentage":=] започва с поне една цифра, като след първите цифри може да има точка и още цифри, и накрая завършва на знака [`%`] -6. [=Тип "other"=], когато не можем да го свържем с никое от горните правила - -:table_2 +1. {b Тип "integer":} може да започне с {` +} или {` -} и всички останали букви са цифри +2. {b Тип "float":} може да започне с {` +} или {` -} и след това съдържа цифри и точка, която точка трябва да се намира между цифри (т.е. не е преди или след всички цифри) +3. {b Тип "word":} ако съдържа само латински букви (главни или малки) +4. {b Тип "time":} може да започне или завърши с "AM" или "PM", след това (допускайки че е започва с низа) съдържа 1-2 цифри (часа), които са между 0 и 24 вкл., знака двоеточие {` :} и накрая завършва на две цифри (минутите), които са между 0 и 59 вкл. +5. {b Тип "percentage":} започва с поне една цифра, като след първите цифри може да има точка и още цифри, и накрая завършва на знака {` %} +6. {b Тип "other"}, когато не можем да го свържем с никое от горните правила + +:table +:2 |= Вход |= Изход @@ -229,6 +236,7 @@ Lorem ipsum |: other + ### Задача 5 От входа получавате две положителни цели числа: месец и година. @@ -244,7 +252,8 @@ Mo Tu We Th Fr Sa Su Като дните трябва да са коректно подравнени. -:table_2 +:table +:2 |= Вход |= Изход @@ -289,13 +298,14 @@ Mo Tu We Th Fr Sa Su 24 25 26 27 28 29 + ## За самоподготовка ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week12/Exercise06.cpp} -Модерните текстови редактори са визуални редактори: редактираш текста, който едновременно виждаш (подобно на лист хартия). Предшественик на тези редактори са [url https://en.wikipedia.org/wiki/Line_editor редовите редактори]: пускаш редица команди, всяка от които променя текста по някакъв начин. +Модерните текстови редактори са визуални редактори: редактираш текста, който едновременно виждаш (подобно на лист хартия). Предшественик на тези редактори са {url редовите редактори;https://en.wikipedia.org/wiki/Line_editor}: пускаш редица команди, всяка от които променя текста по някакъв начин. Минуса е, че не нямаш курсор с който да правиш промените директно, това да видиш текста и да го редактираш са отделни команди, които трябва да изписваш всеки път. Плюса е, че реализацията е много по-проста и лесно се правят автоматизации/скриптове. @@ -306,7 +316,7 @@ Mo Tu We Th Fr Sa Su Трябва да изпълните всяка команда или да изкарате съобщение за грешка, ако командата е невалидна. .question -За любознателните: дизайна на този редактор е базиран на [url https://www.gnu.org/software/ed/manual/ed_manual.html ed] +За любознателните: дизайна на този редактор е базиран на {url ed;https://www.gnu.org/software/ed/manual/ed_manual.html} #### Обсег и текущия ред @@ -324,17 +334,17 @@ Mo Tu We Th Fr Sa Su Обсега за един ред е една от 3 типа стойности: .numbered 1. цяло число (последователност от цифри), която определя реда в текущия текст -2. [`.`], което обозначава текущия ред -3. [`$`], което обозначава последния ред във файла +2. {` .}, което обозначава текущия ред +3. {` $}, което обозначава последния ред във файла -Ако въведем [=само=] обсег за един ред, то това обновява текущия ред. +Ако въведем {b само} обсег за един ред, то това обновява текущия ред. -Имаме и обсег за няколко реда, който е във формата [`начало,край`]. -[`начало`] и [`край`] са в същия формат като обсега за един ред. +Имаме и обсег за няколко реда, който е във формата {` начало,край}. +{` начало} и {` край} са в същия формат като обсега за един ред. Тоест, това са два обсега за един ред, слепени със запетая. -[`начало`] може да бъде пропуснато, в който случай по подразбиране е 1 (първия ред). -[`край`] може да бъде пропуснато, в който случай по подразбиране е [`$`] (последния ред). +{` начало} може да бъде пропуснато, в който случай по подразбиране е 1 (първия ред). +{` край} може да бъде пропуснато, в който случай по подразбиране е {` $} (последния ред). Трябва да върнете съобщение за грешка, ако е подаден невалиден обсег за текущия текст. @@ -344,19 +354,19 @@ Mo Tu We Th Fr Sa Su Това са всички команди: .numbered -1. [`p`] - изкарва редовете в обсега -2. [`n`] - изкарва редовете в обсега, като преди всеки е поставен неговия номер на реда -3. [`d`] - изтрива редовете в обсега -4. [`а`] - добавя текст [=след=] всеки ред в обсега -5. [`i`] - добавя текст [=преди=] всеки ред в обсега -6. [`q`] - прекратява програмата - -Буквите, след командите [`a`] и [`i`] са текста, който трябва да бъде вмъкнат. +1. {` p} - изкарва редовете в обсега +2. {` n} - изкарва редовете в обсега, като преди всеки е поставен неговия номер на реда +3. {` d} - изтрива редовете в обсега +4. {` а} - добавя текст {b след} всеки ред в обсега +5. {` i} - добавя текст {b преди} всеки ред в обсега +6. {` q} - прекратява програмата + +Буквите, след командите {` a} и {` i} са текста, който трябва да бъде вмъкнат. Може да се вмъкне само по един ред текст. -След въвеждане на ред чрез [`a`] или [`i`], текущия ред автоматично се обновява на ново-добавения ред. +След въвеждане на ред чрез {` a} или {` i}, текущия ред автоматично се обновява на ново-добавения ред. -След изтриване на ред чрез [`d`], трябва да обновите текущия ред, само когато има смисъл. +След изтриване на ред чрез {` d}, трябва да обновите текущия ред, само когато има смисъл. Например, ако текущия ред е 10 и изтриете ред 20, няма нужда от промяна. Ако текущия ред е 10 и изтриете редове 2 и 3, тогава текущия ред трябва да се намали с броя изтрите редове, а имменно, с 2, от 10 на 8. @@ -365,24 +375,27 @@ Mo Tu We Th Fr Sa Su Вход и изход не са смесени. Наклонения текст е допълнителен коментар на това, което се случва (тоест, вие не трябва да го подавате на вашата програма). -[=Вход 1:=] +{b Вход 1:} ``` +'emplace aThe man looked along the way he had come. aThe Yukon lay a mile wide and hidden under three feet of ice. aOn top of this ice were as many feet of snow. It was all pure white. ,p q +'endemplace -[=Изход 1:=] +{b Изход 1:} ``` The man looked along the way he had come. The Yukon lay a mile wide and hidden under three feet of ice. On top of this ice were as many feet of snow. It was all pure white. -[$br1] +{br1} -[=Вход 2:=] +{b Вход 2:} ``` +'emplace aThe Yukon lay a mile wide and hidden under three feet of ice. iThe man looked along the way he had come. $aOn top of this ice were as many feet of snow. It was all pure white. @@ -393,25 +406,27 @@ p ,i ,p q +'endemplace -[=Изход 2:=] +{b Изход 2:} ``` -[*Изход от ",2n"*] +{i Изход от ",2n"} 1 The man looked along the way he had come. 2 The Yukon lay a mile wide and hidden under three feet of ice. -[*Изход от първото "p"*] +{i Изход от първото "p"} On top of this ice were as many feet of snow. It was all pure white. -[*Изход от второто "p"*] +{i Изход от второто "p"} The Yukon lay a mile wide and hidden under three feet of ice. -[*Изход от ",p"*]\n +{i Изход от ",p"}\n The man looked along the way he had come.\n The Yukon lay a mile wide and hidden under three feet of ice.\n On top of this ice were as many feet of snow. It was all pure white. -[$br1] +{br1} -[=Вход 3:=] +{b Вход 3:} ``` +'emplace aNorth and south, as far as his eye could see, ait was unbroken white. aThe one thing that relieved @@ -428,30 +443,31 @@ icurved from the pine-covered .n ,p q +'endemplace -[=Изход 3:=] +{b Изход 3:} .note -[=(23.12.2025)=] Поправен този изход +{b (23.12.2025)} Поправен този изход ``` -[*Изход от "3,5p"*] +{i Изход от "3,5p"} The one thing that relieved the whiteness was a thin dark line that cruved from the pine-covered -[*Изход от ",n"*] +{i Изход от ",n"} 1 North and south, as far as his eye could see, 2 it was unbroken white. 3 The one thing that relieved 4 the whiteness was a thin dark line that 5 island to the south. -[*Изход от ".,$p"*] +{i Изход от ".,$p"} curved from the pine-covered the whiteness was a thin dark line that island to the south. -[*Изход от ".n"*] +{i Изход от ".n"} 3 curved from the pine-covered -[*Изход от ",p"*] +{i Изход от ",p"} The one thing that relieved the whiteness was a thin dark line that curved from the pine-covered diff --git a/src/teaching/upp-2025/week13/index.du b/src/teaching/upp-2025/week13/index.du index 1ff00e7..d8edf79 100644 --- a/src/teaching/upp-2025/week13/index.du +++ b/src/teaching/upp-2025/week13/index.du @@ -1,25 +1,26 @@ -# Задачи - УПП, Седмица 13, 08.01.2026 +'def title Задачи - УПП, Седмица 13, 08.01.2026 +'def desc Условията на задачите за упражнение. -'define expected-reading 15 min -'define created 05 January 2025 -'define edited 08 January 2025 -[$pagenav] +# {title} + +{pagenav 15 min;05 January 2025;08 January 2025} .important Използвайте рекурсия, за да решите всички тези задачи! -GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY] +GitHub Classroom: {url https://classroom.github.com/a/8vTquPOY} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise01.cpp} Реализирайте програма, която по подаден положителен размер изкарва "стълбище" от плюсове. .warn Както с всички останали задачи, решете условието с рекурсия! -:table_2 +:table +:2 |= Вход |= Изход @@ -50,17 +51,19 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY] +++++++ + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise02.cpp} -Припомняме, че в [url https://en.wikipedia.org/wiki/Fibonacci_sequence редицата на Фибоначи], всеки следвавщ елемент е сумата на предходните два, като първите два елемента са 0 и 1. +Припомняме, че в {url редицата на Фибоначи;https://en.wikipedia.org/wiki/Fibonacci_sequence}, всеки следвавщ елемент е сумата на предходните два, като първите два елемента са 0 и 1. От входа получавате неотрицателен индекс, трябва да изкарате съответното число на Фибоначи. .warn Както с всички останали задачи, решете условието с рекурсия! -:table_2 +:table +:2 |= Вход |= Изход @@ -86,16 +89,18 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY] |: 3524578 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise03.cpp} От входа получавате цяло неотрицателно число. Изкарайте сумата на всички негови цифри. .warn Както с всички останали задачи, решете условието с рекурсия! -:table_2 +:table +:2 |= Вход |= Изход @@ -109,14 +114,16 @@ GitHub Classroom: [url https://classroom.github.com/a/8vTquPOY] |: 38 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise04.cpp} От входа получавате един ред с текст. Трябва да обърнете реда на всички букви в текста и да изкарате резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -134,17 +141,19 @@ He should not have built the fire under the pine tree. |: ``` -.eert enip eht rednu erif eht tliub evah ton dluohs eH +\.eert enip eht rednu erif eht tliub evah ton dluohs eH + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise05.cpp} От входа получавате цяло неотрицателно число. Изкарайте "хълм" от плюсове с размер, подаденото число. -:table_2 +:table +:2 |= Вход |= Изход @@ -184,16 +193,18 @@ He should not have built the fire under the pine tree. + + ### Задача 6 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise06.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise06.cpp} -Напишете рекурентна функция, която по подадени две цели числа [`a`] и [`b`], връща сумата [=и=] средното аритметично на всички числа между [`a`] и [`b`], включително. +Напишете рекурентна функция, която по подадени две цели числа {` a} и {` b}, връща сумата {b и} средното аритметично на всички числа между {` a} и {` b}, включително. От входа получавате две цели числа. -Използвайки вашата функция, изкарайте сумата и средното аритметично на всички цели числа в интервала [`[a, b]`]. +Използвайки вашата функция, изкарайте сумата и средното аритметично на всички цели числа в интервала {` [a, b]}. -:table_2 +:table +:2 |= Вход |= Изход @@ -204,14 +215,16 @@ He should not have built the fire under the pine tree. |: 69 3 + ### Задача 7 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise07.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise07.cpp} От входа получавате неотрицателно цяло число - брой битове. Изкарайте всички възможни двоични числа, съставени от броя битове. -:table_2 +:table +:2 |= Вход |= Изход @@ -236,17 +249,19 @@ He should not have built the fire under the pine tree. 111 + ### Задача 8 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise08.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise08.cpp} От входа получавате неотрицателен индекс, трябва да изкарате преплетената поредица от числа на Фибоначи, от първото до това на подадения индекс. По-точно, трябва резултатните елементи на четните индекси да представляват редицата на Фибоначи в нарастващ ред, и тези на нечетните индекси да са същата редица в намаляващ ред. .warn -Изполвайте [=само=] едно начално извикване на рекурентната ви функция. +Изполвайте {b само} едно начално извикване на рекурентната ви функция. -:table_2 +:table +:2 |= Вход |= Изход @@ -260,14 +275,16 @@ He should not have built the fire under the pine tree. |: 0 0 + ### Задача 9 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise09.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise09.cpp} От входа получавате низ, съставен само и единствено от отварящи и затварящи кръгли скоби. Трябва да върнете дали скобите са балансирани, т.е. дали след всяка отваряща скоба, съществува "нейна си" затаваряща скоба, по-нататък в низа. -:table_2 +:table +:2 |= Вход |= Изход @@ -302,16 +319,18 @@ He should not have built the fire under the pine tree. |: Balanced + ### Задача 10 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise10.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise10.cpp} -Използвайки [=опашкова рекурсия=], имплементирайте функция която приема масив от реални числа и връща сумата на всички тях. +Използвайки {b опашкова рекурсия}, имплементирайте функция която приема масив от реални числа и връща сумата на всички тях. От входа получавате неотрицателно число N и след това N на брой реални числа. Използвайки вашата функция, изкарайте сумата на всички реални числа. -:table_2 +:table +:2 |= Вход |= Изход @@ -322,17 +341,19 @@ He should not have built the fire under the pine tree. |: 141.83 + ### Задача 11 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise11.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise11.cpp} -Напишете програма, която решава [url https://en.wikipedia.org/wiki/Ages_of_Three_Children_puzzle пъзела с възрастта на трите деца]. +Напишете програма, която решава {url пъзела с възрастта на трите деца;https://en.wikipedia.org/wiki/Ages_of_Three_Children_puzzle}. В пъзела знаете сумата на възрастите на трите деца, умножението на възрастите, както и факта, че едно от децата е най-голямо. От входа получавате две положителни числа: сумата и произведението на възрастите. Трябва да изкарате резултата: -:table_2 +:table +:2 |= Вход |= Изход @@ -343,17 +364,19 @@ He should not have built the fire under the pine tree. |: 2 2 9 + ### Задача 12 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise12.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise12.cpp} От входа получавате неотрицателно число N и след това N на брой цели числа. -Трябва да изкарате дължината на най-дългата [=строго нарастваща=] подредица (под-последователност) от числа. +Трябва да изкарате дължината на най-дългата {b строго нарастваща} подредица (под-последователност) от числа. .note -[*(11.01.2026)*] Поправени примери +{i (11.01.2026)} Поправени примери -:table_2 +:table +:2 |= Вход |= Изход @@ -373,11 +396,12 @@ He should not have built the fire under the pine tree. |: 6 + ### Задача 13 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise13.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise13.cpp} -Напишете програма, която решава [url https://en.wikipedia.org/wiki/Takuzu Такузу пъзели]. +Напишете програма, която решава {url Такузу пъзели;https://en.wikipedia.org/wiki/Takuzu}. Пъзлите са формулирани така: в дъска 4 на 4 трябва да се попълнят нули и единици, така че на всяка колона и ред да има еднакъв брой нули и единици. Допълнително, на всеки ред и колона, не може да има повече от две последователни еднакви числа. @@ -385,7 +409,8 @@ He should not have built the fire under the pine tree. От входа получавате нерешен такузу пъзел, където "празните" позиции са маркирани с -1. Трябва да изкарате решение на пъзела. -:table_2 +:table +:2 |= Вход |= Изход @@ -432,21 +457,23 @@ He should not have built the fire under the pine tree. 1 1 0 0 + ## За упражнение ### Задача 14 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise14.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise14.cpp} -Един от най-простите алгоритми за псевдо-случайни числа е [url https://en.wikipedia.org/wiki/Lehmer_random_number_generator генератора на Лемер]. -Започвайки от "seed" [`X[_0_]`], всяко следващо случайно число [`X[_k+1_]`] е равно на [`(a * X[_k_]) mod m`], където [`а`] и [`m`] са константи. +Един от най-простите алгоритми за псевдо-случайни числа е {url генератора на Лемер;https://en.wikipedia.org/wiki/Lehmer_random_number_generator}. +Започвайки от "seed" {` X{_ 0}}, всяко следващо случайно число {` X{_ k+1}} е равно на {` (a * X{_ k}) mod m}, където {` а} и {` m} са константи. -Нека да фиксираме [`a = 16807`] и [`m = 2[^31^] - 1`]. -От входа получавате две положителни цели числа: "seed" и бройка [`N`]. +Нека да фиксираме {` a = 16807} и {` m = 2{^ 31} - 1}. +От входа получавате две положителни цели числа: "seed" и бройка {` N}. -Трябва да изкарате всички произволни числа [`X[_1_]`] до [`X[_N_]`]. +Трябва да изкарате всички произволни числа {` X{_ 1}} до {` X{_ N}}. -:table_2 +:table +:2 |= Вход |= Изход @@ -460,25 +487,27 @@ He should not have built the fire under the pine tree. |: 16807 282475249 1622647863 947787490 1578127215 + ### Задача 15 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise15.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise15.cpp} Във физиката, можем да определим позицията на едно тяло по елиптична (Кеплерова) орбита чрез екцентричната аномалия. Обаче, на практика тя не се намира директно, ами се изчисляват средната аномалия и ексцентрицитетът на елипсата. -Чрез [url https://en.wikipedia.org/wiki/Kepler%27s_equation уравнението на Кеплер], можем да изведем следната рекурентна връзка за екцентричната аномалия: +Чрез {url уравнението на Кеплер;https://en.wikipedia.org/wiki/Kepler%27s_equation}, можем да изведем следната рекурентна връзка за екцентричната аномалия: -[image ./img/eccentric-anomaly.png] +{img ./img/eccentric-anomaly.png} -Където [`M`] е средната аномалия и [`e`] е ексцентрицитетът на елипсата. -От входа получавате две реални числа, [`M`] и [`e`], както и цяло положително число "дълбочина". +Където {` M} е средната аномалия и {` e} е ексцентрицитетът на елипсата. +От входа получавате две реални числа, {` M} и {` e}, както и цяло положително число "дълбочина". Трябва да върнете (приближение на) екцентричната аномалия, като рекурсията ви трябва да се "вложи" максимум "дълбочина" на брой пъти. -За дъно на рекурсията, може да върнете стойността [`M`]. -Използвайте [``] за синус функцията. +За дъно на рекурсията, може да върнете стойността {` M}. +Използвайте {` } за синус функцията. -:table_2 +:table +:2 |= Вход |= Изход @@ -492,16 +521,18 @@ He should not have built the fire under the pine tree. |: 1.42528 + ### Задача 16 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise16.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise16.cpp} От входа получавате две неотрицателни цели числа. -Изкарайте техния най-голям общ делител, използвайки [url https://en.wikipedia.org/wiki/Euclidean_algorithm алгоритъма на Евклид]: +Изкарайте техния най-голям общ делител, използвайки {url алгоритъма на Евклид;https://en.wikipedia.org/wiki/Euclidean_algorithm}: -[image ./img/gcd-euclid.png] +{img ./img/gcd-euclid.png} -:table_2 +:table +:2 |= Вход |= Изход @@ -515,14 +546,16 @@ He should not have built the fire under the pine tree. |: 1 + ### Задача 17 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise17.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise17.cpp} От входа получавате един ред с текст. Трябва да изкарате дали текста е палиндром. -:table_2 +:table +:2 |= Вход |= Изход @@ -539,14 +572,16 @@ racecar racecar |: Is a palindrome + ### Задача 18 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise18.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise18.cpp} От входа получавате цяло неотрицателно число и цифра, между 1 и 9. Трябва да изкарате бройката срещания на цифрата в числото. -:table_2 +:table +:2 |= Вход |= Изход @@ -560,18 +595,20 @@ racecar racecar |: 4 + ### Задача 19 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise19.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise19.cpp} Един от начините да изчислим стойността на биномен коефициент е чрез следната рекурентна връзка: -[image ./img/binom.png] +{img ./img/binom.png} -От входа получавате две неотрицателни цели числа [`n`] и [`k`]. +От входа получавате две неотрицателни цели числа {` n} и {` k}. Трябва да изкарате съответния биномен коефициент, използвайки рекурентната връзка. -:table_2 +:table +:2 |= Вход |= Изход @@ -585,11 +622,13 @@ racecar racecar |: 1 + ### Задача 20 Напишете програма, която "изиграва" всички възможни игри на морски шах и връща в колко тях някой печели и в колко от тях никой не печели. -:table_2 +:table +:2 |= Вход |= Изход @@ -598,21 +637,23 @@ racecar racecar .comment Source: http://www.se16.info/hgb/tictactoe.htm + ### Задача 21 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise21.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise21.cpp} -[url https://en.wikipedia.org/wiki/Levenshtein_distance Разстоянието на Ливенщайн] е метод за измерване на разликата между два низа. +{url Разстоянието на Ливенщайн;https://en.wikipedia.org/wiki/Levenshtein_distance} е метод за измерване на разликата между два низа. Смята се по следния начин: -[image ./img/levenshtein.png] +{img ./img/levenshtein.png} -Където с [`x[1..]`] бележим остатък от низа [`x`], след първата буква. +Където с {` x[1..]} бележим остатък от низа {` x}, след първата буква. От входа получавате два реда с текст. Трябва да върнете разстоянието на Ливенщайн между тях. -:table_2 +:table +:2 |= Вход |= Изход @@ -638,18 +679,20 @@ Winterland |: 1 + ### Задача 22 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise22.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise22.cpp} -Аритметико-геометричното на две числа [`a`] и [`b`] се дефинира чрез следната рекурентна връзка: +Аритметико-геометричното на две числа {` a} и {` b} се дефинира чрез следната рекурентна връзка: -[image ./img/agm.png] +{img ./img/agm.png} -От входа получавате две реални числа, [`a`] и [`b`], и брой итерации [`n`]. -Изкарайте резултатното аритметико-геометрично число, като за дъно на рекурсията можете да върнете [`a[_n+1_]`]. +От входа получавате две реални числа, {` a} и {` b}, и брой итерации {` n}. +Изкарайте резултатното аритметико-геометрично число, като за дъно на рекурсията можете да върнете {` a{_ n+1}}. -:table_2 +:table +:2 |= Вход |= Изход @@ -663,16 +706,18 @@ Winterland |: 0.189868 + ### Задача 23 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise23.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise23.cpp} -Използвайки [=опашкова рекурсия=], напишете функция, която получава масив от цели числа и връща най-големия елемент от тях. +Използвайки {b опашкова рекурсия}, напишете функция, която получава масив от цели числа и връща най-големия елемент от тях. -От входа получавате неотрицателно цяло [`N`] и след това [`N`] на брой цели числа. +От входа получавате неотрицателно цяло {` N} и след това {` N} на брой цели числа. Използвайки вашата функция, изкарайте най-голямото число. -:table_2 +:table +:2 |= Вход |= Изход @@ -683,19 +728,21 @@ Winterland |: 1 + ### Задача 24 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise24.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week13/Exercise24.cpp} Чрез бездънни дроби можем да представим редица функции/изрази, за които няма точна формула. -От входа получавате реално число [`x`] и дълбочина [`n`], върнете [`e[^x^]`] използвайки: +От входа получавате реално число {` x} и дълбочина {` n}, върнете {` e{^ x}} използвайки: -[image ./img/eulers_identity.png] +{img ./img/eulers_identity.png} Като, всеки "етаж" от дробта е единица дълбочина (и първото ниво е 0). -:table_2 +:table +:2 |= Вход |= Изход @@ -712,10 +759,11 @@ Winterland |: 23.1406 + ### Задача 25 От входа получавате положителни цели размери на матрица от букви. -След това получавате стойностите на самата матрица, като буквата [`#`] определя стена и [`.`] определя празно пространство. +След това получавате стойностите на самата матрица, като буквата {` #} определя стена и {` .} определя празно пространство. Накрая получавате двойка индекси (координат) в матрицата. Трябва да запълните всички празни клетки, които са достижими от подадения координат (като не може да се минаава през стените). @@ -725,12 +773,13 @@ Winterland От входа получавате недовършен судоку пъзел, където празните клетки са отбелязани с -1. Трябва да намерите и изкарате решение(то) на пъзела. -:table_2 +:table +:2 |= Вход |= Изход |: -:code +```` 6 -1 3 2 -1 5 7 -1 1 -1 2 -1 -1 -1 -1 -1 9 -1 9 -1 -1 6 -1 7 -1 -1 3 @@ -745,7 +794,7 @@ Winterland |: -:code +```` 6 4 3 2 9 5 7 8 1 5 2 7 8 1 3 4 9 6 9 1 8 6 4 7 5 2 3 @@ -760,18 +809,20 @@ Winterland + ### Задача 27 -[url https://en.wikipedia.org/wiki/Recaman%27s_sequence#bodyContent Редицата на Рекаман] се дефинира по следния начин: +{url Редицата на Рекаман;https://en.wikipedia.org/wiki/Recaman%27s_sequence#bodyContent} се дефинира по следния начин: .unordered -- първия елемент (с индекс [`n = 0`]) е 0 -- всеки следващ елемент е равен на предходния минус [`n`], ако резултата ще е положително и резултата не е срещан преди -- иначе, всеки следващ елемент е равен на предходния плюс [`n`] +- първия елемент (с индекс {` n = 0}) е 0 +- всеки следващ елемент е равен на предходния минус {` n}, ако резултата ще е положително и резултата не е срещан преди +- иначе, всеки следващ елемент е равен на предходния плюс {` n} -От входа получавате цяло неотрицателно чило [`n`], изкарайте [`n`]-тото число от редицата на Рекаман. +От входа получавате цяло неотрицателно чило {` n}, изкарайте {` n}-тото число от редицата на Рекаман. -:table_2 +:table +:2 |= Вход |= Изход @@ -788,15 +839,17 @@ Winterland |: 1 + ### Задача 28 -Напишете програма, която връща [=бройката решения=] на [url https://en.wikipedia.org/wiki/Eight_queens_puzzle пъзела на 8те царици]. +Напишете програма, която връща {b бройката решения} на {url пъзела на 8те царици;https://en.wikipedia.org/wiki/Eight_queens_puzzle}. Пъзела е формулиран така: имате шахматна дъска (8 на 8) и върху нея имате 8 царици. Припомняме, че царицата се движи вертикално, хоризонтално и диагонално по дъската. Целта на пъзела е цариците да се поставят така, че нито една царица да не може да вземе никоя друга. -:table_2 +:table +:2 |= Вход |= Изход @@ -804,10 +857,11 @@ Winterland |: 92 + ### Задача 29 От входа получавате положителни цели размери на матрица от букви. -След това получавате стойностите на самата матрица, като буквата [`#`] определя стена и [`.`] определя празно пространство. +След това получавате стойностите на самата матрица, като буквата {` #} определя стена и {` .} определя празно пространство. Накрая получавате две двойки координати (индекси) в матрицата. Трябва да изкарате дали има път по празните пространства, така че да се придвижите от началните (първите) координати до финалните (вторите). @@ -821,7 +875,7 @@ Winterland Целта е да изкараме дали подадения низ съответства на шаблона. За нашите цели, регулярнят израз ще има следния формат: започвайки от началото, всяка буква директно съответства на буква в подадения низ. -Обаче, имаме специалната буква [`*`], която казва, че предходната буква може да се повтори нула или повече пъти. +Обаче, имаме специалната буква {` *}, която казва, че предходната буква може да се повтори нула или повече пъти. -Тоест, ако в регулярния израз нямаме [`*`], на практика проверяваме дали двата низа съвпадат. -В случаите когато имаме [`*`], [*пробваме*] да съпоставим буквата, например в регулярен израз "a*", низовете "", "a", "aa", "aaa" съответстват. +Тоест, ако в регулярния израз нямаме {` *}, на практика проверяваме дали двата низа съвпадат. +В случаите когато имаме {` *}, {i пробваме} да съпоставим буквата, например в регулярен израз "a*", низовете "", "a", "aa", "aaa" съответстват. diff --git a/src/teaching/upp-2025/week14/bitwise-and-binary-representation.du b/src/teaching/upp-2025/week14/bitwise-and-binary-representation.du index 8369230..ac76e8e 100644 --- a/src/teaching/upp-2025/week14/bitwise-and-binary-representation.du +++ b/src/teaching/upp-2025/week14/bitwise-and-binary-representation.du @@ -1,11 +1,11 @@ -# Побитови операции и представяне на числени данни - УПП, Седмица 14, 15.01.2026 +'def title Побитови операции и представяне на числени данни - УПП, Седмица 14, 15.01.2026 +'def desc Презентация върху размери на типове данни, 1s complement, 2s complement и IEEE754 -'define expected-reading 4 min -'define created 13 January 2026 -'define edited 14 January 2026 -[$pagenav] +# {title} -[$presentation-controller] +{pagenav 4 min;13 January 2026;14 January 2026} + +{presentation-controller} :title_slide @@ -16,17 +16,17 @@ ## Какво е бит? -[$br4] +{br4} :unordered - всичко в компютъра се представя в двоична бройна система -- [*бит*] е най-малката единица памет +- {i бит} е най-малката единица памет -- [*байт*] (byte) е най-малката [=адресируема=] единица памет +- {i байт} (byte) е най-малката {b адресируема} единица памет -- [*дума*] (word) е най-голямата [=обработваема=] единица памет +- {i дума} (word) е най-голямата {b обработваема} единица памет @@ -35,74 +35,76 @@ :slide35 -[$br3] +{br3} :unordered -- На [=модерни=] процесори: - [`x86-64`] (Intel/AMD), [`ARM`] (Apple M series/Snapdragon/Exynos/Cortex)\n +- На {b модерни} процесори: + {` x86-64} (Intel/AMD), {` ARM} (Apple M series/Snapdragon/Exynos/Cortex)\n байт е 8 бита, дума е 64 бита -- процесора извършва повечето инструкции върху [*думи*] +- процесора извършва повечето инструкции върху {i думи} -- в повечето архитектури, размера на един адрес ([=указател=]) е една [*дума*] +- в повечето архитектури, размера на един адрес ({b указател}) е една {i дума} -- [`bool`] заема един [*байт*], въпреки че стойността му може да се побере в един [*бит*] +- {` bool} заема един {i байт}, въпреки че стойността му може да се побере в един {i бит} Общо взето, за модерен процесор/ОС/... може да използвате размерите в долната таблица. .warn -[=Обаче=], стандарта на C++ определя единствено [*минимален*] размер за типовете. +{b Обаче}, стандарта на C++ определя единствено {i минимален} размер за типовете. Долните стойности не са закон! :slide35 -[$br2] +{br2} -:table_2 +:table +:2 |= Тип |= Размер -|: [`bool`], [`char`] +|: {` bool}, {` char} |: "1" бит (1 байт) -|: [`short`] +|: {` short} |: 16 бита (2 байта) -|: [`int`], [`float`] +|: {` int}, {` float} |: 32 бита (4 байта) -|: [`long`] -|: 32 бита [url https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types#LONG Windows], 64 бита MacOS/Linux +|: {` long} +|: 32 бита {url Windows;https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types#LONG}, 64 бита MacOS/Linux -|: [`long long`], [`double`] +|: {` long long}, {` double} |: 64 бита (8 байта) + :slide35 ## Побитови оператори -[$br4] +{br4} .p Аритметичните оператори извършват аритметика върху целите стойности на числата .p -Побитовите оператори извършват [*логически*] операции върху всеки два [*съответни*] бита +Побитовите оператори извършват {i логически} операции върху всеки два {i съответни} бита :slide35 -### Побитово "И" [`&`], "ИЛИ" [`|`], "НЕ" [`~`] +### Побитово "И" {` &}, "ИЛИ" {` |}, "НЕ" {` ~} .p -Работят като логическите [`&&`], [`||`], [`!`] но върху битовете. +Работят като логическите {` &&}, {` ||}, {` !} но върху битовете. Разглеждайки две еднобайтови числа: ``` @@ -110,7 +112,7 @@ 10010011 | 10011100 = 10011111 ~ 10010011 = 01101100 -### Побитово "изключващо или" [`^`] +### Побитово "изключващо или" {` ^} .p Истина, когато двата бита са различни и лъжа, когато са еднакви @@ -121,10 +123,10 @@ :middle_slide35 -### Отместване наляво [`<<`] +### Отместване наляво {` <<} .p -Отместваме битовете с [`n`] на брой позиции на ляво +Отместваме битовете с {` n} на брой позиции на ляво ``` 10010011 << 1 = 00100110 @@ -134,11 +136,11 @@ :middle_slide35 -### Отместване надясно [`>>`] +### Отместване надясно {` >>} .p -Отместваме битовете с [`n`] на брой позиции на дясно.\n -Ако типа е [`unsigned`]: +Отместваме битовете с {` n} на брой позиции на дясно.\n +Ако типа е {` unsigned}: ``` 10010011 >> 1 = 01001001 @@ -157,7 +159,7 @@ ## Представяне на цели числа -[$br4] +{br4} :unordered @@ -172,7 +174,7 @@ :middle_slide35 .p -Идея: [=старшия бит=] (най-левия) да определя дали е положително или отрицателно +Идея: {b старшия бит} (най-левия) да определя дали е положително или отрицателно ``` 000 0 @@ -188,7 +190,7 @@ :middle_slide35 .p -Проблем: нормалното събиране [=не=] работи +Проблем: нормалното събиране {b не} работи ``` 1 + 1 = 001 + 001 = 010 = 2 @@ -196,17 +198,17 @@ -1 + -1 = 101 + 101 = 1010 = 2 (отрязваме) .p -Не би ли било готино да представим числата, така че събиране/изваждане да работи по [*същия*] начин? +Не би ли било готино да представим числата, така че събиране/изваждане да работи по {i същия} начин? :slide ### 1s complement -[$br1] +{br1} .p -Отрицателното число е като положителното, но с [=обратните=] битове +Отрицателното число е като положителното, но с {b обратните} битове ``` 000 0 @@ -219,7 +221,7 @@ 111 -0 .p -Нарича се така, защото [`x & -x`] винаги е равно на [`111...111`] +Нарича се така, защото {` x & -x} винаги е равно на {` 111...111} :middle_slide35 @@ -237,15 +239,15 @@ -1 + -1 = 110 + 110 = 1100 = 1 + 100 = 101 = -2 .p -[=Плюсове:=] водещия бит е единица при отрицателни.\n -[=Минуси:=] има +0 и -0, нуждаем се от "end-arround carry". +{b Плюсове:} водещия бит е единица при отрицателни.\n +{b Минуси:} има +0 и -0, нуждаем се от "end-arround carry". :slide ### 2s complement -[$br1] +{br1} .p Като 1s complement, но при отрицателните числа изваждаме единица. @@ -261,7 +263,7 @@ 111 -1 .p -Нарича се така, защото [`x + -x`] е равно на 2 на степен броя битове +Нарича се така, защото {` x + -x} е равно на 2 на степен броя битове :middle_slide35 @@ -279,7 +281,7 @@ ## Представяне на числа с плаваща запетая -[$br1] +{br1} .p Идея: цяло число, в което закодираме позиция на точката. @@ -295,7 +297,7 @@ :slide35 -[$br3] +{br3} :unordered @@ -305,7 +307,7 @@ - Имаме много нули -- 4те бита за позиция са wasted, защото най-лявата позиция е 12, [`1100`] +- 4те бита за позиция са wasted, защото най-лявата позиция е 12, {` 1100} @@ -313,14 +315,14 @@ ### IEEE754 -[$br1] +{br1} .unordered -- Формат, публикуван през [url https://en.wikipedia.org/wiki/IEEE_754-1985 1985] година +- Формат, публикуван през {url 1985;https://en.wikipedia.org/wiki/IEEE_754-1985} година - За 16 бита, обхвата му е от -65504 до 65504, най-прецизното възможно число е 0.000000059604645 - Поддържа "числата" безкрайност и "not a number" - Представя числата като дроби (научна нотация) -- [=Не всички числа в обхвата могат да бъдат представени=] +- {b Не всички числа в обхвата могат да бъдат представени} - Числата около нулата могат да имат много цифри след запетаята, тези по-далеч могат по-малко @@ -330,7 +332,7 @@ Сложен е, любознателните могат да го разучат: .unordered -- [url https://mathcenter.oxford.emory.edu/site/cs170/ieee754/] -- [url https://www.h-schmidt.net/FloatConverter/IEEE754.html] -- [url https://en.wikipedia.org/wiki/Half-precision_floating-point_format#Half_precision_examples] -- [url https://codingnest.com/the-little-things-comparing-floating-point-numbers/] +- {url https://mathcenter.oxford.emory.edu/site/cs170/ieee754/} +- {url https://www.h-schmidt.net/FloatConverter/IEEE754.html} +- {url https://en.wikipedia.org/wiki/Half-precision_floating-point_format#Half_precision_examples} +- {url https://codingnest.com/the-little-things-comparing-floating-point-numbers/} diff --git a/src/teaching/upp-2025/week14/index.du b/src/teaching/upp-2025/week14/index.du index c9c67c0..db5a4a2 100644 --- a/src/teaching/upp-2025/week14/index.du +++ b/src/teaching/upp-2025/week14/index.du @@ -1,22 +1,23 @@ -# Задачи - УПП, Седмица 14, 15.01.2026 +'def title Задачи - УПП, Седмица 14, 15.01.2026 +'def desc Условията на задачите за упражнение. -'define expected-reading 1 min -'define created 14 January 2025 -'define edited 18 January 2025 -[$pagenav] +# {title} -GitHub Classroom: [url https://classroom.github.com/a/JjE8rZOx] +{pagenav 1 min;14 January 2025;18 January 2025} + +GitHub Classroom: {url https://classroom.github.com/a/JjE8rZOx} ## За решаване ### Задача 1 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise01.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise01.cpp} От входа получавате цяло неотрицателно число. -Използвайки [=единствено=] побитови операции, умножете числото по 8 и върнете резултата. +Използвайки {b единствено} побитови операции, умножете числото по 8 и върнете резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -27,14 +28,16 @@ GitHub Classroom: [url https://classroom.github.com/a/JjE8rZOx] |: 40 + ### Задача 2 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise02.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise02.cpp} От входа получавате цяло неотрицателно число. -Отместете битовете му с 3 позиция на ляво [=без=] да използвате побитови оператори и изкарайте резултата. +Отместете битовете му с 3 позиция на ляво {b без} да използвате побитови оператори и изкарайте резултата. -:table_2 +:table +:2 |= Вход |= Изход @@ -45,14 +48,16 @@ GitHub Classroom: [url https://classroom.github.com/a/JjE8rZOx] |: 304 + ### Задача 3 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise03.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise03.cpp} От входа получавате неотрицателно 32-битово число. -Използвайки [=единствено=] побитови операции, изкарайте 1 ако в числото има нечетен брой единици битове и 0 иначе. +Използвайки {b единствено} побитови операции, изкарайте 1 ако в числото има нечетен брой единици битове и 0 иначе. -:table_2 +:table +:2 |= Вход |= Изход @@ -63,14 +68,16 @@ GitHub Classroom: [url https://classroom.github.com/a/JjE8rZOx] |: 0 + ### Задача 4 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise04.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise04.cpp} От входа получавате неотрицателно 32-битово число. Разделете числото на 4 последователни 8-битови числа и изкарайте всяко от тях. -:table_2 +:table +:2 |= Вход |= Изход @@ -78,20 +85,22 @@ GitHub Classroom: [url https://classroom.github.com/a/JjE8rZOx] |: 76 204 133 210 + ### Задача 5 -.solution-link [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise05.cpp Решение] +.solution-link {url Решение;https://github.com/Syndamia/upp-2025-solutions/tree/main/Week14/Exercise05.cpp} От входа получавате две неотрицателни целия 32-битови числа. Разбийте всяко на три подчисла, две по 11 бита и едно по 10 бита. -След това от входа получавате буква: [`+`], [`-`], [`*`], [`/`]. +След това от входа получавате буква: {` +}, {` -}, {` *}, {` /}. Извършете операцията върху всеки две съответни подчисла от двете числа (т.е. върху първото подчисло на първото число и първото подчисло на второто число, второто подчисло на първото число и второто подчисло на второто число и ...). .note -[*(18.01.2026)*] Оправени примери +{i (18.01.2026)} Оправени примери -:table_2 +:table +:2 |= Вход |= Изход -- cgit v1.3.1-23-gd82d