Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. www.neurohope.ro |
Dezvoltarea aplicațiilor ce comunică pe net
Last Updated: Nov 12 2013 23:29, Started by
dani.user
, Mar 14 2013 23:03
·
0
#91
Posted 05 October 2013 - 22:21
Plecand de la design-ul actual (ceea ce nu stiu daca e o idee buna), as putea face o clasa Server, ce se va ocupa de conexiune (eventual si ceva parsare), un StaticHandler si un DynamicHandler. Pentru ca ultimile 2 imprumuta destul de multe concepte comune, m-as gandi sa fac o clasa Handler, si StaticHandler si DynamicHandler sa fie "mostenitori".
|
#92
Posted 06 October 2013 - 06:11
Gady_paul, on 05 octombrie 2013 - 22:21, said:
Plecand de la design-ul actual (ceea ce nu stiu daca e o idee buna), as putea face o clasa Server, ce se va ocupa de conexiune (eventual si ceva parsare), un StaticHandler si un DynamicHandler. Pentru ca ultimile 2 imprumuta destul de multe concepte comune, m-as gandi sa fac o clasa Handler, si StaticHandler si DynamicHandler sa fie "mostenitori". OriginalCopy, on 05 octombrie 2013 - 15:55, said:
Identifică conceptele şi actorii importanţi din application domain şi introdu câte o clasă pentru fiecare. - nu întotdeauna vei avea un "design actual", de cele mai multe ori vei începe un proiect de la zero direct în OOP - tu vrei să înveţi OOP, e o nouă paradigmă de programare, nu poţi sta cu vechea paradigmă în minte şi să te aştepţi să iasă ceva bun Să zicem că clasele sunt bune, dar nu sunt toate. În descrierea aplicaţiei se află ascunse mai toate clasele: Aplicaţia mea este un daemon http care deserveşte conţinut clienţilor care se conectează şi trimit cereri. Aproape fiecare al doilea cuvânt e câte un concept din aplicaţie. |
#93
Posted 06 October 2013 - 19:39
OriginalCopy, on 06 octombrie 2013 - 06:11, said:
Aplicaţia mea este un daemon http care deserveşte conţinut clienţilor care se conectează şi trimit cereri. Am pictat cu rosu keywords care mi se par relevante. Deci, ar trebui (ca mai devreme), o clasa Server (care e si un soi de controller), Request, care se ocupa de primire cerere/parsare, ResolveStaticRequest/ResolveDynamicRequest pentru deservirea celor 2 tipuri de cereri, Client, care se ocupa de interactiunea cu clientul. P.S. nelegandu-ma de aplicatie, daca vreau sa fac treaba X, si pentru asta am deja ceva functii existente intr-o biblioteca procedurala, se practica/se pot crea clase-wrapper care au ca scop interfatarea intre procedural si aplicatia mea oop? |
#94
Posted 06 October 2013 - 20:05
Gady_paul, on 06 octombrie 2013 - 19:39, said: Am pictat cu rosu keywords care mi se par relevante. Deci, ar trebui (ca mai devreme), o clasa Server (care e si un soi de controller), Request, care se ocupa de primire cerere/parsare, ResolveStaticRequest/ResolveDynamicRequest pentru deservirea celor 2 tipuri de cereri, Client, care se ocupa de interactiunea cu clientul. Gady_paul, on 06 octombrie 2013 - 19:39, said:
P.S. nelegandu-ma de aplicatie, daca vreau sa fac treaba X, si pentru asta am deja ceva functii existente intr-o biblioteca procedurala, se practica/se pot crea clase-wrapper care au ca scop interfatarea intre procedural si aplicatia mea oop? Dacă faci un rewrite şi nu vrei să mai expui nimic procedural, nu se practică. Dacă biblioteca respectivă e mentenată separat, intern sau extern, şi rezolvă probleme pe care nu vrei să le mai rezolvi încă o dată, se practică. Totul depinde de proiectul concret pe care-l ai în faţă, nu există reţete magice. Şi în general, nu te lua după sfaturi măreţe, "reţete magice". Majoritatea deciziilor interesante sunt relative la proiectul concret. |
#95
Posted 06 October 2013 - 20:12
Pentru ca cererea e in principiu de un fel, as putea face asa:
Server, Request, Client, Response (si StaticResponse/DynamicResponse ca mostenitori), caci rezolvarea cererii e practic generarea raspunsului. Eventual se pot crea si clase gen GetRequest/PostRequest dar nu cred ca e cazul. |
#97
Posted 11 November 2013 - 21:25
Am hotarat sa extind varianta procedurala cu signals/multithreading/servire dinamica a paginilor (nu era terminata).
Pe scurt, fiecare cerere sta intr-un nou thread. Cat despre cererile dinamice, folosesc execve. Problema in cazul acestora (am incercat si o abordare cu pipes, tot fara rezultat), este ca nu pot determina lungimea raspunsului. Din fericire, standardul HTTP spune pe undeva ca daca lungimea raspunsului nu este specificata, raspunsul se incheie odata cu incheierea conexiunii (scrie in primele randuri de aici: http://www.w3.org/Pr...html#BodyLength). Nu pot determina response length fara a rula de 2 ori sau a stoca in memorie raspunsul (chestie nepractica), asa ca am zis sa il inchei prin terminarea conexiunii. Dupa umila mea parere (si dupa cum spune si telnet), conexiunea se inchide si continutul este transmis. Numai ca browserul nu se prinde de chestia asta. Asta zice telnet cand vorbeste cu serverul: GET /x.php HTTP/1.0 HTTP/1.0 200 OK Location: localhost Content-type: text/html; charset=UTF-8 array(0) { } NO AConnection closed by foreign host. Si asta zice telnet cand vorbeste cu apache: GET /x.php HTTP/1.1 Host: localhost HTTP/1.1 200 OK Date: Mon, 11 Nov 2013 19:16:09 GMT Server: Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/1.0.1e DAV/2 PHP/5.5.3 X-Powered-By: PHP/5.5.3 Content-Length: 17 Content-Type: text/html array(0) { } NO AConnection closed by foreign host. Si nu in cele din urma, acesta este x.php: <?php var_dump($_GET); if(isset($_GET['a'])){ echo $_GET['a']*5; }else{ echo "NO A"; } Aici sunt rezolvate cererile dinamice: https://github.com/P...r/src/dynamic.c Aici se intampla fork, se rezolva cererea, se inchide conexiunea si se omoara copilu' (adica child reaping, sa nu va ganditi la prostii ): https://github.com/P...ver.c#L101-L118 (ingorati printf-urile, au scopuri de debugging). |
#98
Posted 11 November 2013 - 21:58
PHP poate genera si el headere. Tii cont de ele?
Pentru site-uri dinamice nici nu prea are rost sa transmiti dimensiunea, ele oricum fiind relativ mici. Daca, prin php, trimiti defapt continutul unui fisier, setezi din php headerul cu dimensiunea corespunzatoare. Apoi, in HTTP/1.0 conexiunea se inchide dupa fiecare cerere, doar HTTP/1.1 permite mai multe cereri succesive pe acceasi conexiune. Ce intelegi prin "browserul nu se prinde"? |
#99
Posted 11 November 2013 - 22:20
dani.user, on 11 noiembrie 2013 - 21:58, said:
PHP poate genera si el headere. Tii cont de ele? Nu, voi implementa si chestia asta. dani.user, on 11 noiembrie 2013 - 21:58, said:
Ce intelegi prin "browserul nu se prinde"? Conexiunea e inchisa (nu asteapta/transfera date), dar pagina e goala sau nu arata nici o pagina. |
#100
Posted 12 November 2013 - 01:02
Fa un debug de la View Source, la o analiza cu Wireshark (sub linux poti capta usor si loopback-ul).
Vezi sa nu fie si ceva din cauza cache-ului din browser. |
|
#101
Posted 12 November 2013 - 22:23
Am curatat cache-ul si se comporta la fel.
Cat despre analiza cu wireshark, intrucat cunostintele mele nu sunt foarte vaste, am hotarat sa atasez aici niste screenshot-uri. Primul screenshot reprezinta toate pachetele din timpul recording-ului, cu exceptia discutiilor cu routerul care nu cred ca sunt relevante in cazul de fata. Inregistrarea a fost facuta pe 192.168.1.3, iar serverul rula pe 192.168.1.2. Se observa cererea http (pachetul 8). Pachetele 10 si 12 reprezinta headerele, respectiv body-ul response-ului, asa cum se vede in screenshot-ul 2. Datele sunt ele la locul lor, numai ca e interesat ca nu sunt recunoscute ca protocol HTTP de catre wireshark. Attached FilesEdited by Gady_paul, 12 November 2013 - 22:24. |
#102
Posted 12 November 2013 - 22:25
Right click si da-i sa-ti arate strict conversatia HTTP.
|
#103
Posted 12 November 2013 - 22:46
Cam asta e intreaga conversatie
Attached FilesEdited by Gady_paul, 12 November 2013 - 22:46. |
#104
Posted 12 November 2013 - 23:14
Dupa ultimul header mai trebuie un rand liber lasat, inainte de continut.
|
#105
Posted 12 November 2013 - 23:29
Pfff, asta era. Multumesc mult.
Totusi, de ce daca ii spuneam content-length se descurca? |
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users