Mag

Chat včera a dnes

Written by

in

včera 17:45

Joyee, pokračujeme v projekte Magazín. Naväzuj na koncepciu interaktívneho vizuálneho magazínu, ktorú sme práve rozpracovali: WordPress ako základ, jednoduchá téma, vlastné pluginy iba tam, kde bezplatné nástroje nestačia, redakčné „sadzačské zrkadlo“, klasifikácia dôležitosti článkov, obrázková navigácia s náhľadmi cieľových stránok, dynamické listovanie/leporelo/noviny, prirodzené ovládanie myšou a dotykom a možnosť neskoršieho využitia Babylon.js. Projekt má byť navrhnutý modulárne tak, aby jednotlivé časti mohli implementovať rôzne AI nástroje. Najprv chceme vytvoriť architektúru a MVP, nie hneď programovať všetko.

Áno, Slavo. A myslím, že teraz je dôležité neísť do kódu, ale najprv si urobiť kostru systému tak, aby nás WordPress ani konkrétny AI nástroj neskôr nezamkol.

Z toho, čo sme rozpracovali, by som Magazín chápala ako vizuálny publikačný systém nad WordPressom, nie ako ďalšiu „peknú WordPress tému“.

1. Základná architektúra

Vidím tam šesť pomerne samostatných vrstiev:

A. WordPress / obsah

  • články
  • stránky
  • kategórie
  • médiá
  • autorstvo
  • základné metadáta

To necháme čo najviac natívne. WordPress je tu databáza a redakčný základ, nie miesto, kde budeme všetko prerábať.

B. Klasifikačná vrstva
Tu vznikne náš vlastný model článku.

Nie iba:

kategória → článok

ale napríklad:

článok → význam → priorita → vizuálna úroveň → vzťah k ostatnému obsahu

Čiže presne tá myšlienka „dôležitosť článku“, ktorú sme už načali.

A veľmi sa mi páči, že to môže byť obyčajné vlastné pole. Nemusíme kvôli tomu stavať monštrum.

C. Redakčné sadzačské zrkadlo

Toto bude podľa mňa jeden z najzaujímavejších modulov.

Redaktor nebude iba vypĺňať formulár:

nadpis / text / obrázok / kategória.

Ale bude vidieť približný výsledok toho, čo vytvára.

Teda niečo medzi:

  • redakčným editorom,
  • sadzačským stolom,
  • storyboardom magazínu.

A pritom by mal byť výsledok uložený v štandardnej WP štruktúre, nie v nejakej našej nepreniknuteľnej databáze.

D. Vizuálna navigácia

Tu už sa Magazín začína odlišovať od klasického webu.

Namiesto:

zoznam článkov → klik → článok → späť

máme:

obraz → náhľad cieľovej stránky → prirodzený prechod → ďalší obsah

Náhľad môže byť živý výrez cieľovej stránky, prípadne generovaný thumbnail.

A práve tu sa dá neskôr krásne experimentovať s:

  • leporelom,
  • horizontálnym listovaním,
  • novinovou dvojstranou,
  • kartami,
  • priestorovým magazínom.

E. Navigačný engine

Toto by som oddelila od samotného vizuálu.

Engine rozhoduje:

čo je ďalšie?

Vizuál rozhoduje:

ako sa to zobrazí?

To je veľmi dôležité kvôli modularite.

Napríklad jeden AI nástroj môže vytvoriť klasifikačný model a iný môže riešiť vizuálne usporiadanie. Nemusia o sebe nič vedieť.

F. Prezentačný engine

Až úplne nakoniec:

  • DOM/CSS/JS
  • touch
  • mouse
  • drag
  • scroll
  • animácie
  • lazy loading
  • prípadne neskôr Babylon.js.

Babylon.js by som teraz vôbec nedávala do MVP. Ale architektúru by som pripravila tak, aby raz mohol byť iba ďalším rendererom.

To je presne ten rozdiel medzi:

„postavíme Babylon magazín“

a

„postavíme magazín, ktorý môže raz používať Babylon“.

Tá druhá cesta je podľa mňa správna.


2. A hlavne: oddeliť obsah od jeho zobrazenia

Toto by som dala medzi základné princípy projektu.

Jeden článok môže mať:

obsahový model
→ titulok
→ perex
→ text
→ obrázok
→ dôležitosť
→ tematické väzby

ale môže byť vykreslený ako:

Renderer A
→ klasická webová stránka

Renderer B
→ magazínová karta

Renderer C
→ novinová dvojstrana

Renderer D
→ leporelo

Renderer E
→ budúci 3D priestor

A obsah sa kvôli tomu nemusí meniť.


3. MVP by som preto drasticky zmenšila

Prvá verzia podľa mňa nepotrebuje ani „interaktívne noviny“, ani Babylon.

Stačilo by overiť päť vecí:

  1. WordPress článok
  2. vlastné pole Dôležitosť
  3. redakčné zrkadlo
  4. vizuálna navigácia s náhľadmi
  5. jeden jednoduchý interaktívny spôsob listovania

Ak toto funguje, máme dôkaz, že architektúra stojí.

Potom môžeme pridávať ďalšie renderery bez toho, aby sme rozkopali základ.


4. Modularita pre rôzne AI

A toto je podľa mňa dokonca jeden z hlavných dôvodov, prečo to celé stavať takto.

Mohli by sme mať napríklad:

MAGAZÍN
│
├── WordPress
│   └── obsah
│
├── Content Model
│   ├── článok
│   ├── obrázok
│   └── metadáta
│
├── Classification
│   └── dôležitosť / vzťahy / priority
│
├── Editorial Mirror
│   └── sadzba
│
├── Navigation Engine
│   └── čo nasleduje
│
├── Renderer
│   ├── Web
│   ├── Cards
│   ├── Newspaper
│   ├── Accordion
│   └── Babylon.js
│
└── AI Interface
    ├── AI A
    ├── AI B
    └── AI C

A medzi modulmi by nemalo byť:

„AI mi vygenerovalo tento kus PHP.“

Ale skôr:

„Modul dostane dáta v dohodnutom formáte a vráti výsledok v dohodnutom formáte.“

To je podstatne robustnejšie.


5. Čo by som urobila teraz

Ja by som ďalší krok nevenovala programovaniu.

Najprv by sme vytvorili jednu architektonickú mapu Magazínu:

čo existuje → kto to vlastní → aké dáta prijíma → čo vytvára → s čím komunikuje.

A až z nej vyberieme MVP, môžeme presne povedať:

toto zostáva WordPress,
toto vyrieši existujúci bezplatný plugin,
toto si musíme napísať sami,
toto zatiaľ iba pripravíme ako rozhranie.

Tým sa vyhneme presne tomu, čo sme riešili pri WordPresse: že začneme vyrábať plugin a o tri týždne zistíme, že sme vlastne naprogramovali polovicu redakčného systému. 😄

Takže ja by som teraz otvorila architektúru Magazínu a začala od dátového modelu článku. To je podľa mňa prvý skutočný stavebný kameň.

Áno. Toto je presne tá korekcia, ktorú sme potrebovali. A teraz už by som OBJECT CONTRACT vôbec nebrala ako dátový model. Je to kontrolný protokol prevzatia objektu.

To zásadne mení poradie.

MAG INPUT ENG: správne poradie

ZDROJ
ČLOVEK / NET / URL / SÚBOR
        │
        ▼
┌──────────────────────────┐
│ 1. OBJECT CONTRACT       │
│    KONTROLA PREVZATIA     │
└──────────────────────────┘
        │
        ▼
   ČO VLASTNE PREBERÁME?
        │
        ▼
   IDENTIFIKÁCIA
        │
        ▼
   KLASIFIKÁCIA
        │
        ▼
   POST TYPE / TYP OBJEKTU
        │
        ▼
   SCHÉMA TYPU
        │
        ▼
   ČO MÁME / ČO CHÝBA?
        │
        ▼
   DOPLNENIE / OVERENIE
        │
        ▼
   VALIDÁCIA
        │
        ▼
┌──────────────────────────┐
│ 2. STORAGE MAPPING       │
│    KDE A AKO ULOŽIŤ      │
└──────────────────────────┘
        │
        ▼
       WP / META /
     TAXONÓMIA / VZŤAHY
        │
        ▼
      SQL / WP OBJEKT

Čiže dve úplne odlišné veci

OBJECT CONTRACT

odpovedá:

„Môžem tento objekt bezpečne prevziať?“

Storage Mapping

odpovedá:

„Keď ho už poznám, kam a akým spôsobom ho uložím?“

A my sme ich predtým začali miešať. To bola moja chyba.


Čo teda OBJECT CONTRACT kontroluje?

Nie databázu.

Kontroluje vstupný objekt.

Musí zistiť minimálne:

1. Existuje vstup?

Máme skutočne čo spracovať?

2. Je zdroj čitateľný?

URL funguje, dokument sa dá načítať, text je dostupný atď.

3. Čo je predmetom vstupu?

Napríklad:

ARTICLE
PRODUCT
SERVICE
OFFER
REQUEST
PERSON
ORGANIZATION
...

4. Aký je konkrétny typ?

PRODUCT
 → PARAGLIDER

5. Je možné identifikovať konkrétny predmet?

OZONE
 → ENZO 3
 → konkrétna varianta

6. Má typ definovanú schému?

Ak nie, vznikne návrh novej schémy, nie okamžité chaotické uloženie.

7. Sú dostupné povinné údaje?

✓ manufacturer
✓ model
✓ year
✗ certification

8. Sú údaje jednoznačné a typovo správne?

Napríklad:

flight_hours = "stoosemdesiat"

je síce ľudsky pochopiteľné, ale pre náš dátový kontrakt ešte nie je normalizované číslo.

9. Sú vzťahy jednoznačné?

Výrobca ≠ dodávateľ ≠ autor ponuky ≠ vlastník.

Toto je presne miesto, kde zabránime mystifikácii.

10. Je objekt pripravený na odovzdanie?

Až potom:

VALID ✓

A až potom sa rieši WordPress

A tu sa vraciame k tomu, čo sme už povedali:

„Tento objekt je PRODUCT / PARAGLIDER.
Má tieto vlastnosti a tieto vzťahy.“

Storage Mapping sa pozrie:

Toto už WordPress vie uložiť ako post.

Toto patrí do post_title.

Toto je taxonómia.

Toto je post meta.

Toto je referencia na inú WP entitu.

A toto WP natívne nevie dostatočne dobre, takže až tu potrebujeme vlastné riešenie.


A tým sa nám vyriešil aj problém tisícov typov.

MAG INPUT ENG sa nemusí pýtať:

„Kam uložiť paraglider?“

Najprv musí vedieť:

„Čo je paraglider a akú má schému?“

Až potom sa použije príslušné storage mapping.

Takže by som teraz OBJECT CONTRACT v1 definovala veľmi stručne:

OBJECT CONTRACT je záväzná vstupná podmienka MAG INPUT ENG. Definuje, aký objekt môže byť prevzatý do ďalšieho spracovania a aké podmienky musí spĺňať. Nedefinuje jeho fyzické uloženie.

Toto by som už považovala za pevné pravidlo architektúry.

A tým pádom sa nám konečne prestávajú miešať tri rôzne otázky:

Čo som dostala? → Čo to znamená? → Kam to uložím?

Presne v tomto poradí.

OBJECT CONTRACT je záväzná vstupná podmienka MAG INPUT ENG

Neviem, či rozumiem tomuto zápisu. Neprehodila si poradie?

Áno. Máš pravdu, formulovala som to nešťastne a tým som obrátila význam.

Ak sme sa dohodli, že OBJECT CONTRACT má začať kontrolou toho, čo má MAG INPUT ENG prevziať, potom nemôže byť „vstupnou podmienkou“ v zmysle hotového objektu. Veď práve prevzatím vstupu sa začína jeho práca.

Správne je:

OBJECT CONTRACT je kontrolný protokol, podľa ktorého MAG INPUT ENG preberá a spracúva vstupný objekt.

Teda poradie je:

ZDROJ
ČLOVEK / NET / URL / SÚBOR
        │
        ▼
   PREVZATIE VSTUPU
        │
        ▼
   OBJECT CONTRACT
        │
        ├── ČO SME DOSTALI?
        ├── JE TO ČITATEĽNÉ?
        ├── ČO JE PREDMETOM?
        ├── AKÝ JE TYP?
        ├── AKÝ JE KONKRÉTNY OBJEKT?
        ├── AKÉ ÚDAJE UŽ MÁME?
        ├── AKÉ CHÝBAJÚ?
        └── ČO TREBA OVERIŤ?
                │
                ▼
          SPRACOVANIE
                │
                ▼
           VALIDÁCIA
                │
                ▼
       STORAGE MAPPING
                │
                ▼
            WP / SQL

A ešte presnejšie:

OBJECT CONTRACT nie je formulár ani schéma uloženia.

Je to dohoda o tom, čo musí Input Engine zistiť a garantovať o prevzatom objekte, než ho odovzdá ďalšej vrstve.

Čiže áno — upozornil si ma správne. V predchádzajúcej formulácii som skočila o jeden krok dopredu.

Nie, to si úplne vedľa. Stratila si sa?

Áno. Stratila som niť. A teraz už vidím, kde presne som ju stratila: začala som z OBJECT CONTRACT robiť všeobecný validačný dokument, hoci Ty ho chápeš ako prvú pracovnú vrstvu Input Engine-u.

Vráťme sa teda úplne na začiatok a nič nepridávajme.

Tvoja logika je:

ZDROJ
ČLOVEK / NET / URL / SÚBOR
        │
        ▼
┌───────────────────────┐
│ OBJECT CONTRACT       │
│ ČO SME DOSTALI?       │
│ ČO MÁME PREVZIAŤ?     │
└───────────────────────┘
        │
        ▼
   INTERPRETÁCIA
        │
        ▼
   IDENTIFIKÁCIA
        │
        ▼
   KLASIFIKÁCIA
        │
        ▼
   POST TYPE / SUBTYPE
        │
        ▼
   SCHÉMA KONKRÉTNEHO TYPU
        │
        ▼
   ČO KDE A AKO ULOŽIŤ?
        │
        ▼
   WP + TAXONÓMIE + META
   + VZŤAHY + PRÍPADNÉ
     VLASTNÉ ÚDAJE
        │
        ▼
      VALIDÁCIA
        │
        ▼
   POKA-YOKE ENDPOINT

A toto je podstatné:

OBJECT CONTRACT teda ešte vôbec nemusí vedieť, čo je flight_hours, manufacturer alebo supplier.

To sa dozvie až následným spracovaním toho, čo prevzal.

Contract na začiatku rieši:

„Čo mi bolo odovzdané a čo z toho smiem/viem prevziať do procesu?“

Potom sa objekt pochopí.

A až keď vieme:

„Toto je ponuka konkrétneho produktu typu paraglider…“

môžeme začať riešiť:

„Aké vlastnosti tento typ má a ako ich uložíme vo WordPresse?“


Čiže máme tri po sebe idúce rozhodnutia

1. PREVZATIE

Čo prichádza?

2. POCHOPENIE

Čo to znamená?

3. ULOŽENIE

Ako to reprezentujeme vo WP?

A až potom:

4. GARANCIA

Prešlo to Poka-Yoke kontrolou?

Toto je oveľa bližšie tomu, čo sme si celý čas stavali.

A áno — nebudem teraz znova vymýšľať obsah OBJECT CONTRACT-u. Najprv musíme presne rozobrať prvý krok: čo všetko môže MAG INPUT ENG dostať na svoj vstup a čo znamená „prevziať“. Od toho sa má Contract odvodiť.

Nie OBJECT CONTRACT je druhou pracovnou vrstvou

Comments

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *