Varmastikin hyviä vinkkejä nuo, jos joku tätä ketjua läpi kahlatessaan on etsimässä välineitä web-kehitykseen. Taitaa suurin haaste kehityksessä olla valinnan vaikeus kun vaihtoehtoja on runsaasti ja jotta pystyy valitsemaan fiksusti, niin niihin pitää perehtyä. Sen sijaan että olisi yksi standardi tapa, ja extroihin tarvitsisi perehtyä vasta kun standardipaletilla ei pärjää.

Kun hiilijalanjäljestä ollaan nykyään kovin huolissaan, niin harvemmin törmää softan hiilijalanjäljestä keskusteluun. Ensimmäisenä tuo taisi nousta pintaa epäsuorasti kryptovaluuttojen louhinnan virrankulutuksen ja hiljan AI:n sähkön tarpeen kasvun myötä. Sen sijaan en muista että kukaan olisi peräänkuuluttanut ekotehokkaampia kääntäjiä tai JVM:iä puhumattakaan ohjelmistojen siirtämistä tulkattavista kielistä käännettäviin.
3/4 Kysyin ChatGPT:ltä: "Kuinka purescriptillä muodostetaan dialogi-ikkuna näytölle?"

Vastaus:

Vaihe 1: Projektin alustaminen
Jos sinulla ei vielä ole PureScript-projektia, luo uusi projekti seuraavasti:

bash
Kopioi koodi
spago init
Lisää sitten tarvittavat riippuvuudet, kuten dom ja effect:

bash
Kopioi koodi
spago install dom effect

Vaihe 2: HTML-tiedosto
Tässä on yksinkertainen HTML, johon dialogi-ikkuna integroidaan:

html
Kopioi koodi
<!DOCTYPE html>
<html lang="fi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PureScript Dialogi-ikkuna</title>
</head>
<body>
<button id="openButton">Avaa Dialogi</button>

<div id="dialog" style="display: none; background-color: rgba(0, 0, 0, 0.5); position: fixed; top: 0; left: 0; width: 100%; height: 100%; justify-content: center; align-items: center;">
<div style="background-color: white; padding: 20px; border-radius: 5px;">
<p>Tämä on dialogi-ikkuna!</p>
<button id="closeButton">Sulje</button>
</div>
</div>

<script src="output/Main/index.js"></script>
</body>
</html>

Vaihe 3: PureScript-koodi
Seuraavaksi kirjoitetaan PureScript-koodi, joka hallitsee dialogi-ikkunan avaamista ja sulkemista.

Luo tiedosto src/Main.purs ja lisää seuraava sisältö:

purescript
Kopioi koodi
module Main where

import Prelude
import Effect (Effect)
import Effect.Console (log)
import Effect.Uncurried (EffectFn1, mkEffectFn1)
import Web.DOM (window)
import Web.HTML (window)
import Web.HTML.Window (document)
import Web.HTML.Document (getElementById)
import Web.HTML.HTMLElement (htmlElementToElement)
import Web.HTML.Element (setAttribute)
import Web.HTML.Event (EventType(..), preventDefault)
import Web.HTML.Event.EventTarget (addEventListener)
import Web.HTML.Event.Event (target)
import Web.HTML.HTMLButtonElement (htmlButtonElementToElement)

-- Pääfunktio
main :: Effect Unit
main = do
-- Hae ikkunan dokumentti
doc <- window >>= document

-- Hae dialogi-elementti
dialog <- getElementById "dialog" doc

case dialog of
Just dlg -> do
-- Hae nappula, joka avaa dialogin
openButton <- getElementById "openButton" doc
case openButton of
Just btn -> do
-- Lisää kuuntelija avaamaan dialogi
addEventListener Click (openDialog dlg) (htmlElementToElement btn)
Nothing -> log "Avaa-nappulaa ei löytynyt."

-- Hae nappula, joka sulkee dialogin
closeButton <- getElementById "closeButton" doc
case closeButton of
Just btn -> do
-- Lisää kuuntelija sulkemaan dialogi
addEventListener Click (closeDialog dlg) (htmlElementToElement btn)
Nothing -> log "Sulje-nappulaa ei löytynyt."
Nothing -> log "Dialogi-elementtiä ei löytynyt."

-- Funktio dialogin avaamiseksi
openDialog :: forall a. Element -> EffectFn1 Event a
openDialog dlg = mkEffectFn1 \_ -> do
setAttribute "style" "display: flex;" dlg

-- Funktio dialogin sulkemiseksi
closeDialog :: forall a. Element -> EffectFn1 Event a
closeDialog dlg = mkEffectFn1 \_ -> do
setAttribute "style" "display: none;" dlg

Vaihe 4: Käännä PureScript-koodi
Käännä projekti käyttämällä Spagoa:

bash
Kopioi koodi
spago build
2/4 Kysyin ChatGPT:ltä: "Kuinka elm-kielellä muodostetaan dialogi-ikkuna näytölle?"

vastaus:

Varmista, että sinulla on asennettuna Elm ja tarvittavat riippuvuudet. Luo Elm-projekti ja lisää paketteja tarvittaessa:

bash
Kopioi koodi
elm init
Vaihe 2: Koodi Elmissä
Tässä on täydellinen esimerkki Elm-koodista, joka näyttää dialogi-ikkunan ja antaa käyttäjän avata tai sulkea sen:

elm
Kopioi koodi
module Main exposing (..)

import Browser
import Html exposing (Html, button, div, text)
import Html.Attributes exposing (class)
import Html.Events exposing (onClick)


-- Malli eli sovelluksen tila
type alias Model =
{ isDialogOpen : Bool }


-- Alkuarvot sovellukselle
init : Model
init =
{ isDialogOpen = False }


-- Sovelluksen eri viestit eli tapahtumat
type Msg
= OpenDialog
| CloseDialog


-- Sovelluksen tilan päivittäminen tapahtuman perusteella
update : Msg -> Model -> Model
update msg model =
case msg of
OpenDialog ->
{ model | isDialogOpen = True }

CloseDialog ->
{ model | isDialogOpen = False }


-- Näkymän määrittely
view : Model -> Html Msg
view model =
div []
[ button [ onClick OpenDialog ] [ text "Avaa Dialogi" ]
, viewDialog model
]


-- Dialogin määrittely, joka näkyy vain, jos isDialogOpen on tosi
viewDialog : Model -> Html Msg
viewDialog model =
if model.isDialogOpen then
div [ class "modal" ]
[ div [ class "modal-content" ]
[ text "Tämä on dialogi-ikkuna!"
, button [ onClick CloseDialog ] [ text "Sulje" ]
]
]
else
text ""


-- Pääfunktio sovelluksen ajamiseen
main =
Browser.sandbox { init = init, update = update, view = view }
Vaihe 3: CSS modaalille
Jotta dialogi näyttää modaalilta (keskellä ruutua oleva ikkuna, joka peittää muun sisällön), lisää seuraavanlainen CSS-tiedosto:

css
Kopioi koodi
/* Yleinen dialogin taustatyyli */
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}

/* Dialogi-ikkunan sisältö */
.modal-content {
background-color: white;
padding: 20px;
border-radius: 5px;
text-align: center;
}
Puista rossipohjaa ei nykyään pidetä turvallisena, kosteus ja homeet nääs. Mainitsemani harkkoväliseinät puolestaan vaativat kohtuu tukevan alustan, jonka päälle muurata. Riittäisikö hyvin tärytetty sorapeti muurausalustaksi? Noita harkkoväliseiniä tarvittaisiin kohtuu tiheään, varsinkin jos yrittäisi selvitä ilman ylemmän laatan väliaikaistukia, joten yksinkertaisempaa kuin tehdä niille anturat, olisi valaa tasapaksu laatta. Eikä se betonimassa nyt niin kallista itsessään ole...
Kiitoksia+vakuuttavista+kommenteista!+Jostain+siis+pitää+saada+lämpöenergiaa+radikaalisti+enemmän+maahan,+mikäli+ilman+lattiaeristeitä+meininki+selvitä.+Sivulla+http://maaputki.mbnet.fi/hobits.html+kirjoitetaan: "Syvälle+maahan+tuotu+lämpö+leviää+pallomaisesti+kaikkiin+suuntiin,+ylös-+ja+alassuunnat+eivät+eroa+toisistaan.+Lämpö+siirtyy+kuivassa+maaperässä+johtumalla,+lämpörintaman+edetessä+karkeasti+metrin+kuukaudessa.+Siten+maan+lämpötila+on+tasoittunut+kuuden+metrin+syvyydessä+hyvin+lähelle+ilman+vuotuista+keskiarvoa.+Aurinkolämpöä+kesällä+siirtäen+maansisäistä+vakiolämpötilaa+on+mahdollista+kohottaa+Etelä-+&+Keski-Suomen+2-6°C:sta+vaikka+noin+19°C:seen,+mikä+riittää+kattamaan+talon+lämmitys-+ja+ilmastointitarpeen."Mitäs+jos+talon+keskelle+tehdään+6-8+m+syvä+energiakaivo+betonirenkaista,+asennetaan+pohjalle+muutama+muovipinnoitettu+kuparikierukka+sekä+meno-+ja+paluuputket+ja+täytetään+kaivanto+hiekalla+lämmön+dumppausosuudelta+ja+ylempää+soralla,+ja+johdetaan+tuonne+huhtikuusta+lokakuuhun+aurinkokeräinkentästä+ylijäämäenergia?+Maahan+dumpattu+lämpö+saavuttaisi+lattian+noin+puoli+vuotta+viivästyneenä+eli+sopivasti+lämmittämään+talvipakkasilla+rakennusta.+Betonirengaskaivot+ovat+tosin+sen+verran+kalliita,+että+ehkä+halvemmaksi+tulisi+porauttaa+muutama+-+puolen+tusinaa+perinteisempää+energiakaivoa+keskelle+talon+maapohjaa;+mutta+ymmärtääkseni+noissa+vakiona+käytettävät+lämmönkeruuputkistot+eivät+kestä++80–100+°C+lämpötila-alueella,+joten+niihin+joutuisi+teettämään+erikoiskomponentit+kuparista;+mikä+tulisi+varsin+tyyriiksi.+Toisaalta+tuota+voisi+kompensoida+lisäämällä+kaivojen+määrää,+mikä+puolestaan+lisäisi+aurinkokeräinten+hyötysuhdetta,+mutta+nyt+taaseen+lämmön+joutuisi+dumppaamaan+lähemmäs+talon+reunoja,+jolloin+taas+lämpä+karkaisi+aikaisemmin+ympäröiviin+maamassoihin+eli+siksi+tuo+yksi+betonikaivo+keskelle+taloa.+Saikohan+tästä+kukaan+mitään+tolkkua...+:)