Fejlesztés

Programozási környezet adatfeldolgozásra, -vizualizációra

Fórumok

Mostanában gyakran kell bizonyos problémák megoldásához különféle adatforrásokból adatokat összeszednem, feldolgoznom, majd valamilyen könnyen értelmezhető formátumban prezentálnom.

Példák:

  1. Logokból, analitikából, eseménynaplókból kinyert időbélyegek alapján szeretnék készíteni egy grafikont, amin látszik, hogy az érintett komponensek mekkora késleltetést okoznak az idő függvényében.
  2. A magyar költségvetést szeretném ábrázolni egy treemapen és egy Sankey diagramon, kb. mint itt. Ehhez szeretném az adatokat dinamikusan lekérdezni, a diagramokat évente legfeljebb néhány alkalommal szeretném legenerálni az aktuális költségvetés adataival.

Erre ma Excelt használok, de nem igazán optimális a feladatra. Ennek több oka is van:

  1. Az adatokat valamennyire fel kell dolgozni a forrás oldalon, hogy egyáltalán importálható legyen Excelbe (tudom, erre használhatnék Power Query-t)
  2. Az importált adatok további feldolgozása nagyon körülményes (pl. ISO-8601 vagy UNIX timestampek konvertálása Excel időbélyegekre)
  3. Sokszor egyszerűbb manuálisan megcsinálni bizonyos lépéseket, mint implementálni Excel képletekkel
  4. Az adatok frissítéséhez gyakorlatilag minden lépést meg kell ismételnem manuálisan
  5. Az Excel for Mac-nek van néhány furcsa limitációja és bugja a Windowsos verzióhoz képest

Szeretnék egy olyan alternatívát találni ezekre a feladatokra, amivel ezt az egész adatfeldolgozást és -vizualizációt viszonylag kényelmesen meg tudom valósítani. Nagyjából ezek az igényeim:

  1. Adatokat be tudjam importálni legalább CSV és JSON formátumokban, legalább fájlból és vágólapról, ideális esetben HTTP querykkel is (az autentikációt ehhez meg lehessen oldani)
  2. Az adatokat programozottan tudjam feldolgozni (pl. szűrni, konvertálni, összerendelni a többi adatsorral), lehetőleg deklaratív programozási nyelven
  3. Támogasson magasabb rendű adattípusokat (pl. időbélyegek) az azokon értelmezett műveletekkel, standard formátumokról (pl. ISO-8601) lehessen könnyen létrehozni
  4. Egyszerűen tudjak könnyen értelmezhető kimenetet létrehozni, pl. grafikonokat, táblázatokat
  5. A kimenet előállításához szükséges lépéseket el tudjam menteni, így később az adatok frissítése (az esetleges manuális importot leszámítva) teljesen automatikusan történjen

Több opció is az eszembe jutott:

  1. Jupyter Notebook tűnik ránézésre a legalkalmasabbnak, de soha nem használtam, nincs vele tapasztalatom.
  2. Matlab, illetve annak alternatíváit (Octave, Scilab). Ezek inkább matematikai, mérnöki számítási feladatokra vannak kitalálva, nem tudom ilyen célra mennyire alkalmasak.
  3. R, Python, vagy más, adatfeldolgozásra (is) használt programozási nyelv használata a megfelelő librarykkel. Egyik említett nyelvet és környezetet sem ismerem annyira, ezért valószínűleg jó pár órát bele kellene fektetnem, mire össze tudnék rakni egy olyan környezetet, amivel már hatékonyan tudnék dolgozni.

Ti mit használnátok erre a feladatra, van tapasztalatotok a fenti opciókkal, esetleg van más is, ami nekem nem jutott eszembe?

eSzemélyi - adatok kiolvasása

Fórumok

Sziasztok!

Közületek foglalkozott már alaki ezzel a témával?
Cégünk befektetési arannyal foglalkozik és ennek folyományaként gyakorlatilag mindenkitől el kell kérnünk a személyi igazolványát. Döntő többségében már mindenkinek eSzemélyi formátumban van meg. Felmerült bennünk az, hogy ha már úgyis oda kell adják a személyit, akkor az ügyfélszolgálatos munkáját meg tudnánk könnyíteni azzal, hogy egy megfelelő olvasó segítségével eleve beolvassuk a rendszerünkbe az adatait és nem kellene azt kézzel begépelni.

Lehetséges ennek a megvalósítása? Csak azokra az adatokra volna szükségünk, amik rá is vannak nyomtatva. Ha igen, merre induljak el?

Gábor

DDR5-ös fejlesztői gép

Fórumok

Sziasztok!

 

Upd: asztali gépekkel dolgozunk, notebook gépek nem játszanak.

Upd2: mivel alig drágábban jön ki a DDR5, mint a DDR4, meglátjuk mit tud. Köszönöm mindenkinek a segítségét és észrevételét.

Eddig DDR4-es gépeket vettünk számukra az egyedi kérések alapján, de már megnéznénk, hogy DDR5-ös kiépítéssel lehetne-e még jobb fejlesztői gép teljesítményt kicsikarni. Ehhez a témához nem értek, ezért beszéltem velük, hogy korábban mik voltak a szempontok.

Nálunk a CPU-Memória-Perifériák (elsősorban NVMe SSD) közötti sávszélesség a legfontosabb szempont. Elég sok komponensből álló rendszert szimulálunk és mivel a saját fejlesztéseinket debug módban használjuk fejlesztés közben, így a futtatott kód egyáltalán nincs optimalizálva (sőt tele van analízissel és metrikákkal amik kifejezetten performancia gyilkos dolgok) ezért fontosak számunkra a fentiek. Ezen felül nálunk fejlesztés közben akár percenként többször lefordul az éppen fejlesztett komponens kódja ami nagyon sok kis file olvasás/írás művelettel jár és memória igényes is és erősen igénybe veszi a fenti hw elemek közötti sávszélességet.

Ezek alapján így alakult a korábbi konfiguráció

  • Z590-es chipset, mert

“The B560 chipset offers a 32 GB/s interconnect bandwidth, but the Z590 has a 128 GB/s interconnect bandwidth owing to its full PCIe 4.0 capability. This is because PCIe 4.0 needs two CPU channels per port, as compared to one lane in PCIe 3.0, which means that when combined with a Z590 motherboard, compatible devices (like NVMe SSDs) will give better performance with Intel 11th Gen processor.”

  • DDR4 3200MHz
  • Samsung 980 Pro NVMe SSD
     

Szóval köszönöm, ha valaki tud tanácsot adni, hogy milyen chipset, milyen memóriával ad jó párosítást. Csak Intel 12,13-gen irányban keresünk.

buta patch?

Fórumok

Megint vissza kell térnem ehhez a topichoz.

Az "első" hibám az volt, hogy valahogy fordítva jelöltem ki a fájlokat. Mikor erre rájöttem kaptam megfelelő diff fájlt.
A patch --dry-run módban működik (minden kijelölt műveletet success végrehajtott). A --dry-run nélkül viszont hiba van.

Van több olyan fájl aminek az elejében és a végében is van változtatás (insert) viszont a másodikat nem hajtja végre :(
Olyan mintha az első "körben" már módosított fájlon nem tudná végrehajtani a második módosítást.

Mit szúrok el már megint?
A google valahogy nem a barátom.

------------------------------------------------------------------------------------

Módosítanom kellene több C forrás fájlt. Viszont a diff által generált fájlban az eredeti is ott van, nélküle nem működik a patch.

Tudtok olyan "patch" programot, ami megkapja melyik fájlt kell módosítani és hogyan, nem kéri a "forrást"?

Tulajdonképpen "bután" módosítsa a kijelölt fájlokat (ill. másoljon/készítsen olyanokat ami hiányzik).

Kiegészítés:
Adva van egy több mappában elosztott forrás szoftver csomag - release.
Az eredetit lemásolva (az egészet) módosítottam néhány fájlt és hozzáadok néhány kicsi fájlt.
Az eredetit és a módosítottat összehasonlítom a diff segítségével.
Az eredményben a forrás és a cél is szerepel.
Jön egy újabb csomag forrás (release) amit módosítanom kellene, de a diff által generált fájl kéri az eredeti  forrást.
Másként, nem működik az, hogy megjelölöm a cél mappát (ahol a módosítandó fájlok vannak) és módosítja az ott leírtaknak megfelelően.
Természetesen, előfordulhat, hogy a célfájlok változnak, de ez igen ritka.

Lehetséges megoldás: egy (akár bash) script ami fejbe csapja a cél fájlokat, vagy sed segítségével beleszerkeszt. De a diff/patch tool egyszerűbb lenne.

MEGOLDÁS: Nem úszom meg, írnom kell egy saját scriptet. Elkezdtem írni egy bash scriptet, az első fájlt már tudom módosítani sed, grep, cp rm, szóval csupa unalomig ismert cucc.

MEGJEGYZÉS: A releaseben nyoma nem maradhat a patchnek. Kizárólag teszt célokra lehet/kell beépíteni/módosítani.

Simpleboot, a szopásmentes GRUB helyettesítő

Fórumok

Egyszer csak telelett a tö... hócipőm azzal, hogy mennyire szar minden Linux kernel betöltő, ha arról van szó, hogy egy indítható lemezképet kell csinálni. Ezért nekiültem, és pár nap alatt írtam egy rendeset.

https://gitlab.com/bztsrc/simpleboot

Ez ad egy parancsot (Linuxon és Windowson egyaránt elérhető), ami hasonló a grub-mkrescue-hoz, csak sokkal egyszerűbb és kényelmesebb használni, és a libc-n kívül az egyégadta világon semmi függősége sincs. Nem kell neki sem mtools, sem xorriso, sem semmilyen függvénykönyvtár és még root jogosultságot sem kér, mint a syslinux-nomtools!

Használata:
simpleboot (bemenő könyvtár) (kimenő lemezkép)

...és ennyi! Az elkészült lemezkép bebootolható virtuális gépen, vagy dd-vel, USBImager-el lemezre írható és valódi gépen is indítható. A lemezképre felmásolódik a megadott könyvtár tartalma, ezen kívül mindössze egyetlen egy plusz fájl kerül fel (nem úgy, mint a grub, ami telepakolja sokmegányi mindenféle szarral a boot partíciót, nálam most "du -hs /boot/grub" azt mondja, 13M).

Ez a fájl annak ellenére, hogy csak 40k, funkcionalitásban simán felveszi a versenyt bármelyik másik boot loader-el:

- egyaránt indítható UEFI-s és BIOS-os gépeken is
- többféle boot protokollt is ismer: Linux/x86 Boot Protocol-t és Multiboot2-t.
- kernel formátuma lehet Linux kernel, ELF32, ELF64, COFF/PE vagy PE32+ is, ezt ráadásul autodetektálja.
- a kernel belépési pontja lehet SysV ABI, Microsoft fastcall ABI és CDECL is (ez is automatikus).
- a kerneleket tisztán 64-bites módban indítja, szóval nem kell többé prot mode - long mode trampoline kóddal szopni, mint a grub esetében.
- mindenki megnyugodhat, bootlogót is képes megjeleníteni!

Ezen túlmenően tud olyant is, amit még a grub és a syslinux sem: betöltést jelző progressbar! Fantasztikus, hol tart ma már a tudomány!

Minta kernelek találhatók itt: https://gitlab.com/bztsrc/simpleboot/-/tree/main/example a teljes dokumentáció meg itt: https://gitlab.com/bztsrc/simpleboot/-/tree/main/docs
A MEG-4 projektemben (aminek van egy bare metal platformja), máris lecseréltem a syslinux-ot simpleboot-ra, szóval már élesben is tesztelve lett és remekül működik!

Kívncsian várom a véleményeiteket,
bzt

[MEGOLDVA] GitHub jogosultsag-kezelesi anomalia vagy en benazok?

Fórumok

Volt regen egy arpitest nevu userem githubon, csak mas projektekhez commenteltem/bugreportoltam vele, gondoltam regisztalok egy ujat, amibe majd a sajat fejleszteseim publikalom. El is kezdtem felpakolni a forrasokat, de veletlen (credential cache miatt) meg a regi userrel. Es siman engedte, en is csak utolag vettem eszre. Szoval egy "idegen" user tud az en repomba commitelni a main-be? WTF?

Teszteleshez csinaltem egy repot:

https://github.com/gereoffy/proba/

ebbe is siman ment a commit arpitest-el. Ezutan a settings-ben felvettem egy "Branch protection rule"-t ahol [X]-eltem a " Require a pull request before merging " opciot. De meg ezutan is siman tudtam commitelni bele, csak kiirt egy warningot de megcsinalta:

# git commit README.md
# git push -u origin main

[main 60da6bd] updated 2 :)
 1 file changed, 2 insertions(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 281 bytes | 281.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Bypassed rule violations for refs/heads/main:
remote:
remote: - Changes must be made through a pull request.
remote:
To https://github.com/gereoffy/proba.git
   57997cd..60da6bd  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

 

szerk: kiprobaltam egy masik geprol (amin sose hasznaltam git-et) es ott nem engedte, ezt irja:

# git push -u origin main
Username for 'https://github.com': arpitest
Password for 'https://arpitest@github.com':
remote: Permission to gereoffy/proba.git denied to arpitest.
fatal: unable to access 'https://github.com/gereoffy/proba/': The requested URL returned error: 403

[Megoldva] Adat generátor REST hívásra

Fórumok

Sziasztok!

Szeretnék egy klienst tesztelni, amihez nincs szerver. Ehhez jelenleg egy egyszerű http(s) hívást szeretnék a kliensből, ami REST-en visszaad egy random float számot 1 és 30 között.

Azt gondoltam, hogy tele van ilyennel a net, de nem igazán találtam. (Lehet, hogy rosszul kerestem)
Amit kidobott a google, az vagy nem tud float-ot: https://www.random.org/integers/?mode=advanced
Vagy csak grafikus felülete van, de nem tud text/json adatot visszaadni: https://codebeautify.org/random-tools

Tudnátok ajánlani ilyet?

Természetesen meg tudom írni, nem nagy dolog, csak csodálkozom, mert pl webfejlesztésnél van olyan API, ami visszaad egy megadott méretű képet, szöveget meg mindent ami kell.
Pl itt is van minden, de sima random szám nincs: https://api-ninjas.com/

Update:
A chatGPT végül válaszolt. :)
A random.org-nak van API-ja. Regisztrálás után elérhető.
https://api.random.org/dashboard
A float random generáláshoz a generateDecimalFractions metóduhívás kell.
Tegnap este már fáradt voltam úgy néz ki, ma meg túl hamar tettem fel itt a kérdést.
De legalább már rögzítve van.

Üdv: redman

patch helyett valami komplexebb kellene

Fórumok

Van egy jókora forrás fájl kupac, több könyvtár és fájl, C fájlok.
Tesztelés célból kell két három (minimális snippet jellegű) kód fájlt bemásolnom és 5-6 fájlba belemódosítanom (beilleszteni egy include-ot és később egy funkció hívást).

A patch (nekem úgy tűnik) csak a forrás szöveg sora alapján módosít, fájlokat végképp nem másol (mondjuk nem halálos egy shell script ami megteszi) . Viszont az én esetemben a fájlok tartalma változhat (nem nagyon de nincs garancia).

Kellene egy olyan patch jellegű program ami nem a sor száma alapján, hanem egy kód minta mögé/elé szúrja be módosítást.
Létezik ilyesmi?