Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added s3_db/course01/assets/fonts/times.ttf
Binary file not shown.
Binary file added s3_db/course01/assets/fonts/timesbd.ttf
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions s3_db/course01/docker/compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json
# @help: https://docs.docker.com/compose/compose-file

x-healthcheck: &healthcheck
interval: "10s"
retries: 3
start_period: "10s"
timeout: "5s"

secrets:
psql_pswd:
external: true
name: "${STACK}_psql_pswd"

services:
psql-primary:
deploy:
replicas: 1
environment:
POSTGRES_INITDB_ARGS: "--auth=scram-sha-256"
POSTGRES_PASSWORD_FILE: "/run/secrets/psql_pswd"
healthcheck:
<<: *healthcheck
test:
- "CMD"
- "pg_isready"
# @see: https://www.postgresql.org/docs/release
image: "docker.io/library/postgres:17.2"
ports:
- protocol: "tcp"
published: 5432
target: 5432
secrets:
- "psql_pswd"
user: "postgres"
volumes:
- source: "../sql/"
target: "/docker-entrypoint-initdb.d/"
type: "bind"
- source: "psql_data"
target: "/var/lib/postgresql/data/"
type: "volume"

volumes:
psql_data:
name: "{{.Service.Name}}-{{.Task.Slot}}_data"
41 changes: 41 additions & 0 deletions s3_db/course01/justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
_default:
@just --list

export STACK := env_var_or_default("STACK", "marine")

PSQL_SRV := STACK + "_psql-primary"
PSQL_SEC := "psql_pswd"

CID := "docker service ps --quiet $1 | xargs docker inspect --format {{.Status.ContainerStatus.ContainerID}}"
IID := "docker service ps --quiet $1 | xargs docker inspect --format {{.Spec.ContainerSpec.Image}}"
SECRET := "docker exec $1 cat /run/secrets/$2"

deploy:
docker stack deploy --compose-file "./docker/compose.yml" --detach=false "{{STACK}}"

exec cid=shell(CID, PSQL_SRV) iid=shell(IID, PSQL_SRV) secret=shell(SECRET, cid, PSQL_SEC):
docker run --rm -it --add-host "host.docker.internal:host-gateway" --env "PGPASSWORD={{secret}}" "{{iid}}" \
psql --host "host.docker.internal" --port 5432 --username "postgres"

init:
-docker swarm init
-openssl rand -base64 32 | docker secret create "{{STACK}}_psql_pswd" -

rm:
docker stack rm --detach=false "{{STACK}}"

rmv:
docker volume ls --filter "label=com.docker.stack.namespace={{STACK}}" --quiet | xargs --no-run-if-empty docker volume rm --force

fonts_dir := join("assets", "fonts")
typst_flags := "--font-path " + fonts_dir + " --ignore-system-fonts " + "--root " + justfile_directory()

typst_dst := join("target", "typst", "main.pdf")
typst_src := join("typst", "main.typ")

compile:
mkdir -p {{ parent_directory(typst_dst) }}
typst compile {{ typst_flags }} {{ typst_src }} {{ typst_dst }}

preview:
tinymist preview {{ typst_flags }} {{ typst_src }}
5 changes: 5 additions & 0 deletions s3_db/course01/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# s3_db/course01

```shell
just init deploy exec
```
7 changes: 7 additions & 0 deletions s3_db/course01/typst/acronym.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#import "@preview/abbr:0.1.0"

#set heading(outlined: false)

#abbr.list(columns: 1, title: [ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ])

#abbr.add("RDBMS", "Relational Database Management System")
1 change: 1 addition & 0 deletions s3_db/course01/typst/appendix.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
= ДОДАТКИ
13 changes: 13 additions & 0 deletions s3_db/course01/typst/body.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#set heading(numbering: "1.1")

= ОПИС ПРЕДМЕТНОГО СЕРЕДОВИЩА

= АНАЛІЗ ІСНУЮЧИХ ПРОГРАМНИХ ПРОДУКТІВ

= ПОСТАНОВКА ЗАВДАННЯ

= ПОБУДОВА ER-МОДЕЛІ

= РЕАЛІЗАЦІЯ БАЗИ ДАНИХ

= РОБОТА З БАЗОЮ ДАНИХ
3 changes: 3 additions & 0 deletions s3_db/course01/typst/contents.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#show heading: set align(center)

#outline(title: [ЗМІСТ])
18 changes: 18 additions & 0 deletions s3_db/course01/typst/hayagriva.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/mkdjr/hayagriva/refs/heads/main/hayagriva.schema.json
# @help: https://github.com/typst/hayagriva/blob/main/docs/file-format.md

# TODO: https://github.com/typst/hayagriva/pull/192

db_engines_2023:
title: "PostgreSQL is the DBMS of the Year 2023"
type: "web"
url:
date: "2024-01-02"
value: "https://db-engines.com/en/blog_post/106"

so_survey_2024:
title: "Developers want more, more, more: the 2024 results from Stack Overflow Developer Survey"
type: "web"
url:
date: "2024-07-24"
value: "https://stackoverflow.blog/2024/07/24/developers-want-more-more-more-the-2024-results-from-stack-overflow-s-annual-developer-survey"
31 changes: 31 additions & 0 deletions s3_db/course01/typst/intro.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#import "@preview/abbr:0.1.0"

= ВСТУП

Рейтинг DB-Engines #footnote[https://db-engines.com/en/ranking_trend] ранжує #abbr.s[RDBMS] за популярністю, охоплюючи
понад 410 систем. Критерії включають кількість результатів у пошукових системах при пошуку назв систем, обговорення
Google Trends, Stack Overflow, пропозиції роботи зі згадками про системи, кількість профілів у професійних мережах,
таких як LinkedIn, згадки в соціальних мережах, таких як Twitter. Оновлюється щомісяця.

PostgreSQL було визнано одним з найуспішніших проектів з відкритим вихідним кодом в історії @db_engines_2023. Це
пов'язане з послідовними та суттєвими вдосконаленнями системи, які сприяють надійності та стабільності, що вже четвертий
рік поспіль приводить до перемоги в категорії "#abbr.s[RDBMS] року 2023" (див. @img:db_engines_2023).

#figure(caption: [Порівняння популярності #abbr.s[RDBMS]], image("../assets/images/image_2024-12-28_19-01-52.png")) <img:db_engines_2023>

Stack Overflow - це цифрова платформа, на якій користувачі можуть ставити питання та залишати відповіді на запитання
інших користувачів. З 2011 року проводить щорічне опитування розробників під назвою "Stack Overflow Annual Developer
Survey" #footnote[https://survey.stackoverflow.co]. У травні 2024 року понад 65 000 розробників взяли учать в опитуванні
про програмування, роботу, штучний інтелект, а також про те, як вони до цього ставляться і не тільки.

Дослідження інструментів і технологій, які зараз використовуються та очікуються до впровадження розробниками, виявляє
помітні тенденції. PostgreSQL стала претендентом на першість у категорії баз даних @so_survey_2024. Вперше включена в
опитування в 2018 році, вона отримала помітний рівень прийняття серед розробників - 33%, на відміну від переважаючого
59% прийняття MySQL. З того часу PostgreSQL продемонструвала значне зростання використання. Шість років потому її
використовують 52% розробників (див. @img:so_survey_2024), що робить її найпопулярнішою #abbr.s[RDBMS] другий рік
поспіль.

#figure(
caption: [Результати опитування],
image("../assets/images/stackoverflow-dev-survey-2024-technology-most-popular-technologies-database-prof-social.png"),
) <img:so_survey_2024>
75 changes: 75 additions & 0 deletions s3_db/course01/typst/main.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#show heading: set text(weight: "regular")
#show heading.where(level: 1): set align(center)
#show heading.where(level: 1): set text(weight: "bold")
#show link: set text(fill: blue.darken(30%))

// TODO: https://github.com/typst/typst/issues/311
#show figure: it => block[ #it #v(-par.spacing) #{ "" } ]
#show heading: it => [ #it #v(-par.spacing) #{ "" } ]
#show list: it => [ #it #v(-par.spacing) #{ "" } ]
#show terms: it => [ #it #v(-par.spacing) #{ "" } ]

// Текст на сторінці розміщується з дотриманням наступних відступів: зверху, знизу, зліва – не менше 20 мм, справа – не
// менше 10 мм. При комп’ютерному наборі використовується шрифт Times New Roman, розмір шрифту – 14рр, міжрядковий інтервал
// – 1.5, вирівнювання абзаців – по ширині, перший рядок – відступ 1,25 см.
// TODO: https://github.com/typst/typst/issues/4224
#let leading = 1.5em
#let leading = leading - 0.75em
#set document(author: "", title: "БАЗА ДАНИХ ДЛЯ МОРСЬКОГО ВАНТАЖНОГО ТЕРМІНАЛУ")
#set page(margin: (bottom: 2cm, left: 2cm, right: 1cm, top: 2cm), paper: "a4")
#set par(first-line-indent: 1.25em, justify: true, leading: leading, spacing: leading)
#set text(font: "Times New Roman", lang: "ua", region: "ua", size: 14pt)

// Для нумерації сторінок, розділів, підрозділів, пунктів, підпунктів використовують арабські цифри. Першою сторінкою
// курсової роботи є титульний аркуш. На титульному аркуші номер сторінки не ставлять, на наступних сторінках номер
// проставляють зверху у правому куті. Кожен розділ повинен мати свій номер, який записується перед його назвою. Після
// номера розділу крапка не ставиться.
#set page(header: context{
let current = counter(page).get().first()
if current > 1 {
align(right, numbering("1", current))
}
})

// Кожен розділ необхідно розпочинати з нової сторінки. Розділ може складатися з підрозділів. Підрозділи нумерують у межах
// кожного розділу. Номер підрозділу складається з номера розділу і порядкового номера підрозділу, між якими ставлять
// крапку. У кінці номера підрозділу крапка так само не ставиться. Наступні розділи курсової роботи: ЗМІСТ, ВСТУП,
// ВИСНОВКИ, СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ не мають порядкового номера, але всі аркуші, на яких розміщені згадані
// структурні частини курсової, нумерують звичайним чином.
#show heading.where(level: 1): it => {
if it.supplement != [outline] {
pagebreak(weak: true)
}
it
}
#show outline: set heading(supplement: [outline])

// Рисунки (схеми, діаграми, скріншоти) і таблиці надаються безпосередньо після тексту, де вони згадані вперше. Рисунки
// позначають словом "Рисунок" і нумерують послідовно у межах розділу. Номер рисунку складається з номера розділу і
// порядкового номера рисунку в рамках розділу, між якими ставиться крапка. Після номеру рисунку крапка не ставиться.
// Підпис рисунків розміщують під самим рисунком по центру тексту.
#show figure.where(kind: image): set figure.caption(position: bottom, separator: [ ])
#show figure.where(kind: image): set figure(numbering: i => numbering("1.1", counter(heading).get().first(), i))
#show figure.where(kind: image): it => { show figure.caption: set align(center); it }
#show heading: it => { counter(figure.where(kind: image)).update(0); it }

// Таблиці, як і рисунки, нумерують послідовно у межах розділу. У лівому верхньому куті з абзацного відступу над таблицею
// розміщують напис "Таблиця" із зазначенням її номера. Номер таблиці складається з номера розділу і порядкового номера
// таблиці, між якими ставиться крапка. Після номеру таблиці крапка не ставиться. При переносі частини таблиці на наступну
// сторінку над частиною перенесеною таблиці з абзацного відступу вказують "Продовження таблиці" і номер таблиці.
#show figure.where(kind: table): set figure.caption(position: top, separator: [ ])
#show figure.where(kind: table): set figure(numbering: i => numbering("1.1", counter(heading).get().first(), i))
#show figure.where(kind: table): it => { show figure.caption: set align(left); it }
#show heading: it => { counter(figure.where(kind: table)).update(0); it }

// Додаток повинен починатися з нової сторінки та мати заголовок. Додатки позначаються великими літерами української
// абетки, за винятком літер Г, Є, І, Ї, Й, О, Ч, Ь.

#include "title.typ"
#include "contents.typ"
#include "acronym.typ"
#include "intro.typ"
#include "body.typ"
#include "summary.typ"
#include "reference.typ"
#include "appendix.typ"
8 changes: 8 additions & 0 deletions s3_db/course01/typst/reference.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#show heading: set align(center)

#bibliography(
"./hayagriva.yml",
// TODO: https://github.com/tetiuk/dstu-8302-2015/blob/main/dstu-8302-2015.csl
// style: "./dstu-8302-2015.csl",
title: [СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ],
)
1 change: 1 addition & 0 deletions s3_db/course01/typst/summary.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
= ВИСНОВКИ
4 changes: 4 additions & 0 deletions s3_db/course01/typst/title.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#set heading(outlined: false)

#counter(page).update(3)
#pagebreak()