Uutiset:

Ilmoitustaulu mahdollisten ongelmien varalta (wikimedia.org / Etherpad)

Sähköpostia ylläpidolle: kantapaikanherra (at) gmail.com

Main Menu

Ohjelmointi

Aloittaja Juha, helmikuu 03, 2019, 10:01:17

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

-:)lauri

#300
Sain kirjoitettua yhden harjoitusprojektini koodin ensimäisen vedoksen valmiiksi. Siinä applikaationi käyttää ulkopuolisia apeja keräten tietoa jokaisesta ja lopulta se tulostaa nuo tiedot.

Ajatus on testata logiikkaa, missä etukäteen ei tiedä, montako hakua pitää tehdä ja logiikkaa missä serverin käyttämä aika prosessin läpikäymiseksi voidan minimoida. Eli mahdollisimman monet api-kutsut tulee voida tehdä rinnakkain sen sijaan, että tekisi ne peräkkäin. Siellä siis voi joutua tekemään yhteensä esimerkiksi 1000 hakua niin, että peräkkäin joutuu väistämättä tekemään 5 hakua, jolloin rinnakkain voidaan tehdä 200 hakua. Tosin sitä montako hakua voidaan joutua tekemään peräkkäin ja montako siten on mahdollista tehdä rinnakkain ei ole etukäteen tiedossa.

Vaikeuksia on vain ollut testata koodiani sen kirjoittamisen vaiheessa, sillä se on niin radikaalisti takaisinkytkeytyvä, että sitä on hieman hankala testata, ennen kuin koodi on edes suurinpiirteinn täysin valmis. Nyt se on testattavissa, mutta vielä en toisin sanoen ole uskaltanut testata sitä, sillä en halua pettyä, kun se ei sitten ehkä toimikaan :D
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^
Tässä illan pikkutunneilla ryhdyin tuota ratkomaan ja voi luoja siinä oli virheitä. Suurin osa virheistä taitaa olla nyt korjattuna. Muutama hankala kohta pitää vielä selvittää ja sitten se todennäköisesti toimii kuten pitää.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#302
^
Kylläpä tuosta tuli hyvä. Olen erityisen onnellinen siitä että 401- ja 403-verkkovirheiden käsittely vaikuttaisi toimivan kuin junan vessa. Saatoin testata noita oikean API:n kanssa joka tuottaa noita virheitä tasaisin väliajoin, eikä applikaationi kyykännyt missään vaiheessa noiden takia vaikka kyseisiä virheitä tuli testien aikana lukuisia.  Ilman asianmukaista logitusta en olisi edes tiennyt että applikaationi päivitti kirjautumistiedot aina silloin tällöin ajojejen lomassa.

Olen myös melko varma, että 429-virheen käsittely toimii niin ikään, mutta en ole vielä päässyt testaamaan sen virheen osalta ihan oikeaa APIa, joka tuottaisi 429-virheitä. Tein minä omalle koneelleni osoitteen, joka tuottaa tuota virhettä, mutta pitäisi testata ihan oikean APIn kanssa toimiiko tuo kuten pitää.

Ja niinpä vain tuossa toimii myös erinomaisesti tuo peräkkäisten hakujen minimointi. KaIki tarvittava tieto saadaan nyt talteen kun yllättäviin virheisiin ei vain törmätä. Tosin vielä tarttee testata oikean apin kanssa niin että noita 429-virheitä tulee. Jos kaikki menee niinkuin pitää en edes huomaa ilman logitusta, että 429-virheitä tulee.

Pitää ehkä vielä miettiä kansiorakennetta ja luokkien nimeämistapoja, eli jonkin verran on vielä tarvetta koodin refaktoroinnille. No saa nähdä, mitä sisäisen kirjallisuuskritiikkini kanssa teen vai teenkö mitään.

Mutta sitten.

Mitä tulee yllättäviin virheisiin pitäisi vielä keksiä tuohon järkevä kirjanpito niille. Tarkoittamani virheet tässä tapauksessa ovat sellaisia, ettei tarvittavaa tietoa ole saatu. Kuten että sattuu joku odottamaton tietoliikennevirhe, joka estää tiedon saamisen, tai sitten APIsta vastaava ei ole julkaissut tarvittavaa tietoa. Tietoliikennevirheen kohdalla riittää, että haku toistetaan, mutta jälkimmäisessä tapauksessa pitää patistaa API:sta vastaavaa julkaisemaan tarvittava tieto ennen kuin ajo virheiden osalta uusitaan.

En vain tiedä kuinka tuosta voisi pitää applikaatiossani järkevästi kirjaa. Se että tietoja ei saa voi nimittäin johtua siitäkin, että applikaation serveri kyykkää kesken kaiken.

Hmm... Mitä jos rakentaa tietokantaan relaatiopuun verkko-osoitteista sitä mukaan, kun saa tietää, mitä verkko-osoitetta on kutsuttava seuraavaksi. Lopuksi poistaa puusta ne oksat, jotka ovat johtaneet tarvittavien tietojen saamiseen. Näin jäljelle kaiketi jää kuva applikaatiosta niiden tietorakenteiden osalta, jotka ovat syystä tai toisesta epäonnistuneet kesken kaiken.

Se riski tässäkin kyllä vielä on otettava, että applikaation oma serveri kyykkää juuri sillä hetkellä, kun onnistunut verkko-osoiteketju pitäisi poistaa tietokannasta, jolloin kun sitä ei olekaan poistettu, uusinta-ajo johtaa tuplatietoihin tuon yhden verkko-osoiteketjun osalta.

Vai olisiko tuossa kenties joku muu tapa pitää kirjaa virheistä, mutta jossa ei yhtäältä syntyisi tuplia, eikä liioin jäisi rekisteröimättä osoitteita, joiden haut eivät ole tuottaneet odotettua tulosta?

Tai no, ehkä pitää vain tarkistaa uusinta-ajojen kohdalla mahdolliset tuplat ja poistaa ne manuaalisesti, jos niitä on. Tämä on ehkäpä se pienimmän riesan tie tällä hetkellä.

Eli kun tehdään API-pyyntö pitää kyseinen osoite tallentaa tietokantaan jonkinlaiseen relaatiopuuhun. Kun pyyntö on tuottanut hakutuloksen, pyynnön osoitteella haetaan kohta relaatiopuusta ja lisätään siihen hakutuloksessa selvinneet haettavat verkko-osoitteet.

Viimeisen verkko-osoitteen palautteen kohdalla kuljetaan oksan kärjestä kohti puun tyveä ja poistetaan nekin oksat eli verkko-osoitteet, joiden ainoana oksana poistettava oksa oli.

Tietokantani on dynamodb ja ellen väärin tiedä, voi sen tietokantatauluun lyödä esimerkiksi PHP:n assosiatiivisen listan kaltaisen tietueen talteen ja kuhunkin taulun tietueeseen, vaikka kokonaan omanlaisensa. Eli vielä ainakin tällä hetkellä vaikuttaisi siltä, että tuollainen dynaaminen puu on ihan mahdollinen saada talteen ja muokattavissa kivuttomasti. Mutta en tietysti tiedä onko bynamodb:n kanssa juuri näin.

Uusinta-ajossa tehdään kaikille puusta löytyville verkko-osoitteille pyynnöt ja pyydetään niitä APEista kaikki samaan aikaan. Ja sitten taas poistetaan ne oksat, jotka ovat uusinta-ajossa johtaneet kaikkien tietojan saamiseen. Näin tietokantaan jää toivottavasti joko ei mitään tai vain pienempi puu.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Hippi

If you see your glass as half empty, pour it in a smaller glass and stop complaining. ❤️

-:)lauri

#304
^
Toi on yksi parhaimista sketseistä. Se ei vanhene koskaan :)
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Hayabusa

^^
^
Älkää hyvät ihmiset työntäkö palikoitanne vääriin reikiin!  ;D
An nescis, mi fili, quantilla prudentia mundus regatur

-:)lauri

On ollut töissä yksi projekti odottamassa kehitystään, kunhan vain saan juoksevat projektit siihen pisteeseen, että edistämiselle on aikaa. Se on Laravel-projekti, jossa frontend-kirjastoksi ajattelin Reactia. Ymmärsin että jos Laravel 11 -versiossa valitsee Reactin, vakiona tulee CSS-kirjastona Tailwind ja eihän minulla onnettomalla ole mitään katkua, miten se toimii. Tai siis luulen tietäväni miten CSS-kirjasto todennäköisesti toimii, mutta kun ei ole Tailwindin syntaksista muuta katkua, kuin että siinä tulee helposti yhtä pitkiä tai pitempiä "käskyjä" kuin tulee CSS-kirjaston, Bootstrapin "käskyistä" ja Bootstrapissakin meni jokunen viikko aktiivikäyttöä, ennen kuin minulta onnistuivat yleisimmin käyttämäni tyylikäskyt ilman ohjeita.

Siispä ryhdyin rakentamaan javascriptillä konvertteria, joka konvertoi markdown-koodin html-koodiksi ja luonnollisesti olen nyt yrittänyt sukeltaa Tailwindin maailmaan. Ymmärtämättä siitä vielä juuri mitään ChatGPT on saanut päättää CSS-käskyistä ja niissä tilanteissa kuin se antaa sutta ja sekunda olen sitten istunut tunteja haravoiden googlella mahdollisia ohjeita.

Yksi ongelma ei tosin ole millään selvinnyt. Miten Tailwindissä keskitetään pystysuunnassa iframe-elementti ja "kiinnitetään" se sivulle, jotta kun sivua vierittää alaspäin, elementti pysyy siinä sivun keskellä?
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

a4

^


Tailwind CSS:llä pystysuunnassa keskitetyn iframe-elementin voi tehdä helposti. Lisäksi, jotta iframe pysyy kiinnitettynä sivun keskelle vieritettäessä, voimme käyttää `fixed`-asettelua.

Alla on esimerkki HTML-koodista, jossa käytetään Tailwind CSS -luokkia keskittämään iframe-elementti pystysuunnassa ja kiinnittämään sen keskelle sivua:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fixed Centered Iframe</title>
    <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
</head>
<body class="bg-gray-200">
    <div class="fixed inset-0 flex items-center justify-center">
        <iframe src="https://example.com" class="w-3/4 h-3/4 border-0"></iframe>
    </div>
</body>
</html>
```

Tässä koodissa:

1. `fixed` asettaa div-elementin kiinteäksi, joten se pysyy näkyvissä, vaikka sivua vieritettäisiin.
2. `inset-0` varmistaa, että kiinteä elementti kattaa koko näytön.
3. `flex`, `items-center`, ja `justify-center` keskittävät iframe-elementin sekä vaaka- että pystysuunnassa.
4. `w-3/4` ja `h-3/4` antavat iframe-elementille leveyden ja korkeuden, jotka ovat 75% näytön leveydestä ja korkeudesta (voit säätää näitä tarpeen mukaan).
5. `border-0` poistaa iframe-elementin reunuksen.

Tämän seurauksena iframe-elementti pysyy keskellä näyttöä, vaikka sivua vieritetään, ja se on keskitetty sekä vaaka- että pystysuunnassa.


;D

-:)lauri

^
Sä oletkin pro ChatGPT-vatsastapuhuja. Aloitin eilen illalla projektin alusta, pyytäen ChatGPT:tä luomaan tuon tyyppisen karvalakkiversion ilman mitään turhia krumeluureja, tiedäthän pinkkiä, lilaa ja niin edelleen ja heti pysyi video paikoillaan. Sitten pikkuhiljaa kokosin loputkin elementit paikoilleen.

Olisi ollut kiva tietää, mistä johtui, ettei se eka versio toiminut, mutta kuten todettua tailwind-osaamiseni on niin heikkoa, että en osaa sen tyyleistä päätellä mitään. ChatGPT:n kanssa on hankalaa, jos ja kun on paljon koodia. Jos ei silloin erikseen osaa sanoa, mihin ChatGPTn tulisi kiinnittää huomionsa, se ei kiinnitä huomiotaan oikeisiin asioihin vaan generoi tiedoston tyhjältä pöydältä ja virhe on korjaantunut tai ei, se voi olla silloin pelkkää hakuammuntaa.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Hayabusa

^
Käytän ketjua hyväkseni kurmoottakseni toteutusketjussa ennen laureja olevia, eli käyttöliittymäsuunnittelijoita. Interwebin lomakkeissa törmää jatkuvasti pariin tökeröön asiaan.
1) lomakkeen täyttöohjeessa kerrotaan, että tähdellä (*) merkityt ovat pakollisia kenttiä. Ja kuinka ollakaan lomakkeen kaikki kentät on merkattu tähdellä! Miksi ei voi yksinkertaisesti sanoa kaikkien kenttien olevan pakollisia?
2) kenttää täyttäessä ruudulle pamahtaa viesti: "lomakkeella on virheitä". Olen vasta ehtinyt syöttää postinumeron ekan numeron, niin ei se ole virheellinen - se kesken. Vasta kun olen poistunut kentästä voi laskea tuliko oikea määrä merkkejä ja millaisia! Prkl!
Oikeastaan voisin syyllistää saman tien laurit: miksi suostutte koodaamaan paskaa designia?
An nescis, mi fili, quantilla prudentia mundus regatur

-:)lauri

#310
^
Kun en osaa, niin en osaa :D

Koodaan pääsääntöisesti palvelinten välistä tiedonsiirtoa. Eli hyvin harvoin teen mitään sellaista, että selaimella huomaa mitään. Mun virheet huomaa siinä että tiedot eivät ole siirtyneet lomakkeen täytön jälkeen johonkin kolmannelle osapuolelle. Ja jos lomakkeen täyttäjällä ei ole kolmannen osapuolen tietokanta auki, hän ei huomaa mitään. Sitten kun kolmas osapuoli ottaa yhteyttä lomakkeiden täyttäjään, että tietoa ei ole vähään aikaan tullut, sitten kasotaan minun tekemät virheet. Tietysti jos havaitaan odotettuja virheitä yritetään korjata niitä lennossa ennen kuin asiakas ja kolmas osapuoli kaipaa toimivuutta (lähetetään kolmannelle osapuolelle yleensä lomakkeesta vastavalle palvelimelle talentunteet lomaketiedot siltä ajanjaksolta kun tiedot eivät ole siirtyneet, kunhan virheet ensin korjattu), mutta aina ei välttämättä ole ilmeistä, mistä virheet johtuu ja niitä sitten selvitellään kissojen ja koirien kanssa.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Lainaus käyttäjältä: -:)lauri - heinäkuu 03, 2024, 00:03:52Siispä ryhdyin rakentamaan javascriptillä konvertteria, joka konvertoi markdown-koodin html-koodiksi ja luonnollisesti olen nyt yrittänyt sukeltaa Tailwindin maailmaan. Ymmärtämättä siitä vielä juuri mitään ChatGPT on saanut päättää CSS-käskyistä ja niissä tilanteissa kuin se antaa sutta ja sekunda olen sitten istunut tunteja haravoiden googlella mahdollisia ohjeita.


Tuohon meni aikaa kaiken kaikkiaan noin kaksi työpäivää -ish, koska en saanut videota mitenkään pysymään haluamallani paikalla. Samoin meni ikä ja terveys, jotta saisin teeman vaihdon toimimaan tumman ja vaalean välillä.

Mutta kyllä vain on sellainen kutina, etten minä ole oppinut tuosta CSS-kirjastosta vielä juuri mitään. Tosin sen verran katsoin ohjeita Tailwindin dokumentaatiosta, että nyt sentään uskaltaa kokeilla ja tietää vähän mitä dokumentaatiosta mahdollisesti etsiä, kun jotain pitäisi tehdä, kun paremmin ymmärtää miten dokumentaatio ominaisuuksia puhuu.

Eli ainakin tällä hetkellä tuntuu siltä, että tuollaisen Hayabusan kuvaileman käyttäjäkokemuksen saattaisin nippa nappa saada kasaan  :D
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

En pysty testaamaan yhtä softaa käyttäen apeja, joten ryhdyin kirjoittamaan unit-testejä. Perkeleesti syö aikaa tehdä sellaisia. Pitää kirjoittaa tuhottomasti koodia, jotta saa kokeiltua muutaman hassun asian. Toisaalta tää on sitten kyllä paljon luotettavampaa testailua kuin testatata softaa "käyttäjänä" vähän tekemällä sitä sun tätä ohjelmalla.

Muutenkin tässä oppii omasta koodista aika paljon. Tähänkin asti on ollut aika hyvä vainu, miten koodi pitää kirjoittaa, mutta nyt kun pitää ajatella mitä ei toivotuja efektejä kullakin metodilla voi olla, on löytynyt jo tässä vaiheessa jonkun verran korjattavaa enemmän kuin jos olisin testaillut vain "vähän käyttämällä"  ohjelmaa kuten ohjelman loppukäyttäjä.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.