Social

Face recognition/unlock: Android phones

Face Unlock is a easy way to unlock your Android phone. Once you’ve set up facial recognition on your smartphone, you can simply look at it to unlock the device. Face Unlock uses images of your face to create face models that are used to identify you and unlock the phone.

It’s important to say that Face Unlock is not the most secure method of authentication. Pattern, password or fingerprint authentication (depending on the device) are more safe and secure than Face Unlock. Having said that, it’s far better than not having any kind of screen lock on your smartphone. So if you need convenience and ease of use, Face Unlock is your friend.

[mai mult...]

Ce este JSON și cum îl folosiți?

JSON (JavaScript Object Notation) este un format standardizat pentru reprezentarea datelor structurate. Deși JSON a apărut din limbajul de programare JavaScript, acum este o metodă omniprezentă de schimb de date între sisteme. Majoritatea API-urilor moderne acceptă solicitări JSON și emit răspunsuri JSON, așa că este util să aveți o cunoaștere bună a formatului și a caracteristicilor acestuia.

Un exemplu de bază JSON

{
    "id": 1001,
    "title": "What is JSON?",
    "author": {
        "id": 1,
        "name": "James Walker"
    },
    "tags": ["api", "json", "programming"],
    "published": false,
    "publishedTimestamp": null
}

Acest exemplu demonstrează toate tipurile de date JSON. De asemenea, ilustrează concizia datelor în format JSON, una dintre caracteristicile care le-au făcut atât de atrăgătoare pentru utilizare în API-uri. În plus, JSON este relativ ușor de citit așa cum este, spre deosebire de formatele mai detaliate, cum ar fi XML.

Tipuri de date JSON
Șase tipuri de date pot fi reprezentate nativ în JSON:

Șiruri – Șirurile sunt scrise între ghilimele duble; caracterele pot fi eliminate folosind barele oblice inverse.
Numere – Numerele sunt scrise ca cifre fără ghilimele. Puteți include o componentă fracțională pentru a desemna un float. Majoritatea implementărilor de analiză JSON presupun un număr întreg atunci când nu este prezentă nicio virgulă zecimală.
Booleeni – Sunt acceptate valorile literale true și false.
Null – Valoarea literală nulă poate fi utilizată pentru a semnifica o valoare goală sau omisă.
Matrice – O matrice este o listă simplă notată prin paranteze drepte. Fiecare element din listă este separat prin virgulă. Matricele pot conține orice număr de articole și pot folosi toate tipurile de date acceptate.
Obiecte – Obiectele sunt create prin paranteze. Sunt o colecție de perechi cheie-valoare în care cheile sunt șiruri, înfășurate între ghilimele duble. Fiecare cheie are o valoare care poate prelua oricare dintre tipurile de date disponibile. Puteți imbrica obiecte pentru a crea ierarhii în cascadă. O virgulă trebuie să urmeze fiecare valoare, ceea ce înseamnă sfârșitul acelei perechi cheie-valoare.
Analizoarele JSON convertesc automat aceste tipuri de date în structuri adecvate limbajului lor. Nu trebuie să aruncați manual id-ul într-un număr întreg, de exemplu. Analizarea întregului șir JSON este suficientă pentru a mapa valorile înapoi la formatul lor original de date.

Semantică și validare
JSON are anumite reguli care trebuie respectate atunci când vă codificați datele. Șirurile care nu aderă la sintaxă nu vor fi analizate de către consumatori.

Este deosebit de important să acordați atenție ghilimelelor din jurul șirurilor de caractere și cheilor obiectelor. De asemenea, trebuie să vă asigurați că este folosită o virgulă după fiecare intrare într-un obiect sau matrice. Cu toate acestea, JSON nu permite o virgulă finală după ultima intrare – includerea neintenționată a uneia este o cauză comună a erorilor de validare. Majoritatea editorilor de text vă vor evidenția problemele de sintaxă, ajutând la descoperirea greșelilor.

În ciuda acestor puncte de deplasare comune, JSON este unul dintre cele mai ușor formate de date de scris manual. Majoritatea oamenilor găsesc sintaxa rapidă și convenabilă odată ce se familiarizează cu ea. În general, JSON tinde să fie mai puțin predispus la erori decât XML, unde etichetele de deschidere și de închidere nepotrivite, declarațiile de schemă nevalide și problemele de codificare a caracterelor cauzează adesea probleme.

Desemnarea conținutului JSON
Extensia .json este utilizată în mod normal atunci când JSON este salvat într-un fișier. Conținutul JSON are tipul MIME standard application/json, deși text/json este uneori folosit din motive de compatibilitate. În prezent, ar trebui să vă bazați pe aplicație/json pentru anteturile HTTP Accept și Content-Type.

Majoritatea API-urilor care folosesc JSON vor încapsula totul într-un obiect de nivel superior:

{
    "error": 1000
}

Totuși, acest lucru nu este necesar – un tip literal este valid ca nod de nivel superior într-un fișier, astfel încât următoarele exemple sunt toate JSON valide:

1000
true
null

Ei vor decoda la scalarii lor respectivi în limbajul dvs. de programare.

Lucrul cu JSON
Majoritatea limbajelor de programare au suport JSON încorporat. Iată cum să interacționați cu datele JSON în câteva medii populare.

JavaScript
În JavaScript, metodele JSON.stringify() și JSON.parse() sunt folosite pentru a codifica și decoda șirurile JSON:

const post = {
    id: 1001,
    title: "What Is JSON?",
    author: {
        id: 1,
        name: "James Walker"
    }
};
 
const encodedJson = JSON.stringify(post);
 
// {"id": 1001, "title": "What Is JSON?", ...}
console.log(encodedJson);
 
const decodedJson = JSON.parse(encodedJson);
 
// James Walker
console.log(decodedJson.author.name);

PHP
Funcțiile echivalente în PHP sunt json_encode() și json_decode():

$post = [
    "id" => 1001,
    "title" => "What Is JSON?",
    "author" => [
        "id" => 1,
        "name" => "James Walker"
    ]
];
 
$encodedJson = json_encode($post);
 
// {"id": 1001, "title": "What Is JSON?", ...}
echo $encodedJson;
 
$decodedJson = json_decode($encodedJson, true);
 
// James Walker
echo $decodedJson["author"]["name"];

Piton
Python oferă json.dumps() și json.loads() pentru a serializa și, respectiv, a deserializa:

import json
 
post = {
    "id": 1001,
    "title": "What Is JSON?",
    "author": {
        "id": 1,
        "name": "James Walker"
    }
}
 
encodedJson = json.dumps(post)
 
# {"id": 1001, "title": "What Is JSON?", ...}
print(encodedJson)
 
decodedJson = json.loads(encodedJson)
 
# James Walker
print(decodedJson["author"]["name"])

Ruby
Ruby oferă JSON.generate și JSON.parse:

require "json"
 
post = {
    "id" => 1001,
    "title" => "What Is JSON?",
    "author" => {
        "id" => 1,
        "name" => "James Walker"
    }
}
 
encodedJson = JSON.generate(post)
 
# {"id": 1001, "title": "What Is JSON?", ...}
puts encodedJson
 
decodedJson = JSON.parse(encodedJson)
 
# James Walker
puts decodedJson["author"]["name"]

Limitări JSON
JSON este un format ușor care se concentrează pe transmiterea valorilor în structura dvs. de date. Acest lucru îl face rapid de analizat și ușor de lucrat, dar înseamnă că există dezavantaje care pot provoca frustrare. Iată câteva dintre cele mai mari probleme.

Fara comentarii
Datele JSON nu pot include comentarii. Lipsa adnotărilor reduce claritatea și vă obligă să puneți documentația în altă parte. Acest lucru poate face JSON nepotrivit pentru situații precum fișierele de configurare, în care modificările sunt rare și scopurile câmpurilor ar putea fi neclare.

Fara Scheme
JSON nu vă permite să definiți o schemă pentru datele dvs. Nu există nicio modalitate de a impune că id-ul este un câmp întreg obligatoriu, de exemplu. Acest lucru poate duce la structuri de date malformate neintenționat.

Fără referințe
Câmpurile nu pot face referire la alte valori din structura de date. Acest lucru cauzează adesea repetare care mărește dimensiunea fișierului. Revenind la exemplul de postare pe blog de mai devreme, ați putea avea o listă de postări de blog după cum urmează:

{
    "posts": [
        {
            "id": 1001,
            "title": "What is JSON?",
            "author": {
                "id": 1,
                "name": "James Walker"
            }
        },
        {
            "id": 1002,
            "title": "What is SaaS?",
            "author": {
                "id": 1,
                "name": "James Walker"
            }
        }
    ]
}

Ambele postări au același autor, dar informațiile asociate cu acel obiect au trebuit să fie duplicate. Într-o lume ideală, implementările parserului JSON ar putea produce structura prezentată mai sus din intrare similară cu următoarea:

{
    "posts": [
        {
            "id": 1001,
            "title": "What is JSON?",
            "author": "{{ .authors.james }}"
        },
        {
            "id": 1002,
            "title": "What is SaaS?",
            "author": "{{ .authors.james }}"
        }
    ],
    "authors": {
        "james": {
            "id": 1,
            "name": "James Walker"
        }
    }
}

Acest lucru nu este posibil în prezent cu JSON standard.

Fără tipuri de date avansate
Cele șase tipuri de date acceptate omit multe tipuri comune de valori. JSON nu poate stoca în mod nativ date, ore sau puncte de localizare geografică, așa că trebuie să decideți propriul format pentru aceste informații. Acest lucru cauzează discrepanțe incomode și cazuri marginale. Dacă aplicația dvs. gestionează marcajele de timp ca șiruri, cum ar fi 2022-07-01T12:00:00+00:00, dar un API extern prezintă timpul ca secunde după epoca Unix – 1657287000 – va trebui să vă amintiți când să utilizați fiecare dintre formate.

[mai mult...]

Cum imbunatatim semnalul retelei WI-FI cu ajutorul MAC-ului

Dacă folosiți un router WiFi pentru a vă conecta la Internet și locuiți într-o zonă aglomerată (de exemplu la bloc), cel mai probabil ați observat că PC-ul dumneavoastra interceptează semnale de la mai multe rețele wireless (adică ale vecinilor), și nu doar de la al dumneavoastră.

Uneori, când aveți probleme cu semnalul router-ului, explicația ar putea fi aglomerarea canalului pe care acesta este transmis. Deși nu garantăm că schimbarea canalului va va oferi o conexiune mai rapidă (depinde și de ISP și de planul achiziționat), cel puțin semnalul wireless al router-ului va fi mai puternic.

[mai mult...]

Utilizarea bancomatului fizic: la ce trebuie sa fim atenti inainte de utilizare

Trăim într-o lume digitală, dar uneori ai nevoie de numerar, iar pentru a putea de a obține bani in numerar cel mai des folosim un bancomat. Sunt amplasate aproape peste tot – la sucursalele băncilor, magazine și la colțurile de stradă. Cu toate acestea, este aproape prea ușor să obțineți numerar și adesea uităm că există riscuri legate de utilizarea unui bancomat.

Principalele lucruri de care trebuie să fii conștient sunt:

Siguranța ta fizica – cineva care încearcă să fure numerar, care ar putea implica și vătămare fizică;
Furtul de identitate — cineva care obține informații care pot fi folosite pentru a obține bani mai târziu. Deși s-ar putea să nu fiți răspunzător pentru pierderi, este posibil să pierdeți bani.

[mai mult...]

How to Disable Ads on Huawei P50 Pro

Huawei P50 Pro users often notice pop-up ads and banners with affiliate offers. All of this negatively affects the user experience. You can disable ads on Huawei P50 Pro both automatically and manually. Both options should be taken into account in order to reduce the amount of ad banners or get rid of them altogether.

[mai mult...]

Huawei P50 Pro Won’t Turn On

Modern smartphones can malfunction even with the most careful of handling. They arise most often due to violations in the functioning of the operating system, but physical damage can also cause the malfunction. If the phone does not turn on, there is no need to rush to the maintenance center right away.

[mai mult...]