luni, 31 mai 2010

Cum inserăm CSS în documentele HTML

O foaie de stil poate fi inserată în trei moduri:
• Foaie externă de stil
• Foaie internă de stil
• Stil inline

O foaie de stil externă este ideală atunci când stilul respectiv se aplică mai multor pagini. Cu o foaie CSS externă, puteţi modifica aspectul întregului site modificând un singur fişier. Fiecare pagină trebuie să se lege la foaia de stil folosind tagul <link> în interiorul secţiunii head:

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>



O foaie externă de stil poate fi scrisă în Notepad, nu trebuie să conţină taguri html şi trebuie salvată cu extensia .css. Un exemplu de foaie de stil externă, memorată în fişierul stil.css, este prezentată mai jos:
hr {color:sienna}
p {margin-left:20px}
body {background-image:url("roses.gif")}

Obs. Nu lăsaţi spaţii între valoarea proprietăţii şi unitatea de măsură! Dacă scrieţi "margin-left:20 px" (în loc de "margin-left:20px") va merge în IE, dar nu în  Firefox sau Opera.


O foaie internă de stil trebuie folosită când un singur document are un anumit stil. Foaia internă de stil se defineşte în secţiunea head a paginii HTML folosind tagul <style>, ca în exemplul următor:

<head>
<style type="text/css">
hr {color:sienna}
p {margin-left:20px}
body {background-image:url("roses.gif")}
</style>
</head>

Un stil inline pierde multe din avantajele foilor de stiluri amestecând conţinutul cu prezentarea. Utilizaţi această metodă cât mai rar. Pentru a utiliza un stil inline, folosiţi atributul style în tagul respectiv. Atributul style poate conţine orice proprietăţi CSS. Exemplul următor ilustrează cum se poate schimba culoarea şi marginea stângă a unui paragraf:
<p style="color:sienna;margin-left:20px">Acesta este 
un paragraf.</p>


Ce stil va fi utilizat când într-un document HTML sunt specificate mai multe foi de stil pentru un element HTML?
La modul general, putem spune că stilurile se vor mixa într-o foaie de stil virtuală după următoarele reguli, unde prioritatea creşte odată cu numărul de ordine:
  1. Foi de stil externe (din fişiere CSS)
  2. Foi de stiluri interne (din secţiunea head
  3. Setările implicite ale browserului)
  4. Stiluri inline (din tagul elementului HTML)
Deci, stilul inline al unui element suprascrie stilul definit în <head>, într-un fişier extern sau în browser.

Obs: Dacă legătura către o foaie externă de stil este amplasată în secţiunea <head> după foaia internă de stiluri, atunci fişierul extern va suprascrie stilul intern!
 

Sintaxa CSS


  • CSS înseamnă Cascading Style Sheets (foi de stil în cascadă)
  • Stilurile definesc cum vor fi afişate elementele HTML
  • Stilurile au fost adăugate în HTML 4.0 pentru a rezolva o problemă
  • Foile de stiluri externe pot salva multă muncă
  • Foile de stiluri externe sunt memorate în fişiere CSS
 
În HTML 4.0, toate formatările pot fi înlăturate din documentul HTML şi stocate într-un fişier CSS separat. Toate browserele suportă CSS. În acest fel puteţi schimba uşor aspectul tuturor paginilor web dintr-un site modificând un singur fişier.


O construcţie CSS are două părţi: un selector, şi una sau mai multe declaraţii:


Selectorul este uzual elementul HTML pe care doriţi să-l formataţi.
Fiecare declaraţie este formată dintr-o proprietate şi o valoare.
Proprietatea este atributul de stil pe care doriţi să-l modificaţi. Fiecare proprietate are o valoare.
Declaraţiile CSS se încheie întotdeauna cu ; şi grupurile de declaraţii sunt scrise între acolade. 


Exemplu:
p {color:red;text-align:center}


Pentru a face declaraţiile CSS mai uşor de citit, puteţi scrie fiecare declaraţie pe câte o linie ca în exemplul următor:

p
{
color:red;
text-align:center;
}


Documentul HTML care conţine declaraţiile CSS de mai sus va arăta astfel:


<html>
<head>
<style type="text/css">
p
{
color:red;
text-align:center;
}
</style>
</head>

<body>
<p>Buna ziua!</p>
<p>Acest paragraf este stilizat cu CSS.</p>
</body>
</html>


Comentariile se folosesc pentru a explica codul şi pot fi utile când modificaţi codul sursă pe parcurs. Comentariile sunt ignorate de către browsere.
Un comentariu CSS începe cu "/*", şi se termină cu "*/", ca în exemplul următor:

/*Acesta este un comentariu si nu se va afisa*/
p
{
text-align:center;
/*Acesta este un alt comentariu*/
color:blue;
font-family:arial
}



Pe lângă setarea stilului unui element HTML, CSS vă permite să specificaţi doi selectori proprii numiţi id şi class.


Selectorul id este utilizat pentru a specifica stilul unui singur element . Selectorul id foloseşte atributul id al unui element HTML, şi este definit cu "#".

Exemplu: Stilul următor va fi aplicat elementului care are atributul  id="par1".


<html>
<head>
<style type="text/css">
#par1
{
text-align:center;
color:blue
</style>
</head>
<body>
<p id="par1">Buna ziua!</p>
<p>Acest paragraf nu este afectat de declaratia de stil.</p>
</body>
</html>

 


Obs. Nu începeţi numele id cu un număr deoarece nu va lucra în Mozilla/Firefox.


Selectorul class este utilizat pentru a specifica stilul unui grup de elemente. Astfel, puteţi seta un stil particular pentru toate elementele HTML care face parte din aceeaşi clasă. Selectorul class foloseşte atributul HTML class şi este definit cu  "."
În exemplul următor, toate elementele HTML cu atributul class="center" vor fi aliniate la centru:


<html>
<head>
<style type="text/css">
.center
{
text-align:center;
}
</style>
</head>
<body>
<h1 class="center">Acest titlu este aliniat la centru cu CSS</h1>
<p class="center">Acest paragraf este de asemenea aliniat la centru cu CSS.</p>
</body>
</html>


Puteţi de asemenea specifica ce elemente din clasă vor fi afectate de stil.
În exemplul următor, numai elementele p din clasa center vor fi aliniate la centru:

<html>
<head>
<style type="text/css">
p.center
{
text-align:center;
}
</style>
</head>
<body>
<h1 class="center">Acest titlu nu este afectat de stilul CSS</h1>
<p class="center">Acest paragraf este aliniat la centru cu CSS.</p>
</body>
</html>


Obs. Nu începeţi un nume de clasă cu un număr deoarece numai Internet Explorer acceptă acest lucru.

sâmbătă, 29 mai 2010

Reprezentant FM Group

Dacă vă plac parfumurile şi cosmeticele şi sunteţi intersaţi de produse pentru curăţenia casei de o calitate deosebită, probabil aceasta este cea mai potrivită afacere pentru dumneavoastră.
Firma internaţională Federico Mahora Group produce parfumuri folosind aceleaşi esenţe ca marile firme de piaţa mondială, esenţe achiziţionate de la producătorul german Drom. Diferenţa constă nu în calitate, ci în preţ care este foarte accesibil.
Dacă vă înscrieţi ca reprezentant, pe lângă faptul că beneficiaţi de produse de o calitate deosebită, aveţi comisione directe de 40-80%. Puteţi revinde aceste produse la preţ de catalog persoanelor din anturajul dumneavoastră, sau puteţi opta să vă dezvoltaţi propria reţea din veniturile căreia vă revin între 3-21%, sau puteţi desfăşura ambele activităţi simultan.
Indiferent ce alegeţi, vă asigur că veţi fi foarte mulţumit/mulţumită de produsele şi de politica firmei. Dacă doriţi să vizualizaţi catalogul de produse şi să aflaţi mai multe detalii despre această oportunitate de colaborare, accesaţi link-ul următor:

Singurătatea celor nemuritori

Am revăzut zilele trecute superbul film "The Green Mile" (Culoarul morţii), regizat în 1999 de Frank Darabont după o povestire de Stephen King şi având printre protagonişti pe Tom Hanks, David Morse şi Michael Clarke Duncan. 
Acum, ca şi atunci când l-am vizionat prima dată, am fost captivată de perfecţiunea şi profunzimea acestui film. 
Povestea este cutremurătoare în sine: un uriaş cu intelectul unui copil de 5 ani este condamnat la moarte şi adus în sectorul special al închisorii statale unde şef este Paul Edgecomb (Tom Hanks). 
Numai că acest negru uriaş (John Coffey, interpretat magistral de Michael Clarke Duncan) pare a fi un trimis divin, având în mâinile sale puterea de a vindeca bolile trupeşti şi a reda chiar viaţa unui şoricel strivit. Acţiunea se desfăşoară, în cea mai mare parte a timpului, în sectorul de închisoare denumit "Green Mile", provocând parcă o ruptură voită faţă de realitatea exterioară. Bunătatea şi inocenţa Lui John Coffey atrag imediat atenţia lui Paul, care este vindecat, împotriva voinţei sale de o urâtă infecţie urinară. Acest miracol clatină din temelii universul raţional bine ordonat al lui Paul şi îl determină să afle adevărul despre oribila crimă pentru care este condamnat John Coffey. 
În timp ce Paul încearcă să înţeleagă cine sau ce este John, în Green Mile apar două noi pesonaje, ambele la fel de rele şi fundamental viciate: un nou gardian, Percy Wetmore, condus de un sadism explicit şi "Wild Bill" Wharton, sociopat declarat şi adevăratul autor al crimelor pentru care este condamnat John Coffey. 
Mica comunitate din Green Mile are parte de propria confruntare "bine versus rău", numai că personajele pozitive nu sunt neapărat înafara gratiilor, iar cele negative în spatele lor. 
Prin puterea miraculoasă pe care o are, John Coffey reuşeşte să vindece soţia directorului de o tumoare fatală şi să restabilească ordinea firească a lucrurilor în propriul univers. "Wild Bill" este ucis de Percy care înnebuneşte şi devine prizonierul propriei întunecimi psihice.
Deşi Paul este dispus să-şi rişte cariera pentru a-l ajuta pe John să evedeze, acesta refuză. Memorabil schimb de replici între cei doi, Paul Edgecomb sfâşiat între dorinţa de a salva "minunea trimisă de Dumnezeu" şi necesitatea de a-şi îndeplini datoria, şi John Coffey îndurerat şi sfâşiat lăuntric de răutatea şi urâţenia lumii, dornic să-şi găsească pacea şi odihna binemeritată.
Previzibil, John moare pe scaunul electric, nu înainte de a-i dărui lui Paul un pic din magia lui pentru a putea să vadă cu proprii ochi adevărul privind crima pentru care era acuzat.
Un dar care se dovedeşte în timp a fi mai mult o pedeapsă. Timpul pare să încremenească pentru Paul şi pentru şoricelul readus la viaţă de John Coffey. Anii trec şi Paul trăieşte durerea de a-i pierde pe cei dragi şi a deveni un străin în propria-i lume.
Nemurirea, sau cel puţin îndepărtarea pe termen nedefinit a momentului morţii, reprezintă pedeapsa lui Paul pentru nesalvarea lui John Coffey. 
Un final apoteotic - viziunea  lui Paul şi a şoricelului rămaşi singuri într-un univers dezolant şi necunoscut. Final care mă obligă să mă gândesc la "Tous les hommes sont mortels" (Toţi oamenii sunt muritori) - cartea lui Simone de Beauvoir- Fosca şi şoricelul pierduţi în neantul timpului, îndepărtaţi din curgerea firească a acestuia şi din istorie, privind viitorul ca pe un trecut încheiat şi viaţa ca o moarte veşnică.
Nu ştiu dacă imaginea a fost împrumutată din această carte şi nici măcar nu contează. Efectul ei asupra spectatorului este, implacabil, un sentiment de profundă tristeţe şi alienare spirituală...

Pentru informaţii despre "The Gree Mile" puteţi accesa link-ul
   

marți, 25 mai 2010

Shutter Island

Ultimul film al lui Leonardo di Caprio reprezintă a patra colaborare cu regizorul Martin Scorsese, după "Gangs of New York"  (2002), "The Aviator" (2004) şi "The Departed" (2006).
Deşi am vizionat cu plăcere şi curiozitate majoritatea filmelor în care Leonardo di Caprio a fost protagonist, trebuie să mărturisesc că favoritele mele rămân "The Departed" şi "Gangs of New York".
Despre "Shutter Island" cred că că cel mai bun comentariu pe care în pot oferi este...interesant.
Interesantă povestea, foarte bun jocul lui Leonardo, final imprevizibil şi totuşi lipseşte ceva...
Prea mare asemănarea cu filmele lui Hitchcock, mai bine zis cu atmosfera acestora, minus tensiunea accumulată cadru cu cadru şi care dă fiori pe şira spinării.
Un întreg scenariu conceput de o minte alienată pentru a ascunde propria vinovăţie, propriile remuşcări. O întreagă galerie de personaje care participă la acest joc absurd a cărui finalitate este destul de înceţoşată.
Povestea pare a nu se închide, mesajul este destul de ambiguu şi personajul se auto-condamnă la o recluziune sine die în sanatoriu din cauza remuşcărilor sau pur şi simplu din imposibilitatea acceptării crimei oribile comise de soţie (sau de el însuşi  împotriva ei?!).
Ca de obicei, jocul lui Leonardo di Caprio este profund şi nuanţat, deşi eu prefer amestecul de duritate, frustrare şi vulnerabilitate etalat în "The Departed" (Billy Costigan).
Pentru cei care nu au vizionat aceste filme, le recomand cu căldură. Nu veţi fi dezamăgiţi.
Întreaga filmografie a actorului o găsiţi la http://www.imdb.com/name/nm0000138/ .
Vizinare plăcută!





luni, 24 mai 2010

Prelucrări elementare ale vectorilor în C++ - IV


Algoritmul de căutare binară. Se consideră un vector oarecare A cu n elemente şi o valoare x. Se cere să se verifice dacă x apare printre elementele vectorului sau nu. Dacă lucrăm cu un vector oarecare, se vor compara pe rând elementele acestuia cu valoarea căutată x. Sunt necesare cel mult n comparaţii în caz de succes (x apare în vector) şi exact n comparaţii în caz de eşec (x nu apare în vector). În cazul în care vectorul este ordonat crescător sau descrescător se poate folosi un algoritm de căutare mult mai eficient având complexitatea log2n. Acest algoritm se numeşte “algoritmul de căutare binară” şi poate fi descris astfel : iniţial se consideră tot vectorul A şi se compară x cu elementul din mijlocul acestuia (fie el a[mij]). Dacă x=a[mij], algoritmul se încheie cu succes; dacă x, vectorul fiind ordonat, căutarea va continua în prima jumătate, iar dacă x>a[mij] căutarea va continua în a doua jumătate. Procedeul se repetă până când fie găsim valoarea x, fie nu mai avem secvenţă validă de căutare, adică elemente neverificate. Secvenţa curentă în care se face căutarea elementului x este identificată prin indicele elementului din extrema stângă, respectiv indicele elementului din extrema dreaptă. Secvenţa de program este următoarea :
f=-1;   /* x nu a fost găsit în vectorul A */
st=0; dr=n-1;    /* secvenţa iniţială de căutare este întregul vector A */
while(st<=dr)     
 /* secvenţa curentă de căutare conţine cel puţin un element */
{      mij=(st+dr)/2;   
       /* indicele elementului din mijlocul secvenţei de căutare */
   if(a[mij]==x)
   {  f=mij;     /* memorăm poziţia în care apare */
             break;     /* căutare încheiată cu succes */
   }
   if(x<a[mij])
      dr=mij-1;    /* căutarea continuă în prima jumătate */
   else
      st=mij+1;    /* căutarea continuă în a doua jumătate */
}    

Interclasarea vectorilor. Se consideră doi vectori, A cu m elemente şi B cu n elemente, ambii ordonaţi crescător sau descrescător. A interclasa  cei doi vectori înseamnă a obţine un vector C cu m+n elemente, care conţine toate elementele din A şi din B, ordonate în acelaşi mod. Metoda de creare a vectorului rezultat C este foarte simplă: se compară elementul curent din A cu elementul curent din B, în C se introduce spre exemplu cel mai mic dintre ele (la ordonare crescătoare). Dacă elementul introdus a fost din vectorul A atunci se avansează la următorul element din A, altfel se avansează la următorul element din vectorul B. În momentul în care elementele unui vector sunt epuizate, elementele rămase în celălalt vector  sunt copiate direct în vectorul C. Acest algoritm se simplifică dacă folosim două “santinele” care vor face ca cei doi vectori să se epuizeze simultan. O santinelă este un element care nu influenţează valoarea unui rezultat, scopul utilizării lui fiind numai obţinerea unui algoritm mai simplu şi mai eficient. În cazul algoritmului de interclasare, vom adăuga la sfârşitul vectorului A o santinelă mai mare decât cel mai mare element din B, iar la sfârşitul vectorului B o santinelă mai mare decât cel mai mare element din A. În acest caz, dacă presupunem că toate elementele utile din vectorul A au fost deja introduse în vectorul rezultat C, atunci, toate elementele utile din B care nu au fost încă verificate sunt mai mici decât santinela rămasă în A şi vor fi copiate automat, fără nici-o verificare suplimentară, în vectorul rezultat C.  Secvenţa care realizează interclasarea cu santinele este:
a[m]=b[n]+1; 
 /* santinela din A mai mare decât cel mai mare element din B */
b[n]=a[m]+1;  
/* santinela din B mai mare decât cel mai mare element din A */
i=0;                        /* indicele elementului curent din A */
j=0;                        /* indicele elementului curent din B */
for(k=0; k<m+n; k++)    /* k este indicele elementului curent din C */
   if(a[i]<b[j])   /* pentru ordonare crescătoare */
        c[k]=a[i++];            /* avansez în vectorul A */
   else
    c[k]=b[j++];           /* avansez în vectorul B */ 
     

Prelucrări elementare ale vectorilor în C++ - III


Permutarea circulară cu o poziţie spre stânga. Prin acestă operaţie, elementele din poziţiile 2,3,……..,n se deplasează cu o poziţie spre stânga şi elementul din prima poziţie ajunge în poziţia n. Vectorul nu îşi modifică dimensiunea:
aux=a[0];        /*salvăm temporar primul element */
for(j=0;j<n-1;j++) a[j]=a[j+1];       /* deplasăm elementele spre stânga */ 
a[n-1]=aux; /* mutăm elementul în ultima poziţie */

Permutarea circulară cu o poziţie spre dreapta. Prin această operaţie, elementele din poziţiile 1,2,……,n-1 se deplasează cu o poziţie spre dreapta, iar elementul din poziţia n ajunge în poziţia 1. Vectorul nu îşi modifică dimensiunea:
aux=a[n-1];         /* salvăm temporar ultimul element */
for(j=n-1;j>=1;j--) a[j]=a[j-1];      /*deplasăm elementele spre dreapta */
a[0]=aux;              /* mutăm elementul în prima poziţie */

Sortarea vectorilor. Prin sortare se înţelege aranjarea elementelor unui vector în ordine crescătoare sau descrescătoare. Pentru rezolvarea acestei probleme au fost concepuţi diverşi algoritmi, mai mult sau mai puţin rapizi, mai simpli sau extrem de complicaţi. În acest moment vom aborda două dintre cele mai simple metode de sortare de complexitate n2 .

A)      Metoda bulelor (bubblesort)
Conform acestei metode, vectorul este parcurs de la stânga spre dreapta comparându-se perechi de elemente succesive (a[j] cu a[j+1]). Dacă cele două elemente nu sunt în ordinea cerută, se interschimbă şi, o variabilă iniţial egală cu 0, se incrementează. În acest fel, la prima parcurgere a vectorului, elementul maxim din şir (dacă se face ordonare crescătoare) se deplasează spre dreapta până când ajunge în ultima poziţie. La a doua parcurgere a vectorului , al doilea cel mai mare element ajunge în penultima poziţie etc. Parcurgerea vectorului se reia până când nu mai găsim nici-o pereche de elemente consecutive neordonate. La fiecare parcurgere, lungimea secvenţei care se verifică scade cu o unitate:
k=n-1;  /* iniţial verificăm tot vectorul */
do{
         f=0;   /* numără perechile neordonate */
         for(j=0;j<k; j++)
           if(a[j]>a[j+1])    /* pentru ordonare crescătoare */
           {   aux=a[j]; a[j]=a[j+1];
               a[j+1]=aux;    /* interschimbăm elementele */
               f++;           /* numărăm in f  */
           }
          k--;    /* lungimea secvenţei care se verifică scade */
}while(f);  /* repetă cât timp mai sunt perechi neordonate */


B)Sortarea prin selecţie directă
Conform acestei metode primul element (a[0]) se compară pe rând cu toate elementele de după el şi dacă ordinea de sortare nu este respectată, cele două elemente se interschimbă. După efectuarea tuturor comparaţiilor, în prima poziţie ajunge cel mai mic element din vector (în cazul ordonării crescătoare). Se compară apoi al doilea element cu toate elementele de după el etc. La ultimul pas se compară numai ultimele două elemente. Secvenţa corespunzătoare de program este :
for(i=0; i<n-1; i++)    /* elementul care se compară */
  for(j=i+1;j<n; j++)    /* elem. de după el cu care se compară */
     if(a[i]>a[j])      /* pentru ordonare crescătoare */
     {  aux=a[i]; a[i]=a[j];
        a[j]=aux;       /* interschimbăm elementele */
     }

Se încarcă...