Programare

Ce descrii cu partea vectorială nu e nou. Căutarea semantică are încercări de zeci de ani în diferite arome, doar că acum există putere de calcul ca să se și poată calcula chestiile astea într-un interval de timp cât de cât rezonabil, că hardware support. Pentru că vectorii sunt multidimensionali și vectorizarea înseamnă așezarea în spațiu a termenilor și clustering. Indexarea înseamă de fapt precalcularea de distanțe între termeni, unghiuri între vectori etc (depinde de algoritmii folosiți), ceea ce e exponențial atât ca timp cât și ca dimensiunea indecșilor, dacă te apuci să calculezi tot. Așa că optimizările se fac de obicei la clustering de termeni, ales ce să indexezi, ce fel de funcții de distanță folosești, exactitatea distanței (pe câți biți ții toate astea) etc. Iar hardware support înseamnă în mare parte înmulțit de matrici floating point, preferabil ținute în RAM-ul drăciei. De-asta nu vrea nimeni să bage mai mult RAM în plăci video "normale", ca să vândă monștri pe servere.
 
Revenind la ATmega328PB:
Code:
# cat testinclude.c
#include <avr/io.h>
int main(){ PORTE=0; }

# avr-gcc -mmcu=atmega328p -Wall -o out.elf testinclude.c
testinclude.c: In function ‘main’:
testinclude.c:2:13: error: ‘PORTE’ undeclared (first use in this function); did you mean ‘PORT0’?
    2 | int main(){ PORTE=0; }
      |             ^~~~~
      |             PORT0
testinclude.c:2:13: note: each undeclared identifier is reported only once for each function it appears in
PORTE este declarat in iom328p.h, dar acolo scrie:
Code:
/* avr/iom328p.h - definitions for ATmega328P. */
/* This file should only be included from <avr/io.h>, never directly. */
Deci ce fac gresit?

LE:
Am incercat si cu toolchain-ul oficial de la Microchip. Acelasi rezultat.
 
Last edited:
Păi 328 nu are PORT E (porturile sunt A-D), și n-am idee unde ai găsit PORTE în iom328p.h că eu nu îl văd în ce surse am pe-aici și pe google.
 
Este 328PB. Nu merge -mmcu=atmega328pb:
Code:
In file included from testinclude.c:1:
/usr/avr/include/avr/io.h:581:6: warning: #warning "device type not defined" [-Wcpp]
  581 | #    warning "device type not defined"
 
M-am apucat sa ma distrez si vreau sa pun la o aplicatie dark mode. E aproape banal folosind bootstrap, mai putin partea cu poze sau icoane. Am niste icoane negre pe fundal transparent. Vreo 2-3 au fundal alb, desi ar trebui sa fie transparent.

Unul din AI-uri zice sa fac 2 seturi de icoane, unele pentru light mode (deja le am) si unul pentru dark mode. Ce nu a zis, dar mi-a trecut mie prin cap, e sa le fac SVG, pentru ca aproape toate se preteaza la asa ceva, si apoi sa fac setul pentru dark mode ca o copie cu alta culoare (deschisa, aproape alba) in loc de negru.

Tocmai convertesc de zor png in svg, dar nu stiu suficient despre svg ca sa fac si restul de treaba bine. M-am uitat prin fisier si vad ca are curbe si noduri (stiam) si ceva fill. La unele fundalul e alb, la unele transparent, la alea cu fundal alb daca am sters fill color imi apar negru pe negru.

Exista vreo documentatie utilizabila usor pentru editari marunte de svg? Sau vreun utilitar gratuit de incredere? Ca nu imi ies bani din asta, deci nu as da banii pe ceva si nici nu instalez chestii free de pe sites "free svg good svg top review svg tool trust me bro".

Pentru fundal ar exista varianta Paint.net, facut fundalul transparent la PNG (stiu ca se putea face usor) si convertit fisierul ala. Dar daca tot vreau sa invat un pic de SVG ca sa modific si culori sau grosimi pana iese ceva decent, pot incerca sa o fac direct in svg.
 
Păi acum sunt multe scule direct online, inclusiv code editors gen https://editsvgcode.com/ sau design-oriented cum e Canva https://www.canva.com/features/svg-editor/

Rant: a trebuit să afișez SVG-uri într-o aplicație Android, care listează niște parcele agricole și ia de pe server un SVG cu conturul parcelei. Fun stuff, singura metodă reliable a fost o bibliotecă care practic instanțiază un chrome browser pentru fiecare din svg-uri, ca să randeze drăcia pe ecran. Orice altceva n-a funcționat corect în restricțiile date de framework-ul aplicației și modul de utilizare; adică unele rendere nu recunoșteau niște atribute din svg, altele nu nimereau culorile sau dimensiunile...
 
Am rezolvat in alt mod ...
Code:
[data-bs-theme="dark"] .svgicons {
    filter: invert(1) brightness(2);
}
Merge si pentru PNG cu fundal transparent, am reparat repede fundalurile cu Paint.net si am rezolvat tot.

O sa sap in SVG in alta zi.
 
ATmega328PB: Mai exact, cum se foloseste TIFRx (Timer Interrupt Flag Register)? Ma intereseaza bitul 0 - Timer Overflow - sa stiu daca contorul s-a dat peste cap.

Daca activez intreruperea, bitul din TIFR se auto-reseteaza (0) cand se declanseaza intreruperea. Daca nu fac o functie pentru intrerupere, se auto-reseteaza tot programul.
Daca nu activez intreruperea, contorul face overflow fara sa seteze bitul in TIFR.

As putea bineinteles sa fac o variabila pe care sa o setez din functia intreruperii, dar as fi vrut sa nu folosesc deloc o intrerupere, pentru ca bitul de overflow vreau sa il folosesc in intreruperea altui timer.

PS:
Hai ca m-am prins singur cum se face:
Trebuie sa nu activez overflow in TIMSK1. Flag-ul este setat si fara.
 
Last edited:
Back
Top