Internet

O alegere cu vot secret are succes atunci când cei care au pierdut alegerile au încredere că voturile au fost contorizate corect.

La noi tradiția este că nimeni nu are încredere în nimic. Se organizează contestări și renumărări. Dacă la votare offline renumărarea e costisitoare și durează mult timp, mai ales când ai milioane de voturi, în online e simplu și aproape instantaneu.

Organizați de către candidații care au pierdut, un grup de oameni nesatisfăcuți de rezultate merg la instituția care a organizat alegerile ca să ceară renumărarea voturile cu pancarde, megafoane, mesaje pe rețele sociale și în media.

Online-ul oferă avantaje majore pentru un nivel mai mare de încredere din partea tuturor participanților la procesul de vot.

Pentru asta este necesar ca grupul care nu este satisfăcut sau care nu are încredere în procesul de vot, să delege un programator. Pentru ca să fie asigurat secretul votului, e necesar un calculator nou nouț, unde se instalează un nou sistem de operare, se face auditul în fața mulțimii și apoi se distruge cu cuvalda. Glumesc 😜

În locul unui calculator nou, este suficientă o mașină virtuală creată în cloud la unul din providerii mari, Microsoft Azure, Amazon AWS, Google Cloud sau Digital Ocean. După auditare doar se șterge mașina din cloud. Mașina virtual nouă este necesară pentru a evita orice speculații din partea ambelor părți.

Pentru auditarea rezultatelor trebuiesc 3 fișiere.

  1. Lista hash-urilor care a apărut în protocol. Respectiv toate acele hash-uri trebuie să coincidă cu cele care au fost distribuite celor care au votat. (Lista se ia din protocol)
  2. Lista candidaților. (Exact cum e în protocol simbol cu simbol)
  3. Lista parolelor, care a fost generată de serverul de votare. (Reprezentantul platformei de votare vine cu ea)

Auditarea digitală este posibilă, pentru că semnăturile digitale distribuite către votanți sunt publice, iar parolele secrete care au fost folosite la generarea acestor coduri nu pot fi modificate de către server.

Aceste 3 fișiere se încarcă pe mașina virtuală, astfel nimeni dintre părți să nu poată manipula sau copia informația. Adică parolele secrete să nu fie copiate cumva de către programatorul care reprezintă grupul celor care contestă rezultatul, iar reprezentantul platformei să nu poată schimba ceva la nivel de sistem și să se afișeze doar rezultate corecte.

În final se încarcă un program (făcut de programatorul mulțimii), care rulează conform algoritmului HMAC/SHA256 și găsește pentru fiecare parola secretă un hash cod, care coincide cu un vot.

Codul programului rulează și numără toate voturile identificate, demonstrează că la vot au participat toate hash-urile și toate parolele secrete. Reprezentantul grupului ce contestă rezultatele, afișează pe ecran în mod vizual rezultatul, pentru ca toți să se convingă. Pentru un efect se poate proiecta pe un ecran mai mare să vadă toți însă show-ul nu va fi de lungă durată, în doar câteva secunde se validează orice scrutin la care au participat mii sau zeci de mii de oameni.

Dacă contoarele coincid cu cele din protocolul tipărit imediat după alegeri, înseamnă că rezultatele nu au fost măsluite și sunt corecte. Done!

După acest proces se distruge mașina virtuală. Codul care face această procedură e foarte simplu, de fapt e mai mic decât acest articol și mi-a luat mai puțin timp să-l scriu.

Mai jos dau un exemplu de cod în limbajul python care face renumărarea.

Codul sursă inclusiv cu un exemplu de votare e făcut public pe contul meu de github.
https://github.com/evisoft/VoteAudit

Niciunul dintre noi nu a trăit într-o democrație adevărată, o democrație în care să ai atât libertatea de exprimare, cât și libertatea votului. Pentru a mă face mai bine înțeles voi începe cu trei istorioare din epoca Internetului.

1. Yahoo!

În 1994 a apărut Yahoo!, un portal care rezolva o problemă mare în Internet. Cum să găsești un site necesar. Era un catalog tematic și cu subcategorii care te ajută să găsești site-urile de care aveai nevoie. Pentru ca site-ul tău să fie listat în acest catalog, trebuia să achiți o taxă anuală. Erai publicat după o verificare (inspecție) a site-ului și după lungi așteptări, însă mai apoi oamenii începeau să dea năvală. Observasem chiar un lucru hazliu, un fel de trend: toți se străduiau să cumpere domenii al căror prim caracter să fie o cifră sau litera A, pentru că afișarea era în ordine alfabetică, iar cel care era publicat primul lua mult mai mult trafic. Dacă e să privim înapoi, în istorie, aș compara asta cu feudalismul: în schimbul pământului care îl primeai, jurai credință împăratului și plăteai anual un impozit de servitute.

2. Altavista.

În anii 90 WWW-ul a explodat. Mii de site-uri apăreau zilnic. Era imposibil să fie ținute într-un catalog bine definit. Astfel, în 1995 a apărut Altavista. Search-ul lucra foarte simplu, adăugai site-ul și în puțin timp erai indexat și începeai să apari în rezultate. Altavista nu mai ținea cont de categorii, cum o făcea Yahoo!, ci încerca să calculeze prin diferite formule a frecvenței anumitor cuvinte cât de relevantă este pagina ta la o căutare a unui utilizator. Teoretic totul era bine, însă în realitate era foarte dificil să găsești exact informația de care aveai nevoie. Trebuia să deschizi sute de rezultate. Aceasta se întâmpla pentru că unii șmecheri și-au dat seama cum să înșele search-ul, în așa fel ca să fie listați cât mai des și cât mai sus. Iar oamenii dădeau click, deschideau pagina, vedeau că nu e ceea ce trebuie închideau și treceau la următorul din listă. După părerea mea, democrația din ziua de azi lucrează ca Altavista: politicienii când candidează promit marea și sarea, sunt înarmați cu o mulțime de trucuri informaționale și de manipulare pentru a fi aleși, ca mai apoi să ne dăm seama că am greșit, dar iarăși cădem în plasă și la următoarele alegeri repetăm greșeala și ne mirăm după aceea cum de se întâmplă că mereu ajung președinți, deputați , primari etc. cei mai nepotriviți omeni – incompetenți, corupți, mincinoși. Este practic imposibil să alegem pe cineva bun, un om de calitate, bazându-ne doar din relatările, de regulă deformatoare, ale mass-media.

3. Google.

O altă etapă este când Google, la scurt timp, în 1998, constatând această problemă mare de căutare în Internet a venit cu o soluție inedită. Ei au hotărât că e mult mai important să fie analizate legăturile (link-urile) dintre site-uri, decât ceea ce declară site-urile (titlu, descriere, cuvinte cheie). Au inventat o formulă matematică care permite să fie calculat gradul de încredere al fiecărui site din Internet. Iar rezultatele în căutare erau ordonate conform acelui rank (grad) de încredere. Astfel în câțiva ani Google a devenit un monopolist al online-ului. Oamenii revin zilnic, pentru că găsesc în primele rezultate ceea ce căutau.

Consider că metoda pe care o folosește Google poate fi aplicată și la alegerea oamenilor de încredere (liderilor de comunități) și sunt sigur că în acest moment ea este cea mai democratică. Aici contează nu doar componenta informațională, ci și cea de încredere din partea oamenilor. Dacă să analizăm cum lucrează această metodă în cazul rezultatelor căutărilor pe Google și în cazul alegerilor, ar fi astfel: nu contează mult ce cuvinte cheie ai pe site (mesaje electorale, panouri publicitare, apariții în media), dar contează câte site-uri publică link-uri spre site-ul tău la ei pe pagini (câți oameni cu încredere te recomandă). Această metodă funcționează mult mai eficient, pentru că e cu mult mai greu să convingi alți oameni (site-uri) să te voteze pe (să publice link-uri spre) tine. Un vot (link) spre tine (site-ul tău) aduce mult mai multă informație despre – cine ești cu adevărat – decât o emisiune tv (niște cuvinte cheie scrise în pagina ta). Mai mult ca atât, prin această metodă toți participanții la votare sunt automat și votanți, și candidați. Nu mai ești forțat să votezi doar pentru un candidat din lista de doi/trei propuși pe o cale nedemocratică (de cineva din umbră), poți vota pe oricine vrei tu și îți poți da votul chiar și pentru mai multe persoane. Pentru prima dată în democrație apare cu adevărat libertatea de a vota, fără nici o restricție.

Această metodă nu este doar una teoretică: noi, practic, am implementat-o în aplicația de votare VoteMeApp care a fost testată în peste 200 de alegeri în diverse comunități. Metoda de tip rank rezolvă o mulțime de probleme cu care se confruntă acum democrația, cum ar fi: tweedismul, manipularea mediatică, bulele informaționale, cenzura, autocrația informațională, votul pentru candidatul cel mai puțin rău, populismul, ignoranța rațională.

Deși VoteMeApp oferă mai multe tipuri de alegeri online, noi credem că anume scrutinele de tip rank sunt cele mai bune pentru a propulsa în organizații și comunități oameni de încredere, întrucât îți oferă libertatea de a alege pe oricine vrei tu și, întâi de toate, personalități autentice, oameni cu adevărat valoroși și utili comunității.

Notă: Vă invit să vă înregistrați la conferința Future of Democracy. Vă asigur că vor fi discuții interesante.

Pagina principală - privesc.eu

Pagina principală - privesc.eu

Site-ul Privesc.Eu a început simplu de tot. Un site pe wordpress și embeduri video de pe ustream.tv. Timp de 10 ani, rezolvând problemele una câte una, am construit un sistem scalabil și destul de complex. Anume rezolvarea acestor probleme grele m-au motivat să construiesc acest sistem. Dacă era simplu, cred că cedam.

Privesc.Eu de unii este considerat mass-media, de alții startup tehnologic. Noi credem că suntem undeva pe la mijloc. În situații excepționale, cum ar fi alegeri naționale sau revolte, acest sistem are cel mai mare trafic din țară. Maximum atins este peste 30 mii oameni live. În acele zile, mare majoritatea a televiziunilor preiau imaginile video de la noi.

Articolul este dedicat celor care vor să construiască un startup. Să aibă o impresie despre tehnologiile care trebuie să le învețe și să le mânuiască pentru a construi o companie. Din experiența mea - 90% din timp este dedicat anume citirii documentației și integrării acestor servicii și doar 10% - programării.

Aici nu voi vorbi despre oamenii care zi de zi întrețin acest sistem sau care transmit live-uri. Munca lor e enormă - peste 36 mii de ore de transmisiuni live.

În continuare, pentru curioși, un longread tehnologic.

BROWSER. Când un om deschide www.privesc.eu, să vadă un live, în spate stau o mulțime de servere legate între ele prin microservicii. Unele servicii sunt construite de mine altele sunt cumpărate și plătite lunar. Unele servere stau în cloud, altele împrăștiate prin Europa. Fiecare decizie are un tradeoff, cost/performană. Dacă le greșești, compania poate chiar da faliment.

WEB. Site-ul www.privesc.eu este hostat pe Microsoft Azure (prefer această platformă, față de AWS sau Google Cloud, le folosesc și pe celalte dar la alte proiecte) este construit pe framework-ul ASP.NET MVC. Pingdom, de câți va ani, îmi arată uptime 100%. Aceasta este primul indiciu de calitate a unui site. Să nu cadă! Site-ul rulează pe minimum 2 web servere și se autoscalează până la 100 de servere în dependență de volumul de oameni care privesc. Limita de minimum 2 servere am impus-o din cauza că avem widgetul privesc.eu care este embedat pe mii de site-uri. Dacă vom pica se va vedea pe tot Internetul 😀

DB. Serverele web au în spate o bază de date SQL Server. Acolo se păstrează toate informația despre live-uri, titluri, operatori, camere, servere, utilizatori, autorizări… Fără această bază de date nimic nu funcționează. Folosesc Azure SQL Server care îmi asigură un uptime de 100%.

CACHE. Este destul de costisitor să interpelezi baza de date la orice flecușteț. Pentru a minimiza interpelările folosesc un Redis Cache Server as a service din Azure, care îl poți scala în dependență de necesități. Cache centralizat prin Redis e necesar mai ales când servere se autoscalează și nu trebuie de repopulat informația la fiecare server nou pornit. Mai folosesc și cache in memory pentru unele taskuri mici.

STORAGE. Cea mai mare problemă la privesc.eu este stocarea datelor. Avem TB de video care trebuie ținute online. Mai muți TB care trebuie ținute offline (originalele de la camerele de filmat). GB de date care trebuie de interpelat în realtime (contoare și fețele oamenilor). Pentru a micșora cheltuielile, am hotărât ca serverele de stocare video să fie păstrate în țară, în cloud e foarte costisitor. Avem un server în Moldova la Moldtelecom și altul în România la 2KTelecom. Ambele servere umplute până la refuz cu HDD-uri în RAID0. Folosim RAID0 pentru că la fluxuri mari de cereri alt tip de RAID nu face față. 

VIDEO: De la început am hotărât să folosim camere de înregistrare video pentru începători. În timp, camerele pentru începători au devenit foarte bune. La ce facem noi sunt, uneori, mai bune decât cele profesioniste. Zoom mai mare, sunt foarte ușoare și ieftine. La proteste ne ajută mult. Camerele sunt Sony AX53 4K .

AUDIO: Spre deosebire de profesioniști care folosesc microfoane prin wireless analogic, mari și cu logouri pe ele, noi ne folosim de microfoane mici bluetooth Sony ECMW1M Wireless sau microfoane Zoom H5 și pe post de mini mixer audio. Sunt ieftine, micuțe. Uneori paza de stat ne creează probleme cu bruiajele.

ENCODER: Am început cu notebook-uri, 10 ani în urmă. Camera video prin A/V cablu conectate la un convertor USB apărea ca o camera web în windows și prin Adobe Media Encoder transmiteam prin protocolul RTMP la serverele Wowza. An de an scanam ce apare nou în acest domeniu să fie ieftin și bun. Până am dat de Teradek VidiU.

BROADCAST: De obicei transmisiunile de la encoder la serverul central se face prin modeme 4G. Toți cameramanii au minim câte 2 modeme de la diferiți operatori de telefonie mobilă. Rareori facem prin cablu. În Moldova utlizăm Orange și Unite, în România Orange și Telekom. Nu ne folosim de serviciul de bounding, este destul de scump.

LIVESTREAM. Servere de stocare, care nu prea sunt expuse publicului, mai îndeplinesc și funcția de a primi semnalul video de la cameramani, de autoînregistra și servi video pentru serverele de cache video. Ele sunt interconectate între ele. Dacă un video din România este cerut din Moldova este tras mai întâi în Moldova și apoi este mai departe servit prin serverele cache. Pe aceste servere mai rulează și IIS care are soft făcut de mine. Mă ajută la thumnails, gif-uri, extragere de sunete, să pornească restreamuri sau să permit TV-urilor să poată descărca din arhivă.

CACHESTREAM. Aceste servere sunt cele mai expuse publicului și uneori servesc peste 15GB/s de informație video. Ele rulează pe nginx/docker/ubuntu. Misiunea lor e simplă - vine un http request la un chunk video din un fișier .hls, și dacă nu-l are, îl cere de la serverul de stocare, și păstrează acel chunk de video .mp4 local timp de 30 min. Când priviți video online, de obicei nu vine un fișier de câțiva GB pe local ci sunt trase fișere mici a cât 2-3MB de câteva secunde. Aceste servere sunt așa de solicitate încât undeori cedeză cartelele de rețea. Pentru a evita problemele cu cădearea lor, serverul de monitorizare periodic verifică dacă aceste serverele cache răspund înainte de a trimite oameni spre ele. Privesc.Eu are astfel de servere la Starnet (Moldova), Hetzner (Germania), Digital Ocean (Amsterdam). Au storage mic și sunt pe SSD.

P2PSTREAM: Tehnologie testată cu 2 companii și implementată. Acum este nefuncțională, însă o pot activa în situații de criză. Este mai ieftin traficul în MD decât P2P 😉

COUNTERS: Mulți clienți de ai nostri cer datele despre live-uri. Am creat un sistem de contorizare. O problemă netrivială când ai sute de cereri pe secunde și trebuie agregate datele în timp real de la mai multe servere www. Pentru asta am folosi Azure Table Storage fiecare servere înscrie acolo numele lui, ce live și câte vizualizări. Mai contorizăm și pe ce site-uri au apărut live-urile și păstrăm titlu site-ulu și pagina unde a apărut. Datele acestea sunt păstrate pe serverul Redis.

FACE RECOGNITION: De vreun an am adăugat această funcționalitate care scanează înregistarea video, găsește toate fețele. Le clasterizează astel ca să fie fiecare claster să fie aceași persoană. Memorizează unde acea față a apărut și vectorul care identifică acea față. Pentru procesarea video folosesc un calculator de birou cu 12 procesoare care 24/24 descarcă fiecare video de pe serverele de stocare, rulează face recognition și apoi aceste rezultate se salvează în cloud pe CosmosDB. CosmosDB e cea mai rapidă și scalabilă baza de date din lume. Iar imaginile se stocheză ca blob-uri în Azure Blob storage. CosmosDB a ajuns la 25GB și fiecare request e sub 10ms. 😝

CHAT: Practic e resursa care consumă cel mai mult serverele www atunci când mii de oameni stau pe pagina care are un chat. Serverele trebuie să țină conexiuni active cu toți cei care privesc - să primească și să trimită mesaje. Cererea crește exponențial față de numărul de oameni activi. Folosesc tehnologia SignalR de la Microsoft și serverul Redis pentru comunicarea între serverele www. În paralel serverele www primesc prin webhooks și comentariile de la live-urle difuzate pe Facebook.

DDOS: Cloudflare Un serviciu foarte util care te protejează contra atacurilor. Noi îl folosim pentru a minimiza cheltuielile de trafic la thumnails și player-ul video. Economisim TB de date doar folosind acest serviciu foarte comod. Deasemnea și DNS-urile stau aici care rapid pot fi modificate.

EMAIL: Trimitem lunar peste 40 mii de email-uri, alerte, rapoarte la organizatorii, începutul de transmisiune, închiderea, fotografii și statistică. Folosim de ani buni serviciul SendGrid. Este simplu și eficient. Serverele noastre de email sunt hostate de Gmail.

SMS: Transmitem lunar câteva sute. Folosim pentru comunicare urgentă cu cameramani și cu organizatorii. Oricine poate apăsa butonul Raportează de sub live și trimite un SMS cameramanului. Folosim Nexmo care e destul de bun.

PAYMENT: Aș prefera Stripe însă nu lucrează nici în România și nici în Moldova. Am găsit unul foarte bun - Braintree, care are sistem de subscription. Adică el duce evidența cardurilor bancare și are grijă să extragă banii lunar și dacă nu mai poate - îți raportează. 

NOTIFICATIONS: Avem un server, worker role, care e plin de taskuri repetitive. Serverul trimite notificări la aplicațiile de iOS, Android, Chrome și Firefox. Monitorizeză fluxurile de live stream și imediat ce pică, anunță cameramanul prin Discord și Slack despre problemă.

ANALYTICS: Web, iOS și Android sunt legate raportează la Google Analytics. La serverul web în trecut foloseam un sistem de monitorizare NewRelic. La început era gratuit, apoi când au ieșit la IPO și au anulat planul gratuit am trecut la Microsoft Application Insights.

RESTREAMING: O funcționalitate foarte întrebată la privesc.eu este retransmisiunea pe Facebook și Youtube a live-urilor filmate de noi. Cu aceasta acum se ocupă serverele centrale de stocare. Când imaginea video este nemodificată se utilizează puține resurse CPU. Însă dacă vrem să punem logo-ul privesc.eu servere țin doar 4 live-uri în paralel 😔. Pentru a scala această problemă am construit un docker care automat se pornește în cloud și se oprește când live-ul se deconectează. Suntem acum în faza de testare.

TRANSCRIPTION: Este un sistem intern dezvotat pentru a transcrie video manual, importa sau recunoașterea vocii. Cu recunoașterea vocii va trebui de mai așteptat. Ne-am integrat cu Google Speech Recognition însă e destul de prost în limba română.

PHOTO: Fotograful după ce fotografiază la eveniment încarcă pe loc toate fotografiile pe iPad apoi de pe iPad le trimite pe server. Fotografiile se stocheză în Azure Blob Storage și alertăm organizatorul cu un email. Toți oamenii de pe chat deasemnea primesc alerte despre fotografiile încărcate. Utilizatorii pot descărca aceste fotografii una câte una sau toată arhiva.

SEARCH: La început căutam doar cuvinte în titlurile evenimentelor prin SQL. Săptămâna aceasta îm integrat Azure Search, care indexează, titlurile, tag-urile și transcrierile și practic instant îți dă rezultatele. Este un serviciu de search foarte flexibil în interpelări care înțelege și limba română. Rezultatele pot fi ordonate după rank sau timpul de înregistrare.

SEO: Paginile de la privesc.eu de obicei au multe componente: chat, fețe de oameni, agenda, linkuri cu alte portaluri care se generează dinamic. Pentru a servi aceste pagini foarte rapid search-urilor este un serviciu bun - prerender.io. El deschide pagina cerută în chromeless procesază exact cum o face un browser și stocheză plain html în memorie. La o a doua cerere răspunde instant. Privesc.Eu are peste 90 mii de pagini și crawlerele cer mii de pagini pe zi. Pentru a economisi am pornit un Azure Container Instance cu un docker prerender și merge brici.

IDE: Visual Studio 2015 și 2019- dezvoltare web, Visual Studio Code - recunoașterea fețelor. XCode - aplicația iOS. Android Studio - aplicația Android.

LANGUAGES: C# - pentru progamare de web servere. Java - custom plug-in pentru Wowza. Python - recunoașterea fețelor în video. Objective-C/Swift - aplicația iOS, Java/Kotlin - Aplicația Andoid. Javascript/Typescript - Web site. Uneori mă încurc în ele când trec de la una la alta :D.

SOFT: IIS - serverele de stocare, Wowza - livestream, FFMPEG - procesare video, conversie, restream, NGINX - servere cache in reverse proxy.

OS: Windows Server - serverele www și de stocare, Ubuntu - serverele de cache video și recunoașterea fețelor, MacOS - pentru development.

Chiar dacă acest sistem este construit de un singur om, în spatele serviciilor care le folosim stau sute, poate mii de ingineri. Un mare mulțumesc lor, celor care ne ajută ca acest site să lucreze nonstop.

PS. Azi doar blogul privesc.eu a mai rămas pe wordpress. 😉

PS: Următorul post - Cum să contruiești un canal TV funcțional complet autonom.

Siri așteaptă întrebarea.

Siri așteaptă întrebarea. (Siri - asistent virtual cu Inteligență Artificială)

La conferința ICEEFEST 2018 am asistat la un panel despre politică, internet, revolte și AI. La întrebarea mea paneliștilor “Cum arată sfârșitul democrației în contextul tematicii panelului” ei au arătat nedumeriți, să nu spunem că m-au considerat un țâcnit.

Mai jos voi încerca să răspund ce am avut eu în vedere. Stați cu mine.

Rezultatul electoral depinde în mare măsură de faptul cum candidații sunt arătați de mass-media. Odată cu popularizarea Internetului și a rețelelor de socializare tot mai mulți politicieni recurg la dialogul cu electoratul prin Internet. Pentru cei sceptici, în anul 2019 timpul petrecut în Internet va întrece timpul petrecut în fața TV-ului. Adică consumul neliniar de informație va întrece consumul liniar și centralizat (Radio/TV). De ziare nu mai vorbim, ele sunt duse.

Însă în epoca Internetului există o mare problemă cu informația, ea este mult prea multă. La început au fost multe search-uri care au dat faliment după ce a apărut google cu un nou algoritm de aranjare a informației (PageRank) și care practic a acaparat tot Internetul. Mai târziu Google a introdus un nou sistem, BrainRank. Atunci când cauți ceva informație pe o anumită temă, AI (Inteligența Artificială) decide ce rezultate vei vedea.

Pe de altă parte, Facebook-ul vine cu o altă invenție destul de revoluționară, News Feed. Unde informația curge spre tine, nu tu o cauți. Însă acest șir informațional la fel este generat în dependență de preferințele tale, prietenii tăi, timp și multe alte semnale care Facebook-ul alimentează EdgeRank-ul lor pentru a scoate ceva relevant pentru ochii tăi în timp ce tu faci scroll de pe mobil. Deci și aici șirul informațional va depinde sau deja depinde de AI pentru că Facebook investește resurse considerabile în acest domeniu.

Similar e și la Twitter, Youtube, Netflix... și alte servicii unde abundă informația, iar tehnologiile de growth hacking încearcă să te facă să revii și să revii pentru că îți arată doar ceea ce dorești.

Marea majoritate din noi având dispozitive mobile transmitem cantități enorme de date la companiile care produc telefoane sau aplicații. Acestea la rândul lor ne servesc informațiile care nouă ne plac.

Viralitatea revoltelor mult lăudate din Chișinău și #rezist din București este dependentă de diciziile AI-ului. AI decide cât de viral poate fi un eveniment sau grup, sau o postare; în dependență de numărul de like-uri, share-uri, comentarii, locație, timp… La un eveniment care a avut succes posibil sunt sute de evenimente la care organizatorii nu au reușit să adune lume. De ce? Pentru că creierul artificial a decis că nu se merită de promovat în news feed-ul oamenilor.

Facebook are atât de multe date despre fiecare din noi că își permite să genereze liste de oameni în baza unei alte liste de oameni (Lookalike). De exemplu, dacă vrei să-ți mărești numărul membrilor în partid, îi dai Facebook-ului lista tuturor membrilor de partid care au cont în Facebook și el îți face o altă listă de oameni care au viziuni similare, însă încă nu sunt membri de partid. Îți rămâne să plasezi un îndemn și să îi chemi în partid.

Scandalul Cambridge Analytica i-a făcut pe congresmeni să înțeleagă puterea unui sistem cu inteligență artificială și cum el poate influența alegerile. Alegeri care până mai ieri se făceau de pe ecranele TV-ului.

Deci sistemele bazate pe AI deja controlează fluxul informațional și totodată știu foarte mult despre comportamentul nostru.

În viitorul apropiat când majoritatea populației va fi în Internet (în unele țăre majoritatea deja este în Internet) partidele politice pot adopta o altă tactică, cea de simulare a candidatului cu cea mai mare probabilitate de câștig în dependență de preferințele electoratului. Vor lupta în a găsi candidatul, nu în promovarea lui. De aceea în viitor mult va conta brandul personal. La alegerile parlamentare lista candidaților se va face în dependență de simulările membrilor de partid care au cele mai mari șanse de câștig a electoratului. Sau se va încerca diversificarea listei. De exemplu, un candidat este popular printre bucătari, altul printre ingineri, al treilea pe instagram….

Democrația devine broasca care încetul cu încetul se fierbe în apă și nu-și dă seama că moare. Vom avea iluzia că am găsit candidatul cel mai bun însă cine este acest candidat îl va decide inteligența artificială.

În final vom ajunge să întrebăm de Siri pe cine să votăm.

Există vreo soluție pentru a evita această dependență de AI? Dacă aveți și voi una sunteți bineveniți să o lăsați în comentarii.

Eu am una. Vă aștept să o citiți în articolul viitor.

1 Comment

Puișori
M-am întâlnit cu mulți politicieni care auzind de Silicon Valley, doresc să replice acest model la noi în țară. Pentru a evita populismul din partea lor, am identificat o serie de probleme și provocări care împiedică dezvoltarea ecositemului de startup-uri la noi.

  1. Startup-urile IT, e adevărat, pot fi lansate cu bani puțini. Un SRL se deschide ușor, însă e foarte greu să-l închizi. Doar 5% din startup-uri au succes, restul mor. E important să-ți închizi ușor afacerea.
  2. Pentru ca ulterior să poți atrage investiții, să dai cote părți și drepturi de vot, e nevoie să fie creată o companie de tip Corporate. Legislația învechită nu prea permite acest lucru.
  3. Legislația muncii din Moldova și Europa prea mult favorizează angajații, astfel ecosistemul de startup-uri practic nu există în această regiune. Antreprenorii au frică să angajeze.
  4. Sistemul de impozitare de tip TVA, fac toate startup-urile locale necompetitive cu cele americane.
  5. Dacă ai o companie care lucrează pe piața internațională trebuie să ții conturile bancare în valută, însă statul îți mai taxează odată conturilor în valută ca și profit, atunci când crește cursul leului. E adevărat că dacă scade cursul se dă la pierderii. Problema e că leul nu scade.
  6. Lipsa juriștilor cu cunoștințe în IT. (Chiar am asistat la o judecată unde 2 avocați și un judecător vorbeau aiureli în domeniul IT).
  7. Lipsa Angel Investors care să investească în startup-uri. Aceștia de regulă sunt persoanele care fac parte din foarte multe board-uri și contribuie la dezvoltarea noului startup prin intermediul relațiilor pe care le au.
  8. Antreprenori care nu au cunoștințele necesare pentru a înțelege cum lucrează investițiile. Le tratează ca pe împrumuturi bancare.
  9. Investitori puțini și cu gândire sovietică, atunci când îți dau bani, iar înapoi cer 51% din companie.
  10. Accesul la procesoarele de carduri internaționale practic inexistent (bine că Paypal a venit), astfel e foarte greu să-ți construiești o afacere digitală internațională cu sistemul de plăți local rudimentar.
  11. Lipsa acceleratoarelor.
  12. Suntem o națiune care nu știe să vândă. (spre deosebire de SUA sau Israel)

Rezultatul este:

  1. Companii de IT care au afaceri cu statul, având ca proprietari funcționari sau birocrați. Aceste companii de obicei fiind folosite la furtul banilor din buzunarul cetățenilor.
  2. Deși se vehiculează că 10% din PIB este generat de către ITC, în realitate doar 2% sunt generate de IT și 8% de comunicații (Orange, Moldcell, Moldtelecom).
  3. Marea majoritate a companiilor de IT sunt de tip outsource, adică primesc banii din afară doar atât cât să plătească salariile și taxele aferente.
  4. Chiar dacă se fac o mulțime de evenimente pentru crearea startup-urilor, de obicei vin aceiași concurenți. Iar după eveniment noua echipa de regulă se desființează.

PS: Doar cu Internet de calitate superioară nu poți face un startup.

1 Comment

Password
Astăzi a mai avut loc o conferință din partea poliției dedicată acestei legi. Și cum jurnaliștii nu prea au citit acea lege, iar dacă și ar citi-o nu ar înțelege totul, pentru că se vehiculează cu niște termeni tehnici, voi încerca eu să lămuresc în cuvinte mai simple, aș zice țărănești.

Mai întâi de toate țin să amintesc că această lege este la cea de-a III-a încercare, până acum nici nu ajungea la guvern. La prima încercare, era ministru Dl Recean, am fost și eu la discuții unde providerii i-au spus pe șleau dlui ministru că autorii legii sunt duși cu pluta. La a doua încercare, Dl Gaburici deja știa unde-i șmecheria și a întors legea. Acum când a venit un guvern nou — iarăși se încearcă.

Ca și în cazul tuturor legilor deocheate, se face în felul următor. Se ia o problemă din societate, de exemplu pedofilia sau terorismul, care poate să nu fie foarte importantă și la acea problemă se mai adaugă niște articole dubioase. Se fac niște conferințe, press release-uri pentru a umfla oaia. Proiectul de lege fiind deja pregătit, se înaintează guvernului și parlamentului. Când unii oameni observă că ceva nu e în regulă, susținătotii legii contraatacă: ”Ești pentru pedofilie? Ești pentru terorism?”. Caz clasic de manipulare pentru a băga în lege ce articole dorești.

Trecem peste articolele cu pedofilie, unde se mărește pedeapsa, asta e binevenit și trecem direct la articolele dubioase.

  1. Se mărește pedeapsa pentru accesul la sistemele informatice, de la (1-3 ani) la (3-7) ani. În timp ce Statele Unitem, după cazul cu Aaron Swartz, au înțeles că au sărit calul cu pedepsele pentru accesul neautorizat la sistemele informatice.
  2. Percheziția informatică. Încă un articol dubios. În primul rând, cu greu îmi închipui un terorist care să nu utilizeze criptarea discului și parolarea telefonului, iar fără acordul lui percheziția este inutilă. Nimeni nu poate decripta datele, nici chiar poliția.
  3. Interceptarea și înregistrarea datelor informatice. Deși ministrul MAI a raportat la ședința de guvern că nu sunt necesare fonduri pentru a implementa această lege, sunt necesari bani enormi pentru ca providerul să-și facă upgrade la sistemele informatice pentru a satisface necesitățile poliției. Iar datele vor fi păstrate timp de 180 de zile pentru toți utilizatorii, nu doar pentru un presupus terorist care poate fi moldovean. Ca mai apoi la cererea poliției providerul să scoată din arhiva ce are despre acel client. (Uniunea Europeană a interzis această lege acum un an)
  4. Pedepsirea providerilor dacă nu comunică vreo ilegalitate. De exemplu cineva are un video la el pe servere. Practic se impune ca providerul să fie polițist.
  5. Impunerea providerilor să sisteze anumite pagini web care contravin unor criterii. Lista criteriilor, evident,  se va extinde într-o modificare ulterioară. Aici nu e clar care provideri, cei care hostează serverele sau cei care asigură transmisiunile de date. Pentru că un provider de transmisiuni de date, nu poate sista doar o pagină web, ci doar un site întreg sau un IP unde pot fi mai multe site-uri.

La prima vedere se pare că totul e ok… Creăm un suport legislativ și o infrastructură la provideri care ne vor permite ca nici un pedofil sau terorist să nu se folosească de infrastructura de telecomunicații a Moldovei. În realitate acesta e pasul 2, primul pas a fost ceva mai devreme, cel care ne aruncă într-un sistem totalitar care controlează Internetul.

Pericol și mai mare e că statul practic dă dreptul providerilor să acumuleze informațiile despre toți clienții lor, să fie un fel de SIS. Ghiciți ce se va întâmpla dacă în loc de baza de date a clienților cu nume, parole, IP, și adresa de domiciliu, cum a fost în cazul Starnet-ului, se va scurge baza de date cu informațiile despre toate comunicațiile tuturor, toate email-urile, toate parolele care au trecut prin trafic necriptat? V-ați închipuit? Ce veți spune atunci când veți afla că încă nici un terorist nu este din Moldova sau poate a și fost prins un pedofil, dar el, de fapt,  nu are idee ce este Internet?

Pasul 3 va fi simplu, la criteriile de pedofilie, terorism ș.a. vor fi adăugate încă unele criterii convenabile, iar la conferința de presă vor spune: ”Păi totul deja este făcut, noi adăugăm niște criterii noi, pentru a bloca unele site-uri neconvenabile puterii”.

Astfel vom ajunge în situația când poliția va veni la tine acasă și la vecinii tăi, vor lua toate calculatoarele, toate telefoanele, toate dispozitivele care au posibilitate de a se conecta la Internet. Eu personal cred că am vreo 30.

Întrebarea voastră ar fi: ”De ce să-mi ia mie și tuturor vecinilor din scară dispozitivele?”. Pentru că poliția deja face asta, și nu pentru terorism, nu pentru crimă cibernetică, nu pentru pedofilie. Știu caz real. Ci pentru că unul din vecini are Wi-Fi deschis, iar Starnet bagă wifi deschis pentru toți clienții săi, iar toți care îl văd sunt potențiali criminali. Și li s-au luat toate calculatoarele, telefoanele și încă după un an de zile nu le-au întors.

Dacă acum poliției îi este destul de greu să demonstreze dacă Dvs ați făcut ceva anume, prin legea nouă, ei au backup la provider, iar în lege e scris expres că dacă e emis ordin de la judecător pentru calculatorul Dvs, iar el are legătură cu providerul, atunci nu este necesar de alt ordin pentru a avea acess la celălalt sistem.

Țineți mine, dictatura nu vine peste noapte, vine gradual! Sindromul broaștei fierte!

PS: Opera de artă o puteți găsi aici.
PPS: În acest context poftim datele personale a 49 mln de turci.

În martie, la conferința F8, Facebook a adăugat posibilitatea de a face upload la video prin API. Un mic/mare progres. Imediat am implementat această funcționalitate pe site-ul privesc.eu sub forma de video citate.

Video citat, este o frântură de video cu conținut viral. Bine, nimeni nu poate garanta viralitatea unui video sau altul, însă una e sigur, probabilitatea ca să găsești un video viral e direct proporțională cu numărul de încercări.

Deci, trucul constă în a găsi un eveniment interesant de pe privesc.eu, apăsați butonul Citat și tăiați cu foarfeca un moment interesant. După aceea, postați pe wall-ul personal sau pe o pagină de pe Facebook. În câteva clipe citatul video va apărea pe Facebook ca video uploadat, nu ca embedat.

Acum încep a curge views-urile, live-urile, share-urile și comentariile. Și cu cât e mai mare engagement-ul cu atât facebook-ul îl distribuie mai mult. Pentru a mări engagement-ul privesc.eu automat include embedul cu acel video pe prima pagină de pe site-ul privesc.eu și totodată pe pagina cu înregistrarea evenimentului. Dacă ai un blog, poți include și tu acel embed.

Acum iată și viralul cu pricina.

Mai jos un screen despre viralitatea lui.
Privesc.Eu data from Facebook

Pentru comparație reach-ul de 525824 e mai mare decât toți moldovenii de pe Facebook, care e de 440000, adică au văzut thumnail-ul în newsfeed și o bucată bună din românii de pe Facebook. 187929 views sunt oamenii care au dat play la acest video. E comparabil cu auditoriul unui TV. Ca rezultat pagina Privesc.Eu s-a ales cu +1000 de fani noi.

Îți rămâne să găsești în cele peste 19 mii de evenimente un fragment interesant din domeniu tău de activitate și să alegi un citat.

Succes.

1 Comment

Bitcoin

Reprezentarea simbolică a Bitcoin

Din 2010, de când am auzit prima dată de Bitcoin, am citit multe explicații. Majoritatea lor fiind artificial limitate în profunzime pentru a face articolul pe înțelesul tuturor. Înțelegerea acestui protocol în detalii este destul de greu. Multe articole jurnalistice, populiste, scriu despre posibilul impact financiar și social, nu și despre modul în care lucrează acest protocol. Pentru a vedea pe deplin impactul lui, trebuie să se înțeleagă cum el într-adevăr funcționează.

Pentru a înțelege acest articol trebuie să aveți cât de cât cunoștințe de noțiuni despre cheie publică/privată, semnătură digitală și funcții hash. Aceste noțiuni nu sunt foarte complicate, deschideți wikipedia și citiți.

Cât nu ar părea de straniu, criptografia este ceea ce stă la bazele Bitcoin-ului. Este Bitcoin-ul o monedă, este o metodă de a transmite mesaje secrete? De fapt, Bitcoin-ul este o metodă de a securiza tranzacțiile. De a proteja utilizatorii contra furturilor și de a face anonime tranzacțiile.

Eu voi încerca să vă explic cum lucrează Bitcoin, construind un protocol similar cum ar fi Moldocoin. Vom încerca împreună să construim acest sistem pas cu pas, pentru a vedea la fiecare etapă ce probleme apar și cum le putem rezolva.

Primul pas. Cum să inventăm o monedă virtuală?

La prima vedere, o monedă virtuală – pare imposibil. Presupunem că o oarecare persoană, cu numele Alinuța, are ceva monede virtuale și dorește să le cheltuie. Dacă Аlinuța are un șir de biți ca monede, ce-i poate interzice ei ca același șir de biți să-i cheltuie din nou, și apoi iar și iar … la infinit? Sau dacă cineva copie acel șir de biți, să-i cheltuie mai departe la infinit.

Acesteа sunt doar două din problemele care trebuie rezolvate pentru a avea bani virtuali.

Să încercăm să găsim o soluție pentru prima problemă, unde Alinuța folosește un șir de biți ca bani, contra falsificării acestui șir. Să presupunem că Alinuța vrea să-i transmită altei persoane, lui Bulă, un moldocoin. Pentru aceasta, Alinuța scrie un mesaj: “Eu, Alinuța îi dau lui Bulă un moldocoin”. Ea semnează digital acest mesaj utilizând cheia privată și anunță tuturor că a făcut aceasta.

Hei, nu e cel mai super-puper prototip de monedă, însă are unele calități. Oricine din lume (inclusiv și Bulă) poate utiliza cheia publică a Alinuței și verifica dacă într-adevăr Alinuța a semnat mesajul “Eu, Alinuța îi dau lui Bulă un moldocoin”. Nimeni altcineva nu poate crea un astfel de mesaj semnat și nici Alinuța nu se mai poate dezice de acea semnătură și să zică că: “Nu, Eu nu îi dau lui Bulă un moldocoin”. Deci protocolul stabilește că Alinuța are o adevărată intenție de a-i da lui Bulă un moldocoin. Cu alte cuvinte, nimeni nu mai poate publica un astfel de mesaj semnat și oarecum o protejează pe Alinuța contra falsificării.

Observați că am folosit doar un mesaj textual semnat, în următorii pași acest mesaj va deveni mai formalizat.

Utilizarea numerelor unice pentru identificarea monedelor.

O problemă a primei versiuni Moldocoin este că Alinuța poate trimite lui Bulă același mesaj semnat încă odată și încă odată. Presupunem că Bulă a primit zece copii a mesajului “Eu, Alinuța îi dau lui Bulă un moldocoin”. Înseamnă această că Alinuța i-a trimis 10 monede diferite? Poate ea accidental a trimis o copie? Poate ea încearcă  să-l amăgească pe Bulă că-i trimite zece monede, iar tuturor le spune că doar una.

Deci, trebuie să facem moldocoinii unici. Trebuie să le asignăm un număr unic de serie. Mesajul semnat al Alinuței va arăta astfel: “Eu, Alinuța îi dau lui Bulă un moldocoin, cu numărul de serie 35312408”. Iar mai târziu când Alinuța va trimte un mesaj “Eu, Alinuța îi dau lui Bulă un moldocoin, cu numărul de serie 733232323”, toată lumea, inclusiv și Bulă, va ști că un moldocoin diferit a fost transferat.

Pentru a face să lucreze corect această schemă avem nevoie de o sursă de încredere care va genera aceste numere de serie. O soluție ar fi o bancă. Această bancă va genera numere de serie pentru fiecare moldocoin, va urmări fiecare moldocoin și va verifica dacă tranzacțiile sunt valide.

De exemplu, Alinuța se duce la bancă și zice: “Doresc să iau un moldocoin din contul meu”. Banca reduce contul ei cu un moldocoin și îi asignează ei, un număr de serie nemaifolosit până atunci, să zicem 654321. Apoi când Alinuța va dori să transfere moldocoin-ul ei lui Bulă, ea va semna un mesaj “Eu, Alinuța îi dau lui Bulă un moldocoin, cu numărul de serie 654321”. Bulă nu va accepta imediat moldocoin-ul, se va duce mai întâi la bancă pentru verificarea tranzacției. Se va convinge că într-adevăr acest moldocoin cu numărul de serie 654321 îi aparține Alinuței și că ea nu l-a mai cheltuit pe altundeva. Dacă ambele condiții sunt adevărate, Bulă îi spune băncii că el dorește să accepte acest moldocoin și banca face o rectificare în baza de date că acest moldocoin va aparține lui Bulă.

Să-i facem pe toți să acționeze ca o bancă.

Soluția cu banca e una bună însă noi avem ambiții mult mai mari. Noi putem elimina cu totul banca din protocol. Aceasta va schimba considerabil natura banilor. Și când te gândești că puterea unei bănci centrale este imensă, controlul asupra masei monetare, schimbarea este destul de mare.

Idea este ca să-i facem pe toți participanții să acționeze ca o bancă. În special, vom presupune că toți utilizatorii de Moldocoin țin o copie a tuturor înscrierilor: care moldocoin și cui aparține. O carte contabilă în care sunt înscrise toate tranzacțiile. Să numim această carte block chain, fiindcă așa se numește în Bitcoin.

Acum, să presupunem că Alinuța dorește să transfere un moldocoin lui Bulă. Ea semnează mesajul: “Eu, Alinuța, îi dau lui Bulă un moldocoin, cu numărul de serie 654321” și transmite acest mesaj lui Bulă. Bulă poate utiliza copia sa de block chain pentru verificare. Dacă e ok, el acceptă moldocoin-ul, rectifică block chain-ul său și transmite mai departe în rețea pentru ca fiecare să-și modifice block chain-ul.

Mai rămâne problema, “de unde vine numărul de serie”? Această problemă e destul de ușor de rezolvat, veți vedea mai jos. O problemă mai mare care trebuie rezolvată, însă, este dubla cheltuire. Alinuța ne poate amăgi generând două mesaje cu același număr de serie, însă adresat la două persoane diferite. Ea poate trimite un mesaj: “Eu, Alinuța, îi dau lui Bulă un moldocoin, cu numărul de serie 654321” lui Bulă și altul “Eu, Alinuța, îi dau lui Ghiță un moldocoin, cu numărul de serie 654321” lui Ghiță. Ambii, Bulă și Ghiță utilizează copiile lor de block chain pentru verificare. Verificarea e efectuată în aceeași perioadă scurtă de timp și ambii acceptă tranzacția și transmit acceptul lor mai departe în rețea. Iată problema. Cum alții din rețea trebuie să rectifice block chain-ul lor? Nu există o metodă coerentă de a rectifica block chain-ul. Și chiar de ar fi, pe cine să-l credem? Pe Bulă sau pe Ghiță?

Cum putem rezolva problema cu dubla cheltuire? O soluție ar fi, ca atunci când Alinuța transmite lui Bulă un moldocoin, Bulă să nu încerce să verifice singur tranzacția. Bulă ar putea să transmită mesajul rețelei întregi de Moldocoin și să-i întrebe pe ei dacă tranzacția e validă. Dacă ei, cei din rețea, colectiv decid că tranzacția e validă atunci Bulă acceptă moldocoin-ul și toți rectifică block chain-ul. Acest prototip de protocol ne ajută să prevenim dubla cheltuire, pentru că dacă Alinuța va încerca să cheltuie moldocoin-ul său cu Bulă și Ghiță, alții din rețea vor vedea aceasta și îi vor comunica lui Bulă și lui Ghiță că există o problemă cu această tranzacție.

Ca exemplu, să presupunem că Alinuța dorește să-i dea lui Bulă un moldocoin. Ea semnează mesajul “Eu, Alinuța, îi dau lui Bulă un moldocoin, cu numărul de serie 654321” și-i transmite mesajul semnat lui Bulă. Bulă controlează la validitate, însă nu acceptă imediat, ci răspândește mesajul în rețea. Ei toți, verifică mesajul și confirmă că “Da, Alinuței îi aparține moldocoin-ul cu numărul de serie 654321, și poate fi transferat lui Bulă”. Demîndată ce un număr suficient de oameni confirmă, toți rectifică block chain-ul că moldocoin-ul 654321 îi aparține lui Bulă.

Acest protocol are multe elemente imprecise încă. De exemplu, ce înseamnă “îndată ce un număr suficient de oameni confirmă”? Ce înseamnă “suficient”? Nu poate fi toți cei din rețea și nici nu e specificat un procent anumit. Nu încercăm să rezolvăm această problemă acum, însă vom încerca să rezolvăm o altă problemă soluția căreia o rezolvă și pe aceasta.

Dovada muncii (proof-of-work).

Să presupunem că Alinuța dorește să facă o dublă cheltuire în rețeaua descrisă mai sus. Ea o poate face prin preluarea rețelei Moldocoin. Ea poate utiliza un sistem automatizat pentru a crea un număr mare de identități, să zicem un miliard, în rețeaua Moldocoin. Ca și mai devreme, ea va încerca să cheltuie dublu același moldocoin cu Bulă și Ghiță. Dar atunci când Bulă și Ghiță vor întreba rețeaua să valideze tranzacțiile, toate identitățile false create de Alinuța îi pot amăgi. Zicându-i lui Bulă că tranzacția lui e validă și zicându-i lui Ghiță că și a lui e validă.

O soluție șmecheră de a rezolva această problemă e să utilizăm ideea de proof-of-work (dovada muncii). Idea e destul de neintuitivă și implică combinația a două idei: 1) de a face (artificial) costisitoare validarea tranzacțiilor pentru utilizatorii din rețea și 2) de a-i remunera pe cei care ajută cu validarea tranzacțiilor. Remunerarea e necesară pentru a-i face pe utilizatorii din rețea să valideze tranzacțiile chiar dacă noi le-am făcut calculabile costisitor. Beneficiul de a face costisitoare validarea tranzacțiilor e că validarea nu mai poate fi făcută de cineva care controlează o mulțime de identități din rețea, ci de cei care au putere de calculator pentru validare. Cum vom vedea mai jos, putem face ca celor care trișează să nu le mai fie rentabil să trișeze.

Aceasta e esența dovezii muncii. Dar pentru a înțelege într-adevăr dovada muncii (proof-of-work) vom trece prin niște exemple.

Să presupunem că Alinuța distribuie în rețea mesajul: “Eu, Alinuța, îi dau lui Bulă un moldocoin, cu numărul de serie 654321”.

Alții din rețea primesc acest mesaj și îl adaugă într-o coadă cu tranzacțiile care au fost distribuite, însă nu au fost încă aprobate. De exemplu, un utilizator din rețea cu numele Vlad poate avea următoarele tranzacții în așteptare:

“Eu, Ion, îi dau lui Vasile un moldocoin, cu numărul de serie 443322”
“Eu, Alinuța, îi dau lui Bulă un moldocoin, cu numărul de serie 654321”
“Eu, Maria, îi dau lui Mihai un moldocoin, cu numărul de serie 445566”

Vlad verifică cu block chain-ul lui și vede că toate tranzacțiile sunt valide. El poate transmite întregii rețele că aceste tranzacții sunt valide. Însă, până a face aceasta el trebuie să rezolve puzzle de calcul - proof-of-work. Fără soluția la acest puzzle, restul rețelei nu-i va accepta validitatea tranzacțiilor.

Ce puzzle trebuie Vlad să rezolve? Pentru a Vă explica să luăm o funcție hash h care e cunoscută de toți din rețea - adică e inclusă în protocol. Bitcoin utilizează funcția hash binecunoscută SHA-256, însă poate fi utilizată orice hash funcție. Deci, Vlad ia toate tranzacțiile din coada l și adaugă la sfârșit un număr x (să-l numim nonce). De exemplu dacă l=“Salut lume!” și nonce x=0 vom avea.

h(“Salut lume!0”)= 4f8574dc0ca7fa7f046cf2a61c7964b177d3b60c3133e7537ea1f76829aacdc0

Puzzle care Vlad trebuie să-l rezolve, proof-of-work, să găsească un astfel de x, ca atunci când îl adăugăm la lista tranzacțiilor l hash-ul să se înceapă cu un anumit număr de zerouri. Să încercăm cu x=1.

h(“Salut lume!1”)= 5905051116ef23c9fa77cd654575cd86d8e42cd744f5b5a6980493f7e171e53f

heh.. nu se începe cu nici un zero..

Putem continua cu x=2,3 … În sfârșit x=8 obținem:

h(“Salut lume!8”) = 03b94aaf33d0a4bb88d3c1c7fa4aace92891e34b9689d793a060e6645e80af7f

Acest nonce ne dă doar un zero la început de rezultat, e doar un puzzle simplu, pentru un puzzle complicat se cer multe zerouri consecutive.

Ceea ce face ca acest puzzle să fie foarte greu de rezolvat e funcția hash, care se comportă ca un număr aleator, la cea mai mică schimbare a mesajului rezultatul funcției se schimbă total. Deci dacă dorim să avem un rezultat care să înceapă cu 10 zerouri, va trebui să încercăm 16^10 valori diferite pentru x pentru a găsi nonce-ul necesar. E un lucru foarte greu de calculat.

Evident, acest puzzle poate fi mai puțin sau mai mult dificil de rezolvat prin mărirea numărului de zerouri la rezultatul funcției hash. De fapt, protocolul Bitcoin anume asta și face, doar că nu numărul de zerouri, ci un număr care se numește target, iar rezultatul funcției hash trebuie să fie mai mic decât acest target. Acest target se ajustează pentru a da posibilitate oricui din sistem să găsească o soluție în 10 minute.

Deci, să zicem că Vlad a găsit nonce-ul x norocos. Felicitări. (El va fi remunerat pentru că a găsit soluția). El va distribui blocul de tranzacții spre aprobare împreună cu valoarea x. Ceilalți participanți din rețeaua Moldocoin pot verifica x dacă într-adevăr e proof-of-work. Și apoi să rectifice block chain-urile lor cu noile tranzacții din block.

Pentru ca idea cu proof-of-work să aibă succes, utilizatorii din rețea trebuie să fie stimulați pentru a ne ajuta cu validarea tranzacțiilor. Fără o astfel de stimulare, ei nu au nici un motiv să-și cheltuie timpul de calculator cu validarea tranzacțiilor altor oameni. Și dacă nimeni din sistem nu va valida tranzacțiile, sistemul nu va lucra. Soluția e să remunerăm oamenii pentru validarea tranzacțiilor. Să presupunem că vom recompensa cu moldocoini pe fiecare care va valida cu succes tranzacțiile. Recompensa trebuie să fie destul de mare pentru ca să avem doritori.

În protocolul Bitcoin, procesul de validare se numește minerit. Pentru fiecare block de tranzacții validate, minerul norocos primește o recompensă în bitcoini. Inițial se împărțeau a câte 50 de bitcoini. Însă la fiecare 210000 de blocuri validate (aproximativ la fiecare 4 ani) recompensa se înjumătățește. Rata de înjumătățire s-a întâmplat doar o singură dată, acum se dau câte 25 de bitcoini. Rata de înjumătățire la fiecare 4 ani va dura până în 2140. Până atunci când remunerarea va ajunge la 10^-8 bitcoini. 10^-8 bitcoin e unitatea minimală a bitcoin-ului și se numește satoshi. Deci spre 2140 masa totală de bitcoini va înceta să crească. Însă nu va elimina stimularea pentru validarea tranzacțiilor. Bitcoin presupune o plată minimă pentru procesarea tranzacțiilor, care se va duce la minerul care validează tranzacția.

Proof-of-work e un fel de competiție pentru a aproba tranzacții. Un miner are șansa de a câștiga proporțional cu puterea de calcul a a mașinilor sale față de puterea de calcul totală a sistemului. De exemplu dacă deține calculatoare cu puterea de 1% din puterea totală de calcul a rețelei Bitcoin, el va avea aproximativ șansa de 1% că  va câștiga competiția. Cu cât mai multă putere de calcul, cu atât mai mari șanse de câștig. Un miner necinstit, are relativ puține șanse pentru coruperea validării tranzacțiilor.

Deși un miner necinstit are puține șanse de a corupe block chain-ul, nu e deajuns pentru a avea încredere în valuta virtuală. Noi încă nu am finalizat problema cu dubla cheltuială.

Acuș vom analiza dubla cheltuială. Însă până atunci vom descrie un detaliu important în Moldocoin. Noi dorim ca în rețeaua Moldocoin să avem o ordine a tranzacțiilor. Dacă nu vom avea aceasta, nu va fi clar cine și ce moldocoini deține. Pentru aceasta noi vom cere ca orice block nou întotdeauna să includă un pointer la ultimul block validat din chain. Un block chain este un șir de block-uri aranjate unul după altul și fiecare conține pointer la block-ul precedent.

Ocazional, apare câte o bifurcație în block chain. Aceasta se poate întâmpla atunci când 2 mineri rezolvă puzzle-ul aproape simultan și ambii distribuie în rețea blocul nou validat și unii oameni rectifică după rezultatul la un miner alții de altul.

Și aceasta cauzează exact problema pe care noi o doream rezolvată, nu mai este clară ordinea tranzacțiilor și nici nu e clar cui aparțin moldocoinii. Din fericire este o soluție simplă pentru a anula bifurcațiile. Regula e următoarea: dacă apare o bifurcație, utilizatorii rețelei păstrează ambele ramificări. Iar minerii continuă să lucreze doar la bifurcația care are cel mai lung block chain. În rețeaua Bitcoin, o tranzacție nu se consideră confirmată până când: 1) Nu face parte din cea mai lungă bifurcație și 2) după ea urmează încă 5 blocuri în aceiași bifurcație.

Am pus la punct problema cu ordinea tranzacțiilor, să ne întoarcem la utilizatorul necinstit care vrea o dublă cheltuire. Presupunem că Alinuța încearcă să cheltuie aceiași bani cu Bulă și Ghiță. O variantă ar fi ca ea să valideze blocul care include ambele tranzacții. Presupunând că ea deține un procent din puterea de calcul a rețelei, există o șansă ca ea prima să rezolve puzzle-ul. Din nefericire pentru Alinuța, dubla cheltuială imediat va fi detectată de alții din rețeaua Moldocoin și vor respinge blocul chiar dacă conține rezolvarea proof-of-work.

O problemă mai serioasă e atunci când ea va distribui ambele tranzacții cu același moldocoin cheltuiți cu Bulă și Ghiță. Ea poate să distribuie o tranzacție spre unii mineri iar alta către alții în speranța că ambele vor fi validate. Din fericire rețeaua, după cum am văzut mai sus va confirma doar o tranzacție, nu și pe ambele.

Voila, dubla cheltuire a fost rezolvată, cu ajutorul unor tehnici de proof-of-work și ordonarea tranzacțiilor. Avem o valută virtuală deplin funcțională. Aceasta și este adevărata invenție. Până la Bitcoin lumea credea că e imposibil de a transmite un mesaj digital și înghețat în timp.

Proof-of-work și mineritul generează multe întrebări. Ce răsplată e îndeajuns pentru miner pentru a mineri? Cum creșterea masei de moldocoin afectează economia Moldocoin? Se vor concentra toți moldocoinii în câteva mâini?

Tranzacțiile care le-am prezentat în forme de mesaje, într-adevăr e un limbaj mult mai complex și uneltele financiare care vor fi inventate în viitor vor fi anume în baza acestui limbaj.

Ce unelte financiare vor fi inventate? Multe, foarte multe. Ne rămâne să așteptăm ca oamenii cu scaun la cap să le inventeze, până atunci ne vedem la bursă!

Guvernul live.

Povestea cu live-urile de la ședințele de guvern e haioasă și se va termina în curând.

Odată cu venirea democraților la putere Privesc.Eu a hotărât să retransmită ședințele de guvern. Pentru cei care nu cunosc, la guvern este o odaie rezervată jurnaliștilor în care este un TV pe care se arată ce se discută la ședința de guvern. Jurnaliștii mănâncă răsărită și scriu articole în baza celor auzite și văzute, adică telefonul stricat.

Păi, Privesc.Eu a hotărât să le facem un bine jurnaliștilor cât și simplilor cetățeni să privească live-urile din Guvern. Cum? Prin simpla conectare la TV-ul din camera jurnaliștilor iar audio de la prin microfon de la boxele din acea cameră. Multe noutăți pipărate și cuvinte au aflat cetățenii de la jurnaliștii gălăgioși. Au mai fost și alte televiziuni care se rupeau să dea live și filmau TV-ul. După ce metoda a căpătat popularitate, guvernul a decis să dea și el live. Cel puțin așa a fost anunțat. Însă din câte eu am scos din arhivele guvernului am văzut că pe timpul comuniștilor se filmau toate ședințele și se plasau online, doar că erau foarte greu de găsit.

Azi democrația a învins. Au hotărât să închidă live-urile. Pentru că miniștri nu se pot materi în guvern. Sunt filmați și fiind filmați fac populizme nu lucru. Au adus o mulțime de exemple unde ședințele de guvern sunt închise. Sunt sigur că sunt tot atâtea state unde ședințele sunt publice.

În statele unde ședințele sunt închise, opoziția cere să fie de tip închis pentru ca guvernanții să nu-și facă PR. Deci, azi, logic, comuniștii trebuiau să fie pentru închiderea live-ului nu democrații.

Uite așa o poveste cu 3...

1 Comment

Aplicația iPhone Privesc.Eu

Aplicația iPhone Privesc.Eu

Demult mă întrebau prietenii de ce nu o fac, o aplicație Privesc.Eu pentru iPhone. Răspunsul e în Google Analytics. Pentru că sunt puțini oameni cu iPhone/iPad! Rețeaua Privesc.eu a găsit că în Moldova și România sunt aproximatic 130 mii de astfel de oameni. Însă tendința e în creștere, săptămâna trecută am bătut recordul cu 28 mii de vizite de pe mobil.

Publicul nostru țintă vine dimineața pe la 9:00 pe site, studiază agenda și se întorc când începe un eveniment interesant. Deci aplicația MVP (minimum viable product) trebuie să rezolve problema publicului țintă. Să le amintească când se începe un live. O aplicație cât se poate de simplă, ador aplicațiile simple și utile.

Ca să nu pierd timpul din contul altor proiecte am făcut aplicația în goană, într-un weekend. Aplicația conține doar 3 forme: Lista evenimentelor, setările și playerul video.

Din lista evenimentelor vă puteți da seama ce eveniment a început, care e live sau în arhivă. Dacă evenimentul nu a început, apăsați pe el și veți primi o notificare când va începe. Privesc.Eu e același pentru România și Moldova, aplicația determină din ce țară accesezi Internetul și îți arată doar acele evenimente. Din setări puteți schimba forțat regiunile și vă puteți abona la notificări după categori. Gata. Asta e tot.

Îți rămâne să tragi aplicația, și să aștepți când va începe un live.

Pentru fanii iOS-ului, voi lămuri cum a fost făcută.

După ce îți faci un cont apple pentru developer. Moldoveni, trebuie să trimită un fax la Apple cu semnatura și numărul de cardului de credit. Apoi setezi conturile bancare, tragi XCode de pe App Store. Îți adaugi UDID-ul iPhone-ul pe portalul de la Apple. Pentru că noi dorim să trimitem notificări, bundle ID trebuie să fie exact, fără *. Apoi faci certificatele pentru sandbox și production pentru notificări și provision profiles pentru developer și distribuții ad-hoc și distribuții Apple.

Lista device-urilor asignate contului meu.

Lista device-urilor asignate contului meu.



Privesc.Eu Bundle ID

Privesc.Eu Bundle ID

Deschizi XCode și alegi un template pentru table view. Niște mici modificări, setăm bundleID, iconițele, default screen-uri. Și putem rula aplicația pe simulator sau device.

Setari în XCode

Setari în XCode

Cu librăria ASIHTTP dăm un request la server care întoarce rezultatul în JSON, iar cu frameworkul SBJSON îl procesăm și îl facem în NSObiecte. Îl transmitem la UITablewView datasource și avem live-urile afișate. Facem un custom la UICellView și băgăm UIImageView inteligent, care singur își trage imaginea din Internet în background, fără a frâna scrolarea. Am luat din source code de la Facebook și am modificat 😉

La pornirea aplicației cerem utilizatorului să ne dea voie să-i trimitem notification

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

Iar când avem răspunsul îl trimitem la serverul nostru. Să știe și serverul ce și cum, ce deviceToken cu ce regiuni și ce categorii să-l alerteze.

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
self.onlineController.deviceToken = deviceToken;
[self.onlineController updateDeviceToken:self.onlineController.deviceToken];
}

Trimisul notificarilor e destul de complicat, însă sunt băieți harnici care rezolvă repejor. Hei, programerii sunt leneși și folosesc la maximum codul altora.

Serverul e pe .NET framework în c# sub Windows Azure. Facem un Worker Role, cu un Thread care procesează o coadă de mesaje. Folosim frameworkul PushSharp pentru a trimite notificări la iPhone, Android sau Windows Phone.

PushService push = new PushService();
//Wire up the events
push.Events.OnDeviceSubscriptionExpired += new PushSharp.Common.ChannelEvents.DeviceSubscriptionExpired(Events_OnDeviceSubscriptionExpired);
push.Events.OnChannelException += new PushSharp.Common.ChannelEvents.ChannelExceptionDelegate(Events_OnChannelException);
push.Events.OnNotificationSendFailure += new PushSharp.Common.ChannelEvents.NotificationSendFailureDelegate(Events_OnNotificationSendFailure);
push.Events.OnNotificationSent += new PushSharp.Common.ChannelEvents.NotificationSentDelegate(Events_OnNotificationSent);
var appleCert = RoleEnvironment.IsEmulated ?
Certificates.loadCertificateFromAppData("PrivescEu.Sandbox.p12") :
Certificates.loadCertificateFromBlob("PrivescEu.Production.p12");
push.StartApplePushService(new ApplePushChannelSettings(!RoleEnvironment.IsEmulated, appleCert, "catpecesauitsascotparoladeaici"), new PushServiceSettings());

....
un ciclu veșnic

//Fluent construction of an iOS notification
AppleNotification an = NotificationFactory.Apple()
.WithTag(pn) //for feedback in events
.ForDeviceToken(pn.DeviceToken)
.WithAlert(pn.Title)
.WithSound(pn.Sound)
.WithBadge(pn.Bag)
.WithCustomItem(pn.PayLoadName, pn.PayLoadValue);

push.QueueNotification(an);

iar pe device-uri prindem aceste notificari.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (!userInfo) return;
[self processRemoteNotification:userInfo];
}

Ne rămâne să afișăm screen de live. E simplu, se face în două rânduri.

MPMoviePlayerViewController *mpc = [[MPMoviePlayerViewController alloc] initWithContentURL:live.VideoStreamUrl];
[self presentMoviePlayerViewControllerAnimated:mpc];

Compilăm, testăm, dăm la prieteni să-și spună părerile, nu-i ascutăm și trimitem la iTunes App Store. Așteptăm o săptămână pentru aprobare și facem buzzzzz până ne ridicăm pe primul loc.

Privesc.Eu primul în topul aplicațiilor gratuite pe iPhone

Privesc.Eu primul în topul aplicațiilor gratuite pe iPhone


Pitch well and prosper!
Vitalie Eșanu.