[MEGOLDVA] szőnyeg ábra készítés

Programozónak nem vagyok kezdő de a grafikákban, még a legegyszerűbbekben is nem sok gyíakorlatom van.
Adva van néhány száz eszköz, melynek állapotát egy bájtal lehet jellemezni. Az állapotokról, 3 percenként keletkezik egy állapot bájt.
Az állapot bájt tartalmát meg kell feleltetni egy szinnek, majd kis kockákkal ábrázolni. Így a több száz eszközből keletkezik egy "szönyeg" szerű ábra, melyen a vízszintes tengelyen az idő (e perces kvantumokban) függölegesen az eszközök sorakoznak. A képet egy WEB -es felületen, PHP segítségével akarnám megjelenteni, görgető sávok segítségével.
Kérdés, hogy a kép generálásához mi az alkalmasabb a PHP vagy a C. Tudotk ajánlani ehhez a feladathoz valami library-t?

Hozzászólások

"A reggel bölcsebb az esténél" - tartja a közmondás.
Igazad lessz. Az ábra nagyban emlékeztet a térképre is, ahol egy a nagyitás során kerülnek elő a különféle részletek - LIS jellegel, minden "pöttyhöz" adat kapcsolódik.
Azt már látom hogy az Apache támogatja, viszont mi a helyzezt a böngészőkkel (mondjuk azt kiköthetem hogy tessék FireFoxot használni)?
Egyébként a táblázat megközelítés sem hülyeség.

UI: csak a HTML, XHTML, PHP -t kell hozzá megtanulni - alapfokon legalább.

* Én egy indián vagyok. Minden indián hazudik.

éne úgy csinálnám hogy nem képet generáltatnék a phpvel, hanem html elemeket(div class="$eszkozallapot") és egy css-ben határoznám meg a különböző állapotokat.

én is plain html-lel oldanám meg, de mint fentebb említették, táblázattal inkább:
a div alapjában véve blockszintű elem, azokat sorbarakosgatni beteges:P

persze gd-vel is lehet játszani, de úgy vélem, a table a legjobb. sok megoldást az ember alátol ennél a feladatnál.
—-—-—

int getRandomNumber() {
return 4;	//szabályos kockadobással választva.
	       //garantáltan véletlenszerű.
}	      //xkcd

Még egy fontos kérdés.
Gnome desktopon (Debian Etch) milyen fejlesztői környezet javalott - PHP, HTML - gondolok itt sz9vegszerkesztőre (minimum egy szintaktikai szinezés elkell) - kivéve a vi -t mert ettól kihulik a hajam, de ha ez a legjobb akkor ezt is bevállalom :(

A C -hez az Anjuta át használom.

* Én egy indián vagyok. Minden indián hazudik.

pedig a vi a legjobb...de a vim mégjobb egy syntax on-al

vagy legalább olyat keress, ami vi billentyűkombókkal is működik.
Én megőrülök bármilyen szövegszerkesztőstől, akár kereséséről, akár cseréről van szó. Borzalom mindegyik. A vi a király.
Ehhez még felteszel egy firebug-ot a rókára és komplett fejlesztőkörnyezeted van.

A vi mindíg piszkálja a csőrömet - már az hogy lustaságom képtelen vagyok megbarátkozni vele - többet kellene veledolgoznom.
Ha így esküszöl a vi -re akkor azért lenne néhána kérdésem:

1. Lehet-e vi alól (ból) futtani és debuggolni C programot (mint mondjuk az anjuta vagy a visual studió), azaz break pointok, memória és változók "inspektálása" stb.?

2. Ha az 1 -es IGEN, akkor tudja-e ezeket X alatt is (akárha console ablakból)?

* Én egy indián vagyok. Minden indián hazudik.

Az igaz, de éppen most nagyon nem szeretem. A Debian stbale és testing egyaránt nem eszi a közönséges make fájlos projectecskéimet.
Ráadásul az Anjuta csak gui -n műk9dik, a vi azonban konzol. Nagyon meggondolandó hogy befektessem a szükséges időt.

* Én egy indián vagyok. Minden indián hazudik.

A gdb -t csak az anjután keresztül használtam (már ha hagyta).
Az általad leírt technológia/howto elérhető valahol a WEB -en? Esetleg kirészleteznéd?
pl. ki is exportál - hova kell ezt betenni?
Szóval bocs de csak a lényeget nem értem nemlátom.
Nézegetem a vi doksikat, de nem igazán látom azt amit kapnom kellene.

* Én egy indián vagyok. Minden indián hazudik.

A lenyeg a unix erzes(mint mindig). Persze ez egy 'retro-kornyezet' azok szamara
akik 1600x1200-as felbontasu monitor mellet ulnek. Viszont ennek ismeretben egy putty-al is tudunk igem hatekonyan fejleszteni, akar a fold tulso oldalan is.

1. Elso eletciklus - a program iras
Van sok forras file-od (pl. *.c, *.h es Makefile).
vim-mel editalsz, es :mak parancssal forditasz.
A vim ismeri a gcc hibauzeneteit es a :cn :cl :cp parancsokkal lehet kovetni azokat.
Hasznos meg a 'ctags -R.' hasznalata a fejlesztesi fa tetejen, mert igy lehet a vim-mel ugralni
a forrasban. Gyakorlatilag nem kell kilepni a vim-bol.

Ha a program mar futokepes, akkor be lehet toldani a fentiek ele a gdb-t.
Ehhez nem art elozoleg kiadni (.bashrc?) az 'export EDITOR=vim'-et.

2. Masodik eletciklus - futtatas-szerkesztes
gdb-vel futtatjuk a programot, hiba eseten a gdb 'edit' parancsaval automatikusan az aktualis file-t
kapjuk vim-ben. Itt lehet modositani, menteni, :mak-elni, ctags-olni.
A vim-bol kilepve visszakapjuk a gdb-t, ahol 'r' paranccsal az iment modositott binarist futtathatjuk, anelkul hogy elvesztenenk addigi breakpoint-jainkat .stb

Talan segit: a vim-ben a legjobb help-et pl. :mak parancsrol igy kaphatjuk:
:h makCtrl-D
igen :h mak utan
Ctrl-D-t kell nyomni.

Sok sikert!

"Hasznos meg a 'ctags -R.' hasznalata a fejlesztesi fa tetejen, .."
A fejlesztési fa teteje azt jelenti, hogy "elsőnek" azt hívom be a vim -be?
Egyébkénmt azt kiszúrtam hogy az Anjuta is használja a ctags funkciót, ami tényleg szépen leszűr mindnet. Mindent, sajna nem egészen, kicsit partizán fajta vagyok. A projectjeim mindíg használnak egy vagy több saját forrás szintű "könyvtárat", ez az adott project könyvtárán kívül helyezkedik el, és a make fájlban jelzem hogy hol található. No ezt, scak simán eleresztve nem látja a ctags.
egyébként mér ott kivérztem, hogy a gvim (gui) indítva nem tudom beállítani a munkakönyvtárat, mindíg a $HOME gyökerében akar Makefile -t találni - persze nincs.
Még egy jelenség(?) a gui felületű gvim, ha csak kurzor fel/le mozgatással haladok nem hoz be több sort (szabályosan elnysi még a sort is) azonban pgup/pgdn megy?! - ez normális, a konzolon ilyen csacskaságot nem csinál.
Szóval a lényeg a lényeg, hogy olyan típusú szolgáltatást nem kapok mint mondjuk a Turbo/Borland C/C++ ide -ben ahol is a "szövegszerkeszőben" ráálhatsz egy sorra, azt mondod break point és run, ott megáll (már ha nem kerüli ki) és megnézheted mi a helyzet (változok, memória, stack de még a CPU regiszterek is).

* Én egy indián vagyok. Minden indián hazudik.

Most latom hogy elirtam: 'ctags -R .'
A ctags egy binaris file, mely egy tags nevu file-t csinal, nezelodj benne batran.
Barmikro futtathatod, celszeruen minden nagyobb forras modositast kovetoen.
A vim-ben a cwd paranccsal allithatod a default directory-t.
A kurzor mozgasrol nem tudok nyilatkozni.
A szolgaltatas szinvonalarol, meg azt irtam elozo hozzaszolasomban, hogy nem grafikus
feluletrol, hanem egyszeru terminal uzemmodrol beszelek. Ha neked a grafikus felulet
mindig alapadottsag, es nem kell unix spcifikus kodot irnod, akkor valasz vmi IDE-t.
Biztso van ilyen a KDE/GNOME-ban, de ebben nem tudok tanacsot adni neked.

Nem alapadottság a GUI. Nem igazán sajnálom, csak itt és most ezzel tudtam összehasonlítani, illetve közben keresgélni a neten (a lynx azért kicsit szegényes) - Debian vim-full és fölteszi a gvim -et is.
Viszont, találtam ilyeneket http://www.vim.org/scripts/script.php?script_id=168
Te ilyesmivel nem próbálkoztál?

* Én egy indián vagyok. Minden indián hazudik.

C mindig jobb :)
Kerdes, hogy most php -val ersz -e hamarabb celt.

1 percenkent keletkezik 100 byte adat.
Ez a meres az idok vegezeteig tart ? (milyen szeles kep kell?)

Hany letoltesre kell szamolni percenkent ?

Az adatokat sql cuccbol huzod ?

http://hu.php.net/manual/en/book.image.php
http://www.imagemagick.org/script/index.php

Valoszunuleg percenkenti cron jobbal jarsz legjobban,vagy egy kis daemonal , C -ben megirva (www -be irva az eredmeny kepet) lesz gyors, vagy keresel valami diagram keszito cuccot (gle talan).

(php scriptet nem csak apache mogul lehet futatni, ha a C nem fekszik)

Gyorsan rátapintottál a lényeges kérdésekre!
Sokkal jobb vagyok C-ben mint php. Hatékonyabban tudnék dolgozni. Viszont az is látszik hogy valamilyen WEB felületű, program nyelvet megkellene tanulnom. A feladvány, elég egyszerűnek tűnik, mint első feladat.
Pillanatnyilag hárompercenként keletkezik, egy-egy eszközről egy- bájt állapot info amit egy C interfész program fog produkálni). Az eszközök száma változni fog de több száz, legfeljebb ezer db -ról lehet szó. Az idő "granulátum" beállítható - ennyi időnként küldenek az eszközök, valamilyen jelzést (ez beállítható). Mondjuk 3 percenként keletkezik 1 kbájt állapot adat.
Az eszközök adatbázisban vannak rögzítve - sajnos nem SQL - de egy-két nap melóval tudok hozzá interfészt "gyártani". Az adatbázis jelenleg nem tartalmaz állapot adatot. Kérdés, hogy tegyem SQL -be, és onnan "húzva" tegyem ki mint kép. Vagy egy közönséges fájlban tároljam, amihez appendálom az adagokat, végül is ez napi nem egészen 500K, azaz havi 15M, évi 180M - SQL -ben még nem használtam blob -ot, tartok tőle hogy ha ASCII hexában kezeli az nagyon nagy overhead.

* Én egy indián vagyok. Minden indián hazudik.

Ha C baratod, en azt mondom gyarts az imagemagic -el sok png -t.
1024 szelesket, 512 bytos eltolodassal. (minidig ket kep hataran van az ami teged erdekel Murphy)
A rahedli png -szord be egy konyvtarba a www alatt, neveben legyen, hogy mettol meddig.
Igy egy gram HTML -t nem kell irnod.
A program x percenkent fusson le.

Ha keves user van, tehat nem fog megfoni a gep azert, mert masodpercenkent 100 png kell legyartania. Akkor php -t hasznalva, valoszinuleg egyszerubb.
Form -on beadod mettol meddig, aztan general egy kepet, amit majd jo durvan elfelejt (esetleg cachel)

Ha nincs konkret haszna RDMS-t hasznalni, akkor ne hasznald.
Nem blob kell SQL -be, az ugy csunya dolog. IDO,meres adat,csatorna (PK: Ido+csatorna, Indexelni csatorna szerint is), meg nagyobb overheaddel :)

Ezek eleg vegletes javaslatok, izles szerinti atmenet kepezheto :)

Igyekeztem gyorsan megoldhato dolgokat mondani, gondolom most az a fo szempont.

Jól hangzik. Nem látom hogy áll ez össze egy "szőnyeggé" - amit mindasz az egy-egy három perces intervallumban az eszközök állapota - nekem azért legalább egy napi adagot kellene látni, vizsintes és függőleges scroll segítségével ( a legszebb persze az lenne ha legalább egy hetet lehetne egyképbe besűríteni). Függőlegesen beállítja a látni kívant eszköz sorát, majd szépen a vízszintes scrollal nnézhetné az időbeli változásokat.

* Én egy indián vagyok. Minden indián hazudik.

honan kezdodve ?

A,
Csinalsz egy kepet egy napra ejfeltol kezdve
ill lesz egy kep del tol kezdve 24 h -ra.

+24h mulva uj kepet csinalsz, a regit megtartva. (+0h +12h offsetest is)

Napkozben felkeszkepeket csinal, 3 percenkent.

B, tetszoleges kepet general minden lekerdezeskor.

SQL:
Egy select-el kibanyaszod az osszes szukseges adatot, majd feldolgozod.

JA .)
Így már más, valószínűleg a B -t kell megcsinálni, először rögzített intervallumra - mondjuk 24 óra visszafelé az időben. Aztán ha lessz idő, csinálni neki valami kis egyszerű felületet ahol megmondja mettől-meddig.
"
SQL:
Egy select-el kibanyaszod az osszes szukseges adatot, majd feldolgozod.
"
Ezen még gondolkodni kell, hiszen az eszközök száma változó, a "számozás" nem folyamatos. Lessz itt még mit kitalálnom.

* Én egy indián vagyok. Minden indián hazudik.

No megint itt vagyok.
Eljutottam oda, hogy a komunikációs/feldolgozó program (ő fogadja az eszközökből érkező infókat) 5 percenként csináljon egy lenyomatot a belső státuszokról - append csv formátumba. Írtam egy C progit, ami megeszi ezt a fájlt, traverzálja, most már "csak" a képet kéne legenerálni mondjuk png formátumba. Előszedtem az imagemagick program csomagot.
Még a logikáját sem értem :(
Generálok egy canvast de erre csak úgy nem lehet rá rajzolni?
Egyenlőre a parancssorban próbálom modellezni mi lenne a szekvencia, és nem értem a logikát, pedig rengeteg leírás van a neten, de mindegyik leginkább valami meglévő képet manipulál, és az én esetmben dög lassan.
Szóval lehet egy elkészített canvas -ra rajzolni, vagy egy másik képen kell rajzolni majd a kettőt össze manipulálni?

* Én egy indián vagyok. Minden indián hazudik.

Még mindíg az imagemagick metódusaival küzdök - sok van.
Véletlenül nem tudtok valami egyszerű mintaprogit C -ben, a "wand" metoduskkal kép kreálásra? Ha uram bocsá valamit rajzol is rá, az lenne a legszebb!

* Én egy indián vagyok. Minden indián hazudik.

Nehezen de találtam egy kis fórumos segítséget az imagemagick.org -ról elindulva. Már tudok szép kockás szőnyeget rajzolni :)
Viszont kellene néhány felirat, amihez fontot kellene beállítanom, viszont nem tudom látom miből bírok milyen fontokat választhatok, és milyen nevet szeretne kapni az ImageMagcik "DrawSetFont" metódusa?
Tud valaki súgni?

* Én egy indián vagyok. Minden indián hazudik.

Én a képeket convert-tel gyártom le, ez írni is tud. A
convert egy mvg fájlból veszi az adatokat, könnyen érthető
a szintaxis itt egy példa:

============= példa eleje
font "/usr/X11R6/lib/fonts/TTF/AndaleMo.TTF"

#
fill white
font-size 20
text 8,20 ' 3.40 mázsa (q)'
============ példa vége

Kiválasztja a fontot, fehérre állítja a színt, 20-as betűméret,
x=8, y=20 a pozíció és ezt írja ki: ' 3.40 mázsa (q)'

http://www.meditor.hu/imeadoc.php

ez egy mintalap, ami dinamikusan állít a felhasználó
által paraméterezett ábrákat.

C + php + cgi script végzi a feladatot.

> Sol omnibus lucet.

Most olvastam először a topic-ot. Ahogy látom lassan meg is oldódik. Kicsit csodálkozom, hogy a gnuplot-ot nem ajánlotta senki a szőnyeg elkészítésére. Nem ismerem a szükséges parancsokat, de ha lehet ilyet, akkor biztos lehet adatokból szép szőnyeget rajzolni.

Érdekes!
Semmi nincs veszve - megnézem hogy kell használni!
Ami azt illeti a most kialakuló cuccal a következő gondok vannak:
- nehezen pozicionálható - cursor nélkül nehéz megmondani éppen melyik eszközt látom :(
- lassú, egy kép legenerálása CSV -ből ck. 40 sec!

* Én egy indián vagyok. Minden indián hazudik.

Siker!
Az imagemagick olyan lassú mint a tetü, de működik és a programom is.
Most már csak egy befoglaló scriptet kell írnom ami a megfelelő állományt konvertálja és kiteszi.
Egy gondom van, mivel is lehet rábírni a rendszert hogy tíz percenként futtasson egy scriptet? Ne mondjátok hogy "sleep 600".

* Én egy indián vagyok. Minden indián hazudik.

A cron is összejött :)
crontab -e
Egyet nem értek, hova kerül a bejegyzés?
A nano fejlécében az van hogy:
"/tmp/crontab.Q4wyDu/crontab"
a /tmp -ben semmi ilyesmi nincs. Hova jegyzi fel?
Lehet hogy jobban járok ha csinálok magamnak egy crontab file -t a home -ban?

* Én egy indián vagyok. Minden indián hazudik.

Az egyes disztribúciók szeretik eltérő helyeken tárolni a
crontab-ot. A suséban anno a /etc/ alatt volt. a slackwareben
pedig a /var/spool/cron/crontab alatt.

Ha nem muszáj, ne csinálj külön crontab fájlt, viszont azt
érdemes tudni, hogy a cron infókat hol tárolja a rendszer.

A kézi szerkesztés és a crontab -e között tudtommal az a különbség,
hogy ez utóbbi hatása azonnal érvényesül, a kézi szerkesztés esetén
újra kell indítani a gépet, de legalábbis a cron démont. (gondolom
a crontab -e sem csinál mást, de ezt majd a nálam okosabbak
megmondják.)

> Sol omnibus lucet.

Működik. Beépítve cron -ba egy kis script, amely elkészíti az adott napra megfelelő bemeneti és kimeneti fájl neveket (pl. JSTA-080708.CSV), viszont minden 12:00 am (éjfél?) kapok egfy hiba jelentést, levélben:

/home/tovis/wrk/run-statistics: line 10: 18439 Lebegõ pontos kifejezés
/home/tovis/wrk/cmd-jstat i:$JUN_FILE g:$JUN_IMG_PATH slice:900 >jstat.log 2>&1

Tény, hogy kispóroltam a '-' és hasonlóakat - mindíg magam ácsolom össze a parancssori kapcsolók értelmezését (lusta vagyok kitanulni a szabványos megoldást), de akkor sem értem hogy lessz a hibásnak jelzett sorból "Lebegő pontos kifejezés"?

* Én egy indián vagyok. Minden indián hazudik.

Semmi ötlet?

/home/tovis/wrk/run-statistics: line 10: 18439 Lebegõ pontos kifejezés
Talán ha kicsit kirészletezem:

JUN_PATH=/mnt/rds_data/STREAM
JUN_FILE=$JUN_PATH/"JSTA-"`date +'%y%m%d'`".CSV"
JUN_IMG_PATH/$HOME/public_html/kütyük
/home/tovis/wrk/cmd-jstat i:$JUN_FILE g:$JUN_IMG_PATH slice:900 >jstat.log 2>&1

Az utolsó sorra panaszkodik a bash .(
Eddigi kisérleteim alapján a $JUN_FILE -ra, ami napi szinten így néz ki:
/mnt/rds_data/STREAM/JSTA-080709.CSV
Mitől lessz ez lebegőpontos kifejezés?

* Én egy indián vagyok. Minden indián hazudik.

Nem túl csinos workaround de működik .)

STAMP=`date +'%y%m%d'`
NOW=`date +'%H:%M'`
if [ $NOW = "00:00" ]; then
exit 0
fi
# itt az eredeti kód
A lényege a dolognak hogy éjfélkor, azaz 00:00:01 -kor keletkezik mindíg a hiba - tehát ilyenkor inkább kihagyok egy ciklust.

* Én egy indián vagyok. Minden indián hazudik.