Rainbowheart - ultimele 7 pagini

  • Aplicatii, programe sau servicii wasm rulate in server

    30-Jan-2023 14:34 - 303 vizionari

    In acest weekend am incercat sa pornesc aplicatii cu conexiuni de internet (tcp) scrise in rust si compilate pentru formatul wasm.

    Programele compilate in format wasm se pot executa cu wasmer (cel mai rapid, dar fara tcp) sau cu wasmtime (rapid si promite tcp) sau cu wasmedge (de 20 de ori mai lent decat wasmer si wasmtime, dar are un exemplu functional de server tcp) sau cu multe altele netestate de mine.

    Programele wasm se executa in mediu izolat (ca un container docker) si nu au acces direct la sistemul de fisiere si la reteaua internet, e nevoie de configurare explicita a drepturilor. Avantajul wasm este ca nu necesita suport de virtualizare din partea procesorului (docker cere asta). Wasm este un format executabil menit sa functioneze intr-un interpretor de masina virtuala cu posibilitatea de compilare nativa a codului in timpul executiei.

    Toate testele cu acces la foldere si fisiere au mers perfect cu wasmer, wasmtime si wasmedge, dar suportul de conexiuni internet/tcp/udp nu.

    Desi in documentatie wasmtime promite (cu comanda wasmtime run --tcplisten localhost:9000 fisier.wasm) suport tcp, nu am reusit sa compilez cu succes o solutie functionala in Rust. Am gasit exemple pentru dot net si ce exemple am gasit pentru Rust au functionat partial, iar documentatia Rust nu prea ofera exemple potrivite penttu copy/paste (spre deosebire de Python, care o face foarte bine) si standardul wasi privind conectivitatea tcp inca nu este definitivat.

    wasmer inca nu suporta conexiuni tcp, iar wasmedge merge perfect cu Rust, dar este foarte lent.

    Un film care compara performantele wasmer si wasmtime fata de executia nativa: https://www.youtube.com/watch?v=QlMLB2-G25c 

    Dar astazi, luni, am observat ca spin (o solutie de care am auzit cu cateva saptamani in urma, film1 si film2) rezolva toate problemele de conectivitate tcp folosind un runtime de wasm propriu si rapid (la fel de rapid ca wasmer sau wasmtime) si cu minim de cod si ceva configuratie atent construita:

    
    spin_version = "1"
    authors = ["ioan"]
    description = ""
    name = "my-test"
    trigger = { type = "http", base = "/" }
    version = "0.1.0"
    
    
    #
    # Toate componentele sunt aici
    #
    
    [[component]]
    id = "index"
    source = "index/target/wasm32-wasi/release/index.wasm"
    # asta da voie codului din container sa acceseze internetul
    allowed_http_hosts = ["insecure:allow-all", "https://some-random-api.ml", "https://postman-echo.com"]
    environment = { DB_URL = "host=localhost user=postgres dbname=spin_dev", A = "1", B = "2" }
    [component.trigger]
    route = "/..."
    [component.build]
    command = "cd index && cargo build --target wasm32-wasi --release"
    
    [[component]]
    id = "m1"
    source = "m1/target/wasm32-wasi/release/m1.wasm"
    [component.trigger]
    route = "/m1"
    [component.build]
    command = "cd m1 && cargo build --target wasm32-wasi --release"
    
    [[component]]
    id = "m2"
    source = "m2/target/wasm32-wasi/release/m2.wasm"
    [component.trigger]
    route = "/m2"
    [component.build]
    command = "cd m2 && cargo build --target wasm32-wasi --release"
    
    
    

    Ca sa pornesc in Linux aplicatia spin formata din trei module (index, m1 si m2) si scrisa in Rust:

    
    spin build
    if [ $? -ne 0 ]; then
        echo
        echo "Eroare compilare"
        echo
    else
        spin up --listen 0.0.0.0:5000
    fi
    
    

    Sau in windows (in masina virtuala VirtualBox cu drive z: mapat catre zona de lucru din Linux):

    
    @echo off
    z:
    cd Z:\MyData\Research\Rust\teste\wasm\spin\test2-app-complexa
    c:\1\spin\spin up --listen 0.0.0.0:5000
    pause
    
    
    

    Eu dezvolt aplicatii pe calculator cu Linux, dar toate programele testate (wasmer, wasmtime, wasmedge si spin) au varianta de program si pentru Windows si aplicatiile compilate in format wasm sunt incarcate si executate fara probleme in orice sistem de operare suportat: Windows, Linux, Android, Darwin, …


  • Lumina falsa din a patra dimensiune

    13-Jan-2023 16:05 - 375 vizionari

    Anul trecut, de sarbatori, am gasit un film interesant si am inteles de ce nu ma impac cu religia si ritualurile.

    Am inteles de ce lumea in care traim (dimensiunea a treia) este o simulare si cine e responsabil de asta (dimensiunea a patra).

    Ce nu explica nimeni, dar absolut nimeni in articolele de pe Internet, este de ce Noul Pamant este in 5d si nu este in 4d. De ce s-a sarit peste 4d?

    Probabil pentru ca este evident ca procesul de ascensiune al omenirii aici (pe planeta Pamant) si acum (dupa anul 2012) este din 3d in 5d, pentru ca in 4d este deceptia si sursa simularii.

    3d: simularea produsa de 4d, planul fizic cu toate influientele din 4d, precum in cer asa si pe pamant (unul din principiile hermeneutice)

    4d: lumea astrala, dualitate, eu si altii, bine si rau, lumina si intuneric, om si dumnezeu, polarizare, fragmentare, samsara, deceptie, ego, competenta, ierarhie, discriminare, venerare, religie organizata, sistem complex de recoltare a energiei spirituale, disonanta cognitiva, evolutie prin sentimente negative (controlul reptilienilor): frica, razboi, invidie, mandrie, lacomie, rusine – lumea demiurgilor din gnosticism si a reptilienilor din teoria conspiratiei

    5d: unitate, nirvana, om = dumnezeu = unul

    Viziunea gnostica: pamantul este o inchisoare.

    Viziunea budista: pamantul este un loc de suferinta.

    Am inteles de ce unii dintre prietenii mei paranormali sau iluminati si alte personalitati pe care le respect si le consider maestri, inca mai sunt crestini sau vorbesc de bine despre zeul religiilor Abrahamice: pentru ca inca nu au ajuns in 5d sau in Noul Pamant.

    Nu ai nevoie de religie ca sa te faci mai bun sau sa sa progresezi spiritual.

    Progresul spiritual se face cand intelegi rezultatele actiunilor tale (karma) si ce trebuie sa faci ca sa le reduci impactul negativ (suferinta si egoismul).

    Nici eu nu am ajuns in 5d, dar intuiesc ca 4d si religia sunt frane sau piedici spirituale.

    Filmul care expune falsa lumina:

    Filmul care explica de unde stie fata aceea ce stie: Islamism, Catolicism, Crestinism, Gnosticism (Valentinianism), Hermeticism, Alchimie Spirituala, …

    Filmul care m-a convinsa ca are dreptate:

    Sunt mult mai multe filme interesante pe canalul Youtube numit The Alchemist.


  • Formula calcul numere prime varianta 2

    22-Nov-2022 18:36 - 364 vizionari

    Continuare la Formula calcul numere prime.

    Se pare ca Python 3 in varianta mai noua foloseste calcule cu numere intregi in precizie arbitrara (precizie infinita) adica stocarea numerelor nu e limitata la 32-64-128 biti.

    Am reusit in Python sa cresc un pic numarul de numere prime generate.

    Functia originala este prime1(), iar functia imbunatatita de mine este prime2():

    
    #!/bin/env python3
    
    #
    # https://www.youtube.com/watch?v=j5s0h42GfvM
    #
    
    import math
    import time
    import sys
    from functools import cache
    
    @cache
    def factorial(n):
        return 1 if n <= 1 else n * factorial(n-1)
    
    def prime1(n):
        return 1 + sum([
            math.floor(pow(n/sum([
                math.floor(pow(math.cos(math.pi * (math.factorial(j - 1) + 1)/j), 2))
                for j in range(1, i+1)
            ]), 1/n))
            for i in range(1, pow(2, n)+1)
        ])
    
    def prime2(n):
        sum1 = 0
        for i in range(1, 1+pow(2, n)):
            if i % 100:
                print(f'Test {i} \r', end='')
            #sys.stdout.flush()
            sum2 = 0
            for j in range(1, i+1):
                f = factorial(j - 1) + 1
                # f = math.factorial(j - 1) + 1
                if (f // j) * j == f:
                    sum2 += 1
            v = pow(n/sum2, 1/n)
            if v>=1:
                sum1 += 1
        return 1 + sum1
    
    def main():
        print('Calcul 1')
        n = 1
        while True:
            start = time.time()
            try:
                v = prime1(n)
            except Exception as e:
                print(e)
                break
            end = time.time()
            print(f'Prime #{n} = {v} - {end-start:.2f} sec')
            n += 1
        print()
        print('Calcul 2')
        n = 1
        while True:
            start = time.time()
            v = prime2(n)
            end = time.time()
            print(f'Prime #{n} = {v} - {end-start:.2f} sec')
            n += 1
    
    if __name__ == "__main__":
        main()
    
    
    

    Cu prime1() se determina primele 7 numere prime, iar functia are un bug (python are un bug) la rotunjirea facuta de math.floor().

    Dar cu prime2() se obtin in cateva secunde primele 10 numere prime si lista e identica cu o alta lista gasita pe Internet, dar dupa acea nu apar erori, dar afisarea rezultatelor se face din ce in ce mai rar pentru ca numarul de calcule efectuate creste exponential si numerele prime sunt din ce in ce mai rare.

    Functia prime2() afiseaza pe ecran ce pozitie testeaza, ultiumul numar prim afisat repede este 31, ca sa afiseze 37 (urmatorul numar prim) trebuie sa ajunga cu teste la pozitia 2 la puterea 12 (37 este al 12-lea numar prim) = 212 = 4096 si este tare, tare greu pentru python, iar pypy testat de mine nu merge ca nu are functools.

    Nefolosind cache din functools si apeland  math.factorial, merge si cu pypy, dar merge un pic mai repede decat Python, curios, pentru ca pypy accelereaza executia programelor Python de 2-20 de ori!

    Python gaseste numarul 31 ca fiind prim in 30.6 secunde, iar pypy il gaseste in 21.1 secunde, apoi pypy gaseste pe 37 in 239.5 sec, …

    Dar algoritmul este foarte lent, formula este impractica.

    Un program simplu de cautare prime:

    
        n = 1
        start = time.time()
        while True:
            n += 1
            if 0 == n % 2:
                continue
            flag = True
            for i in range(3, n//2, 2):
                if 0 == n % i:
                    flag = False
                    break
            if flag:
                end = time.time()
                print(f'{n} - {end-start:.2f} sec')
            if n > 1000:
                break
    
    
    

    gaseste lejer numerele prime sub 1000 in zero secunde, si sub 10000 in 0.04 secunde.


  • Imagini generate de AI din descriere text

    14-Nov-2022 18:09 - 596 vizionari - 2 comentarii

    Cu cateva luni in urma, fara sa fiu super impresionat (pentru ca nu am scris pe blog), am testat cum sa generezi imagini din descriere text, folosind dalle-flow. Interesant este ca solutia folosea Stable Diffusion, dar genera numai imagini de rezolutie mica (cel mult 300x300) si la rezolutii mai mari aparea eroarea “CUDA out of memory”.

    Dar de cateva zile ma joc cu superbul Stable Diffusion UI, o colectie de programe care automat aduce, instaleaza si porneste un mic server local (merge si fara conexiune la Internet) cu interfata web, care permite generarea de imagini de inalta rezolutie in 1-2 minute (pe CPU i7 cu Nvidia RTX 3060 Laptop GPU).

    Nu numai din text: este posibil sa generezi o imagine plecand de la alta imagine si alegand optiunea sa genereze imagini asemanatoare.

    Cateva imagini generate plecand de la pictura “1907” a lui Octav Bancila:

    Plecand de la originalul gasit undeva pe Internet a picturii “1907” si redimensionat si prelucrat de AI sa fie de 2048x3072:

    initial-portrait__male_peasant__old__running__grass__blood_AAGNx8as_GFPGANv1.3_RealESRGAN_x4plus

    Am generat cateva imagini asemanatoare, tot de 2048x3072, folosind formula: portrait, male peasant, old, running, grass, blood, dirt, white dirty shirt, soldiers on background, cinematic lighting, 4k, oil canvas paint.

    portrait__male_peasant__old__running__grass__blood_AAGNx8us_GFPGANv1.3_RealESRGAN_x4plus portrait__male_peasant__old__running__grass__blood_AAGNx88Q_GFPGANv1.3_RealESRGAN_x4plus portrait__male_peasant__old__running__grass__blood_AAGNx9cA_GFPGANv1.3_RealESRGAN_x4plus portrait__male_peasant__old__running__grass__blood_AAGNx9ew_GFPGANv1.3_RealESRGAN_x4plus portrait__male_peasant__old__running__grass__blood_AAGNx9gI_GFPGANv1.3_RealESRGAN_x4plus portrait__male_peasant__old__running__grass__blood_AAGNx9hk_GFPGANv1.3_RealESRGAN_x4plus

    Pentru ca palmele nu sunt redate fidel in original si imaginile generate sufera de aceeasi problema, dar pictura in ulei justifica nereprezentarea corecta.

    Dar am generat si o serie de femei in varsta folosind aceeasi imagine de plecare si cu formula: portrait, female peasant, old, running, grass, blood, dirt, white dirty shirt, forest on background, cinematic lighting, 4k, oil canvas paint.

    portrait__female_peasant__old__running__grass__blo_AAGNx9sM_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__old__running__grass__blo_AAGNx9y8_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__old__running__grass__blo_AAGNx928_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__old__running__grass__blo_AAGNx97Y_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__old__running__grass__blo_AAAGNxEg_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__old__running__grass__blo_AAAGNxIg_GFPGANv1.3_RealESRGAN_x4plus

    Si, de ce nu, femei tinere pictate in acelasi stil cu formula: portrait, female peasant, young, running, grass, blood, dirt, white dirty shirt, forest on background, cinematic lighting, 4k, oil canvas paint.

    portrait__female_peasant__young__running__grass__b_AAAGNx1g_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAAGNxHY_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAAGNxOU_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAGNyABo_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAGNyAsQ_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAGNyA18_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAGNyA3U_GFPGANv1.3_RealESRGAN_x4plus portrait__female_peasant__young__running__grass__b_AAGNyBDM_GFPGANv1.3_RealESRGAN_x4plus

    Mai mult de 75% din imaginile generate le-am sters pentru ca omul fie nu era incadrat bine, fie aparea de doua ori, fie mainile sau picioarele sau fata nu erau reprezentate realist, majoritatea imaginilor au iesit perfect din 25 de pasi (un minut-doua durata de generare), programul permitatnd cel mult 100 de pasi (cateva minute) dupa care dadea eroare de alocare memorie CUDA. Dar anumite imagini nici dupa 80 de pasi nu aratau bine si le-am sters.

    Initial am generat scene complexe de batalie (din intamplare, pentru ca modelul nu respecta intotdeauna descrierea text) si portrete de mari razboinici dupa imaginea lui Vlad Tepes (Vlad the Impaler)  pentru ca e singurul personaj istoric romanesc pe care l-am gasit sa il cunoasca Stable Difussion, folosind: color image, forest, Vlad The Impaler, portrait, soldiers, torches, swords, finely detailed armor, silver brass armor, intricate design, cinematic:

    color_image__forest__Vlad_The_Impaler__portrait__s_AAAGNqtE_GFPGANv1.3_RealESRGAN_x4plus color_image__forest__Vlad_The_Impaler__portrait__s_AAGNqtbk_GFPGANv1.3_RealESRGAN_x4plus color_image__forest__Vlad_The_Impaler__portrait__s_AAGNqpHw_GFPGANv1.3_RealESRGAN_x4plus

    Acum am observat mici imperfectiuni la toate imaginile generate, cand le privesti la rezolutia nativa, dar trebuie iertate pentru ca imaginile au fost generate in medie in 1.5 minute si fara sa mai fie prelucrate ulterior.

    Concluzia:

    Programul AI, format din cel putin 3 modele AI (prelucrare text, generare imagine, validare imagine) genereaza imagini aleatoriu plecand de la zgomot (in varianta imagine generata din descriere text) sau plecand de la o imagine existenta, peste care aplica variatiuni in procesul de generare.

    Imaginile generate sunt inspirate de imaginile folosite in procesul de invatare model AI, peste care se aplica o usoara variatie, rezultand ceva diversitate (am observat ca fetele generate se cam repetau).

    Deja exista modele AI care genereaza modeul 3D (nu doar o imagine) pregatit gata sa fie importat intr-un joc si chiar sa produca filme pe baza descrierii text, dar asta presupune multa memorie video (24-32 giga?) si eu am doar 6 giga pe laptop.

    Arta a fost cucerita de AI.


  • Formula calcul numere prime

    08-Nov-2022 13:06 - 522 vizionari

    Incredibil, dar in 1964 un autor necunoscut (C.P. Willans) a publicat o formula de calculare a numerelor prime:

    Dar formula este impractica dupa ce se genereaza primele 7 numere datorita metodei de reprezentare a numerelor in calculator.

    Interesante sunt genialitatea formulei si explicarea algoritmului folosit.

    Desi nu are legatura cu numere prime, calculul seriei Fibonacci se opreste dupa al 92-lea numar pentru intregi pe 64 biti si dupa al 185-lea numar pentru intregi pe 128 de biti, datorita depasirii valorii maxime a numarului stocat in 64 si, respectiv, 128 de biti.

    Pentru calculul factorialului (necesar in formula numerelor prime) limitarile sunt si mai dramatice,

    in 128 de biti numere intregi se poate determina cel mult factorial de 34:

    34! = 295,232,799,039,604,140,847,618,609,643,520,000,000

    pentru ca 2 la puterea 128 este

    2128 = 340,282,366,920,938,463,463,374,607,431,768,211,456

    Am testat partial calculele in limbajul Rust, pentru ca permite operatii cu intregi pe 128 de biti.

    Ca sa depasesc neajunsurile stocarii numerelor ca intregi, am trecut pe virgula mobila, dar formula lui C.P. Willans este atat de complexa, incat dupa un timp apar valori considerate de calculator ca infinit, dar tot nu puteam rezolva problema, pentru ca, desi in virgula mobila se pot folosi numere foarte mari, se pierde precizia. Desi am determinat cel mult factorialul lui 170 (ca numar real), calculul patratului de cosinus de PI a dat eroare de depasire a valorii maxime.


  • Ra, Legea lui Unu si Valul Uitarii

    15-Jun-2022 17:39 - 662 vizionari

    Un film despre misiunea pe Pamant.

    Un film care explica (prin invataturile lui Ra transmise prin channeling) de ce am uitat cine suntem si de ce am uitat de unde venim, de ce in planul fizic avem posibilitatea sa facem orice (pentru ca nu stim cine suntem cu adevarat), de ce ne putem reincarna oricand din dimensiunile superioare in planul fizic.

    Un film care nu numai ca asociaza existenta in planul fizic cu un joc de calculator (si asta ma bucura enorm ca imi confirma presupunerile) dar si explica de trebuie sa jucam amnezici.

    Nu spun mai mult pentru ca nu cunosc invataturile lui Ra si nu pot sa comentez ce nu stiu.


  • Lumina Gnosticismului: Pistis Sofia si Demiurgii

    13-Jun-2022 18:33 - 568 vizionari

    Un film ca un fel de introducere in Gnosticism.

    Se aminteste Evanghelia dupa Toma, pe care am amintit-o si eu de cateva ori in blog, mai concret: pasajul in care Iisus dezvaluie numai lui Toma cine este El cu adevarat (link) si cand ucenicii l-au rugat pe Toma sa le spuna si lor, Toma a zis: daca va spun ma omorati cu pietre (lapidare = blasfemie pentru Evrei = Iisus este Dumnezeu) si din pietrele vor iesi flacari care ii vor ucide pe ucenici.

    interesanta este referirea la Vede (zeul la care se roaga Vishnu este o forta primordiala inaccesibila  muritorilor, te omoara daca te rogi direct acelui zeu si, astfel, Vishnu este un intermediar, ca Iisus ?) si asemanarea intre Titanii (mitologia Greco-Romana) si Asura (mitologia Indului) = mitologia proto-indo-europeana ?

    Si eu m-am gandit cum ar fi sa te intorci in timp si sa observi exact ce venerau oamenii aceia.

    Asemanarea: Desene in basorelief cu un om cu coarne de cerb care mediteaza in pozitia lotus in India si un alt om cu coarne de cerb in Irlanda. In film nu s-a gasit legatura, dar eu afirm: poate e zeul Cernunnos din mitologia celtica.

    Interesanta este si referirea la Carl Jung cu arhetipurile lui cu mentiunea ca functioneaza, clasificarea dupa arhetipuri chiar obtine rezultate in terapie = archonii din Gnosticism exista si scrierile gnostice nu sunt legende.

    Arhetipurile lui Jung pot fi vazute ca programe de calculator si apar consistent in basme, mituri, vise, simboluri religioase. Vindecarea se produce cand expui arhetipurile, atunci ele nu mai au influienta asupra ta.

    Arhetipurile se activeaza cand le intalnesti si crezi in ele, povesteste Robert Price ca la un botez, desi el nu mai credea (a fost preot, dar s-a racit in credinta), in botezat s-a manifestat arhetipul.

    Grecii filozofau la impartirea materiei in atomi cu 500 de ani inainte de Cristos si acum in lume religiile Abrahamice inca mai au adepti.


Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric


Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.