- 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. - Tuossa kuvitteellisessa kielessäni voisi olla oletusarvoisesti Ok-painike dialog-komponentissa siinä tapauksessa ettei muita painikkeita ole määritelty. Muutoinkin tuossa oli taustalla ajatus automaattisista oletusarvoista, joihin ohjelmoijan tarvitsisi kajota vain kun haluaa niistä poikkeavaa toiminnallisuutta.
- 4/4 mielestäni helppo vaihtoehto olisi tällainen (kuvitteellisella kielellä):
Käynnistetään IDE
Kirjoitetaan lähdekoodi:
application "Dialogi-demo":
dialog(
title:"Kysely",
text:"Onko hyvä pössis?",
button:"Joo",
button:"Ei") vastaus. // vastaus immutable string jollei ennalta esitelty
if vastaus = "Joo" then "Hienoa!" hyvästi
else "Harmi. Tsemppiä!" hyvästi.
dialog(title:"Kysely", text:hyvästi).
Edellä oletetaan että dialog on komponentti, joka sulkeutuu minkä tahansa button-komponentin klikkauksesta, niin sitä ei tarvitse erikseen koodissa sulkea.
Muuttujat saavat tässä kuvitteellisesta kielestä vasemmalta oikealle, jolloin ei tarvita erillistä sijoitusoperaattoria.
Frameworkit ovat mainio työkalu(setti) kun halutaan tehdä sovelluksia tiettyyn muotoon, mutta jos haluaa vähänkään persoonallisempaa ulkonäköä tai toiminnallisuutta, niin menee vaikeaksi. - 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;
} - 1/4 Kysyin ChatGPT:ltä: "Kuinka typescriptillä muodostetaan dialogi-ikkuna näytölle?"
vastaus:
Vaihe 1: Luo dialogi-ikkuna HTML
<!DOCTYPE html>
<html lang="fi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dialogi-ikkuna</title>
</head>
<body>
<dialog id="myDialog">
<p>Tämä on dialogi-ikkuna!</p>
<button id="closeButton">Sulje</button>
</dialog>
<button id="openButton">Avaa Dialogi</button>
<script src="app.js"></script>
</body>
</html>
Vaihe 2: TypeScript-koodi (app.ts)
Seuraavaksi luodaan TypeScript-koodilla logiikka dialogin avaamiselle ja sulkemiselle.
// Haetaan dialogi-ikkuna ja nappulat DOM:sta
const dialog = document.getElementById('myDialog') as HTMLDialogElement;
const openButton = document.getElementById('openButton') as HTMLButtonElement;
const closeButton = document.getElementById('closeButton') as HTMLButtonElement;
// Avaa dialogi-ikkuna, kun käyttäjä klikkaa "Avaa Dialogi" -nappulaa
openButton.addEventListener('click', () => {
dialog.showModal(); // showModal tekee dialogista modaalisen
});
// Sulkee dialogi-ikkunan, kun käyttäjä klikkaa "Sulje" -nappulaa
closeButton.addEventListener('click', () => {
dialog.close();
});
Vaihe 3: Käännä TypeScript
Käännä TypeScript-koodi JavaScriptiksi komennolla:
tsc app.ts - Ok. 'Kuitusementtilevy ryömintätilaisessa alapohjassa' olisi korrektimpi otsikko.
- Juu, nimenomaan, alapohjan ja viherhuoneen ilmanvaihdot eivät liity toisiinsa. Mikäli liittyisivät, niin olisi riski, että maasta kulkeutuisi mm. radonia oleskelualueille.
Lainsäädännössä vaaditaan vähintään 800 mm:n korkeutta ryömintätilalle, minkä saisi toteutettua parilla 600 mm korkealla väliseinäharkolla. Ahdasta ryömintätiloissa toki olisi liikkua kun tukimuurien väli olisi vain 550 mm. Jos tyytyisi ryömintätilan sijaan ilmakanavistoon, niin riittäisi yksi harkkokerros. Siis jos määräykset moisen rakenteen sallisivat. Tällöin toki menettäisi ryömintätilan tuoman edun rakenteen huollettavuuden helppouden osalta. Antura laatan sijaan olisi kyllä edullisempi ratkaisu, mutta tällöin maan lämmittäminen kesäkaudella "pumppaisi" kosteutta maasta ja siitä voisi ajanoloon seurata ongelmia.
Täytynee tulkita kommenttien pohjalta että kuitusementtilevy paikalleen jätettävänä valumuottina ei ollut kelpo idea. - Tässä linkki kuvalliseen havainnollistukseen aloitusviestini kysymyksen tueksi: https://aijaa.com/QQL2Ov
- Olisiko sillä lattiankannattajan vaihtamisella puusta betoniharkkoon ratkaisevaa merkitystä kuitenkaan, edustaahan palkkien ala alle 10 % prosenttia lattia-alasta ja palkkien päällä kuitenkin 65 mm XPS-eristettä (siis jos tästä oli kyse)? Aika minimaalisia alapohjan kautta tapahtuvat lämpöhäviöt noin ylipäätäänsäkään ovat. Merkitsevät häviöt tässä tapahtuisivat viherhuoneen seinien, ikkunoiden ja katteen läpi. Toki perusmuuriin tarvittaisiin tuhdisti lämmöneristettä ja maahan vaakaan normaalit vahvuudet routaa vastaan.
Mikäli viherhuoneen lattialaatan alapinta sijaitsisi hieman rossipohjaeristeiden alapintaa alempana siirtyisi laatan alla auringon lämmittämä ilma koko rossipohjan alalle ja lämpösäteily absorboituisi alla olevaan soraan ja lämmittäisi maata kesäkauden mittaan useamman metrin syvyyteen. Syksyn mittaan lämpövirta kääntyisi päinvastaiseen suuntaan ja maapohjaan varastoitunut lämpö lämmittäisi viherhuonetta ja pitäisi asuintilojen alapohjan lämpöhäviöt minimaalisina. - https://www.suomirakentaa.fi/yht-tiedot/2-lomarakentaja/lomarakentaminen/104-alapohjavaihtoehdot sanoo "Rossipohja voidaan toteuttaa myös betonista valamalla tai ontelolaatoista."
https://www.fi.weber/lattiat/pientalolattiat/ryomintatilainen-alapohja puolestaa käyttää termiä 'ryömintätilainen alapohja', mikä lienee virallisempi.
Sattuukos kukaan tietämään mitä se sana 'rossi' tarkoittaa? Jotain puumateriaaliin liittyvää? - 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...
- Tuossa vaiheessa ideana oli jo, että aurinkoenergiaa varastoitaisiin talon alle massiivisia määriä eli isolla patteristolla aurinkokeräimiä ellei peräti koko katon kattavalla aurinkokeräimellä. Sopivalla absorbaattoripinnalla ja lasituksella keruuveden lämpötila nousisi hyvin pitkälle toiselle sadalle - ainakin mikäli kiertovesipumppu syystä tai toisesta pysähtyisi kesken aurinkoisen hellepäivän. Koko pulpettikaton kattavan aurinkokeräimen energiamäärä olisi sen verran iso, että sellaisen tunkeminen maahan talon alle vaatisi tolkuttomasti putkimetrejä kohtalaisen syvälle moneen kerrokseen, mikäli käytettäisiin normimaalämpöputkea, jolla dumppilämpötila pitäisi pitää jossain 40-50 asteen välissä. Sata-asteisella vedellä voisi riittää mainittu betonikaivo/nippu porareikiä.
Mutta joo, eihän edellämainituissa järjestelmissä mitään taloudellista järkeä olisi. - Periaatteessa EPS-harkkotalon voinee paneloida puulla niin päältä kuin sisältäkin. On myös mahdollista kipsilevytyksen sijaan rapata myös sisäpinnat. Eristekerros betonirungon sisäpuolella kuitenkin estää yhden betonin potentiaalisen edun hyödyntämisen eli lämmönvarauskapasiteetin, jolloin sisällä tarvitaan koneellista viilennystä.
Voisikohan EPS-valuharkon sisäpuolisen eristekerroksen korvata hirsipaneelilla, jolloin betonin massa pääsisi tasaamaan sisälämpötiloja ja parhaassa tapauksessa pinta olisi sellaisenaan valmis sisäverhoukseksi - EPS-puu-valuharkko siis? - Käteviltä nuo betonipalkki.fi:in tuotteet vaikuttavat, mutta eivät tainne soveltua talojen rakentamiseen - ainakaan perinteiseen tapaan. Sen sijaan epäkonventionaaliseen tapaan noita voisi hyvinkin hyödyntää, esim. rakentamalla lämpimälle puolelle kantava runko noista ja tekemällä ulkoseinät ei-kantavina - edellyttäen että valumassa on myrkytöntä. Esimerkiksi etelänpuoleisen viherhuoneen väliseinässä nuo varaisivat kiitettävästi lämpöä öiden ja pilvisten päivien varalle.
- Olettaen että kirjoitit kokemuksistasi suunnilleen samoihin aikoihin toiseen ketjuun, niin kyseessä ilmeisesti olivat EPS-valuharkot. Noilla on tosiaan rajoitteensa, mutta kun niistä on tietoinen ja löytää osaavat tekijät, niin onnistunee siinä missä muillakin tekniikoilla. Eikö talo kuitenkin tullut lopulta hyvään kuntoon? Ongelma taitaa olla siinä että tuon materiaalin käytön osaajia kaikilla portailla taitaa olla kovin vähän vielä eli esim. suunnittelussa tulisi ottaa huomioon että kiinnityksiä EPSin läpi olisi hyvä välttää (tai ainakin että pitää käyttää kuorman mukaan oikeanlaisia kiinnikkeitä ja ne eivät ihan ilmaisia ole), miten kipsilevyt saa kätevästi EPSiin kiinni jne.
- Ihan hyvä pointti. Kylmäsiltojen katkaisua ja halpaa rakennetta lähinnä ajattelin enkä rikkoontuneen lasin vaihtoa pohtinut, mutta tuossa valossa helppo nyt ymmärtää miksei moista rakennetta tietääkseni käytetä.
Vaan jos idea sinällään on toimiva, niin kehitelläänpä sitä eteenpäin: levitetään "asennusuraa" aina eristeen sisäreunaan saakka ja rakennetaan lämpimälle puolelle tukikarmi puusta. Kun eristyslasielementti halutaan joskus vaihtaa, niin ruuvataan tukikarmi osiinsa ja irti ja vaihdetaan elementti sekä kootaan karmi lopuksi takaisin paikoilleen. - Joo, eilen lueskelinkin hallien rakentajien kommentteja eräästä keskustelusta, jossa mainittiin että seinistä 5 m sisään päin olisi eristettävää vyöhykettä, sen jälkeen ei lämpöeristeelle olisi tarvetta. raksaaja(sh) jo edellä onnistui minut vakuuttamaan ettei ainakaan passiivisella lämmönsiirtymisellä homma toimisi.
Näistä Suomessa tehdyistä pientalomittakaavan kokeiluista on hyvin nihkeästi näkynyt juttua medioissa ja varsinkaan netissä. Sinänsä on jo vesivaraajista tuttu juttu, että mitä isompi tilavuus, sen parempi lämpö säilyy, joten en hämmästyisi vaikka tuo jälkimmäisenäkään kuvaamani rakenne ei toimisi - ellei sitten "routaeristeitä" ulotettaisi tarpeeksi syvälle. :) - 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... :) - Voisihan se noinkin olla. Käsittääkseni osittain maan sisään rakennettujen asuintalojen kellareiden eristämättömien lattioiden lämpötilat pyörivät siellä 8–15 °C tienovilla kun tilaa ei lämmitetä. Kuvailemassani tapauksessa lämpöä kuitenkin tuotaisiin huomattavasti suuremmalla teholla ja massiivisempaan betonilaattaan, joten lämmön luulisi nousevan korkeampiin lukemiin.
Viileän betonin kalseutta torjumaan sopisi varmaankin korkkilevy, joka päästäisi höyryn läpi mutta hillitsisi lämpövirtaa ja varmaankin kestäisi kohtuullisesti kosteuttakin (kun pullojen korkkeinakin materiaalia käytetään). Tällöin tosin maapohjan lämmittävä vaikutus vähenisi, joskin maa pysyisi lämpimämpänä hilliten kuitenkin lämmönhukkaa. Kun lasikuistin/viherhuoneen lattian jättäisi pinnoittamatta, pitäisi maasta karkaava lämpö tilan talvella vähintäänkin plussalla vähentäen asuintiloista väliseinän kautta tapahtuvaa lämmönhukkaa. Vastaavasti voisi pohjoispuolelle tehdä lämmittämättömän varastotilan ja jättää sen lattian ilman eristävää lattiapintaa, jolloin myös sinne muodostuisi oma puolilämmin mikroilmastonsa vähentämään lämmönhukkaa asuintiloista.