Noutăți IPv4

Până mai ieri vă spuneam că Clasa E din spațiul de adrese IPv4 a fost rezervată pentru scopuri speciale și experimentale, despre care nimeni nu știe exact cum și dacă au fost folosite vreodată. Iată că o nouă mișcare de „eliberare” a circa 250.000.000 de adrese blocate este pe cale să reușească.

Dacă veți citi articolul de mai jos veți observa o notație a spațiului de adrese în discuție, pe care nu am folosit-o. Vă invit să descoperiți semnificația ei!

https://www.theregister.com/2024/02/09/240_4_ipv4_block_activism/

Problemă instalare Node.js Windows 10

Se întâmplă uneori ca la incercarea de instalare a Node.js din installer-ul msi, pe Windows 10, sa apară o eroare cu privire la un fisier .dll lipsă.

Soluția este să modificați permisiunile pe directorul „C:\Users\Doru\AppData\Local\Temp” dând drepturi de acces scriere/citire pentru Everyone.
Dați click dreapta pe directorul Temp, selectați Properties și mergeți în fila Security. Selectați user-ul Everyone și apoi apăsați butonul Edit. Selectați Full control și apăsați OK. Reluați instalarea. La final revocați permisiunile pentru utilizatorul Everyone.

Windows.old

După unele actualizări mai importante, Windows 10 crează pe discul sistem un director cu numele Windows.old de dimensiune considerabilă, de câțiva GB sau chiar zeci de GB, care poate fi stânjenitor dacă partiția sistemului de operare este mică sau folosiți un SSD de capacitate mică. Ștergerea lui e anevoioasă deoarece trebuie să preluați privilegiile pe director de la sistem la utilizatorul cu care v-ați logat și abia după aceea aveți drepturi de ștergere.
Operația poate lua mai bine de o jumătate de oră deoarece unele subdirectoare nu se supun opțiunii de recursivitate atunci când preluați privilegiile și sunteți obligați să repetați operația de câteva ori.
Vestea bună, după cei de la Microsoft, este că directorul este șters automat după 10 zile de la creare, ceea ce vă va reda libertatea de mișcare în cazul în care spațiul rămas devenise insuficient.

Soluția, destul de populară pe Internet, cu Disc Cleanup, nu funționează!

O problemă de paginare

Când rezultatul unei interogări este excesiv de lung, afișarea lui depășind în lungime două înălțimi de ecran, se impune gruparea rezultatului în pagini a căror lungime să fie rezonabilă (două înălțimi de ecran, de exemplu). În continuare prezint o soluție care folosește declarațiile LIMIT și OFFSET în interogările SQL de selecție, cu exemplificare în PHP și MySQL.
Sintaxa este:
SELECT expressions FROM tables [WHERE conditions] [ORDER BY expression [ ASC | DESC ]] LIMIT number_rows [ OFFSET offset_value ];
în care LIMIT specifică numărul de rânduri extrase din interogare și OFFSET numărul rândului începând cu care se extrag următoarele LIMIT rânduri. Spre exemplu SELECT * from tabela LIMIT 5 OFFSET 10 selectează 5 rânduri după primele 10 (rândurile 11-15).
Pentru a folosi interogarea, concret, trebuie să știm care este numărul rezultatelor întoarse de interogarea fără declarațiile LIMIT și OFFSET precum și numărul rezultatelor de afișat pe o pagină.
Fie N numărul total de rânduri al interogării și n numărul de rânduri de afișat pe o pagină. Atunci, numărul de pagini P care vor cuprinde toate cele N rezultate este:
P=N/n dacă N modulo n este 0 și
P=INT(N/n)+1 dacă N modulo n este diferit de 0
Pe N îl aflăm cu o interogare de genul:
SELECT count(*) FROM tabela WHERE condiție.
Nota: pentru simplificare am renunțat la alte clauze în declarația SELECT.
Numărul de pagini îl stabilim:

if($N%$n==0)
$p=$N/$n; //numarul de pagini de afisat
else
$p=intval($N/$n)+1;

După acesta trebuie să inserăm o listă a paginilor, cu link către acestea. În mod concret, lista paginilor se inserează în pagina curentă, care afișează un prim set de rezultate, având valorile parametrilor LIMIT și OFFSET prestabilite, de exemplu 10 și respectiv 0. Dacă fișierul care extrage rezultatele se numește afisare.php, link-urile celorlalte pagini vor fi dirijate tot către el, dar cu parametri în URL, de exemplu: afișare.php?rpp=10&offset=20.
De aceea, scriptul afiseaza.php trebuie să preia valorile parametrilor din URL și, în cazul în care aceștia nu sunt setați, se stabilesc niște valor implicite:
if(!isset($_GET['rpp']) $n=10;
else $n=$_GET['rpp']; //rezultate pe pagina
if(!isset($_GET['offset'])) $offset=0;
else $offset=$_GET['offset'];

Mai departe, generarea link-urilor pentru pagini se face ușor, modificând doar valoarea offsetului, de la o pagină la alta:

$i=1; // $i -> pagina curenta
while ($i<=$p) { //afisam link-urile paginilor
	$url="selectie.php?rpp=".$n."&offset=".($i-1)*($n);
	echo '<a href="$url">'.$i .'</a> ';
	$i++;
}

Un exemplu poate fi văzut aici, unde prin schimbarea parametrilor din URL puteți schimba paginarea.
Se poate să dați utilizatorului posibilitatea de a alege singur câte rezultate să afișeze pe o pagină. Acesta este un exemplu de cum se poate realiza acest lucru, folosind rezultatul anterior. El este inclus în alt fișier, selecție.php, care conține o casetă de selecție care, la schimbarea stării, trimite o cerere AJAX la afișare.php, cu parametrul rpp citit din pagina selectie.php.

Programarea task-urilor Linux

Pentru că mulți dintre studenți au nevoie, în lucrarea de licență, să automatizeze niște procese prin rularea autonomă, la intervale regulate a unor scripturi PHP, m-am hotărât să descriu pe scurt serviciul cron al SO Linux.
Serviciul cron execută un program la intervale de timp specificate în tabela crontab. Dacă nu ați utilizat niciodată serviciul, tabela nu există, trebuie creată cu comanda: crontab -e. Evident că faceți asta din consolă sau remote, cu PuTTY. Fiecare utilizator are propria tabela crontab.
Tabela se va deschide cu editorul implicit al Linux (vi sau pico/nano), tabelă care este goală dacă nu ați mai utilizat serviciul până atunci. Pentru fiecare script pe care doriți să îl rulați scrieți câte o linie de forma:
* * * * * /home/user/public_html/cale/script.php
unde tot ceea ce urmează după ultimul asterisc reprezintă calea absolută către scriptul care trebuie executat.
Semnificația asteriscurilor, de la stânga la dreapta, este:

  • minutul (de la 0 la 59)
  • ora (de la 0 la 23)
  • ziua lunii (de la 1 la 31)
  • luna (de la 1 la 12)
  • ziua săptămânii (de la 0 la 6) (0=duminică)

Dacă lăsați asterisc pe o poziție, asta înseamnă orice valoare pentru semnificația poziției (vezi exemplele de mai jos). După ce ați terminat editarea, închideți editorul cu comenzile specifice (Ctrl + X urmat de Y pentru pico/nano, :wq pentur vi)

Exemple

0 1 * * 5 /home/user/public_html/cale/script.php
Execută scriptul la ora 1 a fiecărei zile de vineri
0 1 * * 0,6 /home/user/public_html/cale/script.php
Execută scriptul la ora 1 a fiecărei zile de sâmbătă și duminică
10 * 1 * * /home/user/public_html/cale/script.php
Execută scriptul la minutul 10 al fiecărei ore din prima zi a lunii
0,10,20,30,40,50 * * * * /home/user/public_html/cale/script.php sau
*/10 * * * * /home/user/public_html/cale/script.php
Execută scriptul din 10 în 10 minute.

Comentați liniile care nu trebuie executate cu semnul #.
Pentru a vizualiza tabela crontab, scrieți comanda crontab -l.

# 10 * 1 * * /home/user/public_html/cale/script.php
Dacă scriptul trebuie rulat cu niște parametri proveniți din variabilele de mediu ale serverului, atunci adresarea scriptului trebuie făcută prin URL-ul acestuia, cu parametri transmiși prin metode GET. Adresarea prin URL se face utilizând un program utilitar curl  sau Wget. Dar despre asta,în altă postare.