Jump to content

hanibal

Active Members
  • Posts

    304
  • Joined

  • Last visited

    Never

Everything posted by hanibal

  1. PROCESE IN LINUX Daca dorim sa rezolvam o problema care se preteaza la o implementare cu mai multe procese, primul lucru pe care ar trebui sa-l stim este cum sa creem un nou proces.In Linux , modalitatea de a crea un nou proces este apelul functiei fork() , care se gaseste in bibliotecile "unistd.h" si "sys/types.h" ,acestea trebuind incluse daca vrem sa utilizam (cu succes) functia fork. Prototipul arata cam asa: pid_t fork(void); Ce se intampla dupa un apel fork: -se creaza un nou proces , prin copierea segmentelor de date si de cod ale procesului apelant; -functia intoarce in procesul tata PID-ul(process identifier) procesului nou creat; -functia intoarce in procesul fiu 0; -intoarce -1 in caz de eroare (adica nu s-a reusit crearea unui nou proces). Sa urmarim un exemplu ca sa ne dam seama si mai bine ce se intampla. Programul urmator creaza un proces copil , dupa care fiecare proces isi tipareste PID-ul. #include #include #include int main() { pid_t pid; int status; //apelul fork() pid=fork(); switch(pid) { case 0: //aici ne aflam in procesul copil printf("PID fiu:%dn",getpid()); return 0; break; case -1: //eroare //ar fi bine daca s-ar face si tratarea erorii break; default: //aici ne aflam in procesul parinte //asteptam intai sa se termine procesul copil wait(&status); //tiparim mesajul printf("PID parinte:%dn",getpid()); } return 0; } Observatii: 1) Se vede ca in switch(pid) , cand ma aflu in procesul copil la sfarsitul sectiunii case corespunzatoare (case 0) folosesc inainte de break apelul return.Aceasta imi asigura ca dupa apelul fork procesul copil executa NUMAI ce se afla intre case 0: si apelul return , asigurand astfel terminarea procesului copil. Din cauza ca se copiaza zona de cod a procesului parinte in procesul fiu , dupa iesirea din switch() , ambele procese vor executa aceleasi instructiuni. In exemplul de fata , nu se mai executa decat return , deci s-ar fi putut si fara return la procesul copil. Daca programul ar contine o bucla in care se face un fork , daca procesul copil nu se termina , ar putea rezulta ceea ce se numeste un fork-bomb , programul generand la infinit noi procese , care vor provoca in cele din urma o blocare a sistemului de operare. 2)S-a folosit functia wait: pid_t wait(int *status); pentru a astepta terminarea procesului copil. Daca nu se face wait , procesele copil terminate vor fi inca prezente in sistemul de operare ca defuncte sau zombie. Daca vreti sa vedeti cum se manifesta asta faceti mai multe procese pe care nu le asteptati cu wait() si urmariti procesele pornite din sistem. Functia wait asteapta terminarea oricarui proces copil , dupa care in "status" se pot regasi informatii despre codul de return al procesului fiu si alte chestii interesante. Pentru a astepta terminarea unui anumit proces , se foloseste waitpid: pid_t waitpid(pid_t pid,int *status,int options); care asteapta terminarea procesului cu PID-ul pid. Pentru mai multe informatii consultati paginile man din Linux. Pentru a intoarce PID-ul procesului curent avem functia: pid_t getpid(void); Pentru a intoarce PID-ul procesului parinte avem functia: pid_t getppid(void); ATENTIE!!! Din cauza faptului ca dupa apelul fork se copiaza sectiunea de date a procesului parinte in procesul fiu , orice modificare asupra unei variabile declarata inainte de fork() intr-un proces nu va fi sesizata in celalalt proces. Daca explicatia de mai sus pare un pic imbarligata , sa luam un exemplu: Declaram niste variabile: int a=0,b=10,status; pid_t pid; pid=fork(); switch(pid) { case 0: a++; b--; return; break; case -1: break; default: wait(&status); a--; b++; } Greseala pe care eu am facut-o prima data cand am lucrat cu procese a fost ca avem impresia ca daca modific o variabila intr-un proces , si celalalt proces sesizeaza asta; din cauza copierii sectiunilor de date , fiecare proces lucreaza asupra propriilor variante ale fiecarei variabile , deci rezultatele operatiilor sunt independente. In urma executarii exemplului de mai sus , procesul parinte va avea a=-1 , b=11 in timp ce procesul copil va avea a=1 , b=9. Pentru ca procesele sa partajeze zone din sectiunea de date se poate folosi apelul clone (man clone pentru detalii). Chiar daca in urma apelului fork nu se poate comunica direct intre procesele create, sistemul de operare pune la dispozitie o serie de mecanisme de comunicare interproces (pipe-uri , memorie partajata , semafoare , cozi de mesaje) , care vor fi detaliate pe parcursul tutorialelor de aici. Autor Florin (itzone)
  2. Pai nu vreau deloc sa ies man, imi place aici si o sa raman...cat despre "problema" am sa fac ce trebuie....wait...etc...scz daca te-a deranjat sugestia :@
  3. pai nu asa trebuie sa faca, ca sa inteleaga???? :@
  4. http://www.poqbum.com/FlashAnimations/redbutton.htm
  5. credits? pff traducere de la http://www.w3schools.com/dtd/default.asp?" Un document DTD(Document Type Definition) defineste structura documentului XML cu o lista de elemente valide. Un DTD poate fi declarat “inline”, in interiorul documentului XML sau ca referinta externa. Exemplul de mai jos se va referi la o referinta externa. Fisierul DTD: <?xml version="1.0" encoding="ISO-8859-1"?> <!ELEMENT ADI (Metadata, Asset)> <!ELEMENT Metadata (AMS, App_Data+)> <!ELEMENT AMS EMPTY> <!ATTLIST AMS Provider CDATA #REQUIRED> <!ATTLIST AMS Product CDATA #REQUIRED> <!ATTLIST AMS Asset_Name CDATA #REQUIRED> <!ATTLIST AMS Version_Major CDATA #REQUIRED> <!ATTLIST AMS Version_Minor CDATA #REQUIRED> <!ATTLIST AMS Description CDATA #REQUIRED> <!ATTLIST AMS Creation_Date CDATA #REQUIRED> <!ELEMENT App_Data EMPTY> <!ATTLIST App_Data App (MOD | SVOD) "MOD"> <!ATTLIST App_Data Name CDATA #REQUIRED> <!ATTLIST App_Data Value CDATA #REQUIRED> <!ELEMENT Asset (Metadata, Asset+)> <!ELEMENT Content (#PCDATA)> <!ATTLIST Content Value CDATA #REQUIRED> De precizat este ca in interiorul documentului XML trebuie adaugata o linie care contine locatia referintei DTD: <!DOCTYPE ADI SYSTEM "file.dtd"> Tagurile XML Din punctul de vedere al DTD, toate documentele XML sunt facute bloguri de constructie simple: # Elemente # Atribute # Entitai # PCDATA # CDATA Elementele Elementele sunt blocuri de constructie principale pentru documentele XML cat si pentru cele HTML. Un exemplu pentru HTML ar fi “body”, “table”. Elementele pot contine text, alte elemente sau pot fi goale. Un exemplu de elemente goale in HTML este “br”, “hr”. Exemplu: XML: <mesaj>acesta e continutul text al elementului mesaj</mesaj> <scrisoare> <plic>acesta e un element din interiorul scrisoare</plic> </scrisoare> HTML: <body>asta e textul din body</body> Declaratia unui element are urmatoarea sintaxa: <!ELEMENT nume-element categorie> sau <!ELEMENT nume-element (continut-element)> Elementele goale sunt declarate folosing cuvantul cheie EMPTY. <!ELEMENT nume-element #EMPTY> Exemplu: DTD: <!ELEMENT hr #EMPTY> XML: <hr /> Elementele doar cu caractere. Elementele doar caractere sunt declarate folosind #PCDATA: <!ELEMENT nume-element (#PCDATA)> Exemplu: DTD: <!ELEMENT test (#PCDATA)> XML: <test>aici intra test</test> Elemente cu orice continut Elementele sunt declarate folosind cuvantul cheie ANU si pot contine orice combinatie de date parsabile: <!ELEMENT nume-element ANY> Examplu: DTD:<!ELEMENT note ANY> XML: <note>or1ce t3xt</note>
  6. e regula sa postam doar tutoriale testate?
  7. Din cate am observat, ati marit timpul intre postari. Trebuie sa asteptam 100 de secunde pana postam altceva... E cam greu, de exemplu la tutoriale....cand ai mai multe memorate in calculator...le iei imediat cu copy-paste...doar ca dureaza cam mult pana postezi un al doilea tutorial. Se poate face ceva in privinta asta? :@
  8. In primul rand ai facut dublu-post. In al doilea rand am dat credite. Nu stiu cine a facut sau cine nu...eu am dat credite celui care a postat pe un anumit forum asta. No offence :@
  9. cand puneti si rezolvarea? sunt curios...eu nu am reusit sa rezolv :@
  10. good posting man, thank you, asta ii material bun
  11. daca zic mersi, se zice ca fac posthunting..... ))) :@
  12. ah cool chiar tare;))) danke shon
  13. bai deci ce penal ii tampitu asta di moj You: Is your father GAY> Santa: Is my father GAY>? Suppose I say yes
  14. Ar trebui inchis topicul...prea multi lameri care intra NUMAI pentru asta....no offence :@
  15. http://www.santabot.com/ :@ uite ce i'am zis eu: You: you're gay? Santa: Actually as a machine I have no need for sex. You: Nicolae Guta is a cocalar Santa: I think Nicolae Guta is more than that.
  16. De ce oare aveti stilul unii dintre voi sa inviati topice veechi???? :@
  17. Tutorial scris de Bl00D rAvEn Cred ca ati observat la mai multe sit-uri cum afiseaza in josul paginii timpul de incarcare al paginii. Acest timp este de fapt timpul in care s-au executat toate instructiunile si toate functiile necesare afisarii unei pagini. Cum se face? Foarte usor : Folosim functia microtime () si alte functii ajutatoare. Functia microtime () returneaza timpul in format Unix, incluzand milisecundele. Definim functia get_time () : function get_time () { $t = explode(" ", microtime ()); // separam valoare returnata $t = $t[1] . $t[0]; // concatenam sirurile obtinute anterior return $t; } Apelam o data functia la inceputul scriptului, dar nu inainte de a o defini, si inca o data la sfasitul scriptului, dupa ce efectuat toate instructiunile si am apelat toate functiile. Apoi afisam diferenta dintre cele doua valori, obtinand astfel timpul scurs intre cele doua apelari : <?php function get_time () { $t = explode(" ", microtime ()); $t = $t[1] . $t[0]; return $t; } $s = get_time() //--cod php //--cod php //--cod php //--cod php //--cod php //--cod php $e = get_time() echo "Pagina s-a incarcat in ", round (($e - $s)/10, 6), " secunde"; Functia round () o folosim pentru a nu afisa toate zecimalele timpului de incarcare, ci numai atatea cate sunt specificate de al doilea parametru. Sper ca am fost destul de explicit si de clar. Bafta la lucru !
  18. Ati facut vreodata un site, construit structura si deodata peste ceva timp v-ati decis sa va refaceti complet site-ul inclusiv si structura lui? Ei, daca aveti un site deja stabilit, schimbarea structurii poate sa fie un mare chin pentru voi si pentur userii vostri, sau pentru oamenii care va cauta site-ul cu ajutorul motoarelor de cautare. Acest tutorial ca ajuta sa evitati sa aveti parte de erorile de tipul "Error 404 Not Found" si sa redirectati userii inapoi la noul vostru site. Sa spunem ca aveti cateva fisiere ca acestea: Site-ul tau /index.php /pagina1.php /pagina2.php /pagina3.php Structura noului tau site doresti sa fie aceasta: Site-ul tau /index.php /articole.php (a fost pagina1.php) /imagini.php (a fost pagina2.php) /guestbook.php (a fost pagina3.php) Acuma vom presupune ca veti sterge vechile fisiere dupa ce va veti reface design-ul site-ului.Cand site-ul vostru rula inainte, aveti circa sa aproximam 10 site-uri cu care ati facut link exchange, si ati mai indexat site-ul si in motoarele de cautare. Cand userii dau click pe link-urile vechi, ei vor avea parte de o eroare de tipul "Error 404 / Document not found error message" Haideti sa incercam sa evitam astfel de erori si sa redirectam userii catre noul vostru site. Primul lucru care trebuie sa-l facem este sa construim script care sa se ocupe cu erorile de acest tip. Eu folosesc un script care include fisierul index.php, da un mesaj user-ului in partea de sus a paginii si face redirectarea catre pagina principala dupa 2 secunde. Uite cum: <?php //error404.php echo "<font color="#FFFF00" size="3"> <center>[b]Ati accesat o pagina care e fost schimbata sau nu mai exista. Veti fi redirectati catre pagina noastra principala peste 2 secunde![/b]</center></font>"; //Meta refresh pentru a-i trimite inapoi la index.php echo "<meta http-equiv="refresh" content="2;URL=/index.php">"; //includem index.php pentru ca sa ii oferim si altceva in afara de o eroare urata. include 'index.php'; ?> Asta a fost! Un script foarte simplu care va scapa de acea eroara urata si va redirecteaza userii catre pagina voastra. In continuare va vom explica cum sa modificam fisierul htaccess care permite server-ului Apache sa foloseasca acest nou script. Pentru a realiza urmatorul pas trebuie sa aveti drepturi de administrator catre configurarea server-ului de Apache sau sa trimite-ti un email catre administrator si sa il rugati sa va permita sa faceti acea modificare in fisier. Fisierului httpd.conf trebuie adaugata o directiva pentru directorul unde aveti gazduit site-ul. sa presupunem ca pentru acest director. /www/htdocs. Aceasta este linia catre fisierul httpd.conf trebuie neaparat sa o aiba pentru ca acest fisier .htaccess sa functioneze: <Directory /www/htdocs/yoursite> AllowOverride FileInfo </Directory> Dupa ce ati facut acest lucru, trebuie sa creati un fisier cu numele ".htaccess" si sa il plasati in directorul site-ului. Uite ce simplu este fisierul .htaccess este: ErrorDocument 404 /error404.php A fost simplu nu? Dupa ce ati facut toti pasii de deasupra, puteti sa il testati. Sa apelam http://www.domeniu.ro/eroare1.php (unde eroare1.php este un fisier care nu exista). dupa ce ati apelat acest fisier ar trebui sa fiti redirectati catre site-ul vostru si sa vedeti un mesaj care apare pentru 2 secunde in partea de sus a ecranului si apoi sa fiti redirectati inapoi la fisierul index.php Felicitari. Ati "manevrat" toate link-urile stricate catre site-ul vostru inapoi la pagina voastra principala.Nu veti mai pierde trafic la modificarile care le veti face pe viitor. Numai sa nu stergeti fisierul error404.php. Iata cateva erori mai particularizate care le-ati putea face pentru site-ul vostru. Folositi aceeasi metoda care am folosit-o. Iata lista cu erorile frecvente care le primiti: Eroare la user 400 Bad syntax 401 Unauthorized 402 Not Used (Payment Granted) 403 Forbidden 404 Not Found Eroare la server 501 Not Implemented 502 Overloaded 503 Gateway Timeout credits: php Portal
  19. Acest contor se poate implementa printr-un câmp din tabela corespunzatoare resursei respective din baza de date, un camp de tip „întreg fara semn cu valoare initiala 0” (în MySQL mediumint(9) este o alegere care acopera marea majoritate a situatiilor posibile). La accesarea respectivei resurse se va executa o interogare de tipul: UPDATE tabela SET citiri=citiri+1 WHERE id=$id unde „tabela” este tabela în cauza, „citiri” campul contor iar „id” campul cu proprietatile “primary index” si “auto increment” din tabela. Variabila $id va contine în mod evident identificatorul resursei respective. Problema unei astfel de implementari este faptul ca nu exista absolut nici o protectie în ce priveste accesarile consecutive efectuate de un acelasi vizitator (în cazul în care acesta executa “refresh”, de exemplu, sau în cazul în care pur si simplu uita ca a vizitat pagina respectiva si o acceseaza din nou). Solutia pentru a contoriza o singura accesare pentru fiecare vizitator este retinerea într-un vector a identificatorilor resurselor vizitate si consultarea lui în momentul actualizarii contorului de vizite. Acest vector trebuie retinut neaparat ca variabila de sesiune pentru a-si pastra continutul pe toata durata vizitei efectuate de un anume utilizator. Implementarea în cod ar putea arata cam asa: session_register(“ids”); if (!in_array($id,$ids)) { $ids[]=$id; mysql_query(“UPDATE tabela SET citiri=citiri+1 WHERE id=”.$id) or die(mysql_error()); } Aceasta solutie nu rezolva problema revenirii unui anume utilizator pe pagina în cadrul unei alte vizite. De exemplu, daca X citeste articolul Ak astazi si revine peste 2 zile, citindu-l din nou, se vor contoriza 2 accesari distincte ale articolului respectiv. O solutie perfecta care sa remedieze si aceasta problema nu se poate pune în practica, ci numai solutii partial eficiente (care presupun din start existenta unei marje de eroare). credits:http://www.php.maelvi.ro :@
  20. nu trebuie editat nimika in afara de explorer.exe daca ai habar de ce faci. e mai simplu : downloadezi Resurse Hacker de aici dupa'>http://www.users.on.net/johnson/resourcehacker/ dupa care il bagi frumos ca un copil mic intr-un "folder" (asta sa folosesc "englezisme").Tot acolo dai copiere shi la explorer.exe. Acum pornesti frumos Resurse Hacker shi deschizi explorerul salvat in acelashi director.Cautzi frumos la "String Table" 37 shi 38. modifici textul "start" cu ce vrei sa apara de ex "Gândac XP". Dupa modificare dai "Compile Script", dupa care clasic: FileSave Asshi dai un nume ce vrei tu.ma rog dupa gust --> xpgandac.exe pe care il salvezi in c:windows(winnt) Acum mergi la start shi dai run unde scrii " REGEDIT ". Cautzi HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Winlogon shi modifici la " SHELL " unde apare explorer.exe in "xpgandac.exe". Inchizi Regedit shi dai un LogOff sau un restart cum vor muschii tai. cand zice de windows file protection dai cancel shi dai keep this unrecognized file type adika YES. Gata! Credit : Zona.Ro (http://www.zona.ro/index.php?name=PNphpBB2&file=viewtopic&p=39414)
  21. Primul pas - realizam fisierul care ne arata ceasul (timp.js) Al doilea pas: modificam pagina HTML in care vom insera ceasul Intre tagurile <head></head> inseram scriptul <script type="text/javascript" src="timp.js"></script> Inte tagurile <body></body> unde avem continutul sitului facem un div cu id`ul "valoare" astfel: <div id="valoare"></div> pe care il pozitionati unde vreti. credits: wanksta from sgfx
  22. Prima oara intri in comand prompt ( Start -> Run si scrii cmd ) Odata intrat scrii telnet. Iti alegi un server de mirc ex : eu.undernet.org scrii in telnet : open eu.undernet.org 6667 o sa iti arate *** looking up your hostname etc... dupaia scrii user x y z :q unde x este nickul tau y este hostname-ul tau , z este ip tau , iar q este numele tau real La hostname poti scrie ip tau . iti va arata ceva de genul acesta ping :--------- ( ----- este un numar ) va trebui sa scrii pong :--------- ( numarul care este acolo ) Odata conectat poti sa te conectezi la un canal astfel : join #canal daca vrei sa scrii ceva pe canal : privmsg #canal :@xxxxx ( xxxx este mesajul ) daca vrei sa ii scrii cuiva pe privat : privmsg nick :@xxxx ( xxxx - mesajul ; nick - nickul lui ) ----- Sper sa intelegeti ceva credits:Tierc3L SGFX
  23. Bun haideti sa incepem 1.intrati pe situl acesta http://www.phpnet.us/signup.php va faceti un cont va tine cateva minute sa se faca, 2.dupa aceea luati smart ftp de pe 3.luati'>http://www.softpedia.com/progDownload/SmartFTP-Client-Download-5702.html 3.luati e107 website system de pe 4Ehh'>http://prdownloads.sourceforge.net/e107/e107_v0.7.5_full.zip?download 4Ehh si niste imagini sa va deskurkati mai bine Pasi din smart ftp:1,2 Deci explic din nou deschideti fisierul www si dat drag and drop pe casuta mare si alba Neutral sau cu mse o numiti 3,4 setarea de permisiuni este relativ simpla dupa cum am explicat in primul post .... daca nu vedeti ce scrie in imagini CONFIGURATI PERMISIUNILE LA 777 la urmatoarele e107_config.php e107_files/public/ e107_files/cache/ e107_files/public/avatars/ e107_plugins/ e107_themes/ 6.intrati pe site exemplu ion.phpnet.us la primul pas alegeti limba romana la al 2 lea completati 7.e107_config.php setati permisunea acestuia la 0644 inapoi 8.stergeti instal.php si e107_instal Templaturi va puteti face si voi Very Happy....... Sper ca am explicat destul de concret credits: ddK from sgfx
  24. 8 secrete pentru optimizarea site-urilor pentru motoarele de cautare. Cam 80% din trafic vine de la motoarele de cautare. Si studiile arata ca daca nu esti pe primele doua pagini de rezultate e ca si cum n-ai exista. Nu ne-am propus sa va spunem cum sa obti un rating mare, daca ai un site web. Acest subiect a fost discutat si ras-discutat in ultimele luni pe tot internetul. Inscrie-ti site-ul in motoarele majore de cautare, plaseaza-ti cuvintele cheie potrivite in prima pagina, incluse in propozitii cu inteles real, si apoi gaseste cat mai multe site-uri cu continut relevant dispuse sa faca link-uri catre site-ul tau. Cam asta ar fi. Iata insa cum sa faci sa fii listat mai sus in motoarele de cautare: 1) Alege fraze cheie (costa approx $7.50 pe zi) Ca sa te hotarasti ce fraze cheie vei folosi inscrie-te la WordTracker.com pentru o zi si fa niste analize. Introduci un cuvant si wordtracker iti spune cat de des a fost cautat acel cuvant in ultima luna, cate site-uri ale concurentei folosesc acel keyword si asa mai departe. 2) Masoara-ti densitatea de cuvinte cheie: Du-te la adresa http://www.gorank.com/analyze.php si vei gasi acolo tot ce ai nevoie. 3) Testeaza sa afli cat de prietenoasa este pagina ta fata de motoarele de cautare. http://www.1-hit.com/all-in-one/tool.search-engine-viewer.htm - Introduci adresa si iti spune ce ai putea sa mai imbunatatesti. http://www.gritechnologies.com/tools/spider.go? - Poodle iti spune cateva statistici despre link-uri. 4) Afla cate din paginile tale sunt indexate. Pentru asta mergi cam pe orice search engine si cauta cu site:www.domeniu.ro. 5) Monitorizeaza-ti pozitia in Google. Nu e nevoie sa te cauti prin sute de pagini de rezultate. La adresa http://www.cleverstat.com/google-monitor-query.htm gasesti un programel care te ajuta sa verifici mai usor. 6) Afla cat de importante sunt site-urile. Google Toolbar e o scula indispensabila. Cel mai important lucru pe care ti-l spune este PR (PageRanking-ul) unei pagini. In functie de asta poti alege site-urile cu care faci schimb de link-uri. ATENTIE:'>http://toolbar.google.com. ATENTIE: Se pare ca Google Toolbar monitorizeaza accesul tau la internet. Pana acum nu este prea clar la ce foloseste informatiile adunate. 7) Monitorizeaza ce site-uri au link-uri catre tine. Google News Alerts si Google Web Alerts o sa iti spuna cine are link-uri catre site-ul tau. Trebuie doar sa setezi o alerta pentru a fi anuntat cand Google gaseste un link catre domeniultau.ro Cauta Ajutor. Daca esti nou in domeniul SEO (Search Engine Optimization) da o tura prin ghidul Google de optimizare. Exista si multe forumuri pe tema asta pe care ar trebui sa le vizitezi. Cel mai bun forum pare sa fie Forum 3 - Webmaster World, dar Forum 28 la SearchEngineForums e ok si el. Asta e doar o trecere in revista a sculelor disponibile pe internet. Cu siguranta exista si lucruri mai bune de facut si daca crezi ca ai un pont, nu ezita sa postezi un comentariul la articolul acesta, pentru ca prin schimb de experienta vom reusi cu toti sa ne imbunatatim traficul pe care il primim de la motoarele de cautare. Note: articol original de Glenn Murray, prezentat in premiera in zona.ro :@
×
×
  • Create New...