Author Archives: admin

“Cum VoteMeApp asigură că toate voturile au fost contorizate și nu sunt modificate?” este o întrebare pe care o adresează cei care votează într-un scrutin secret. Un scrutin online secret se caracterizează prin faptul că platforma afișează doar suma voturilor pentru fiecare candidat, nu și opțiunea de vot a fiecărui votant.

La scrutinele cu votare secretă este mai dificil să convingem participanții că voturile lor sunt luate în calcul și nu au fost modificate pentru că implică puțină matematică. Una din soluții este ca platforma de votare să publice o informație parțială despre vot, imediat după ce persoana votează. Astfel sistemul transmite fiecărui votant un cod unic, ca mai apoi să nu existe posibilitatea de a modifica cumva voturile.

O opțiune destul de simplă este amprenta (semnătura) digitală a votului. Când serverul primește un nou vot, el generează un număr unic foarte lung. Acest număr este compus prin intermediul unui algoritm bine cunoscut în industria criptografică și se numește SHA256. Acest algoritm hash stă la baza comunicațiilor prin Internet, a semnăturilor digitale și chiar a valutelor criptografice.

O funcție hash transformă orice cantitate de informație într-un număr. Dacă aplici exact aceeași informație primești același număr. Dacă schimbi măcar un bit sau un caracter în acea informație - obții cu totul alt număr. Este de menționat că având numărul generat, nu este posibil să fie dedusă care a fost informația inițială.

Să precăutăm situația când avem un scrutin cu 4 candidați:

  • Candidat 1
  • Candidat 2
  • Candidat 3
  • Candidat 4

Condiția votului este că dintre cei patru candidați trebuie să fie alese 2 persoane. Să considerăm că opțiunea noastră este: Candidat 2 și Candidat 3.
Serverul generează pentru fiecare vot, o parolă unică de 100 de simboluri, inițializează algoritmul hash HMAC (versiunea SHA256 cu parolă), apoi aplică algoritmul asupra textului Candidat 2,Candidat 3. Rezultatul este afișat în fereastra de confirmare a votării și poate fi trimis și prin SMS.

Acest număr unic pare aleator, însă el are o proprietate criptografică foarte bună. Dacă este cunoscută parola generată de server și utilizat același text ca în opțiunea de votare Candidat 2,Candidat 3, se va obține același cod (rezultat), care a fost afișat în fereastra de confirmare a votării. Pe de altă parte serverul, după ce a trimis acest cod votantului, practic nu mai poate genera (probabil i-ar trebui câteva milioane de ani) o altă combinație de parolă care să dea același cod, dar având alte variante de voturi.

Deci, serverul are parola secretă cu care a fost generat acest număr, iar votantul are amprenta digitală și știe care a fost opțiunea sa de vot.

Pentru a se asigura că votul său a fost înregistrat corect, votantul poate cere de la organizator parola generată de server, apoi poate folosi orice site online care oferă posibilitatea de hash cu algoritmul HMAC, indicând parola obținută și textul cu opțiunea sa de votare Candidat 2,Candidat 3. Rezultatul obținut trebuie să fie identic cu codul care a fost afișat în fereastra de confirmare a votării și primit prin SMS.

Pentru a exersa această situație puteți încerca acest site sau oricare alt site public (găsiți pe Internet multe, căutând după cuvintele cheie HMAC SHA256 verification).

Mai jos este un exemplu de parolă de 100 de simboluri generată de server, textul din opțiunea de votare a votantului și amprenta digitală.

Parolă: Nsj9BqRqzxGqEpuY0NAXv7gQOOFlRONacbH8ucblp9eW8GmUZSusqMNRt0qMfHIKZiycd6Zu8qKFbyYDd1xJ21C8VYQIJlzU3Wj0
Text: Candidat 2,Candidat 3
Amprenta digitală: 4cb027e6977424074a515a34df0ffc9659d6082394c0bc1fd3d60af9e20c17fb

PS: Următorul articol va fi despre posibilitatea de auditare a rezultatelor votării cu ajutorul criptografiei.


Trebuie să permitem votanților să voteze o singură dată sau să poată vota ori de câte ori doresc și doar ultimul vot să se ia în considerație?

Acest articol vine cu o explicație la o dilemă legată de temerile unor participanți la alegerile online organizate de VoteMeApp.

La scrutinele offline se investesc resurse considerabile pentru ca în spațiu limitat și în timp restrâns să adune observatorii, care asigură bună desfășurarea a alegerilor. Una din sarcinile de bază ale observatorilor este să urmărească ca votantul să nu fie influențat de cineva în timpul exprimării votului într-un spațiu limitat.

În mediul online nu mai există restricții de spațiu. Costul serverelor, comparativ cu ora de lucru a unui observator este minuscul - nu mai există nici restricții de timp. Acesta este avantajul foarte mare a online-ului față de offline. Poți vota de unde vrei, la ce oră dorești.

Din punct de vedere tehnologic, votarea repetată se face foarte simplu. Votul precedent se anulează și să înlocuiește cu cel nou. Calcularea rezultatelor ia în considerație doar cel mai recent vot.

Pentru siguranță plaforma VoteMeApp folosește ambele metode. Avem o bază de date unde se păstrează doar ultima votare și alta unde se păstrează toate votările inclusiv și semnăturile digitale pentru auditare, dacă va fi necesară.

Rămâne o singură dilemă - o singură votare sau poți vota ori de câte ori dorești?

O singură votare este ok pentru votare offline, însă pentru cea online această restricție este un risc. Votanții nu întotdeauna își pot securiza spațiul și timpul de votare. De exemplu: Șeful cheamă toți angajații să voteze cum zice el. În cazul când sistemul online e setat să accepte doar o singură votare, toți subalternii în cazul dat rămân fără nici o variantă de anulare e votului. În cazul când sistemul e setat să accepte ultimul vot, subalternii liber pot să revoteze ori de câte ori doresc de acasă în timpul comod lor.

Contraargument la votare multiplă este că cineva te poate influența (cu o bere) să-ți schimbi votarea în favoare lui. Probabil, dar iar ai opțiunea să te duci acasă în spațiul tău privat (cu capul treaz) să mai gândești și să-ți schimbi votul.

Estonia, care este lider în votările online, face la fel la alegerile naționale din 2005. Votarea repetată este un avantaj, te ajută să fii liber în exprimarea votului.

Această dilemă a existat și în Estonia. Chiar președintele țării a atacat la Curtea Constuțională și a pierdut.

"Internet voting is available during an early voting period (sixth day to fourth day prior to Election Day). Voters can change their electronic votes an unlimited number of times, with the final vote being tabulated. It is also possible for anyone who votes using the Internet to vote at a polling station during the early voting period, invalidating their Internet vote. It is not possible to change or annul the electronic vote on the Election Day. A comparison of the cost-efficiency of the different voting channels offered in the Estonian Municipal Elections (2017) concluded that the Internet Voting is the most cost-efficient voting channel offered by the Estonian Electoral System.

The principle of "one person, one vote" is sustained as the voter can potentially cast more than one ballot but still only a single vote. This was challenged in August 2005 by Arnold Rüütel, the President of Estonia, who saw the new e-voting provisions in the Local Government Council Election Act as a breach of the principle of equality of voting. The President brought a petition against the e-voting provisions to Estonian Supreme Court but lost."

PS: Următorul articol va fi despre cum VoteMeApp asigură secretul votului asigurând imposibilitatea de a modificare a rezultatelor alegerilor.

La începutul anilor 2000 a început o luptă pentru dominația pieții video. Lupta a câștigat-o Google cumpărând YouTube-ul. Google apoi ani de zile a subsidat YouTube-ul. Era imposibil să exiști doar pe publicitate la câte cheltuieli de storage și bandwith și atacuri din partea companiilor media. Între timp alte startup-uri în acest domeniu au dat faliment ori sunt zombie.

Privesc.Eu a rezistat doar datorită faptului că hostingul local era de 10x-20x mai ieftin decât cel internațional.

În fine, după ce storage-ul și bandwith-ul s-au ieftinit, YouTube-ul a devenit foarte profitabil. Mai ales după ce au apărut smartphone-urile. Google au creat o dependență față de YouTube noii generații, care nici nu mai știu cum să pornească un televizor.

Mai toate companiile private și intituțiile de stat văzând cât este de scump video hostingul privat, au început să lucreze pentru YouTube, încărcând toată arhiva lor privată pe hosting “gratuit”. Dar ca și în legea conservării energiei, nimic nu e gratuit în Internet, totul re revinde. 

Această bucată de tort îi deranja pe europeni, și au găsit o soluție, să facem o lege care să nu le mai permite așa simplu să colecteze datele despre utilizatori și să-i targeteze cât mai eficient. Companiile s-au conformat și a inundat primele pagini cu popup-uri cu Accept All și au făcut un user experience rău de tot. Dar cumva lumea apăsa Accept și colectarea datelor mergea mai departe.

Recent, Apple au introdus o nouă opțiune în iOS unde interzice express aplicațiilor să mai facă tracking. Această simplă restricție a afectat marii jucătorii care aveau un bussiness model bazat pe publicitate, printre care și YouTube, unde majoritatea consumului se petrece de pe telefoanele mobile.

Mica ajustare a scricat mașinăria de targetare a utilizatorilor și respectiv Youtube a început să facă inventarierea asset-urilor lor.

De la 1 iunie 2021, YouTube vine cu un răspuns. Își rezervă drepturile să afișeze publicitate pe orice video. Bam. Sutele de mii de site-uri care folosesc YouTube pe post de video hosting gratuit vor fi inundate cu publicitate netargetată.

În plus, influencerii din afară US care fac bani din YouTube vor fi taxați conform legilor din US.

Salut birocraților europeni și succese în noua legislație care limitează AI-ul, în care europenii vor deveni bias în sistemul ML, pentru că se autoexclud.

Audio Social Network

Am o dragoste aparte pentru a crea produse pentru consumatori, pe de altă parte urăsc să fac soft pentru enterprise. 

SpamBully, Camera Genius, Privesc.Eu, diacritice.ai, Invat.Online, sunt doar cateva din produsele care au avut succes. Evident că multe din proiectele mele au avut eșec, dar asta nu mă oprește să revin la ele, peste ani, din nou. 

Unul din proiectele care am investit foarte mult timp și bani a fost Joketastic, o rețea socială audio pentru bancuri. L-am creat prin 2012. Chiar am fost și în Sillicon Valley și am pitch-uit investitori. Până la urmă l-am închis. Concluzia că rețelele audio încă nu sunt înțelese, poate în viitor. Radu Chivriga îmi aducea aminte cu orice ocazie să revin la el și să-l refac.

Un alt caz l-am avut în martie 2020, când a început pandemia și oamenii erau forțați să stea acasă, însă mulți doreau să comunice. Astfel pe platforma privesc.eu am construit niște beciuri virtuale unde lumea vorbea între ei. Mare mi-a fost mirarea că acele beciuri virtuale durau până la 5 ore de discuții aprinse, iar o mulțime de oameni ascultau online, dar nu participau la discuții.

Aceste 2 cazuri din trecutul meu nu-mi dădeau pace, până în momentul când am aflat de Clubhouse la sfârșitul anului 2020, iar prin ianuarie am reușit să-mi fac și un cont pentru a mă convinge că anume așa lumea se comportă cum intuiam eu. M-a convins că timpul a venit și pentru rețelele sociale audio.

Într-o sâmbătă, într-o oră, am făcut un app iOS care lucra pe agora.io. Le-am dat aplicația lui Alex Mânza și Radu Chivriga și am avut o discuție de vreo oră la care m-am convis că plaforma audio lucrează superb.

Deci, m-am hotărât să fac iar o rețea socială audio, din simplu motiv că acest segment abia acum se descoperă și se poate face foarte multe inovații. M-am pus în regim de sprint/maraton și am hotărât să construiesc Ascult.Eu.

Notă: Mai departe urmează înjurături tehnologice 😀

Am început cu backendul. Este făcut pe asp.net core 5, și hostat pe windows azure, în instance pe linux. Baza de date nerelațională este hostată pe Cosmos DB, probabil cea mai rapidă baza de date din lume și autoscalabilă. 

Când ai mai multe webservere de obice se folosește un serviciu/server de cache comun, aici am folosit Redis, un microservice din Azure.

Pentru comunicarea realtime între utilizatori și server, adică ridicarea mânii, microfon activ, intrarea și ieșrile din room am folosit SignalR, tot de la Azure.

Visual Studio 2019, și template-urile mi-au permis să fac Api pentru backend în 2 zile, inclusiv testarea rapidă prin swagger și postman.

Setările administrative au durat vreo oră. Domen-ul, configurarea CDN-ului în Azure, Cloudflare pentru cache, cumpărarea de email hosting la Google și setarea MX-urilor. Nimic complicat.

De luni, am început să fac aplicația pe iOS. Am ales special iOS, pentru că tocmai terminasem versiunea la iOS pentru privesc.eu pe o tehnologie mai nouă de a scrie UI/UX care se numește SwiftUI.  Off, cât de mult am așteptat eu așa tehnologie să apară, până la ea programatorii aveau un coșmar să scrie UI pentru aplicații. 

Timp de 7 zile am transpus Api din backend în UI. Unele funcționalități cum ar fi evenimente și comunități sunt implementate în aplicație însă ascunse, pentru moment. După 7 zile am pus aplicația pe TestFlight, un serviciu de testare de la Apple care îți permite să distribui aplicația ta fără a fi publicată în App Store. Peste 80 de oameni au descărcat aplicația și am făcut primele teste, au fost unele crash-uri, dar din fericire Firebase Crashlytics le-a colectat pe toate și am găsit imediat codul unde se petrecea crash-ul. Era unul banal.

Push notificările le trimit prin Firebase de la Google.

10 zile, a durat de la scrierea primului cod până la testarea unui room cu toți prietenii mei care au venit să se joace cu aplicația. Mulțumesc lor, am inspirat încă o doză de entuziasm și am pornit la drum să fac Android-ul.

Android-ul a durat ceva mai mult, îl cunosc mai puțin, dar și tehologiile lor sunt cumva în urma iOS-ului. Am folost Jetpack Compose pentru a crea UI, e cumva similar cu SwiftUI de la iOS. Jetpack Compose e încă în Alpha versiune, practic zilnic fac update, nimic documentație. Cinstit să vă spun, dacă Google nu avea această tehnologie nici nu mă apucam de Android. 

Jetpack Compose și SwiftUI, practic m-au făcut să fiu de 10x mai rapid decât alte frameworkuri UI. 

Peste 14 zile de programare în Kotlin, deja începusem să mă consum, Agora.IO și WebRTC nu prea vroiau să lucreze, în plus era și mai greu de testat pentru de fiecare dată trebuie să pornești cel puțin 2 telefoane pentru a testa audio. Aproape dupa 3 săptămâni am reușit să fac și android-ul să meargă, și însă nu sunt sigur că merge totul ok.

Audio, căluțul din spatele la Ascult.Eu, e făcut pe serviciu de voice chat de la Agora.io, adică acelaș serviciu care stă în spatele și la Clubhouse. Spre deosebire de clubhouse, eu am făcut o ajustare. Doar cei care vorbesc, se aud pe serviciul agora.io, pentru care se plătește per minute per user, iar conversația se face restream pe un server hostat pe digital ocean Ant Media. De acolo streamul audio merge spre ascultători. Aceast mi-a permis, după calculele mele să am cheltuieli de 25x - 30x mai mici decât ce de la clubhouse, tradeof e că ascultătorii aud cu întârziere de 2 secunde ce vorbesc speakerii.

Pe lângă Clubhouse, au mai apărut și alți jucători ca Twitter Spaces, Telegram audio, Stereo, probabil vor apărea și mai multe. Ascult.Eu se orientează mai mult pe persoane identificabile, cu nume real și fotografii reale, probabil voi face enforcement ca să pui selfie. Asta nu e un moft, dar consider că în comunicare audio, toți participanții trebuie să fie identificați, fără anonimi, fără trolli. Oamenii, room-urile, evenimentele comunitățile sunt restricționate după limbile de comunicare.

Topul celor celebrităților se face simplu. Cei vobesc în fața la câtor mai mulți oameni acela are mai multe ore/atenție și respectiv se ridică în top. Followerii sunt doar un proxy pentru a genera ore/atenție.

După aceste zile, în care lucram câte 14 ore pe zi, am devenit foarte extenuat. Mi-a trebuit încă o săptămână să nu fac nimic pentru ami reveni. Deci, nu vă prea recomand un așa sprin/marathon.

Discuțiile din camerele pe ascult.eu au fost foarte utile. Am cules o mulțime de idei. Le mulțumesc tuturor pentru aport, le voi implementa cât de curând posibil.

Dacă aveți idei, sunteți bineveniți  să facem împreună viitorul radioului.

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.


Mulți din voi ați observat graficele cum se dezvoltă pandemia. Spre surprinderea multora aceste grafice prezic destul de exact ce se va întâmpla. Nu e nici o magie aici, sunt niște formule matematice în care se ajustează niște coeficienți. Aceste formule lucrează la numere mari. Formule de probabilități și statistică se aplică și pentru alte domenii nu doar cum se propagă virsul, ci și cum se propagă o istorioară.

Zi de zi, oamenii comunică între ei cu miliarde de istorioare, unele dispar iar altele se propagă cu o viralitate uimitoare. Exact ca și virusul care devine pandemie, unele istorioare devin religii.

Dealungul istoriei, milioane de istorioare puteau deveni religii, și doar unora le-a reușit. Exact ca și în cazul virusului, ele au avut succes doar din cauza că au găsit balanța potrivită pentru a se propaga, nici prea fake dar interesante. Iar celelalte miliarde de mutații/istorioare nu a reușit.

Pe parcursul transmiterii virușii mutează, din foarte agresivi devin mai puțini agresivi. Exact ca și religia, pentru a se propaga mai ușor, intră în cultura noastră, în obiceiuri șe ajustează tehnologic. Focul haric, folosing chimia, barometru pentru a prezice ploaia… Inventează noi feluri de distracții sau folosește invenția tiparului, radioului, televiziunii și a online-ului pentru a se propaga.

În concluzie, toate religiile sunt la fel, e pur și simplu o reușită a unor istorioare care au prins la public și iau infectat mental. Religia pentru unii e o metodă de a face bani iar alții mai răi o folosesc pentru a se mențile la putere, exact ca și în cazul virusului.

PS: Iată o carte de care am dat căutând o imagine relevantă acestui articol, pentrul al face mai viral.

Simulator screen from VoteMeApp.

Simulator screen from VoteMeApp.

“Dacă nu-ți este rușine de cum arată produsul tău înseamnă că prea târziu l-ai lansat”.

Pe parcursul a 7 luni am băut cafea cu foarte mulți oameni: influenceri, politicieni, funcționari, designeri, jurnaliști, juriști, ong-ști, programatori și investitori. Mai exact, cu 105 oameni și alții 100 în formă de public speaking.

Eu evitam le să arăt aplicația acestor oameni din două motive. Primul, ideea e mult mai importantă decât aplicația, și doi, oamenii evaluează greșit ideea dacă o prezinți prin intermediul aplicației. Ideea e mult mai importantă pentru că ea nu poate fi schimbată însă UI/UX aplicației poate fi modelată după ce analizezi atent cum oamenii o utilizează convinși de idee.

Multe startup-uri cad în capcana produsului perfect. Crezând că poți reuși să popularizezi un produs doar dacă are designul perfect. Am făcut și eu această greșeală în trecut cu Joketastic. Da, această tactică de design perfect merge la produse industriale unde designul după ce e făcut el este integrat în procesul de producție și nu mai poate fi ușor schimbat sau e foarte costisitor. Nu și la produse soft. Aici instant și foarte ușor poți face update o versiune nouă cu design mai bun. Dacă la produsele industriale te încrezi în intuiția designerului, atunci la produsele soft se procedează altfel - se utilizează din greu tehnici A/B testing. De fapt acelaș Facebook sau Google au sute de astfel de teste. Practic, Facebook-ul arată diferit pentru fecare din noi. Ei colectează aceste date și decid matematic dacă se merită să fie activat noul design pentru majoritatea oamenilor. Doar așa și nu altfel lucrează industria de soft.

“Dacă nu-ți este rușine de cum arată produsul tău înseamnă că prea târziu l-ai lansat”.  Exact din acest motiv am lansat VoteMeApp acum 7 luni. Cu toată rușinea, că e un produs de studenți și are crash-uri. În schimb acest produs are integrat analytics la fiecare acțiune pentru a vedea unde oamenii întâmpină greutăți și cum eu le pot rezolva. Pentru a vă conginge, deschideți wayback machine și vedeți cum arăta la lansare Amazon, Facebook sau AirBnB.

Unele greutăți special sunt lăsate pentru a filtra și a accepta doar oamenii care întradevăr cred în idee, că li-i totuna cum arată produsul sau este greoi. Ei își dau numărul de telefon, numele și selfie pentru că înțeleg că confirmarea identității este o necesitate pentru ca alegerile să fie corecte.

Din câte startup-uri am făcut eu întrecut, acesta este cel mai diferit și iese din toate tipajele pe care eu le cunosc. Este diferit pentru că produsul este destinat unui grup de oameni. Nu e B2C, nu e B2B, nu e B2G însă e B2Group (termen inventat de mine). Dacă la B2C poți lua clienții prin tactici de marketing, la B2B prin sales, la B2G cred că merg prin relații. Nu am ideie cum de procedat la B2Group și încă e într-un domeniu care nu s-a schimbat de 200 de ani. În democrație.

Acest produs, VoteMeApp rezolvă o problemă mare care apare instant și cu periodicitate mare la un grup de oameni - de a-și alege liderul cel mai bun. 

Pentru a promova ideile și tehnologiile, este important de a găsi inovatorii și early adopters, adică 15% din populație și dacă îi convingi pe ei, atunci îi câștigi și pe ceilalți 85%. Însă în grupuri de obicei avem toți acești oameni așezați în Curba lui Bell știută ca Law of Diffusion of Innovation

Pentru a porni roata din loc, startup-urile simulează unele lucruri pentru a le da impresia oamenilor că acolo pe platformă este mișcare. De exemplu la Reddit, fondatorii singuri adăugau linkuri și comentau cu diferite nickname-uri. La joketastic, eu singur colectam bancuri audio și le adăugam pe platformă cu diferite accounturi. Ba chiar am hack-uit Siri pentru a citi bancuri. 😝

La VoteMeApp noi, încercăm să găsim colective care sunt deschise la ceva nou și le propunem să încerce această nouă metodă democractică de alegeri. Am pornit o bună colaborare cu VIP Magazin care are concursul Omul Anului 2019 și cu DCN care organizează alegeri în fiecare țară pentru a alege liderii comunității locale. 

O altă strategie e să inventăm alegeri mai haioase - Cel mai sincer moldovean sau mai serioase - Cine merită să fie Președintele Republcii Moldova 2020.

VotemeApp chiar sucks, crește doar 15% (număr de votări) săptămână de săptămână timp de 7 luni. Noi ne vom stradui din răsputeri și ținem acest pas măcar vreo 2-3 ani.

PS: Mai sunt 4 zile până la închiderea votării pentru Omul Anului 2019 organizat de VIP Magazin. Vă invit să vă alăturați, dar cel mai important e să invitați alți oameni care merită și pe care doriți să-l votați.

PS: Un scop ambițios e să avem la Președintele Republici Moldova mai mulți votanți prin VoteMeApp decât la alegerile generale. Ce ziceți? Vă băgați?

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.

Toți plătim taxe, nu și toți sunt satisfăcuți cum ele sunt cheltuite. Taxele noastre se colectează centralizat și se distribuie centralizat. Mai bine zis fiecare instituție a unui stat își face un buget și apoi deputații îl aprobă. Nu neapărat e cea mai bună metodă de a intui ce le trebuie cetățenilor care au plătit acele taxe.

O ideie simplă, ar fi, ca orice instituție publică să-ți poată deschide pentru orice proiect câte un cont trezorial. În care să specifice unele date despre proiect și câți bani sunt necesari pentru a implementa acel proiect. De exemplu o grădiniță vrea să renoveze sala de muzică. O școală vrea să construiască un teren de sport. Un anumit drum să fie reparat. Să fie zeci de mii de astfel de proiecte care sunt create de instituțiile publice și plasate online dar totodată și promovate offline, prin QRCoduri la ușa de la grădiniță/școală/pe drum...

Iar cetățenii să poată transfera taxele lor scanând acel qrcode sau intrând online și semnând digital de pe telefonul mobil. Cumulativ să permitem oricărui cetățean, de exemplu 50% din taxele lui, să le redirecționeze unde el dorește.

Astfel decentralizăm cheltuirea taxelor noastre și motivăm ca cetățenii să declare și să ajute cu taxele lui problema care îl doare cel mai mult.

Un scenariu la renovarea unei grupe în grădiniță.

  1. Directoare descrie pe un site guvernamental, ce vrea să repare, perioada de colectare și suma de bani necesară pentru a o realiza.
  2. Primește un cont trezorial și un qrcode pentru a-l lipi pe ușa grădiniței.
  3. Părinții având o aplicație de management a taxelor, scanează acel qrcode și transferă de pe credit cardul bancar pe contul trezorial bani.
  4. Dacă la expirarea perioadei de colectarea s-a adunat suma necesară, atunci toți banii se duc la grădiniță pentru a repara clasa.
  5. Dacă nu s-a colectat toată suma, banii se întorc înapoi pe conturile bancare a părinților.
  6. La sfârșitul anului Inspectoratul fiscal deduce din taxe părinților sumele redirecționate către grădiniță.

Astfel părinții văd cum se cheltuie taxelor lor și totodată o face responsabilă pe directoare de repararea clasei. Sumele sunt deduse din taxe iar fiecare părinte ar dori să-și declare taxele.

Tehnic, e simplu de realizat. Politic?

Una din întrebările pe care mi le puneau prietenii cu care am discutat despre votemeapp sună în felul următor.

“În sistemul democratic actual, toate voturile au putere egală de decizie. De ce nu și la votmeapp?”

Nu voi discuta aici cum lucrează votemeapp, însă voi încerca să vă conving că voturile care le dați nicidecum nu sunt egale.

În sistemul actual democratic se utilizează o metodă arhaică și nedemocratică de înaintarea candidaților. Ca și rezultat, la alegeri avem o listă de candidați (nu tocmai cei mai buni) care se luptă între ei pentru a învinge. Pentru a câștiga ei utilizează tot felul de tehnici, că uneori îți este scârbă să vezi că au ajuns candidați. În final avem de ales. Trebuie să alegem răul cel mai mic.

În democrația de azi, tu ai două opțiuni. Ori mergi la vot și votezi +1 ori nu mergi la vot 0. E totul binar. Însă fiecare dintre noi chiar dacă merge la vot are o anumită “încredere” despre candidatul pe care îl votează. Să zicem că această încredere eeste de (0…1]. Dacă este 0 nici nu mergi, dacă e puțin mai mare de 0 mergi, dar mai mult cu gândul că votul tău contează în democrație. Dacă încrederea e 1.0 cel mai probabil că tu însuți votezi pentru tine sau mama ta te votează.

Programatorii are scrie asta așa:

votulTau=ceil(max(incredereCandidat1,incredereCandidat2))

Din punct de vedere al candidatului că voturile date pentru el toate sunt egale cu 1.0, însă din punct de vedere al votanților fiecare vot întoteauna este <=1.0.

Această distribuție statistică a încrederii poate fi distribuția Gauss, sau Power Law. Va trebui să fac niște experimente unde oamenii votează cu o valoare de la [0..1] ca mai apoi să găsești distribuția exactă. Însă sunt sigur că nimeni nu votează pentru candidați cu încrederea maximă.

Democrația clasică întoteauna îți forțează încrederea care o ai într-un anumit candidat să o rotunjești în sus până la 1.0 și să o dai candidatului ales. E ca și cum ai cumpăra de la magazin un produs care costă 10 bani însă casierița îți declară că nu are rest, plătește 1 leu.

De aici avem un efect interesant. Candidatul care câștigă, se mândrește că au acumulat numărul maxim de voturi însă încrederea acumulată poate fi mult mai mică. De fapt dacă să trecem de la sistemul binar de calculare a voturilor la unul flotant, bazat pe încredere, putem avea situații când cel cu mai puține voturi poate câștiga.

Ca rezultat avem o clasă politică care continue să câștige voturi însă nu mai poate să câștige și încrederea oamenilor.

Deci voturile pot fi egale sau pot fi inegale, depinde din ce parte privești.