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

#285
Lainaus käyttäjältä: Hayabusa - helmikuu 08, 2024, 12:49:47
Lainaus käyttäjältä: Lenny - helmikuu 08, 2024, 08:38:23
Lainaus käyttäjältä: -:)lauri - helmikuu 08, 2024, 04:38:07Mitä eroa ympäristömuuttujien asettamisella on windowsin ja linuxin välillä? Onko jommalla kummalla mahdollista luoda erilaisia "profiileita", joilla erilaiset ympäristömuuttujat? Esimerkiksi pyyttonissa voidaan kaiketi määritellä kullekin projektille oma pyytton-ympäristö omine muuttujineen(?) Onistuuko jokin tällainen windowsilla tai linuxilla?

Tokihan tuo on mahdollista molemmissa luomalla tiedosto, jossa asetetaan "Muuttuja=arvo" ja sitten ajetaan sisään komentoriviltä tarpeen mukaan. Muuttujat ovat sitten voimassa siinä konsolisessiossa josta ne on ajettu. En näe mitään eroa Windowsin ja Linuxin välillä tässä asiassa.

Mietin tätä käydessäni pyyttonilla. ;D

Asiattomuuden jälkeen komppaan asiallisesti Lennyä. Ei noissa pitäisi olla käytännössä mitään eroa. Oletan, että Laurin sovellus pyörii sovelluskerroksessa ja ehkä kutsuu jotain käyttöjärjestelmätason palveluja tarvittaessa. Jälkimmäistä vartenhan ovat asennuksessa paikoilleen pistetyt ympäristökirjastot. Pythonkin on jo niin monennessa versiossa, että aika spesiaalitapaus saa olla, että ei toimisi win/lin vaikka toisessa toimii.

Niin siis käytän duunissakin paljon Laravel-php -kirjastoa, ja siinä on .env-tiedosto sitä varten, että saa laitettua projektille ympäristömuuttujat.

Ongelma kuitenkin muodostuu tekoäkyapureiden kanssa. Vaikka ne eivät tällä hetkellä siirrä koodia käyttäjän koneelta verkon yli muualle, niin kun kehitys kehittyy koskaan ei tiedä milloin se alkaa siirtää koodia esim. omaksi opetusmateriaalikseen. Kun tekoäly sitten harjoittelee arkaluontoisella materiaalilla, se ehdottaa sitä kohta jollekin toiselle käyttäjälle ja huonolla mäihällä meidän firman arkaluontoiset tiedot ovat pian julkisia. Pitää olla extravarovainen.

Jos saisi nuo ympäristömuuttujat projektin ulkopuellelle, niitä ei ehkä niin helposti tekoälukoodieditorilla availe. Eli jonkilaiset  käyttöjärjestelmätason skriptit pitäisi ilmeisesti kirjoittaa, jotta saisi näppärästi eri projekteille eri ympäristömuuttujat.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Lainaus käyttäjältä: -:)lauri - tammikuu 30, 2024, 00:54:55On tuossa kyllä pari mahdollista virhetilannetta mitä tämäkin ratakasisu aiheuttaa. Koska nuo ajot ovat rinnakkaisia niin ajot eivät tiedä toisten ajohen statuksesta mitään ja jos ajot eivät toimi yhtä noipeasti 429 virheiden hoitaminen ei onnistu optimaallisesti. samoin jos yksi joutuu päivittämään tokenin niin mahdollisesti kaikki joutuu sen päivittämään. Tosin kun yksi on jo uusinut tokenin muiden ei tarvitsisi uusia sitä. Tokenin uusimisen voi vielä hallita helposti, mutta 429-onglema on tosiaan se, että serveri palauttaa Retry-After arvona eri lukuja riippuen siitä kuinka kauan yksi ajo kestää ja se ajo joka kestää pisimpään, antaa sen oikean retry arvon. Jos nopein ajo jo odottaa se odottaa liian vähän aikaa.

Ettei vaan pitäisi sittenkin vain käyttää Pool-luokkaa, kun kerran olisi optimaallista että 429 virheen sattuessa odotettaisiin niin kauan kuin on suurin Retry-After arvo sanoo ja ei tarvitsisi kuin luoda kertaalleen uusi token jos edes yksi palautusarvoista on ollut 401... Kylläpä tämä on pulmallista.

Joo tein sitten itse ja säästin. 429 virheen tarkistus jää ikuiseen luuppiin. Enkä ole ennättänyt kokeilla kunnolla hahmotelmaani 401 ja 403 virheiden käsittelylle, ties vaikka nekin jäisivät ikuiseen luuppiin. Pitää yritää ratkoa nuo joskus kun on aikaa eikä duunissa ole liian kiirettä. Viime aikoina saaanut oppia töissä paljon uutta ja luonnollisesti osa opinnoista on sitten vappaa-ajasta pois :D
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Lainaus käyttäjältä: -:)lauri - maaliskuu 01, 2024, 13:22:49Joo tein sitten itse ja säästin. 429 virheen tarkistus jää ikuiseen luuppiin. Enkä ole ennättänyt kokeilla kunnolla hahmotelmaani 401 ja 403 virheiden käsittelylle, ties vaikka nekin jäisivät ikuiseen luuppiin. Pitää yritää ratkoa nuo joskus kun on aikaa eikä duunissa ole liian kiirettä. Viime aikoina saaanut oppia töissä paljon uutta ja luonnollisesti osa opinnoista on sitten vappaa-ajasta pois :D

Tällä viikolla on ollu aikaa väkertää tätä. Muuten saanut tuon toimimaan, mutta jos headereissa ei tule retry afteria, tuo korottaa odotusaikaa jokaiselle haulle eksponentiaalisesti: 2s, 4s, 8s... aina 64 sekuntiin asti.

Ongelma:

Jos on 20 haettavaa tietuetta ja ratelimit on 5 tietuetta kerralla ekat tulee heti ja tokat kun on odotettu 2 sekuntia. Nyt seuraaville 5:lle tulisi myös 2 sekuntia (jos se kerran riittää), mutta tää mun implementaatio korottaa tuossakin kohtaa exponentiaalisesti hakua, joten se odottaa 4 sekuntia seuraaville 5:lle ja lopuille 5:lle sen 8 sekuntia.

Pitää jotenkin tallentaa tuo odotustaika, joka riittää ja sitten käyttää sitä, mutta jos ei riitä, sitten korotetaan eksponentiaalisesti. En vain vielä tiedä, miten tuo tallentaminen kannattaa tässä implementaatiossa tehdä.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^
nyt tuo tallentaminen toimii, eli ei kasvata odotusaikaa, ellei tarvitse. Seuraavaksi alkaa sitten testaaminen. Pitää yrittää keksiä mahdolliset ongelmatpaukset.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^^
muutaman tunnin manuaalisella testaamisella sanoisin, että toimii. Seuraavaksi voisi kirjoittaa unit-testit niin ei tarvitsisi manuaalisesti testata kaikkea. Sen jälkeen voisi lisätä tuon päälle jonkun sovelluksen ja kun unit testit olisivat paikoillaan olisi ikään kuin elämä helpompaa, kun onnistuisi paikalistaa virheen aiheuttaja ilman 6 tunnin manuaalista testaamista.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^
Tuossa helpotti huomattavasti se, että määritin request-objektin ja response-objektin. Pitää vielä määritellä listaobjekti request-objekteille ja listaobjekti response-objekteille. Näin minulla olisi niin hyvä kontrolli, kuin PHP-kieli mahdollistaa siihen, ettei luokkieni välillä ja niiden sisällä käsitellä tietotyyppejä, joita ne eivät osaa käsitellä. Tai siis tietysti luokkien sisällä käytän tavallisia listoja, eli luokkien sisällä on mahdollista luoda virheellisiä tietotyyppejä, mutta tärkeintä olisi, että luokkia ei voi käyttää kuin tiedetyillä tyypeillä, jolloin on paremmat saumat tosiaan paikallaistaa virhe juuri siihen luokkaan, jossa virhe tapahtuu.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

^
No enhän minä malttanut. Tein myös nuo listausobjektit. Nyt tuota mun härdelliä ei pysty käyttämään, ellei luokille anna oikeantyyppistä objektia.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

Hayabusa

Jos Lauri ei lopeta lomalla koodausta, T-X tulee ja terminoi.
An nescis, mi fili, quantilla prudentia mundus regatur

-:)lauri

#293
Ei ole ollut VS Code auki tänää sekuntiakaan, joten toistaiseksi sujunut loma suunnitelmien mukaan.

Minkäköhänlainen rasti olisi ohjelmoioda laskluri sosiaalituille? Olisi helpompi seurata julkista keskustelua noista esim. asumistukien leikkauksista, kun olisi jokiu käsitys mikä niiden vaikutus olisi eri ihmisten taloudelliseen itsemääräämisoikeuteen; ihmisten jotka siis elävät joko kokonaan tai osittain tukien varassa.

Kelan sivuilla on eri laskurit eri tukimuodoille, mutta ymmärtääkseni jokaisen laskuriin täytyy syöttää samoja tietoja yhä uudestaan ja uudestaan. Aivan turhaa näpyttämistä. Olisipa rasti ruutuun-lomake, minkä tuen osalta haluaa tiedot tuen määrästä, johon on oikeutettu ja sitten tuo yksi lomake, joka kysyy rastitettujen tukimuotojen kannalta olennaiset tiedot.

Onko Kelalla kenties api, josta saisi tarvittavat tiedot tällaiselle laskurille?
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Löysin hyvän väriteeman VS Codeen: Rainglow-väriteema-kirjastossa oli useampi tumma vaihtoehto, jotka miellyttivät silmää.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

https://aijs.io/editor

Jos kiinnnostaa tehdä simppeleitä javascript-taideteoksia, joita siis selain jaksaa pyörittää, tuo vaikuttaa olevan hyvä vaihtoehto p5.js sivuston editorille. Tosin tämä edellyttää, että on joko ChatGPT-avain tai Gemini-avain, jotta saisi apua tekoälyltä, mutta jos on avain ja omaksi iloksi koodailu kiinnostaa, tuota kannattaa kokeilla.
 
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

#296
Saatana tässä on kaksi päivää yrittänyt tehdä projektiin käännösluokkaa. Sisään tuleva data on moniluloteinen array, jonka avaimet suomen kielellä jotka pitää kääntää englannin kielelle. Ja luonnollisesti piti kokeilla miljoonaa eri tapaa, miten toteuttaa ensinnäkin käännöslistat. Moniulotteisina vai miten, ja sitten pohtia miten toteuttaa rekursiivinen metodi, joka käy tuon moniulotteisen datan läpi. Päädyin toteuttamaan käännöslistat yksiulotteisina ja jokainen rekusrio eli jokaiselle datan dimensiolle haetaan oma käännöslistansa.

Ongelma on koko ajan ollut se, etten ymmärtänyt itse, mitä olin koodannut ts. en pystynyt seuraaman omaa ohjelmaani ja ChatGPT:stä ei ollut juurikaan apua. Kokeilin sen ehdottamia menetelmiä, mutta ne eivät toimineet kun se ei ymmärtänyt selityksistäni selvästi oleellista. Jos olisin heti aluksi keksinyt tämän lähestymistavan, olisin todennäköisesti onnistunut kysymään myös tekoälyltä apua ja homma olisi ollut taputeltu jo eilen.

Sisääntuleva data ja kaksi luokkaa, joista lapsiluokka määrittelee käännöslistat ja vanhempiluokka tekee kännökset:

Sissän tuleva data
{
    "asiakasnumero": 36784,
    "ostoskori": [
        {
            "tuotenumero": 39487,
            "hinta": "15.00"
        },
        {
            "tuotenumero": 456890,
            "hinta": "9.40"
        }
    ]
}

Ensimmäiseksi kutsutaan käänäslistaa jonka metodin nimi saadaan url-osoitteele annetusta nimestä. Tässä tapauksessa sille on annettu nimeksi "shop", jokaisen käännöslistametodin nimi päättyyy sanaan Translations. Ja sitten muutetaan syntynyt sana camel-case muotoon (eka kirjain pienellä ja sitten loput uudet alkavat sanat yhteen isolla alkukirjaimella).

Seuraava koska "ostoskori" on uuden dimension aloittava avain ja sen käännös on 'shopping_cart' niin kun sen perään laitetetaan Translations ja muutetaan camel-case muotoon, saadaan metodin nimeksi "shoppingCartTranslations".

class ShoppingCartResource extends Translator
{

    public function shopTranslations(): array
    {
        return [
            'asiakasnumero' => 'customer_id',
            'ostoskori' => 'shopping_cart',
        ];
    }

    public function shoppingCartTranslations(): array
    {
        return [
            'tuotenumero' => 'item_id',
            'hinta' => 'price',
        ];
    }
}

Ja työhevonen eli pappabetalar-luokka - Translator:
class Translator
{
    public function __invoke(Request $request): array
    {
        $routeName = Route::currentRouteName();
        return $this->translate($routeName, $request->validated());
    }

    protected function translate(string | null $prefix, array $data, null | string $previousPrefix = null): array
    {
        // if data is not ascending from the associative array, prefix is null and, we need to construct prefix from the previous prefix
        if(null === $prefix) {
            $prefix = $previousPrefix;
        }
        // we construct camel case method name from the prefix
        $methodName = $this->convertToMethod($prefix . 'Translations');
        $translatedData = [];
        foreach($data as $key => $value) {
            // we order translation array and use selector helper method to get associated value for the key
            $translatedKey =  $this->selector($key, $this->$methodName());
            if (is_array($value)) {
                $value = $this->translate($translatedKey, $value, $prefix);
            }
            $translatedData[$translatedKey ?? $key] = $value;
        }
        return $translatedData;
    }

    protected function convertToMethod(string $string): string
    {
        return Str::camel($string);
    }

    protected function selector(string | null $key = null, array $list): array | string | null
    {
        return null === $key ? $list : (isset($list[$key]) ? $list[$key] : null);
    }
}


Eli jatkossa tarttee vain luoda tuo luokka - kuten esimerkiksi tässä tapauksessa: "ShoppingCartResource", jossa nuo "translator"-metodit, laittaa se perimään trasnslator luokka. Sitten sitä voidaan käyttää näin:

    public function someMethod(Request $request)
    {
        $resource = new ShoppingCartResource();
        $translatedRequestBody = $resource($request);
    }




Perkele. Kaksi päivää ja noin vähän koodia. No siis noita käännöslistoja on useampia ja paljon oli käännettävää kun oli todella moniulotteinen data käännettävänä, mutta siis joka tapauksessa tässä on vähillä yöunilla koodattu varmaan pari tuhata rivia koodia. Ja lopulta tuo translator luokka sitten syntyi. Mitä tästä opimme: pidä käänöslistat yksiulotteisina.

Kun tuota vastaava data on postman-ohjelmassa ja lähetän sen endpointtiin, jonka requestin validated() -metodi palauttaa vain halutut tietueet ja kun sen syottää tuolle käännös-algoritmille, se pelaa kuten pitää. Mutta vielä ei ole testeja suoritettu muutoin kuin kaikkein optimistisimassa tapauksessa, että en kyllä uskalla yhtään sanoa, miten tuo käyttäytyy edes simuloiduissa tositoiminnassa.

Pitäisi kirjoittaa automaattiset testaukset useammalle vaihtoehdolle, niin olisi joku varmuus, että ei mene rikki kaikkein ilmeisimmillä tavoilla tositoiminnassa kun lähden muuttelemaan jotain Request-luokassa mitä tulen muuttamaan itseni tuntien. Mutta taitavat jäädä myös automaattiset testaukset kirjoittamatta; itseni myös tuntien.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Github Copilot sai lähteä VS Codestani. Olen käyttänyt Tabinea koska se on ollut jotenkin intuitiivisempi kuin Copilot, joten ainakin toistaiseksi odottelen, että minä opin käyttämään copilottia tai Copilot kehittyy fiksummaksi, jotta se hoksaa, kuinka ohjelmoija käyttäytyy, ennen kuin annan uuden tilaisuuden. Tabine oli aluksi seinähullu, se kirjoitti niinpaljon mitäänm tarkoittamatonta merkkijonoa etten ole voinut käyttää sitä kuin vasta muutaman kuukauden kun se on oppinut tavoille. Yritän kuitenkin antaa uudelle tuttavuudelle Codeium-tekoälylle mahdollisuuden joten pidän Tabinea hieman jäähyllä ja katson miten Codeium käyttäytyy. Codeium ei käytä vielä ChatGPT 4 versiota muuten kuin chatissa, joten se on koodipuolella ehkäpä 0.5 version verran hölmömpi kuin Tabine.
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

-:)lauri

Codeiumin saa chrome-selaimeen ja kun lisää optioneihin p5js editorin verkko-osoitteen regexin (https:\/\/editor\.p5js\.org\/.*) saa tekoälyavasuteisen p5js editorin. Wau!!
Selvin merkki psykoosista on se, että kuvittelee ajattelevansa vain kylmän rationaalisesti ja loogisesti.

a4

Tämän videon olisi voinut lykätä moneen muuhunkin ketjuun, koska tekoäly ja älykkäät agentit näyttävät videon mukaan karsastavan binäärisiä jaotteluja eli kansankielellä mustavalkoista ajattelua.
Videolla puhutaan filosofiasta, biologisesta hakkeroinnista ja koodaamisesta ja niiden yhteydestä tekoälyohjelmointiin, yksinkertaisimpienkin algoritmien kätkemistä emergenteistä yllätyksistä, älykkäiden agenttien maailmastamme, pään tai vaikka kahden kasvattamisesta katkaistun tilalle jne. Puhenopeus on kiitettävää ja alussa suositellaankin laskemaan kuuntelu-tai katselunopeutta lähemmäs normaalia.  ;D  :o
Yllättävän vetävää puheripulia puoleksitoista tunniksi normaalilla toistonopeudella: