Kompotov programerski bralni krožek #1: SICP
-Izvorna koda se nahaja na git.kompot.si.
@@ -214,55 +214,63 @@ Za bralni krožek se dogovarjamo prek (javne) mailing liste, na katero se lahko -
Srečanja
-Srečanja
+#14: četrtek, 12. 12. 2024 ob 18.45 v CTK
-#15: četrtek, 26. 12. 2024 ob 19.00 v Fužinah
+
+Nadaljevali smo z vajo, plan smo dopolnili z guile kodo, ki ni odvisna od artanis
, da bi si malo poenostavili. Poenostavitev je terjala malo več lastne kode.
+
#14: četrtek, 12. 12. 2024 ob 18.45 v CTK
+Pričeli smo s prvo vajo, izbrali smo igro stavkov kot spletno aplikacijo. Dokumentacija je tukaj: plan za vaje.
#13: četrtek, 28. 11. 2024 ob 18.45 v CTK
+#13: četrtek, 28. 11. 2024 ob 18.45 v CTK
#12: četrtek, 14. 11. 2024 ob 19.15 v CTK
+#12: četrtek, 14. 11. 2024 ob 19.15 v CTK
#11: četrtek, 31. 10. 2024 ob 18.45 v CTK
-#11: četrtek, 31. 10. 2024 ob 18.45 v CTK
+2.3.1: Citiranje (quotation) 2.3.2: Simbolno odvajanje (symbollic differentiation)
#10: četrtek, 17. 10. 2024 ob 18.45 v CTK
+#10: četrtek, 17. 10. 2024 ob 18.45 v CTK
#9: četrtek, 3. 10. 2024 ob 18.45 v CTK
+#9: četrtek, 3. 10. 2024 ob 18.45 v CTK
#8: četrtek, 19. 9. 2024 ob 18.45 v CTK
-#8: četrtek, 19. 9. 2024 ob 18.45 v CTK
+Nadaljujemo z drugim poglavjem. (2.2 - Hierarhicne podatkovne strukture in lastnost zaprtosti)
#8: sreda, 4. 9. 2024 ob 18.45 v CTK
-#8: sreda, 4. 9. 2024 ob 18.45 v CTK
+Pregled vsebine 2. poglavja.
@@ -272,23 +280,23 @@ Intervalna algebra: -#8: sreda, 21. 8. 2024 ob 19.45 v CTK
-#8: sreda, 21. 8. 2024 ob 19.45 v CTK
+Beremo poglavje 2.1.
#7: sreda, 24. 7. 2024 ob 19.45 v parlamentu
+#7: sreda, 24. 7. 2024 ob 19.45 v parlamentu
#6: sreda, 10. 7. 2024 ob 19.45 v CTK
+#6: sreda, 10. 7. 2024 ob 19.45 v CTK
#5: sreda, 12. 6. 2024 ob 18.45 v CTK
-#5: sreda, 12. 6. 2024 ob 18.45 v CTK
+Povezava do najave dogodka.
@@ -297,27 +305,27 @@ Beremo poglavje 2.1. Beremo prvo podpoglavje drugega poglavja Grajenje abstrakcij s podatki.zapiski
-zapiski
+#4: sreda, 29. 5. 2024 18.45 v CTK
-#4: sreda, 29. 5. 2024 18.45 v CTK
+Dogodek je tukaj. Preglejujemo naloge iz prvega poglavja.
#3: četrtek, 16. 5. 2024 18.45 v CTK
-#3: četrtek, 16. 5. 2024 18.45 v CTK
+Kot ponavadi je dogodek na našem mobilizonu.
@@ -328,9 +336,9 @@ Ker vsebuje poglavje veliko vaj, za katere nismo našli časa, smo se odločili Na srečanju smo skupaj reševali vajo 1.29.zapiski
- -#2: torek, 30. 4. 2024 18.45 v CTK
-#2: torek, 30. 4. 2024 18.45 v CTK
+Dogodek je tukaj.
@@ -349,9 +357,9 @@ Dogodek je -zapiski
-zapiski
+- tina (vaje, druga varjanta)
- lio @@ -360,9 +368,9 @@ Nadaljujemo z branjem poglavja 1.2, Procedures and the processes they generate.
#1: sreda, 17. 4. 2024 18.45 v CTK
-#1: sreda, 17. 4. 2024 18.45 v CTK
+Beremo uvod in do poglavja 1.2, približno 30 strani.
@@ -371,9 +379,9 @@ Beremo uvod in do poglavja 1.2, približno 30 strani. Link do dogodka na dogodki.kompot.si.zapiski
-zapiski
+- g1smo
- lio diff --git a/index.org b/index.org index 2cd14f1..7e02627 100644 --- a/index.org +++ b/index.org @@ -14,6 +14,8 @@ Za bralni krožek se dogovarjamo prek (javne) mailing liste, na katero se lahko [[file:./tb.jpg]] * Srečanja +** #15: četrtek, 26. 12. 2024 ob 19.00 v Fužinah +Nadaljevali smo z vajo, [[file:vaja/plan.org][plan]] smo dopolnili z guile kodo, ki ni odvisna od ~artanis~, da bi si malo poenostavili. Poenostavitev je terjala malo več lastne kode. ** #14: četrtek, 12. 12. 2024 ob 18.45 v CTK Pričeli smo s prvo vajo, izbrali smo igro stavkov kot spletno aplikacijo. Dokumentacija je tukaj: [[file:vaja/plan.org][plan za vaje]]. diff --git a/vaja/nova-igra-stavkov/app.scm b/vaja/nova-igra-stavkov/app.scm new file mode 100644 index 0000000..6266592 --- /dev/null +++ b/vaja/nova-igra-stavkov/app.scm @@ -0,0 +1,11 @@ +#!/usr/bin/env guile !# +(use-modules (web server)) + +(define (igra-stavkov-handler request request-body) + (values '((content-type . (text/plain))) + "IGRA STAVKOV SE PRIČENJA. OHOHO")) +;; tukajo mramo prebrat index.html in ga iprkazat +;; (define index-file (open-input-file "./nova-igra-stavkov/index.html")) +;; (let (contents (call-with-input-file "file.txt" get-string-all))) + +(run-server igra-stavkov-handler) diff --git a/vaja/nova-igra-stavkov/app2.scm b/vaja/nova-igra-stavkov/app2.scm new file mode 100644 index 0000000..27a6da7 --- /dev/null +++ b/vaja/nova-igra-stavkov/app2.scm @@ -0,0 +1,12 @@ +#!/usr/bin/env guile !# +(use-modules (web server) + (ice-9 binary-ports)) + +(define (igra-stavkov-handler request request-body) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) +;; tukajo mramo prebrat index.html in ga iprkazat + + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) diff --git a/vaja/nova-igra-stavkov/app3.scm b/vaja/nova-igra-stavkov/app3.scm new file mode 100644 index 0000000..fe19bde --- /dev/null +++ b/vaja/nova-igra-stavkov/app3.scm @@ -0,0 +1,34 @@ +#!/usr/bin/env guile !# +(use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + +(define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + +(define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) + +(define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + (string-append "
Ustvari novo sobo za " st-igralcev " igralcev
"))) + +(define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (ustvari-novo-sobo request-body)) + + (else (not-found request))))) + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) diff --git a/vaja/nova-igra-stavkov/app4.scm b/vaja/nova-igra-stavkov/app4.scm new file mode 100644 index 0000000..1c7363a --- /dev/null +++ b/vaja/nova-igra-stavkov/app4.scm @@ -0,0 +1,47 @@ +#!/usr/bin/env guile !# +(use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + +(define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + +(define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) + +(define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + "Ustvari novo sobo!
")) + +(define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (debug-info request request-body)) + + (else (not-found request))))) + +(define (debug-info request body) +(respond + `((h1 "Debug!") + (table + (tr (th "header") (th "value")) + ,@(map (lambda (pair) + `(tr (td (tt ,(with-output-to-string + (lambda () (display (car pair)))))) + (td (tt ,(with-output-to-string + (lambda () + (write (cdr pair)))))))) + (request-headers request)))))) + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) diff --git a/vaja/nova-igra-stavkov/index.html b/vaja/nova-igra-stavkov/index.html new file mode 100644 index 0000000..32617f2 --- /dev/null +++ b/vaja/nova-igra-stavkov/index.html @@ -0,0 +1,29 @@ + + + + +igra stavkov
+v živo
++ Vsak igralec potrebuje listek in pisalo. Igralci skupaj odgovarjajo na vprašanja, po vsakem odgovoru pa listek prepognejo in podajo naprej. Svoj naslednji odgovor nato napišejo pod prepognjen del in spet podajo listek naprej. Ko odogovorijo na vsa vprašanja, še enkrat podajo listek naprej naslednjemu igralcu in preberejo cel stavek. +
+ +prek spleta (naša varianta)
++ Vsak igralec potrebuje računalnik z brskalnikom in internetno povezavo. Dobavna veriga obsega rudnike redkih kovin, silicij, proizvodnjo čipov, komunikacijsko mrežo, etcetera. +
+ ++ Na naši aplikaciji je igra zelo podobna. Izberete število igralcev in ustvarite novo sobo za igranje. Povezavo do sobo pošljete soigralcem in po vrsti odgovarjate na vprašanja, dokler ne izpolnite vseh. Vsakemu igralcu se na koncu izpiše en sestavljen stavek. +
+ +Table of Contents
-
-
- 1. Plan za vajo -
- 2. predlogi -
- 3. tekstualna igra stavkov p +
- 1. Plan za vajo
-
-
- 3.1. meta -
- 3.2. homepage -
- 3.3. seja igre -
- 3.4. program - -
- 3.5. Nova soba +
- 2. tekstualna igra stavkov @@ -227,13 +230,13 @@
1. Plan za vajo
+1. Plan za vajo
+2. predlogi
-1.1. predlogi
+- tekstualna igra stavkov
-
@@ -252,28 +255,24 @@
- ideja: imeti spletno stran, ki jo na njej sami lahko v zivo urejas (ima vgrajen urejevalnik) in v kolikor testi passajo, se kar sproti deploya
-' -
3. tekstualna igra stavkov p
-3.1. meta
-2. tekstualna igra stavkov
+2.1. meta
+Sem pišemo plan za program igranja igre. Poskušamo kratko in jedrnato opisati prvi prototip, ki naj čimprej deluje in je zavoljo enostavnosti karseda podoben igranju v živo. Ob pisanju se poraja veliko idej, za katere je bolje, da se potencialno uvedejo kasneje, sicer se cilj delujočega prototipa sproti prehitro oddaljuje.
3.2. homepage
-2.2. homepage
+Na home page imamo kratka navodila in formo nova igra s poljem stevilo igralcev. Submitanje forme te pelje na zgeneriran link, ki ga posljes soigralcem. @@ -284,9 +283,9 @@ Na tem koraku se generira seja glede na število igralcev.
3.3. seja igre
-2.3. seja igre
+Meta Podatki
@@ -309,9 +308,9 @@ Ko so vsi oddali odgovore, se ti izpiše stavek, ki ga lahko prebereš ostalim i3.4. program
-2.4. program artanis
+Izbrali smo artanis web framework: https://artanis.dev/ Namestitev: @@ -321,9 +320,9 @@ Namestitev:
apt install guix; guix install artanis
3.4.1. boilerplate
-2.4.1. boilerplate
+
Artanis ima orodje za terminal, imenovano art
. Z orodje mdr. pripravimo skelet novega projekta: art create igra-stavkov
.
http://<ip_naslov>:3000
,
3.4.2. navodila za igro
-2.4.2. navodila za igro
+Igro lahko igrata dva ali več igralcev. Igralci skupaj sestavljajo stavke, tako da vnaprej odgovarjajo na vprašanja:
@@ -368,8 +367,8 @@ Igro lahko igrata dva ali več igralcev. Igralci skupaj sestavljajo stavke, tako-
-
- v živo
-+- v živo
-
+Vsak igralec potrebuje listek in pisalo. Igralci skupaj odgovarjajo na vprašanja, po vsakem odgovoru pa listek prepognejo in podajo naprej. Svoj @@ -379,8 +378,8 @@ igralcu in preberejo cel stavek.
- na naši aplikaciji
-+- na naši aplikaciji
+Na naši aplikaciji je igra zelo podobna. Izberete število igralcev in ustvarite novo sobo za igranje. Povezavo do sobo pošljete soigralcem in po vrsti @@ -395,7 +394,7 @@ Ustvarimo nov fajl na lokaciji
pub/index.html
:<html> <head> - <meta charset="UTF-8"> + <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>igra stavkov</title> </head> @@ -443,7 +442,7 @@ Domača stran se nam zdaj naloži! -
+++2.4.3. Nova soba
+-3.5. Nova soba
-----3.5.1. (podatkovni) model sobe
- --3.5.2. krmilnik (controller) sobe
-+ +-- krmilnik (controller) sobe
+
+Naloga krmilnika je, da ustvari novo sobo in igralko pelje na pravilni link za igranje, shranjuje odgovore in na koncu prikaže stavek.
@@ -514,10 +511,12 @@ To nam ustvari dva nova fajla,app/controllers/soba.scm
, s katerim Najprej pa moramo sobo narediti. VENTRY
dodamo pod prej ustvarjeno preusmeritev na index.html POST handler:-3.5.3. Forma za vprasanje
-++-2.4.4. Forma za vprasanje
+Forma za posamezno vprasanje
@@ -540,9 +539,9 @@ z vprasanjem. Ce ima vse odgovore, prikazemo stavek.-3.5.4. Podatkovni model
-++-2.4.5. Podatkovni model
+listek:
@@ -566,9 +565,9 @@ odgovor:-3.5.5. sablona za listek
-++++2.4.6. sablona za listek
+Ce je listek ze izpolnjen - prikazi cel listek, to je sestavljen stavek.
@@ -580,6 +579,199 @@ Ce listek ni izponjen, prikazi samo zadnje neizpoljneno vprasanje.Submitanje forme ti vrne naslednji listek (ce ga je igralec pred tabo izpolnil).
+ + +++(list 10 20 30) +
++diff --git a/vaja/plan.org b/vaja/plan.org index 4983165..7663119 100644 --- a/vaja/plan.org +++ b/vaja/plan.org @@ -1,7 +1,6 @@ * Plan za vajo -* predlogi - +** predlogi - tekstualna igra stavkov - tista s sestavljanjem povedi je pa iz une igre, mi smo dostkrat igral, neki v smislu, da mora igrat 6+ ljudi in pol vsak napise na vrh lista eno stvar in pol prepogne in list krozi -- po vrsti grejo neki takega: kdo, kdaj, kje, zakaj, s cim, kaj dela ... pol pa ven loh pridejo kr zabavni stavki ... in da je odprto na spletni strani skos naslednje vprasanje, ko se odgovori zadnja stvar (kaj dela), se izpise poved med ze dokoncane, in se zacne nova - igra v [[https://dthompson.us/projects/chickadee.html][chickadee]]-ju @@ -14,9 +13,7 @@ - ideja: imeti spletno stran, ki jo na njej sami lahko v zivo urejas (ima vgrajen urejevalnik) in v kolikor testi passajo, se kar sproti deploya -' - -* tekstualna igra stavkov p +* tekstualna igra stavkov ** meta Sem pišemo plan za program igranja igre. Poskušamo kratko in jedrnato opisati prvi prototip, ki naj čimprej deluje in je zavoljo enostavnosti karseda podoben igranju v živo. Ob pisanju se poraja veliko idej, za katere je bolje, da se potencialno uvedejo kasneje, sicer se cilj delujočega prototipa sproti prehitro oddaljuje. @@ -39,7 +36,7 @@ Igra "prepozna" obiskovalca nekako unikatno - lahko je session in cookie (kar se Ko oddaš odgovore, te pelje na link za rezlultate, kjer piše, koliko odgovorov igralcov še čakamo. Ko so vsi oddali odgovore, se ti izpiše stavek, ki ga lahko prebereš ostalim igralcem. -** program +** program artanis Izbrali smo artanis web framework: https://artanis.dev/ Namestitev: @@ -89,10 +86,10 @@ izpiše en sestavljen stavek. Ustvarimo nov fajl na lokaciji ~pub/index.html~: -#+begin_src html :tangle ./igra-stavkov/pub/index.html +#+begin_src html :tangle ./igra-stavkov/pub/index.html - +2.5. program guile web server
++++Primer za guile web server. +
+ ++Začnemo z vključitvijo modula za spletni strežnik. +
+ ++Beremo dva dokumenta iz uradne dokumentacije: +https://www.gnu.org/software/guile/manual/html_node/Web-Server.html +https://www.gnu.org/software/guile/manual/html_node/Web-Examples.html +
+ +++#!/usr/bin/env guile !# +(use-modules (web server)) + +(define (igra-stavkov-handler request request-body) + (values '((content-type . (text/plain))) + "IGRA STAVKOV SE PRIČENJA. OHOHO")) +;; tukajo mramo prebrat index.html in ga iprkazat +;; (define index-file (open-input-file "./nova-igra-stavkov/index.html")) +;; (let (contents (call-with-input-file "file.txt" get-string-all))) + +(run-server igra-stavkov-handler) +
++2.5.1. navodila
+++Dodamo html file z navodili: +
+++ +<html> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>igra stavkov</title> +</head> +<body> + <h1>igra stavkov</h1> + <h2>v živo</h2> + <p> + Vsak igralec potrebuje listek in pisalo. Igralci skupaj odgovarjajo na vprašanja, po vsakem odgovoru pa listek prepognejo in podajo naprej. Svoj naslednji odgovor nato napišejo pod prepognjen del in spet podajo listek naprej. Ko odogovorijo na vsa vprašanja, še enkrat podajo listek naprej naslednjemu igralcu in preberejo cel stavek. + </p> + + <h2>prek spleta (naša varianta)</h2> + <p> + Vsak igralec potrebuje računalnik z brskalnikom in internetno povezavo. Dobavna veriga obsega rudnike redkih kovin, silicij, proizvodnjo čipov, komunikacijsko mrežo, etcetera. + </p> + + <p> + Na naši aplikaciji je igra zelo podobna. Izberete število igralcev in ustvarite novo sobo za igranje. Povezavo do sobo pošljete soigralcem in po vrsti odgovarjate na vprašanja, dokler ne izpolnite vseh. Vsakemu igralcu se na koncu izpiše en sestavljen stavek. +</p> + + <form method="POST" action="/soba/ustvari"> + <label for="num-of-players">Izberi število igralcev</label> + <input type="number" min="1" name="num-of-players" id="num-of-players"></input> + <input type="submit" value="igraj"> + </form> +</body> + </html> +
++Potem prilagodimo handler, da vrne html dokument, ki je zgoraj definiran. +
+ +++ +#!/usr/bin/env guile !# +(use-modules (web server) + (ice-9 binary-ports)) + +(define (igra-stavkov-handler request request-body) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) +;; tukajo mramo prebrat index.html in ga iprkazat + + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) +
++Zdaj moramo pa procesirat obrazec. In sicer preberemo iz
+ +request
vrednostnum-of-players
: +++ +#!/usr/bin/env guile !# +(use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + +(define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + +(define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) + +(define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + (string-append "<h1>Ustvari novo sobo za " st-igralcev " igralcev</h1>"))) + +(define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (ustvari-novo-sobo request-body)) + + (else (not-found request))))) + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) +
++#!/usr/bin/env guile !# +(use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + +(define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + +(define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) +(define (debug-info request body) + (respond + `((h1 "Debug!") + (table + (tr (th "header") (th "value")) + ,@(map (lambda (pair) + `(tr (td (tt ,(with-output-to-string + (lambda () (display (car pair)))))) + (td (tt ,(with-output-to-string + (lambda () + (write (cdr pair)))))))) + (request-headers request)))))) + + +(define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + "<h1>Ustvari novo sobo!</h1>")) + +(define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (debug-info request request-body)) + + (else (not-found request))))) + + +(display "strežnik igre stavkov teče: http://localhost:8080") +(run-server igra-stavkov-handler) +
+igra stavkov @@ -112,7 +109,7 @@ Ustvarimo nov fajl na lokaciji ~pub/index.html~:Na naši aplikaciji je igra zelo podobna. Izberete število igralcev in ustvarite novo sobo za igranje. Povezavo do sobo pošljete soigralcem in po vrsti odgovarjate na vprašanja, dokler ne izpolnite vseh. Vsakemu igralcu se na koncu izpiše en sestavljen stavek.
- + + + +#+end_src + +Potem prilagodimo handler, da vrne html dokument, ki je zgoraj definiran. + +#+begin_src scheme :tangle ./nova-igra-stavkov/app2.scm + #!/usr/bin/env guile !# + (use-modules (web server) + (ice-9 binary-ports)) + + (define (igra-stavkov-handler request request-body) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ;; tukajo mramo prebrat index.html in ga iprkazat + + + (display "strežnik igre stavkov teče: http://localhost:8080") + (run-server igra-stavkov-handler) +#+end_src + +Zdaj moramo pa procesirat obrazec. In sicer preberemo iz ~request~ vrednost ~num-of-players~: + +#+begin_src scheme :tangle ./nova-igra-stavkov/app3.scm + #!/usr/bin/env guile !# + (use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + + (define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + + (define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) + + (define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + (string-append "Ustvari novo sobo za " st-igralcev " igralcev
"))) + + (define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (ustvari-novo-sobo request-body)) + + (else (not-found request))))) + + (display "strežnik igre stavkov teče: http://localhost:8080") + (run-server igra-stavkov-handler) +#+end_src + +#+begin_src scheme :tangle ./nova-igra-stavkov/app4.scm + #!/usr/bin/env guile !# + (use-modules (web server) + (web request) + (web response) + (web uri) + (ice-9 binary-ports)) + + + (define (request-path-components request) + (split-and-decode-uri-path (uri-path (request-uri request)))) + + + (define (not-found request) + (values (build-response #:code 404) + (string-append "Stran ni najdena: " + (uri->string (request-uri request))))) + (define (debug-info request body) + (respond + `((h1 "Debug!") + (table + (tr (th "header") (th "value")) + ,@(map (lambda (pair) + `(tr (td (tt ,(with-output-to-string + (lambda () (display (car pair)))))) + (td (tt ,(with-output-to-string + (lambda () + (write (cdr pair)))))))) + (request-headers request)))))) + + + (define (ustvari-novo-sobo request-body) + (display request-body) + (values '((content-type . (text/html))) + "Ustvari novo sobo!
")) + + (define (igra-stavkov-handler request request-body) + (let ((pot (request-path-components request))) + (cond ((equal? pot '()) + (values '((content-type . (text/html))) + (call-with-input-file "index.html" get-bytevector-all))) + ((equal? pot '("soba" "ustvari")) + (debug-info request request-body)) + + (else (not-found request))))) + + + (display "strežnik igre stavkov teče: http://localhost:8080") + (run-server igra-stavkov-handler) +#+end_src diff --git a/zapiski/emacs_ukazi.html b/zapiski/emacs_ukazi.html new file mode 100644 index 0000000..08e3711 --- /dev/null +++ b/zapiski/emacs_ukazi.html @@ -0,0 +1,233 @@ + + + + + + + + + + + + + +++ + + diff --git a/zapiski/emacs_ukazi.org b/zapiski/emacs_ukazi.org new file mode 100644 index 0000000..9849555 --- /dev/null +++ b/zapiski/emacs_ukazi.org @@ -0,0 +1,42 @@ +* Komande + +crdt-connect: povezi se na sejo za kolaborativno urejanje + +~Alt-x~: za izvajanje funkcij +~ctrl-x~: ukaz, ki mu sledijo podukazi + +~C-x 1~: maximize current window ~C-x 0~: close current window ~C-SCP~ +(ctrl-space): zacne delat region (ko je regijoa znacena, lahko pritiesns +oklepaj, ali pa marsikaj dreugga in ti bo regijo vstalvio v te znake) + +~C-x C-c~ zapri emsac +~C-x C-f~ odpri dokument + +~C-c C-l~ vstavljanje linka (v orgmode) + +~C-x C-s~ shrani trenuitn fajl + +* orgmode + +~*~ naslov +~**~ podnaslov +~***~ pod podnaslov +... + +*L* inkanje fajlov + +~C-c C-l~ naredi lk (lahko url, lahko faj.l .. )in. + +~C-c C-o~ odpri li.nk + +[[file:plan.org::*(podatkovni) model sobe][Link do fajla plan.org]] + + + + + + + + + +++Table of Contents
+++-
+
- 1. Komande +
++1. Komande
++++crdt-connect: povezi se na sejo za kolaborativno urejanje +
+ ++
+ +Alt-x
: za izvajanje funkcij +ctrl-x
: ukaz, ki mu sledijo podukazi ++
+C-x 1
: maximize current window +C-x 0
: close current window +C-SCP
(ctrl-space): zacne delat region (ko je regijoa znacena, lahko pritiesns oklepaj, ali pa marsikaj dreugga in ti bo regijo vstalvio v) + - v živo