Ne-am mutat !!!
Ne-am mutat pe http://de-ce.net !!!
Filed under: Uncategorized | No Comments »
Ne-am mutat pe http://de-ce.net !!!
Filed under: Uncategorized | No Comments »
Expresii regulate in PHP
Salut! In aceasta lectie vom invata despre expresiile regulate in PHP, folosite de obicei pentru functiile preg_match si preg_match_all (http://us.php.net/manual/ro/function.preg-match-all.php).Ce este o expresie regulata ? O expresie regulata (regexp) reprezinta un text special, un sablon, care descrie un anumit text. Ce reprezinta aceste functii ? Cauta intr-un anumit string un anumit “substring”, echivalentul expresiei care am format-o daca il pot denumi asa si afiseaza toate “potrivirile” posibile intr-un array. Sintaxa functiei preg_match_all este urmatoarea:
[code]
preg_match_all(“expresia regulata”, “stringul in care cautam echivalentul expresiei”, $var, PREG_SET_ORDER);
[/code]
Variabila $var primeste rezultatele, iar ele vor fi afisate sub forma unui array. Insa pe noi nu asta ne intereseaza, ci “expresia regulate” in sine.
In primul rand, sa analizam 2 simboluri destul de importante:
- “^inceput” – cauta fiecare substring care contine la inceputul acestuia cuvantul: inceput. Deci, practic, ^ semnifica inceputul unui substring (cauta la inceput).
- “sfarsit$” – cauta fiecare substring care contine la sfarsitul acestuia cuvantul: sfarsit. Deci, practice, $ semnifica sfarsitul unui substring (cauta la sfarsit).
In concluzie, ca sa cautam un substring care contine la inceputul acestuia grupul “mama”, iar la sfarsit tot grupul “mama”, in interiorul stringului “mamaestemama”, vom folosi expresia regulata: “^mama$”.
Pana sa ajungem sa construim expresii regulate de la cap la coada, trebuie sa mai invatam despre cateva “caractere speciale”, fiecare avand un rol bine stabilit si foarte important. Sa vedem:
- “xy*” – gaseste orice substring care are dupa x, 0 sau mai multi de y (ex: “x”, “xy”, “xyy”, “xyyy”, “xyyyy”, etc.).
- “xy+” – gaseste orice substring care are dupa x cel putin un y (ex: “xy”, “xyy”, “xyyy”, “xyyyy”, etc.).
- “xy{3} – gaseste orice substring care are dupa x, exact 3 de y (“xyyy”).
- “xy{2,5}” – gaseste orice substring care contine dupa x, intre 2 si 5 de y (ex: “xyy”, “xyyy”, “xyyyy”, “xyyyyy”).
- “xy{3,}” – gaseste orice substring care are dupa x cel putin 3 de y (ex: “xyyy”, “xyyyy”, “xyyyyy”, “xyyyyyy”, etc.).
- “xy?” – “poate sa fie sau sa nu fie J”.
De asemenea, putem utiliza si secvente de caractere in interiorul expresiei regulate, aceste secvente fiind puse intotdeauna intre paranteze: (secv) . Exemplu: [b]asd(ex){2,5}[/b]. Acest exemplu gaseste orice substring de forma: asdexex, asdexexex, asdexexexex, asdexexexexex.
Un alt semn foarte important este reprezentat de caracterul | . Exemplu: “eu|tu”, gaseste orice substring care are in componenta eu sau tu. | = OR (la fel ca in C++). Spre exemplu: “^eu|tu” gaseste orice substring care incepe cu eu, sau cu tu.
Punctul: “.” reprezinta un caracter. Orice caracter… Sa consideram urmatorul exemplu: “.(asd){2,5}”. Acesta cauta substringuri care contin caractere de forma: “Xasdasd” sau “Masdasdasd”, etc.
Perechea de paranteze drepte [ ] este asemanatoare cu | . Spre exemplu, “[ab]” este echivalent cu “a|b”. Insa, daca am vrea ca stringul ca contina o cifra, ar trebuie sa scriem o expresie de genul: “0|1|2|3|4|5|6|7|8|9”, insa ia prea mult timp. Acea expresie poate fi inlocuita cu foarte simplista: “[0-9]”. Daca vrem ca substringul sa contina o litera mica de la a la z, folosim: “[a-z]”, daca vrem sa contina o litera mare, tot de la A la Z, folosim: “[A-Z]”. Insa, daca vrem sa folosim si litere mari si litere mici ? Nimic mai simplu: “[a-zA-Z]”. Daca spre exemplu, vrem sa gasim un string care reprezinta un procent (de genul 99%), folosim urmatoarea expresie: “^[1-9][0-9]%$”.
Acum ca am explicat in mare cam ce face fiecare semn important, sa trecem la lucrurile seriose J.
1) [b]Gasirea unei adrese IP valide.[/b] O adresa IP este de forma 172.178.25.43. Mai exact, este formata din 4 grupe de maxim 3 caractere si minim 1, cu valori intre 0 si 255. Evident, in expresia noastra regulate vom folosi si . (punct), caracterul care delimiteaza cele 4 grupe. Dar, cum am precizat mai sus, punctul reprezinta un caracter, de aceea trebuie sa “scapam” oarecum de aceasta notatie. Vom da “escape” la punct, folosind caracterul backslash, ex: “\.” sau “mamaia\.”.
Expresia regulata care cauta o adresa IP valida ar fi urmatoarea:
[code]
“\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b”
[/code]
Poate ati observat, aici am folosit caracterul \b, care semnifica backspace.
2) [b]Gasirea unui numar de telefon.[/b] Sa presupunem ca avem un numar de telefon de genul XX-YYYYYY si vrem sa-l gasim. Un astfel de numar este: 11-123456. Expresia regulate ar fi de genul:
[code]
“^[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]$”
[/code]
3) [b]Gasirea unei adrese de e-mail. [/b] Nu ma voi complica si voi prezenta un cod simplu de gasire a adresei de e-mail, nu prea complet si prea “sigur”.
[code]
/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/
[/code]
Credit: itzone.ro ! De ce spun ca aceasta expresia nu este prea safe ? Pentru ca un string de genul: asdasd@asdasd.asd il va considera ca fiind o adresa valida de e-mail, desi nu prea este J
Cam atat ! Sper ca este de folos cu ceva tutorialul asta ! Cand am scris acest tutorial am invatat si eu, in acelasi timp cu voi, ce sunt alea expresii regulate, deci daca sunt greseli, post them !!!
Bibliografie:
[code]
http://www.regular-expressions.info/
[/code]
@vladii 2007
Filed under: Uncategorized | Tagged: expresii, informatica, regex, regulate, vladii | 1 comentariu »
In primul rand, daca gasiti vreo eroare in codul scris de mine sau vreo greseala de algoritm, va rog sa o mentionati, pentru ca nici eu nu sunt 100% sigur de codul pe care l-am facut.
Ok, ce este Algoritmul Miller-Rabin ? Numele sau intreg este: “Testul de primalitate al numerelor Miller-Rabin”. Practic verifica daca un numar este prim sau nu. Insa, nu degeaba se numeste [b]test[/b], pentru ca probabilitatea ca raspunsul returnat de program nu este maxima (pow(4,-k)).
Si poate va intrebati, de ce sa folosesc acest algoritm, cand pot sa impart numarul la toate numerele mai mici decat sqrt(numar) ? Pai da, dar acesta este mult mai rapid si are o complexitate mai mica ![]()
Va prezint in continuare codul scris de mine in C (astept imbunatatiri sau corectari):
[code]
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <math.h>
int main()
{
long numar, s=0, a=0, r, d=0, k, aux1=0, aux2=0, i=0, aux3=0, aux4=0;
div_t aux5;
printf(”Introdu numarul: “);
scanf(”%d”, &numar);
printf(”\nIntrodu un numar k(probabilitatea este 4 la puterea -k): “);
scanf(”%d”, &k);
aux1=numar-1;
while(aux1%2 !=1) {
if(aux1%2==0) {
s++; }
aux1=aux1/2; }
printf(”%ld”, (int)pow(2,s));
aux4=(long)pow(2,s);
aux5=div(numar-1,aux4);
d=aux5.quot;
printf(”\nPuterea lui 2 este: %ld iar restul este: %ld”, s, (long)d);
if(numar==2 || numar==3 || numar==5 || numar==7 || numar==11) {
printf(”\nNumarul este prim”); }
else if(numar=4 || numar==6 || numar==8 || numar==9 || numar==10) {
printf(”\nNumarul nu este prim/ este compus”); }
else {
srand(time(NULL));
for(i=0;i<k;i++) {
a=rand() %(numar-1)+1;
aux2=(long)pow(a,d)%numar;
for(r=0;r<=s-1;r++) {
if(aux2 !=1 & (long)pow(a,pow(2,r)*d)%numar !=numar-1) {
aux3=1; } } }
if(aux3==1) { printf(”\nNumarul este prim”); }
else { printf(”\nNumarul nu este prim/ este compus”); } }
getch();
return 0;
}
[/code]
Sper sa va fie de folos la ceva (si ma repet, postati eventualele greseli de algoritm ;)).
Bibliografie:
[code]
http://en.wikipedia.org/wiki/Miller-Rabin_primality_test
+
http://vladii.wordpress.com
[/code]
Filed under: Uncategorized | Tagged: informatica, miller, numere, prime, problema, rabin, vladii | 2 Comentarii »
O sa incerc sa fac cate un astfel de tutorial o data pe saptamana (am foarte, foarte multe pe cap si prea putin timp liber), de la incepator spre avansat.
Prima parte (Absolute Begginer):
| Cod: |
| http://rapidshare.com/files/59259023/primaparte.rar.html |
Succes si sa ne revedem cu bine !
——————————————————————————————
Partea a 2-a (Begginer).
| Cod: |
| http://rapidshare.com/files/60624623/a2-aparte.rar.html |
vladii.wordpress.com
P.S. Primul breakpoint trebuia pus pe linia cu JNZ, va dati voi seama. Scuzati-mi eroarea, nu am stat sa refac tutorialul doar pentru asta ^_^
Filed under: Uncategorized | Tagged: crack, cracking, informatica, ollydbg, vladii, w32dasm | 5 Comentarii »
Salut ! Astazi voi scrie un tutorial legat de programare, mai exact, Visual Basic. Ce vom invata ? Vom invata despre Imagini, Pixeli, R, G, B, GrayScale, etc. Sa incepem !
Ce este o imagine ? O imagine reprezinta mai multe obiecte adunate intr-un tot unitar. O imagine este o insiruire de pixeli. Ce este un pixel ? Pixelul este cea mai mica subdiviziune a unei imagini. Pixelul apare sub forma unui punct [.] si are diferite culori. In concluzie, o imagine este formata din mai multi pixeli cu diferite culori.
Valoarea unei culori este de obicei pe 32 de biti [colorref] (valoarea unei culori este stocata pe 4 bytes, doar 3 sunt importanti -> R, G, B), in format RGB. Ce inseamna format RGB ? R=Red [Rosu], G=Green [Verde], B=Blue [Albastru]. Orice culoare se poate obtine prin amestecul a diferite cantitati din aceste 3 culori.
Acum sa aflam cum putem seta un pixel la o anumita culoare, cum putem scoate R, G, B dintr-o culoare si, mai tarziu [cod sursa], sa folosim GrayScale.
1. Cum setam o un pixel la o anumita culoare ? Pentru aceasta, folosim 2 functii API din libraria GDI32, foarte importante, si anume:
[code]
Public Declare Function GetPixel Lib “GDI32″ (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function SetPixel Lib “GDI32″ (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
[/code]
Despre Functii API am invatat intr-un tutorial anterior (il gasiti pe vladii.wordpress.com). Sa explicam prima functie. GetPixel preia culoarea pixelului aflat la coordonatele (x,y). ByVal hDC As Long reprezinta handleul canvasului imaginii (am povestit despre Handleuri in acelasi tutorial despre Functii API). Handleul Canvasului imaginii se noteaza astfel: Picture1.hDC, unde Picture1 este o imagine de pe Formularul dumneavoastra. Sa dau un exemplu concret de extragere a culorii unui pixel si o atribuie variabilei color (de tip Long):
[code]
Dim color as Long
color = GetPixel(Picture1.hDC, 100, 100)
[/code]
Cum setam unui pixel o anumita culoare ? Simplu, folosind functia API, SetPixel. Cum functioneaza ea ? La fel ca cea de mai sus, spre exemplu: Call SetPixel(Picture1.hDC, 100, 100, color), unde color este culoarea care vrem sa ii fie atribuita pixelului de coordinate (100, 100) din imaginea Picture1.
2. Cum extragem R, G, B dintr-un ColorRef (dintr-o culoare) ? Urmatorul cod sursa face exact acest lucru, sa-l vedem si analizam (bineinteles, eu am exemplificat pana acum codurile, folosind un modul in care am adaugat functiile API. Un modul se adauga in felul urmator: Project -> Add Module -> New (Module) -> Open):
[code]
Dim color as Long
color = GetPixel(Picture1.hDC, 100, 100)
Dim R as Integer
Dim G as Integer
Dim B as Integer
R = color Mod 256
G= (color \ &H100) Mod 256
B = (color \ &H10000) Mod 256
[/code]
Asa extragem R, G, B dintr-o culoare. Acum sa creem o aplicatie care transforma o imagine (imagine color, bineineles), in una alb-negru (cand spun imaginea alb-negru ma refer la GrayScale, adica la orice nuanta de gri, culorile obtinute prin amestecul non-culorilor alb si negru). GrayScale se obtine atribuind lui R valoarea (R+G+B) \ 3, lui G valoarea (R+G+B) \ 3, iar lui B valoarea (R+G+B) \ 3. Deci, va trebuie sa avem pe Formular 3 butoane, un Common Dialog(care il introducem prin: Project -> Components -> Microsoft common Dialog Control 6.0 -> Ok [acesta ne va folosi pentru a incarca imaginea din calculator]), si un PictureBox, cu denumirea Picture1.De mentionat ca trebuie sa aveti adaugat un modul in care sa declarati functiile API: GetPixel si SetPixel. Imaginea urmatoare sper sa va clarifice lucrurile in minte despre GrayScale:
-> ![]()
Sa transcriem codul:
Codul pentru Load Image, pus pe butonul cu denumirea Command1:
[code]
Dim filelocation As String
CommonDialog1.Filter = “All images”
CommonDialog1.ShowOpen
filelocation = CommonDialog1.FileName
Picture1.Picture = LoadPicture(filelocation)
[/code]
Codul pentru butonul, care daca apasam pe el, se produce transformarea in alb-negru a imaginii incarcate anterior:
[code]
Dim a As Integer
Dim b As Integer
Dim color As Long
Dim colorR As Integer
Dim colorG As Integer
Dim colorB As Integer
Dim pixel As Integer
For a = 1 To 1000
For b = 1 To 1000 ‘aceste 2 Foruri parcurg imaginea
color = GetPixel(Picture1.hDC, a, b)
colorR = color Mod 256
colorG = (color \ &H100) Mod 256
colorB = (color \ &H10000) Mod 256
pixel = (colorR + colorG + colorB) \ 3
Call SetPixel(Picture1.hDC, a, b, RGB(pixel, pixel, pixel))
Next
Next
[/code]
Codul pentru butonul de iesire:
[code]
Unload Me
[/code]
Cam atat pentru acest tutorial ! Bafta, si nu uitati ! Mai treceti pe la http://vladii.wordpress.com deoarece in fiecare zi acest site va fi updatat cu noi tutoriale facute de mine ! Salut !
Bibliografie:
[code]
http://www.devx.com/vb2themax/Tip/18427
[/code]
Filed under: Uncategorized | Tagged: basic, grayscale, imagini, informatica, pixel, visual, vladii | No Comments »