Țara lui Papuc Forța argumentelor învinge argumentul forței

10Feb/121

SOPA, PIPA, ACTA, WTF?

acta

SOPA = Stop Online Piracy Act

PIPA = Protect IP Act

ACTA = Anti-Counterfeiting Trade Agreement

Primele două acronime se referă la proiecte de legi depuse în Camera Reprezentaților, respectiv Senatul SUA. Ultimul, la un tratat comercial internațional. Toate au în comun un lucru: intenția declarată de a asigura respectarea drepturilor de autor.

Despre ACTA s-a scris mult și în România, am adăugat în articolul anterior un film de prezentare realizat de creatorii serialului Robotzi, precum și  legături către articole pe subiect. Interesant este că acel film a dispărut de pe youtube la câteva ore de la publicare:

UPDATE: CREATIVE MONKEYZ: “Din pacate, video-ul de pe YouTube, prin mijloace care ne depasesc, a fost inlaturat (si mai interesant e ca aparea ca si cum noi insine am fi facut plangerea impotriva propriului material, ceea ce e mai mult decat aberant). Ne pare rau de toti cei care au embeduit video-ul pentru a da mai departe mesajul, dar ii asiguram ca facem tot posibilul sa re-apara video-ul pe YouTube (speram ca nu va trece mai mult de o zi si va fi inapoi ‘on’).”

Din fericire, la câteva zeci de minute după scoaterea de pe youtube, videoclipul a fost repostat din mai multe conturi, așa că a putut fi vizionat de către toți cei interesați. Între timp, a fost rezolvată și situația filmului postat inițial.

Despre SOPA și PIPA poate nu ați auzit la fel de mult, dar dacă ați încercat să vizitați acest site pe 18 ianuarie l-ați găsit offline, în cadrul unui protest global, care a adunat mai mult de 115 mii de site-uri. Dintre acestea ies în evidență Wikipedia în engleză și Reddit, care au închis site-urile lor pentru 12 ore. Totodată, zeci de milioane de internauți au participat la protest în diverse feluri, de la trimiterea de mesaje către reprezentanții din Congres și până la ieșirea în stradă la protest. Rezultatul: discutarea SOPA și PIPA a fost amânată pe termen nedefinit.

Ceea ce s-a întâmplat cu SOPA și PIPA se poate și trebuie să se întâmple și cu ACTA. Utilizatorii de Internet de peste ocean au demonstrat că rețeaua mondială nu este nici a guvernelor, nici a organizațiilor producătorilor de muzică și filme, nici a grupurilor puternice de lobby care le leagă pe cele două. A sosit acum vremea ca europenii să demonstreze, la rândul lor, că soarta Internetului nu trebuie lăsată pe mâna celor care sunt interesați numai de maximizarea profiturilor în detrimentul libertăților personale.

Pentru aceasta avem multe mijloace la dispoziție:

- Semnați petiția împotriva ACTA - peste 2 milioane de persoane au făcut asta deja, în cât timp vom ajunge la 3 milioane?

- Alăturați-vă protestelor anti-ACTA - aproape 100.ooo de participanți au anunțat că participă la proteste peste tot în Europa pe 11 februarie

- Scrieți-le europarlamentarilor care ne reprezintă - aveți aici o listă cu adrese de contact, iar pe site-ul Parlamentului European pot fi găsiți toți cei 33 de reprezentanți ai României, cu datele de contact.

- Dați mai departe - trimiteți pe mail, messenger, facebook, twitter, google+ sau orice alte rețele informații despre ce înseamnă ACTA pentru noi toți.

 

5Feb/122

Robotzi vs. ACTA

Cine nu a auzit de serialul de pe net „Robotzi”? Dar despre tratatul ACTA ați auzit? Dacă da, poate vă întrebați care este legătura dintre ele. Priviți filmul de mai jos și veți vedea.

Later edit: între timp filmul a dispărut și de pe site-ul autorilor, creativemonkeyz.ro... ciudat, voi reveni cu informații de îndată ce aflu mai multe.

Și mai later edit: între timp a reapărut filmul pe youtube,  dar pe altă adresă. Tot nu am aflat ce s-a întâmplat.

P.S.: Mai multe articole legate de ACTA:

- Articole din Think Outside the Box despre ACTA - căutare pe totb.ro după cuvântul cheie ACTA - acolo veți găsi mai multe articole publicate în ultima vreme, dintre care trec eu câteva mai jos;

- Ambasadorul Sloveniei în Japonia își cere scuze pentru că a semnat ACTA - ambasadorul își cere scuze pentru că și-a îndeplinit îndatorirea de serviciu, semnând tratatul în numele guvernului său, în loc să se informeze și să-și urmeze principiile;

- Ratificarea ACTA în Parlamentul României - care este procedura de ratificare a acordului de către România - chiar dacă este semnat, nu devine lege decât dacă este ratificat;

- Top 5 probleme ale ACTA;

- Magna ACTA NonLibertatum - scurt istoric al acestui tratat;

- Raportorul UE pentru ACTA demisionează, dezgustat de presiunile corporațiilor pentru adoptarea acestui tratat.

Voi reveni cât mai curând cu alte detalii și informații.

24Dec/112

Cum să… calculezi noua taxă auto în Javascript

Problema: să se calculeze noua taxă auto întro pagină web.

Având în vedere cu ce am lucrat până acum, precum și soluția folosită pentru site-ul acesta, pentru rezolvarea problemei aveam două posibile căi de urmat:

1. PHP

+ limbajul rulează pe server, indiferent ce client accesează pagina, rezultatul va fi același;

- este mai dificil să se adauge o pagină php în WordPress;

2. Javascript

+ este ușor să se insereze în orice pagină web, inclusiv întrun articol WordPress;

- rularea scriptului se realizează pe partea de client; dacă acesta nu suportă JavaScript, de exemplu, nu va obține nimic.

De regulă, pentru facilități importante ale unui site, aleg limbajul PHP, mai ales deoarece nu vreau să mă bazez pe client. De această dată, însă, am ales JavaScript pentru ușurința în implementare.

Acestea fiind zise, să trecem la treabă. Mai întâi, trebuie să aflăm cum se calculează noua taxă auto. Așa că, apelând la prietenul nostru de toate zilele, Google, ajungem la Proiectul de lege pentru taxa auto (a se vedea că acesta este numai proiectul de lege, de fapt ar trebui să găsim varianta finală). După parcurgerea textului de lege ajungem la partea interesantă pentru noi: formulele și tabelele pentru calculul taxei. Toate aceste date sunt adunate întrun fișier .xls pentru a putea fi prelucrate mai ușor în continuare. Fișierul astfel rezultat poate fi consultat aici.

În continuare, având în vedere datele solicitate de formula de calcul și datele din tabelele anexate, realizăm un formular în care utilizatorul va alege sau introduce datele necesare. Toate câmpurile din cadrul formularului vor primi o valoare diferită în cadrul atributului id, acesta urmând să fie folosit ulterior în cadrul scriptului JavaScript. La final, în cadrul formularului se adaugă un buton, Calculează, care va apela funcția de calcul din script.

Iar acum am ajuns chiar la miezul problemei: scriptul propriu-zis. Din acesta, ne interesează în primul rând funcția calcul, cea care preia și prelucrează datele din formular.

Așadar, să o luăm pe pași:

1. Preluarea datelor:

var Aval=document.getElementById("id").value;

În această expresie, id este acea valoare din cadrul atributului id al fiecărui câmp din formular în parte.

2. Încărcarea valorilor din tabele în variabile array:

Mai întâi declarăm variabila array, cu o dimensiune sau două:

//Nivelul taxei specifice sau tipul autovehiculului din categoria M1 
// - euro / 1 cmc - variabila D din formula
var limite_cilindree=new Array(6); //limitele pentru incadrarea cilindreei
// in categorii - array cu o dimensiune
limite_cilindree[0]=0;
... 
D = new Array (6); // - array cu doua dimensiuni
for (i = 0; i < D.length; ++ i)
D[i] = new Array (limite_cilindree.length);
D[5][0]=0.065;
...

Poate v-ați întrebat mai înainte care este rolul fișierului .xls. În exemplul de mai sus este definit numai unul dintre cele 35 de elemente ale tabloului (array cu două dimensiuni) D. Definirea celorlalte 34 de elemente manual este consumatoare de timp și poate genera erori. De aceea, odată ce avem deja datele în fișierul .xls, folosim o formulă pentru a genera declararea fiecărui element:

="D["&(RIGHT(OFFSET(A4;F4*(-1);0);1)&"]["&F4&"]="&E4&";")

Multiplicăm formula pentru toate cele 34 de valori rămase, apoi rezultatul îl copiem în fișierul .html. Similar procedăm pentru a trece celelalte valori tabelare în variabile JavaScript.

După ce am preluat toate datele din tabelele pentru calculul taxei trecem la implementarea formulelor de calcul. Mai întâi este necesar să determinăm categoria în care se încadrează autovehiculul din punctul de vedere al cilindreei:

//determin incadrarea in limitele de cilindree
i = 0;
do 
{
 k_D = i;
 i++;
}
while ( i < limite_cilindree.length && limite_cilindree[i]<Cval )
Dval = D[NormaEuroVal][k_D];

Astfel am identificat variabila D din formula de calcul a taxei (taxa specifică pe cilindree, prevăzută în coloana 3 din anexa nr. 2). La fel se procedează și pentru a determina valoarea variabilei B (taxa specifică, exprimată în euro/1 gram CO2, prevăzută în coloana 3 din anexa nr. 1). Cu variabilele A, C și E preluate direct din formular, putem calcula rezultatul formulei:

Suma de plată = [(A x B x 30%) + (C x D x 70%)] x (100 - E)%

În funcție de norma de poluare a mașinii, formula de calcul se poate simplifica. Alegerea formulei finale în fiecare caz se face prin folosirea repetată a construcției if.

Înainte de final, dorim să aducem niște mici îmbunătățiri scriptului. Mai întâi, în unele cazuri (norma de poluare a mașinii sub Euro3) formula de calcul nu include nivelul emisiilor CO2. De aceea, dorim ca atunci când se selectează o anumită valoare în câmpul calcul_euro, să dezactivăm câmpul calcul_co2. Mai întâi, la câmpul calcul_euro se folosesc evenimentele OnChange și OnKeyDown, care apelează funcția refresh_a(). La rândul său, această funcție modifică atributul disabled al câmpului în care se introduce nivelul emisiilor CO2.

Totodată, am dori ca valoarea finală a taxei, calculată în lei și euro, să fie formatată în conformitate cu modul de afișare obișnuit din limba română: cu . pe post de separator al miilor și , separator al zecimalelor. Pentru aceasta am apelat din nou la prietenul Google și am găsit o funcție care îndeplinește exact acest deziderat. Rezultatul final îl afișăm întrun câmp span deja definit la finalul formularului:

document.getElementById("calcul_val_euro").innerHTML = valoarea_formatata;

Intenționat sau nu, nu am intrat chiar în toate detaliile scriptului. De asemenea, nu am făcut o tratare riguroasă a datelor introduse - acesta este un punct care ar putea cu siguranță să fie îmbunătățit, pe viitor. Dar, până atunci, puteți descărca fișierul .html care conține formularul și scriptul de aici.

Update 27.12.2011

La cerere, adaug aici o arhivă care conține toate detaliile privind implementarea acestui script, și anume:

  • Articolul de față reprodus întrun document Word
  • Fișierul Excel amintit mai sus
  • Fișierul HTML cu formularul și scriptul


Iar rezultatul final îl prezentăm în continuare - vă invităm să îl și testați:

Tipul autovehiculului:

Norma euro:

Capacitatea cilindrică (cmc):

Valoarea emisiilor de CO2
(grame/km):

Vechimea autovehiculului:

 

Valoarea finală a taxei este =
_______ EURO,
_______ LEI.
12Dec/112

12 decembrie 1896: prima transmisie radio a lui Marconi

La 12 decembrie 1986, inventatorul Guglielmo Marconi uimește asistența adunată la o demonstrare a transmisiei radio dintro parte în alta a camerei. Peste exact cinci ani de la acea dată, Marconi transmite primul semnal radio peste ocean. Mai multe despre demonstrații, dar și despre activitatea inventatorului puteți găsi în acest articol (în engleză).

11Dec/111

Legături către părinții unei pagini în WordPress

Navigând întrun site bazat pe WordPress la care lucrez, am ajuns la un moment dat să construiesc subpagini în subpagini. Deși tema folosită îmi oferă posibilitatea de a construi un meniu suficient de complex încât să cuprindă și asemenea legături, am căutat un mod mai intuitiv de a face navigarea între pagini, dar mai ales între subpagini și paginile părinte ale acestora.

Am decis să pun în stânga titlului subpaginii legături către paginile părinte ale acesteia. Dar cum s-ar putea obține acest lucru?

Am căutat un pic pe Google și am găsit o serie de plugin-uri pentru WordPress, însă toate erau destul de complexe și nu rezolvau problema mea. Am mai găsit și o rezolvare parțială a problemei: cum se poate afișa părintele unei pagini. Dar soluția se referă numai la pagina imediat superioară, nu la toți părintii. Așa că, în cele din urmă, am pus mâna și mi-am făcut singur codul necesar:

<!--BEGIN parents string-->
<?php $post_loop = get_post($post);
$parents_string = "";
while($post_loop->post_parent) {
     $post_loop = get_post($post_loop->post_parent);
     $parent_title = get_the_title($post_loop);
     $parents_string = "<a href=\"" . get_permalink($post_loop) . "\">
     " . $parent_title . "</a> / " . $parents_string;
} 
echo $parents_string; ?>
<!--END parents string-->

În cazul meu, am inserat acest cod în șabloanele specifice temei, în interiorul tagului <h1>, înainte de titlul afișat în pagină.