ŠMFko je zážitková akce určená středoškolákům se zájmem o další sebevzdělání. Krom populárně naučných přednášek se na ŠMFku proběhneš venku, vyřádíš se ve sněhu, užiješ si veselý vnitřní program a taky se pobavíš během společného šarádění, lenošení nebo hraní na kytaru.
\r\n\r\n
InterSoB
\r\n\r\n
InterSoB je zábavná a poučná jednodenní soutěž středoškolských studentů, při které máte možnost podívat se netradičním způsobem do zákulisí Masarykovy univerzity, vyzkoušet si své schopnosti v mnoha různých oblastech, udělat si s kamarády zajímavý výlet po Brně a v neposlední řadě také poměřit svoje síly s dalšími týmy.
\r\n\r\n
Další semináře
\r\n\r\n
Korespondenční Seminář z Programování
\r\n\r\n
KSP je seminář určený pro studenty středních a základních škol, kteří mají zájem naučit se něco z oblasti algoritmů, logických úloh, programování a informatiky vůbec. Na své si však přijdou i příznivci matematiky (a vlastně libovolného přemýšlení), ježto oba obory mají mnoho společného.
\r\n\r\n
FYzikální KOrespondenční Seminář
\r\n\r\n
FYKOS pro vás představuje možnost si zajímavým způsobem rozšířit chápání fyziky a proniknout do dalších, dosud nepoznaných, oblastí této vědy. Cílem FYKOSu je rozvíjet fyzikální myšlení, protože člověk, který se umí nad (nejen fyzikálními) problémy zamyslet a cítí touhu dobrat se k nějakému řešení, se uplatní všude, kde si schopností lidského mozku cení.
Řešením úloh tohoto semináře získáš mnoho matematických znalostí a naučíš přesněji a srozumitelněji formulovat své myšlenky a závěry. Seminář je dobrou přípravou pro účast v nejrůznějších matematických soutěžích i pro další studium matematiky, ale schopnost logického myšlení, kterou si můžeš procvičit, se ti v životě bude hodit, i když se v něm třeba právě matematice věnovat nehodláš.
\r\n\r\n
Pro mladší sourozence
\r\n\r\n
Pikomat
\r\n\r\n
Pikomat je matematický korespondenční seminář určený žákům šestých až devátých tříd základních škol a studentům odpovídajících ročníků víceletých gymnázií. Spočívá v řešení několika úloh propojených příběhem. Na jaře se koná soustředění pro nejlepší řešitele, v létě pak tábor pro všechny zájemce.
\r\n\r\n
Výfuk (VÝpočty Fyzikálních UKolů)
\r\n\r\n
Výfuk je samostatný korespondenční seminář Matfyzu, který spadá pod Katedru didaktiky fyziky. Během školního roku kromě šesti sérií semináře organizátoři připravují i podzimní a jarní setkání, letní tábor a Náboj junior.
\r\n\r\n
Databáze mimoškolních aktivit
\r\n\r\n
Je-li ti výčet aktivit výše málo nebo tě žádná z nich nezaujala, doporučujeme navštívit web organizace ProStředoškoláky, jež zde připravila rozsáhlou databázi mimoškolních aktivit a akcí. Krom toho organizace pořádá soutěž Středoškolák roku, ve které každý rok oceňuje nejaktivnější středoškoláky. Věnuješ-li se tedy mimoškolně něčemu ve větším měřítku, neváhej se do soutěže přihlásit.
ŠMFko je zážitková akce určená středoškolákům se zájmem o další sebevzdělání. Krom populárně naučných přednášek se na ŠMFku proběhneš venku, vyřádíš se ve sněhu, užiješ si veselý vnitřní program a taky se pobavíš během společného šarádění, lenošení nebo hraní na kytaru.
InterSoB je zábavná a poučná jednodenní soutěž středoškolských studentů, při které máte možnost podívat se netradičním způsobem do zákulisí Masarykovy univerzity, vyzkoušet si své schopnosti v mnoha různých oblastech, udělat si s kamarády zajímavý výlet po Brně a v neposlední řadě také poměřit svoje síly s dalšími týmy.
KSP je seminář určený pro studenty středních a základních škol, kteří mají zájem naučit se něco z oblasti algoritmů, logických úloh, programování a informatiky vůbec. Na své si však přijdou i příznivci matematiky (a vlastně libovolného přemýšlení), ježto oba obory mají mnoho společného.
FYKOS pro vás představuje možnost si zajímavým způsobem rozšířit chápání fyziky a proniknout do dalších, dosud nepoznaných, oblastí této vědy. Cílem FYKOSu je rozvíjet fyzikální myšlení, protože člověk, který se umí nad (nejen fyzikálními) problémy zamyslet a cítí touhu dobrat se k nějakému řešení, se uplatní všude, kde si schopností lidského mozku cení.
Řešením úloh tohoto semináře získáš mnoho matematických znalostí a naučíš přesněji a srozumitelněji formulovat své myšlenky a závěry. Seminář je dobrou přípravou pro účast v nejrůznějších matematických soutěžích i pro další studium matematiky, ale schopnost logického myšlení, kterou si můžeš procvičit, se ti v životě bude hodit, i když se v něm třeba právě matematice věnovat nehodláš.
Pikomat je matematický korespondenční seminář určený žákům šestých až devátých tříd základních škol a studentům odpovídajících ročníků víceletých gymnázií. Spočívá v řešení několika úloh propojených příběhem. Na jaře se koná soustředění pro nejlepší řešitele, v létě pak tábor pro všechny zájemce.
Výfuk je samostatný korespondenční seminář Matfyzu, který spadá pod Katedru didaktiky fyziky. Během školního roku kromě šesti sérií semináře organizátoři připravují i podzimní a jarní setkání, letní tábor a Náboj junior.
\r\n\r\n
Databáze mimoškolních aktivit
\r\n\r\n
Je-li ti výčet aktivit výše málo nebo tě žádná z nich nezaujala, doporučujeme navštívit web organizace ProStředoškoláky, jež zde připravila rozsáhlou databázi mimoškolních aktivit a akcí. Krom toho organizace pořádá soutěž Středoškolák roku, ve které každý rok oceňuje nejaktivnější středoškoláky. Věnuješ-li se tedy mimoškolně něčemu ve větším měřítku, neváhej se do soutěže přihlásit.
Korekturovátko slouží k přidávání korektur do PDF souborů. Umožňuje přidávat a komentovat korektury a označovat je jako k zanesení, zanesené nebo irelevantní. Rovněž umožňuje o PDF říci, že jsou právě zanášeny korektury nebo že je zastaralé.
\r\n\r\n
Použití
\r\n\r\n
Kliknu do PDF tam, kam chci zadat korekturu, napíši text a kliknu na Oprav! (nebo Ctrl-Enter). Korektura se zobrazí na pravé straně červeně. Pokud chci korekturu okomentovat, kliknu na ikonu , napíši komentář a kliknu na Oprav! (nebo Ctrl-Enter). Komentář se zobrazí pod původní korekturou.
\r\n\r\n
Tlačítka u korektury
\r\n\r\n
\r\n\t
– smazat korekturu
\r\n\t
– označt koreturu jako zanesenou
\r\n\t
– označit korekturu jako irelevantní (není to chyba, nebude zaneseno)
\r\n\t
– označt koreturu jako připravenou k zanesení
\r\n\t
– upravit text korektury
\r\n\t
– okomentovat korekturu
\r\n\t
– srolovat korekturu
\r\n
\r\n\r\n
Stavy
\r\n\r\n
Korektura
\r\n\r\n
\r\n\t
K vyřešení (červená) – bug report či návrh úpravy, probíhá diskuze, zatím nerozhodnuto
\r\n\t
Zanesená (modrá) – zanesená v TeXu
\r\n\t
Irelevantní (šedá) – není to chyba, nebude zanesena
\r\n\t
K zanesení (zelená) – rozhodnuto, čeká na zanesení do TeXu
\r\n
\r\n\r\n
PDF
\r\n\r\n
\r\n\t
Přidávání – probíhá přidávání korektur
\r\n\t
Zanášení (žluté pozadí) – probíhá zanášení korektur do TeXu
\r\n\t
Zastaralé (červené pozadí) – PDF je zastaralé, nepřidávat nové korektury
\r\n
\r\n
",
+ "enable_comments": false,
+ "registration_required": false,
+ "sites": [
+ 1
+ ],
+ "template_name": "",
+ "title": "Nápověda ke korekturovátku",
+ "url": "/korektury/help/"
+ },
+ "model": "flatpages.flatpage",
+ "pk": 30
}
]
diff --git a/docs/zapisy/2021-12-06-testovani_dokumentace_codereview.md b/docs/zapisy/2021-12-06-testovani_dokumentace_codereview.md
new file mode 100644
index 00000000..224ea529
--- /dev/null
+++ b/docs/zapisy/2021-12-06-testovani_dokumentace_codereview.md
@@ -0,0 +1,173 @@
+# Postup zkrášlení kódu M&Mího webu
+
+## Obecně o webu
+
+- Python, Django, spousta nějakých rozšíření, frontend HTML + CSS + trocha JS
+- Velké břímě historie, kterou nejspíš nechceme zahodit
+ - Změny v M&M někdy dost zamotají potřebný kód (tituly)
+- Občas je potřeba dělat opravy rychle
+
+## Aktuální stav
+
+- Zběsile zbastlený kód
+ - „Co je to ‚single responsibility principle‘?“ ☺
+- Dost netriviální množství objektů a jejich vazeb
+ - Dost možná do velké míry inherentní složitost
+- Webaři aktuálně relativně zběhlí v programování (ale je potřeba myslet na to, že to tak být nemusí)
+- Webaři stárnou (Jethro, Kristý, Anet) a mizí (Pavel, Káťa), je potřeba web připravit na předání
+- Kód je rozdělený mezi orgy a jeden „nerozumí“ tomu, co druhý napsal (musí to vyčíst z kódu, nezná souvislosti, …)
+ - Noví orgové se aktuálně musí ptát, což je jim nepříjemné a nutí je umět formulovat dotazy
+
+### Invarianty
+
+- Není to práce, ale zábava-ish → libovolný proces nesmí být (moc) na obtíž.
+ - I malé nepohodlí je potřeba vyvážit relativně velkým přínosem
+ - nebo dostatečně zřejmou vidinou budoucího pohodlí / minimalizace nepohodlí
+- Nejsme programátoři, spíš jsme bastlíři kódu (kteří znají rozumnou podmnožinu syntaxe Pythonu)
+ - Zvlášť noví orgové
+ - Nechceme cílit na mega-profi kód, je to nedosažitelný cíl
+ - Nejspíš to do nějaké míry ubastlené bude pořád, ta míra závisí na zkušenosti aktuálních webařů
+ - Nástroje nás nesmí moc mást.
+- Děláme to zadarmo jeden večer v týdnu
+ - Vývoj jde pomalu, často pomaleji než vývoj knihoven
+ - → kód se rozbíjí i sám
+- Běží to na Gimlim
+ - Debian (old)stable → nemůžeme používat moc nové featury Pythonu
+ - Aktuálně Python 3.7.3
+- Webaři jsou náhodně vzniklá skupina lidí.
+ - Různé nástroje, různé operační systémy
+ - Nechceme vynucovat konkrétní metody, multiplatformní nástroje asi požadovat můžeme
+ - Na serveru může běžet cokoliv, co tam jde rozběhnout
+ - Kód by neměl být moc složitý / matoucí / kompaktní (?)
+ - případně fakt hodně okomentovaný
+
+## O co se snažíme
+
+- Zpřístupnit vývoj novým webařům
+- Umožnit chápání i cizího kódu co nejjednodušeji
+- Nevzít si s sebou implementační tajemství ~~do hrobu~~ pryč z M&Mka
+
+```graphviz
+digraph "Závislosti věcí" {
+ ss -> sdil -> doku -> cs;
+ ss -> cit ->ref -> cs;
+ ref -> nrt -> tst -> cs;
+ sdil -> cr -> cs
+ ss -> nrt;
+ ss[label="Současný stav",shape=box];
+ cit[label="čitelný kód"];
+ cs[label="Cílový stav",shape=box];
+ ref[label="refactoring"];
+ nrt[label="nerozbít to"];
+ tst[label="testy"];
+ doku[label="dokumentace (vývojářská)"];
+ sdil[label="chápání kódu ostatních / stávajícího"];
+ cr[label="code review"];
+ nrt,sdil,cit[shape=hexagon];
+ tst,doku,cr[color=blue];
+}
+```
+
+## Code review
+
+Aktuálně: Pavel občas z rozmaru čte diffy; párkrát jsme zkoušeli [programovat v páru](https://mam.mff.cuni.cz/wiki/Web/Tipy/PairProgramming), je to relativně časově náročné.
+
+- Nevynucovat
+- Primární motivace je umožnit nějak vidět změny a případně k nim dávat komentáře, jak stylu „tohle mi není jasné“, tak i „tohle by chtělo přepsat“.
+- Chceme hlavně vytvořit příležitost ke čtení cizího kódu a seznamování se s ním (i v zájmu zaučování nových webařů)
+
+### Názory
+
+- spíš post-hoc
+- Možná code-review toho, co jde na produkci
+- Chceme umět komentovat konkrétní řádky kódu
+
+- Gitea/gitlab?
+ - Klikátko a barevný řádky a vyhledávání jsou fajn (gitlab, gitea)
+ - Jethro: je fajn umět skočit na definici
+ - Kombinace s CI
+ - Pokud bude gitea v něčem nedostatečná, tak hrozí, že bude potřeba migrovat znovu, což je nepraktické
+ - Gitlab je asi častější než gitea → je lepší názor si na to zvyknout
+
+__Závěr:__ Zkusíme to hodit do GitLabu (nejspíš veřejného\*), zavedeme pull-requesty do `master` větve, náhodně se budeme přiřazovat a používat ho nějak intuitivně.
+
+\*: Ve fakultním neumíme přidávat další uživatele, v KAMím zas možná není CI.
+
+## Testy
+
+Aktuálně: pár testů na dohromady řádově 4 funkce, drobný pokus o TDD, jenž narazil na úskalí reálného světa. Lokální spuštění testů trvá relativně dlouho, nejspíš kvůli spoustě migrací.
+
+- Potřebujeme ověřit, že to funguje a že to _pořád_ funguje
+
+- CI? Coverage?
+
+### Názory
+
+- PyTest je fajn
+- Testovat frontend?
+ - Jethro: při nasazení by se mohly dělat screenshoty celých vybraných stránek přes Selenium (nebo obdobné) a hlásit rozdíly
+
+__Závěr:__ Backend testujeme PyTestem (`./manage.py test`), u frontendu výhledově zkusíme ty vizuální diffy a pak se uvidí, CI podle webového klikátka na code review. Bylo by dobré mít rozumná testdata, ať se nemusí mockovat moc věcí.
+
+## Formát kódu
+
+Aktuálně: Jakýsi coding style zhruba existuje, není popsaný, šíří se lidovou slovesností.
+
+- Nesmí být striktně vynucovaný
+- Musel by být hodně nastavitelný
+ - Nechceme mít kód plný `#NOQA: WTF42`
+- Nejspíš vždycky bude mít false positives (`seminar.utils.roman_numerals`) i false negatives (`seminar.models.tvorba.Cislo.posli_cislo_mailem`)
+ - Možná dobrý sluha, ale určitě špatný pán (also: špatná zkušenost ☺)
+- __Důsledek:__ Hrozí, že těch falešných varování bude moc, čímž to ztratí smysl úplně
+ - Potenciálně by šlo aplikovat jen lokálně na změny?
+
+### Názory
+
+- P: nemyslím si, že zvládneme mít „průhledný kód“ (dostatečně konzistentní kód, aby ho člověk přestal vnímat a spíš viděl myšlenky).
+
+- P: Kecadla do kódu trochu zavání větším peklem než užitkem (takže black a flake8 jsou ze hry); isort možná dává smysl; je otázka, jestli použít mypy, ale typové značky v kódu spíš chceme (zvlášť u věcí, které nejsou prostě django view – typicky utils.)
+ - J: Divné (=Pavlovo) groupování importů je spíš matoucí, spíš moc nepomáhalo
+
+- P (doplněno zpětně): pydocstyle vynucuje PEP-257, který se možná tluče se sphinxem…
+- P (též zpětně): Možná by se mohl dát použít pylint, tomu jde aspoň vysvětlit coding style a nerazí tupě PEP-8, ale nastavovat ho je asi větší porod, než jak moc pomůže…
+
+__Závěr:__ Kecadla na formát spíš nechceme; isort by mohl být fajn, ale bylo by dobré mít rozdělené bloky „náš kód“, „standardní knihovna“ a „Django a další balíčky z PyPA“; u našeho kódu (utils, obecně ne-Django věci) chceme držet záměr (na úrovni dohody) psát signatury funkcí a v případě jejich přítomnosti se nechat varovat při porušení signatury.
+
+- P (večerní prokrastinace): Bandit vypadá, že hlásí jen strašně obvious věci by default, nepřijde mi jako moc úžasné vylepšení. Do CI možná dobrý
+
+## Dokumentace
+
+Aktuálně: něco málo je na wiki (`/Web/`), občas má nějaká funkce docstring, obecně je toho málo
+
+### Požadavky
+
+- Jedno autoritativní místo a dá se najít
+- Dostatečně „blízko“ kódu
+ - nastavit mindset na psaní dokumentace „rovnou“?
+- Umožnit i obecný text, ne jen komentáře kódu (modulů, funkcí)
+
+
+### Bonusy
+
+- Zajišťování konzistence s uživatelskou dokumentací
+ - aktuálně wiki
+- Podpora i dalších jazyků (Vue, Javascript, CSS, možná django-templates)
+
+### Názory
+
+- Jde to dělat sphinxem
+ - Stínovlas by mohl vědět v CZ.NICu se sphinx jede. Případně zkusit zjistit, co umí jejich Akademie
+- Free-textová dokumentace (architektura ap.) má být nezávislá na dokumentaci konkrétního kódu, ale je fajn, když se to pak spojí dohromady, jde-li to.
+ - Lepší, když se obojí dá dělat stejným nástrojem
+- Káťa má někdy pocit, že tráví spoustu času tím, že hledá který soubor vůbec upravit; to má v naší dokumentaci být.
+
+__Závěr:__ Zkusíme použít sphinx (z nedostatku vlastních zkušeností a kvůli jeho popularitě), když se nám to nebude líbit, tak budeme řešit dál. Bylo by fajn najít nějaký workshop, bude to rychlejší nalejvárna než číst dokumentaci. V krátkodobém výhledu stáhneme vývojovou dokumentaci z webu do repozitáře a zprovozníme někde automatické buildy (aby se dala číst jako člověk a ne jako stroj).
+
+## Uživatelská dokumentace
+
+- K: Dělat ji ve spolupráci s těma uživatelema
+- P: Dávný Hedgedoc může případně sloužit jako základ osnovy
+- K: Dost možná nevíme, co bolí víc a co míň
+- Jethro: Musí být na wiki, jinak tím zmateme oržstvo
+
+__Závěr:__ Dokumentace bude na wiki (, výhledově možná ve stejné složce v dalších souborech), bude vznikat podle našich pocitů a dotazů od ostatních; výhledově bude schůzka na ukázání featur nového webu a tam se dosbírají náměty na to, co sepsat.
diff --git a/galerie/templates/galerie/Galerie.html b/galerie/templates/galerie/Galerie.html
index b2dfe994..aadc969e 100644
--- a/galerie/templates/galerie/Galerie.html
+++ b/galerie/templates/galerie/Galerie.html
@@ -62,11 +62,12 @@
{% endwith %}
{% endif%}
+
+ class="obrazek">
{% if obrazky_dalsi %}
{% with obrazky_dalsi|first as dalsi_obrazek %}
diff --git a/korektury/admin.py b/korektury/admin.py
index 79dfffb1..64b2032f 100644
--- a/korektury/admin.py
+++ b/korektury/admin.py
@@ -2,6 +2,8 @@ from django.contrib import admin
from reversion.admin import VersionAdmin
from korektury.models import KorekturovanePDF
+from django.core.mail import send_mail
+from django.urls import reverse
# Register your models here.
class KorekturovanePDFAdmin(VersionAdmin):
@@ -16,11 +18,31 @@ class KorekturovanePDFAdmin(VersionAdmin):
fieldsets = [
(None,
{'fields':
- ['pdf', 'cas', 'org', 'stran', 'nazev', 'komentar']}),
+ ['pdf', 'cas', 'org', 'stran', 'nazev', 'komentar', 'poslat_mail']}),
# (u'PDF', {'fields': ['pdf']}),
]
list_display = ['nazev', 'cas', 'stran', 'org']
list_filter = []
search_fields = []
+ def save_model(self, request, obj, form, change):
+ super().save_model(request, obj, form, change)
+ if not change and obj.poslat_mail: # Je nový a má se poslat mail
+ odkaz = request.build_absolute_uri(reverse('korektury', kwargs={'pdf': obj.id}))
+ odesilatel = 'korekturovatko-nove-pdf@mam.mff.cuni.cz'
+ prijemce = 'org@mam.mff.cuni.cz'
+ predmet = f'Nové korektury: {obj.nazev}'
+ text = f'''\
+V korekturovátku se objevil nový soubor: {obj.nazev}
+{odkaz}
+
+Popis souboru:
+{obj.komentar}
+
+---
+S pozdravem a korekturám zdar!
+Korekturovátko
+'''
+ send_mail(predmet,text,odesilatel,[prijemce])
+
admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin)
diff --git a/korektury/migrations/0018_korekturovanepdf_poslat_mail.py b/korektury/migrations/0018_korekturovanepdf_poslat_mail.py
new file mode 100644
index 00000000..c93b957e
--- /dev/null
+++ b/korektury/migrations/0018_korekturovanepdf_poslat_mail.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.24 on 2021-12-05 23:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('korektury', '0017_auto_20190610_2358'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='korekturovanepdf',
+ name='poslat_mail',
+ field=models.BooleanField(default=True, help_text='Určuje, zda se má o nově nahraném PDF poslat e-mail do mam-org. Při upravování existujícího souboru už nemá žádný vliv.', verbose_name='Poslat mail o novém PDF'),
+ ),
+ ]
diff --git a/korektury/models.py b/korektury/models.py
index f22c6874..240323a8 100644
--- a/korektury/models.py
+++ b/korektury/models.py
@@ -63,6 +63,10 @@ class KorekturovanePDF(models.Model):
status = models.CharField(u'stav PDF',max_length=16, choices=STATUS_CHOICES, blank=False,
default = STATUS_PRIDAVANI)
+ poslat_mail = models.BooleanField('Poslat mail o novém PDF', default=True,
+ help_text='Určuje, zda se má o nově nahraném PDF poslat e-mail do mam-org. Při upravování existujícího souboru už nemá žádný vliv.',
+ )
+
#TODO Nepovinný foreign key k číslu
diff --git a/korektury/static/korektury/opraf.css b/korektury/static/korektury/opraf.css
index 4a731de4..d5b21da2 100644
--- a/korektury/static/korektury/opraf.css
+++ b/korektury/static/korektury/opraf.css
@@ -89,6 +89,7 @@ form {
border: 4px solid red;
border-radius: 10px;
background-color: white;
+ opacity: 80%;
}
.close-button{
background-color: yellow;
diff --git a/korektury/templates/korektury/opraf.html b/korektury/templates/korektury/opraf.html
index 02af7d56..2dbc528b 100644
--- a/korektury/templates/korektury/opraf.html
+++ b/korektury/templates/korektury/opraf.html
@@ -4,10 +4,11 @@
+
Korektury {{pdf.nazev}}
-
+
Korektury {{pdf.nazev}}
{% if pdf.status == 'zanaseni' %}
Probíhá zanášení korektur, zvažte, zda chcete přidávat nové
{% endif %}
{% if pdf.status == 'zastarale' %}
Toto PDF je již zastaralé, nepřidávejte nové korektury