Internet

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.

6 Comments

Era în seara de Halloween. La discoteca noastră totul era pregătit pentru ca distracția să fie pe cinste. Lumini, mâncăruri și muzică bună.
Condiția ca toți să vină costumați a fost respectată de toți invitații. Deoarece la discotecă era intrare gratuită, au venit o mulțime de oameni.

Unii mai haioși ca alții. Îmbrăcați în Napolen sau Zombi turbați, unii mai goi alții cu tot felul de haine istorice. Era și Moartea, și dl Judecător. Mai pe scurt ca la oameni.

Dintr-o dată s-a iscat o ceartă. Unul dintre mascați l-a numit ”Pupsic” pe un Napolen, care, de altfel, era adorabil. Ăsta din urmă striga cât se poate de tare. Că doar era căpitan de oști.

Într-un sfârșit, Napoleon enervat a ieșit și a plecat suparat în drumul lui. Discoteca de Halloween a continuat mai departe. Nimeni nu știa ce l-a ofensat pe Napoleon așa de tare, dar, mă rog, nimeni nici nu știa cine e el într-adevăr. Poate era chiar Napoleon.

A doua zi la proprietarul discotecii, vine un om. Așa, un om cumsecade. Întreabă de proprietar ce și cum, îi spune că a fost ofensat aseară, și că el era acel Napoleon. Apoi îl roagă pe proprietar să mai facă o discotecă de Halloween si să-și ceară scuze pentu că pe Napoleon l-a ofensat un Zombi mascat. Si ulterior, după discotecă să-i mai și plătească daune morale.

Proprietarul nedumerit îl întreabă, de ce nu a venit aseară la el să aplaneze situația și dacă poate cumva să aducă costumul de Napoleon să vadă dacă e el. Poate îl găsește și pe cel care l-a ofensat, că doar știe în ce costum era și întrebăm de croitori.

Pretinsul Napoleon era hotărât și nu a dorit să se identifice și nici să-l caute pe acel Zombi, și îi înmână o cerere de chemare în judecată.

Au trecut câteva luni de zile.

În judecată a câștigat pretinsul Napoleon, fără a arăta costumul lui de Napoleon. Judecătorul l-a crezut pe cuvânt că el ar fi Napoleon. Zombi, chiar dacă s-a găsit cine a fost, nu prezenta nici un interes pentru pretinsul Napoleon.

Așa a rămas proprietarul discotecii fără câteva mii de lei. Pentru o discotecă organizată gratis.

Concluzie:
Tupeu să ai.

PS: Napoleon a încurcat proprietarul discotecii cu un alt proprietar însă, pentru simplitate, am eliminat această istorioară.

23 Comments

Istoria o știți. Aflu azi că O.Brega a câștigat în prima instanță. Evident noi vom da la Curtea de Apel. Sincer să fiu nu m-am întâlnit niciodată cu judecători. Însă presupun că cel care a dat verdictul ori nu a citit deloc ce scria în dosar ori e analfabet în domeniul IT-ului. Ca de altfel mai toți juriștii, cum mi se mai plângea un prieten care avea o judecată în domeniul de IT.

Mai jos prezint niște termeni care au fost scriși într-o limbă de lemn.

Domeniu - Denumire bine definită care ne ajută să găsim adresele unor servere mai ușor. [nume].md, [nume.ro], [nume].com. .md, .ro, .com sunt domenii de cel mai înalt nivel și deobicei sunt preasignate unor țări. Domeniu de nivel 2 oricine-și poate cumpăra, dacă e liber, și îl asigna unui site. Are un proprietar ușor de găsit.

Site - Unul sau mai multe servere care stau în spatele unui domeniu Internet și care așigură o structură bine definită de pagini. Nu are un proprietar bine definit și ușor de găsit.

Pagină - O reprezentare a unei informații în browserului clientului. Pagina poate fi atât statică (odată creată nu se mai modifică) atât și dinamică (se poate schimba la fiecare secundă). Poate conține diferite elemente: Imagini, Video, Iframe (alte pagini de pe alte site-uri) sau chat-uri.

Chat - O coadă de comentarii generate în timp real de către participianții chat-ului. Fiecare comentariu este generat de un Anonim sau de un Moderator.

Moderator - Un anonim cu privilegii limitate mai înalte, de obicei ștergere și banare, care asigură ordinea pe site. De regulă sunt șterse mesajele care nu corespund criteriilor din regulament. Mai des sunt spamuri și flood-urile și cuvinte nelicențioase. Dacă mesajele sunt destul de complexe și au fost inițiate dezbateri dintre 2 și mai mulți anonimi, moderatorul nu are capacitatea de ai modera.

Anonim - O persoană care stă în spatele unui calculator de la care a fost scris comentariul pe chat. Aceste persoane teoretic pot fi authentificate după IP.

IP - O adresă unică asignată de către Internet Provider unui abonat. De pe acelaș IP, în Internet pot avea access de la 1 la infint calculatoare. Cu cât sunt mai multe calculatoare cu atât e mai greu de a idenfica persoana care a comentat.

Concluzie.
Un anonim a câștiga un caz în care cică a fost ofensat (nu înțeleg cum poți ofensa un anonim) pe un site de la o companie care nu-i aparține acel site.

Mie spre exemplu mi-ar fi rușine să dau în judecată băieții care au dorit să aducă transparența la acele conferințe și transmiteau gratis, invocând că nuștiu cine nu sunt deacord cu pozițiile lor.

Nu se știe cine mai mult va pierde. 5200 de lei sau ignorarea conferințelor pe viitor organizare de minorități de către Privesc.Eu. Sau societatea care nu-și va mai putea exprima poziția pentru că toate site-urile vor închide comentariile. Deși, o idee ar fi să dai în judecată site-urile care au închis comentariile pentru că nu dau voi la liberă exprimare.

E un precedent. La rând sunt unimedia, jurnal, publika, curaj.tv (culmea)... nu facebook, că la el moldovenii cu curaj se tem să se bage.

PS. Acest caz nu are absolut nimic cu minoritățile sexuale. El poate fi interpretat exact așa și pentru alte cazuri.