Preporuka tehnologije za izradu dektop aplikacije

Započeo pesovic, 14.11.2010, 12:38

prethodna tema - sledeća tema

pesovic

Pozdrav svima,

U okviru jednog diplomskog rada potrebno je izraditi desktop aplikaciju za IEEE 802.15.4 packet sniffer. Aplikacija prima pakete preko serijskog (RS232) porta koji se pamete u bazu. Paketi iz baze bi bili parsirani po formatu koji bi korisnik mogao zadavati i isti bi zatim bili grafički prikazani, slično priloženoj slici.

Imate li neku preporuku u kojem bi programskom jeziku (C++,C#, Java) bilo najadekvatnije realizovati ovaj projekat? Potrebno je napomenuti da je u pitanju diplomski rad, tj. da student poseduje skromno znanje iz programiranja, uglavnom steceno u okviru predmeta Programski jezici gde je učio klasičan C.

Pozdrav
Uros

Marko Аcović

Mozes li malo da pojasnis tok podataka? Ako sam dobro razumeo, aplikacija treba da kupi podatke koji joj dolaze sa serijskog porta i da ih smesta u bazu ili gresim? Takodje, da li aplikacija prikazuje podatke u realnom vremenu (dok cita sa serijskog porta) ili cita iz baze? Na kojoj platformi bi aplikacija trebala da se izvrsava?

Sve u svemu, preporucujem C#. Mislim da moze da odradi sve sto ti treba za najkrace vreme. Lako se pravi GUI kao i veza ka bazi. Btw, koja baza je u pitanju? Pretpostavljam MySQL? Ako baza nije velika i zelite da imate portabilnu verziju, onda preporucujem SQLite http://sqlite.phxsoftware.com/. Ako te podatke planirate da koristite za prikaz u browseru, onda ipak bolje da koristite MySQL.

Ispod imas primer komunikacije sa serijskim portom u C#.
http://www.c-sharpcorner.com/uploadfile/eclipsed4utoo/serialportcommunication12082008111137am/serialportcommunication.aspx
Link ka MSDN biblioteci imas ovde: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport%28v=VS.90%29.aspx

Nadam se da sam bio od pomoci :)

marjan

14.11.2010, 14:08 #2 Poslednja Izmena: 14.11.2010, 14:10 od marjan
Mogu da prenesem ono što sam "snimio" družeći se snortom, pošto se u poslednje vreme bakćem sa detekcijom upada.
Snort ima ekstenziju za beleženje logova u MySQL, a posle postoje posebni programi kojim se ti podaci predstavljaju  -npr acidbase je napisan u PHP-u i daje upravo i grafički prikaz uhvaćenih paketa, po slojevima.
Za hvatanje podataka koristi se PCAP biblioteka, koja ima svoj API: mislim da bindingsi postoje za više jezika, tj. API se može koristiti iz više jezika. Isprobavao sam capturing na Ethernet/Wi-Fi: za serijski verovatno postoji neka srodna gotova biblioteka, čiji API bi se dao koristiti.
Znači, cenim da bi za hvatanje mogla da se koristi neka gotova biblioteka (nisam nešto petljao baš sa serijskim portom, ali sigurno postoji), kao i za upis u bazu. Posle za prikaz, može PHP ili slično, iako je desktop.

(Vidim da je Marko odgovorio u međuvremenu, naravno slažem se, evo lupio sam i + ;).)
Unix is user-friendly—it's just choosy about who its friends are.

Marko Аcović

E, da, kad budete pregledali rad, obratite paznju i na kod, a ne samo na funkcionalnost. Izvinjavam se ako sam dosadan :). Jako je bitno da se studenti uce kako (ne)treba kodirati, tj. da vec sad uce kako da optimizuju kod. Pored toga, bilo bi dobro da se napravi i instaler za aplikaciju tako da imate zaokruzen proizvod.

pesovic

Aplikacija pakete koji dolaze sa seriskog porta smešta u bazu. Paketi su promenljive dužine (do 128 bajtova) i promenljivog formata, tako da će se u bazu pamtiti celokupan paket, bez ikakvog parsiranja. Pored samog paketa u bazu će se smeštati vreme kada je paket stigao (time stamp). Kada se paket uskladišti u bazi, on će se parsirati prema formatu koji će definisati korisnik (polja za izvorišnu i odredišnu adresu, tip paketa i sl.). Paketi će se prikazivati u realnom vremenu a korisnik će moći i da primenuje filtre za pretraživanje i prikazivanje već primljenih podataka (uskladištenih u bazi). Platforma na kojoj se aplikacija izvršava je Windows XP i nije planirano da bude web aplikacija vec samo desktop.

Posmisljao sam da je C# najbolje rešenje ali sam tražio mišljenje kako studenta ne bih uputio na pogrešan put.

Hvala na pomoći

Marko Аcović

Ako se odlucite za C# i ako imate vremena za implementaciju, razmislite o koriscenju WPF-a umesto klasicnih WinFormi. Izgledaju dosta lepse od klasicnih formi i koliko je meni poznato, takva aplikacija moze da se startuje kao klasicna desktop aplikacija a moze da se pokrene i iz browsera.

gagi

Zašto za operacije nad bazom student ne bi koristio web aplikaciju? To je po meni mnogo bolje rešenje. Što se jezika tiče, C# bi za njega bio najbolji izbor po mom mišljenju.

holodoc

14.11.2010, 21:04 #7 Poslednja Izmena: 14.11.2010, 21:07 od holodoc
Ako ste se već odlučili da napravite isključivo desktop aplikaciju i da je jedina ciljna platforma Windows onda je C# verovatno jedno od boljih rešenja, baš zbog nedostatka prethodnog praktičnog iskustva studenta. Međutim, za šta god da se odlučite aplikaciju ćete morati da pišete tako da ispuni par osnovnih uslova:

- mora da koristi multithreading (niti) da bi se obezbedilo da ne dođe do međusobnog gušenja procesa koji sakuplja podatke sa porta, procesa koji ih smešta u bazu i procesa koji prikazuje rezultate u UI-u
- mora da se realizuje buffer (i to opet u multithreadingu) koji će upit bazi (podatke) slati tek nakon što se bafer napuni da se server baze (MySQL, MSSQL) server ne bi gušio preterano čestim upitima.
- timestamp sistem bi morao da se realizuje tako da koristi mikrosekunde kao minimalnu jedinicu za izražavanje timestampa.

Što se izbora sistema za skladištenje podataka tiče po meni korišćenje DB servera za skladištenje podataka koji će se i onako koristiti samo za desktop aplikaciju je ovde čist overkill. Po meni korišćenje lokalnih .mdf fajlova ili eventualno SQLite-a bi bilo mnogo prihvatljivije rešnje jer runtime SQL Express podrška za .mdf fajlove može veoma lako da se doda u samu instalaciju aplikacije (kada se kreira) a podrška u .NET-u za SQLite je sasvim solidna.

Da mene lično pitate kako bih realizovao ovakvu aplikaciju ja bih se verovatno odlučio za nešto malo drugačiji pristup tj. aplikaciju za prikupljanje podataka i njihov prikaz / analizu bih realizovao potpuno odvojeno. Drugim rečima, aplikaciju za prikupljanje podataka i skladištenje bih u C-u (prevashodno zbog performansi i brzine izvršenja kao i većem stepenu eliminacije grešaka nastalih usled latencije sistema) a UI deo aplikacije bi verovatno bio realizovan uz pomoć C#-a. Naime, najkritičniji deo za ceo sistem je upravo prikupljanje i skladištenje podataka i ono mora da ima prioritet u odnosu na sve ostale procese. Dodatna pogodnost je i to da bi takva aplikacija mogla da se pokrene i kao Windows servis koji bi mogao da se kontroliše iz aplikacije za analizu podataka, što bi omogućilo još veće performanse C baziranog koda.

Citat: gagi44  14.11.2010, 19:35Zašto za operacije nad bazom student ne bi koristio web aplikaciju? To je po meni mnogo bolje rešenje. Što se jezika tiče, C# bi za njega bio najbolji izbor po mom mišljenju.
Ukoliko si pod "operacijama nad bazom" mislio na operacije koje imaju za cilj da prikažu prikupljene rezultate i da omogući definisanje filtera prikaza web aplikacija možda i nije baš najsrećnije rešnje osim ako se ne radi o nekom embedded sistemu tipa ASP .NET aplikacije u kojoj je kompletna funkcionalnost realizovana komponentama frameworka. Međutim, problem kod ovog pristupa je što zahteva i petljanciju sa konfigurisanjem IIS-a i gomile nekih gluposti samo da bi server mogao da potera ASP .NET baziranu aplikaciju. Korišćenje AJAX-a za realizaciju čistokrvne (X)HTML/JS aplikacije bi po meni ovde bilo čisto gubljenje vremena jer bi ogroman broj sukcesivnih  AJAX zahteva (koji po prirodi nemaju baš tako brze odgovore) garantovano doveo do toga da memorija mašine na kojoj se web aplikacija "tera" prsla kao masan džak u oboru :)

Eventualno šta bi moglo da bude dobra web alternativa u ovom slučaju su Java apleti ili još bolje Flash koji nudi poprilično veće mogućnosti kada je interaktivnost sa korisnikom u pitanju.
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

pesovic

Zaboravio sam da kažem da je maksimalna brzina kojom paketi stižu sa serijskog porta negde oko 200 kbps (25KB/s), tj oko 200 paketa u sekundi maksimalne dužine, tako da je svakako neohodno ispoštovati uslove koje je preporučio Brežanac.

Marko Аcović

Evo par linkova vezanih za citanje/pisanje podataka sa serijskog porta primenom C/C++
Napominjem da nisam probao ni jedan od ovih primera tako da ne znam da li rade ispravno pod Windows-om.
Uz put, mogli biste da probate da nadjete sledecu knjigu: The windows serial port programming handbook

gagi

15.11.2010, 00:00 #10 Poslednja Izmena: 15.11.2010, 00:36 od gagi44
Ne boj se holodoc, nije embedded. Ovo je samo savet na osnovu iskustva. Prednost web aplikacija nad desktop aplikacijom je očigledna - analiza može da se vrši "any time, any place, anywhere". Pošto se radi o akademskoj ustanovi i akademskom projektu sigurno da i studenti žele da vide neke rezulatate pa i da sami malo analiziraju saobraćaj. Mislim da studentu ne bi bio problem da sve to uradi u ASP-u ako se odluči da radi. Kažem "ako" zato što smatram da je to drugi korak u razvoju aplikacije. Prvi korak koji treba napraviti jeste istraživanje open-source sveta i videti šta je tamo urađeno i da li može da se iskoristi u postojećem projektu. Ono što sam ja našao za par minuta pretrage jeste:

http://sourceforge.net/projects/mczub/
http://sourceforge.net/projects/zsniffer/
http://sourceforge.net/projects/nsniffer/
http://sourceforge.net/projects/?q=802.15.4
http://sourceforge.net/projects/wirelessmonito/

Takođe treba pogledati i wiresharka jer sam pronašao plugin za njega a na sajtu proizvođača
http://www.exegin.com/support/q51support.php
http://freaklabs.org/index.php/Blog/News/802_15_4-wireshark-open-source-analyzer.html
Ovde je izvorni kod wiresharka
http://www.wireshark.org/develop.html

Nadam se da će ovi linkovi biti od pomoći.

Zepi

Vidim da niko nije predlozio Javu pa evo da ja to uradim.

Generalno mislim da ne postoji odgovor koji je način pristupa najbolji.

Mislim da i dalje vazi "Najbolji je onaj koji znaš".

Generalno što se tiče izbora web ili desktop aplikacija, ja sam nekako uvek za Web jer su mogućnosti mnogo veće,
ako ne negde grugde onda barem u prezentacionom nivou.

I za web bi preporučio javu sa JSP i Servletima ili eventualno JSF. Onda bi ceo projekat bio realizovan u Javi.

Druga, važna stvar je realizacija.

Ili sa dve odvojene aplikacije (jedna sluša a druga prezentuje podatake) ili jedna sa dobro izvedenim nitima. Sve ostalo pada u vodu.

Kao zaključak, koji jezik???
Pitati diplomca šta mu više odgovara.

Koja platforma, desktop ili web?
Moja preporuka web.

Siniša Ranđić


Marko Аcović

Da li ste uspeli da nadjete knjigu? Ako da, posaljite mi je na mail.

marjan

16.11.2010, 23:26 #14 Poslednja Izmena: 16.11.2010, 23:29 od marjan
Imaš na www.gigapedia.com, teška je oko 11 MB.

(Nisam je ni pogledao doduše, ovo je više u stilu "Šta čitao, držao u rukama!!!"  :D
Unix is user-friendly—it's just choosy about who its friends are.